在进行渗透测试的时候,由于目标机器往往存在相关的防护软件,如果没有进行免杀处理,那么渗透测试将会举步维艰。

(本文大量引用重剑无锋总结的文字,感谢,我对其总结的方式进行实践,然后记录下实践过程,已跟本人沟通过)

0x01 面杀概念

免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV)逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。

0x02 杀毒软件检测方式

扫描技术

1、扫描压缩包技术:既对压缩包和对封装文件作分析检查的技术。
2、程序篡改防护:既是避免恶意程序借由删除杀毒侦测程序而大肆破坏电脑。
3、修复技术:既是对恶意程序所破坏的文件进行还原。
4、急救盘杀毒:利用空白U盘制作急救启动盘,来检测电脑病毒。
5、智能扫描:扫描最常用的磁盘,系统关键位置,耗时较短。
6、全盘扫描:扫描电脑全部磁盘,耗时较长。
7、勒索软件防护:保护电脑中的文件不被黑客恶意加密。
8、开机扫描:当电脑开机时,自动进行扫描,可以扫描压缩文档和可能不需要的程序。

监控技术

1、内存监控:当发现内存中存在病毒的时候,就会主动报警;监控所有进行;监控读取到内存中的文件;监控读取到内存的网络数据。
2、文件监控:当发现写到磁盘上的文件中存在病毒,或是被病毒感染,就会主动报警。
3、邮件监控:当发现电子邮件的附件中存在病毒时进行拦截。
4、网页防护:阻止网络攻击和不安全下载。
5、行为防护:提醒用户可疑的应用程序行为。

0x03 扫描引擎

特征码扫描

机制:将扫描信息与病毒数据库,既病毒特征库进行对照,如果信息中有与其中的任何一个特征符合,杀毒软件就会判断此文件被病毒感染。杀毒软件进行查杀的时候,会挑选文件内部的一段或者几段代码来作为他识别病毒的方式,这种代码,既病毒特征码。特征码扫描是传统杀毒软件的主要利器,用来区分一个文件是否是病毒。与此相对的技术是主动防御。

特征码类别

  • 文件特征码:对付病毒在文件中存在方式,单一文件特征码特征码、复合文件特征码(通过多处特征进行判断);

  • 内存特征码:对付病毒在内存中的存在方式,单一内存特征码、复合内存特征码

优点:速度快、准确率相对高、误杀相对少、少用户参与

缺点:需持续更新病毒库本本,老化则失去价值,无法检测未见过新病毒

文件校验和法

对文件进行扫描后,可以将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存;在文件使用过程中,定期地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致,以此来发现文件是否感染病毒。

进程行为监测法(沙盒模式)

机制:通过对病毒多年的研究、观察,发现其一些行为是病毒的共同行为,且这些行为跟正常程序存在罕见的不同。当其运行时,监控其进程的各种行为,如果发现了异常且有危害的行为,及时报警。

优点:可发现未知新病毒,相对准确预报未知病毒

缺点:存在无恶报、不能识别病毒名称、需要用户参与判断

云查杀

云查杀特点可概括为特征查杀,杀软会将较为可疑但特征库并没有响应特征的程序传回杀软公司服务器上,进而判断该程序是否为恶意程序,然后作出响应。因此存在云查杀的情况下,可能当时没有报警,但过一段时间就会提示病毒。

主动防御技术

主动防御并不需要病毒特征支持,只要杀毒软件能分析并扫描到目标程序的行为,并根据预先设定的规则,判断是否应该进行清除操作,主动防御设想领先于病毒,让杀毒软件编程病毒分析工程师一样自己分析病毒。

机器学习识别技术

机器学习识别激素即可做静态样本的二进制分析,又可以运用在沙箱动态行为分析当中,是内容/行为+算法模式。目前各大厂商均在尝试运用深度学习技术来识别病毒特征,如瀚思科技的基于深度学习的二进制恶意样本检测。

0x04 免杀技术介绍

修改特征码

