zoukankan      html  css  js  c++  java
  • 20154312 曾林 Exp3 免杀原理与实践

    20154312 曾林

    0.写在前面

    AV厂商检测恶意软件的方式主流的就三种:

    1. 基于特征码的检测
    2. 启发式恶意软件检测
    3. 基于行为的恶意软件检测

    我们要做的就是让我们的恶意软件没法被这三种方式找到,也就是免杀。具体的手段有:

    • 改变特征码

      • 如果你手里只有EXE
      • 有shellcode(像Meterpreter)
      • 有源代码
    • 改变行为

      • 通讯方式
      • 操作模式
    • 非常规方法

    1.实践

    1.0实验系统环境

    靶机:
    系统:Windows7 x64
    杀软:360安全卫士 V11.4.0.2049
    攻击机:
    Kali 虚拟机
    检测网站:
    Viruscan

    1.1MSF编码器

    MSF编码器也就是上个实验玩的那个,所以我直接用上个实验的20154312_backdoor.exe去检测了。(改了个名字,因为含有数字的话Viruscan会提示含广告,可能就和什么WG123456一样?)

    很显然,裸奔的后门非常的惨,19个杀软都检测到了它。(请记住这个没检测出后门的Baidu Antivirus
    把这个后门编码十次之后还是一样的19个杀软检测到没有任何实质性的变化。这种老套路只要不是太蠢的杀软肯定都能识别(别问了,Baidu Antivirus还是没有检测出来)

    1.2veil-evasion

    是一个和Metasploit类似的免杀平台,Kali里没有,用sudo apt-get install安装以下就ok。

    安装完成后,用use evasion命令进入Evil-Evasion

    选择一个模板生成payload,选啥都可以,提供的模块还是挺多的。

    拷贝到win10的过程中,被无情的拦截。

    在那个时候还没有安装杀软的win7上还是一条好汉,回连是直接成功的

    看看Viruscan的扫描结果怎么样吧

    好在是比MSF进步了很多,只有8个引擎检测出来了有后门。(Baidu Antivirus总算是有所进步...)
    试试看装了360之后能不能扫出来

    嗯,国内第一大病毒杀软可不是吹的。

    1.3shellcode

    1.3.1Windows环境编译

    在VS里编辑好直接编译就好

    回连是没有任何问题的

    还是一样用Viruscan和360扫描一下

    比之前用Evil又好了很多,只有三个引擎报警。

    360沦陷了...(我有个大胆的想法)

    1.3.2Linux环境编译

    这一块编译过程没截图,反正思路就是把shellcode放到C文件里面,然后i686-w64-xxx.c -o xxx.exe编译一下就ok。回连也是没有任何问题的。继续Viruscan+360扫描

    一夜回到解放前,被11个引擎查杀了

    360这边也不乐观,直接被找到了

    1.4加壳

    1.4.1UPX加壳

    用下面的命令来加这个压缩壳

    # upx 4312-1.exe -o 4312-1v3.exe
    

    成功之后结果如下

    来,继续viruscan检测一下

    8个,emmmm比前面没有加壳好一点点。
    在我拷贝到win10的过程中直接被杀了...

    1.4.2Hyperion加壳

    用下面命令来加这个加密壳

    /root/veil-evasion/tools/hyperion/#wine hyperion.exe -v 4312-1.exe 4312-1v2.exe
    记得先cd到Hyperion这个文件夹
    

    加壳之后的结果

    继续viruscan扫描一下

    ...你真的加壳了吗...

    1.5shellcode变形

    这一块就比较有意思了,看了学长学姐们的一些方法,我打算把shellcode去和一个固定16进制数做异或,因为是43的所以选了个0x43,用来得到异或结果的函数其实很简单。源代码就不在这放了,反正用函数就能得到异或的结果

    异或的结果复制到word或者notepad++替换,,0x放回shellcode里面,然后在之前的后门程序里面重新异或一次0x43,可能会遇到strlen函数报错,因为本身是一个const char变成了unsigned charstrlen()会报错的。最简单的方法直接数就好了,341个16进制字符,直接把strlen(met)改成341就ok,编译一下。

    Viruscan+360


    近乎完美的通过。
    伪装一下骗同学岂不是美滋滋

    1.6实测于杀软共生

    一个Windows直接编译的shellcode以及异或后的shellcode都是可以共生的。

    2.报告

    2.1总结

    本次实验一共有如下版本

      版本名称 编译方式              viruscan  360
    1. 4312                            8      F
    2. 4312-1 Kali下编译shellcode      11      F
    3. 4312-2 Windows下编译shellcode    6      T
    4. 4312-3 异或后的shellcode         1      T
    5. 4312-1 v2 UPX加壳                8      F
    6. 4312-1 v3 Hyperion加壳          12      F
    

    总结就是啥都不干也比用Hyperion加壳好。
    自给自足,自己用C去编一个shellcode是最好用的。

    2.2基础问题回答

    • (1)杀软是如何检测出恶意代码的?
    1. 基于特征码的检测
    2. 启发式恶意软件检测
    3. 基于行为的恶意软件检测
    • (2)免杀是做什么?
      防止被杀软检测出来

    • (3)免杀的基本方法有哪些?
      1.改变特征码
      2.加壳

    2.3离实战还差哪些技术或步骤

    IP地址转换技术
    社会工程学(骗人

  • 相关阅读:
    Redis 持久化
    Redis 事务
    select poll和 epoll
    jdk信任证书
    Java中的锁分类
    mysql触发器同步远程服务器上数据库
    正则表达式
    mysql主从同步
    MySQL逗号分割字段的行列转换技巧
    Mysql中文排序
  • 原文地址:https://www.cnblogs.com/zl20154312/p/8683271.html
Copyright © 2011-2022 走看看