引言:
众所周知,卡巴斯基最强大的特性之一就是其内存检测功能。要绕过卡巴斯基的防御,关键在于如何应对其内存检测机制。
在过去几年里,有关堆加密技术的研究曾经被认为是一种有效的绕过卡巴斯基的方法,因为它能够在一定程度上避开其检测。然而,随着时间的推移,普通的堆加密对于绕过卡巴斯基的效果已经不再像以前那样显著。因此,现在绕过卡巴斯基的内存检测需要结合其他一些技术才能取得较好的效果。
关于ByPass卡巴斯基,其中最基础的就是堆加密技术,关于堆加密的详细过程,可看之前的文章:
使用传统的CS基础技术中的睡眠机制来绕过卡巴斯基的内存扫描是相当困难的。当然,这种困难程度基于我的技术水平,对于更高级的技术人员来说可能有更好的方法。
在几年前,GitHub上出现了一些与睡眠逃逸相关的项目,其中最知名的应该就是EKKO了。这个项目不仅可以帮助规避内存扫描,还可以避免EDR(Endpoint Detection and Response)的检测。
EKKO项目中的睡眠机制非常有趣,至今仍然是绕过睡眠检测的有效手段。我使用的是由5pider师傅开发的版本。这里为各位师傅链接:Cracked5pider/Ekko: Sleep Obfuscation
EKKO这个项目的作者建议了解其原理再使用。附上5pider师傅的原话:
其实该项目的本质是利用了事件与线程池实现了模仿睡眠。注意是线程池而并非APC队列。这两个东西有一些相似的地方,不要混淆了。
并且该项目在执行是还会存在混淆操作。(这里的混淆我并未仔细研究过,感兴趣的师傅可以去看一下。)
还有一种简单使用该项目的方法。在CS4.7以上的版本的Sleep_mask中会实现该技术,可以去启用它。但缺点就是CS的Sleep_mask是具备一定特征的,并且它被各大杀软具体分析过。其次包含在Sleep_mask中的堆加密技术会与自实现的堆加密相互冲突,如果启用Sleep_mask,那么就不能在代码中实现堆加密。
在未修改Sleep_mask的堆加密方式的前提下,它的堆加密对卡巴来说形同虚设。
其实本质上Syscall并不是针对内存扫描的手段,但是卡巴斯基除了内存扫描,它还有一个EDR的版本,如果不想因为碰上卡巴的EDR而死掉,最好还是多加上一些规避EDR检测的手段。
Syscall技术算是比较老生常谈的一项技术了,不管是奇安信攻防社区,还是先知社区亦或是各种公众号各种平台都能找到一些相关技术,之前我们也有发布过一篇文章:Weixin Official Accounts Platform (qq.com)
堆栈欺骗就是除去堆加密之外相当重要的手段,其中堆栈欺骗的手段多种多样,有一些效果很好,但也有一些堆栈欺骗的手段效果一般。
最为简单的一种堆栈欺骗手段就算所谓的返回地址欺骗。对栈结构有过了解的师傅应该对它并不陌生。
返回地址欺骗在我的尝试中效果一般。最好的一次CS绕过卡巴上线记录也不过是十来分钟。
其他更深层的一些堆栈欺骗手段这里不再赘述,不过可以提供一个项目供师傅们研究。
在我的尝试中,该项目的堆栈欺骗技术对卡巴有一定的效果。
这里附上链接:klezVirus/SilentMoonwalk: PoC Implementation of a fully dynamic call stack spoofer (github.com)
一个完整的堆栈欺骗技术涉及的知识面是很广的,其中不乏包括了一些windows内核的知识。在文章中详细说明的话相当浪费篇幅,这里可以简单说一下返回地址欺骗。
所谓返回地址欺骗也就是利用函数调用栈返回时会从栈底之上的空间中ret出返回地址的特性,我们只需要构造一共特殊的结构,覆盖掉原本的返回地址,将其改为shellcode的地址,就能完成最简单的返回地址欺骗。
将前四处绕过手段做好,其实已经能绕过卡巴的检测了。但是还有一点最为重要的就是CS的二开。我对使用原装的CS绕过卡巴完全就是束手无策。基本刚上线就会被杀死,所以请尽可能地规避一些CS的特征。例如beacon的特征等。
像是一些反沙箱,静态特征绕过以及隐蔽加载shellcode的手段这里就不多说了。像是这类锦上添花的手段完全是师傅们自由发挥的空间。但是一个完整的上线,这些东西也是必不可少的。
注:下图卡巴界面出现黄色是因为我关闭了卡巴的自启动,这并不会影响卡巴的查杀能力。
--卡巴上线并弹计算器
![【免杀】规避卡巴-内存扫描逃不过? 【免杀】规避卡巴-内存扫描逃不过?]()
--卡巴快速扫描效果图
![【免杀】规避卡巴-内存扫描逃不过? 【免杀】规避卡巴-内存扫描逃不过?]()
涉及工具:
https://github.com/klezVirus/SilentMoonwalk
原文始发于微信公众号(灰枝大侠):【免杀】规避卡巴-内存扫描逃不过?
评论