免杀的最基本思想是破坏特征,这个特征可能是特征码,也可能是行为特征,主要破坏来病毒与木马所固有的特征,并保证其原有功能么有改变,免杀即可完成。

特征码:能识别一个程序是一个病毒的一段不大于64字节的特征串

反病毒技术,更改特征码达到免杀效果的两种方式

一种是改特征码。改掉其中表明它是木马的特征,如无关紧要,可删除。

第二种是针对目前的校验和查杀技术的免杀思想,原理虽然依旧是特征码,但已脱离存粹意义上的特征码。其校验和依旧是根据病毒文件中与众不同的区块计算出来的,如果一个文件某个特定区域的校验和符合病毒库中的特征,那么反病毒软件就会报警。如要免杀,只要对病毒的特定区域进行一定的更改,这样会使这一区域校验和改变,从而达到欺骗反病毒软件的目的。

修改特征码重要的是定位特征码,由于各个杀入厂商的特征不同,效果一般,有时可以一用。

花指令免杀

花指令是程序中一些无意义的指令,花指令是否存在对程序的执行结果没有影响,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。

大多数反病毒软件是靠特征码来判断文件是否有毒,其为了提高精度,特征码都是在一定偏移量限制之内的,否则会对反病毒软件的效率产生严重影响。攻击者为一个程序添加一段花指令后,程序的部分偏移会受到影响,如果反病毒不能识别这段花指令,那么它检测特征码的偏移量会整体位移一段位置,则无法正常检测木马。

加壳免杀

软件加壳可成为软件加密(或软件压缩),只是加密(或压缩)的方式与目的不一样。壳是软件所增加的保护,不会破坏里面的程序结构。当运行这个加壳软件的时候,系统首先会运行程序里的壳,然后由壳将加密的程序逐步还原到内存中,最后运行程序。

使软件达到加密的目的,就是壳的作用。

加壳虽然对于特征码绕过有很好效果,因加密壳基本可以把特征码全部掩盖,但缺点明显,壳也有自己的特征。一些杀软会把主流的壳如VMP, Themida直接划为有问题。在某些情况下,有的常见版本壳会被直接脱掉分析。

在这种情况下,可以考虑一切冷门的加密壳。可以基于开源的压缩壳改一些源码,可能效果不错。加壳的方式用来免杀较为实用,特别是针对不开源的PE文件,通过加壳可绕过很多特征码识别。

内存免杀

CPU不案件可能为某一款加壳软件而特别设计,某个软件被加壳后的可执行代码CPU是读不懂。这就要求在执行外壳代码时,先对原软件解密,放入内存里,然后再通过CPU执行。

因杀毒软件的内存扫描原理与硬盘上的文件扫描原理一样,均通过特征码对比实现,不过为了制造迷惑性,大多数杀毒软件公司的内存扫描与文件扫描采用的不是同一套特征码,这导致一个病毒木马同时拥有两套特征码,必须将它们同时破坏掉才能躲过杀毒软件的查杀。

因此,除加壳外,只要加一个会混淆程序原有代码的壳,即可躲过查杀

二次编译

metasploit和msfvenom提供的各种payload和encoder,生成的shellcode被各大厂商盯的太死,基本报废。因此对shellcode进行进一步修改编译成了msf免杀的主流,多借助于C、C#、python等语言对shellcode进行二次编译从而达到免杀

分离免杀

侯亮和倾璇分别提过payload分离免杀和webshell分离免杀,采用分离,既将shellCode和加载器分离。网上有各种加载器代码,各种语言实现的均有,效果不错。如侯亮提到过的shellcode_launcher加载c代码

资源修改

部分杀软会设置白名单,如之前把程序图标替换为360安全卫士能过360的查杀

加资源

  • 使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等

替换资源

  • 使用ResHacker替换无用的资源(Version等)

加签名

  • 使用签名伪造工具,将正常软件的签名信息加入到自己的软件中

参考链接

远控免杀专题文章(1)-基础篇:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg

免杀技术有一套:https://anhkgg.com/aanti-virus/