在这之前,我们介绍了如何使用sleepmask
轻松绕过yara规则
从而绕过卡巴斯基
一类的基于传统的内存扫描的AV(反病毒软件),但问题来了,除了这类检测手段之外,还有基于堆栈检测的EDR
,特别是最近一两年这种检测技术逐渐形成。本文余老师给大家演示下堆栈欺骗和sleepmask它们的优势和存在的问题,我们将对EDR和AV采取不同的进攻策略。
sleepmask存在的缺陷
我们首先看下绿盟实验室写的一篇文章《从Elastic观察新兴威胁与对抗之调用堆栈检测》,文中提到:
他说的很对,这也是目前检测IOC的两种方法,接下来我们从技术上来演示下:
CFG绕过
一旦启用sleepmask插件,这将覆盖原有sleep机制,yara规则便可绕过(这里不再赘述)。
但是,在注入进程时,我们发现,注入到edge
后致使进程崩溃
无法上线(图略),查找大量资料发现是由CFG引起的。
beacon> inject 9620 x64 1
控制流保护 (CFG) 是一种高度优化的平台安全功能,旨在抵御
内存损坏漏洞
。
由于我们的beacon是内存加密的,我们把一个加密的东西注入到其他进程,这会破坏目标内存,从而触发了windows的CFG防护机制,导致目标进程崩溃。
cobalt strike官方自然发现了这一问题,并提前开发了CFG绕过,我们启用CFG_BYPASS
,再次注入,发现成功注入到目标进程(如图)。同时也验证了edge也是受CFG保护的进程。
堆栈欺骗
接下来检查beacon堆栈,发现内存地址直接暴露在堆栈中:
为了直观展示,我们使用知名堆栈欺骗IOC检测工具Hunt-Sleeping-Beacons扫描一下sleep中的信标
这表明即使绕过内存扫描,我们无法绕过基于堆栈检测机制的EDR
。
使用堆栈欺骗绕过EDR
启用堆栈欺骗,由于机制问题,堆栈欺骗无法与sleepmask兼容,因此我们单独启用堆栈欺骗,放下sleepmask。
这表明,启用堆栈欺骗需要我们需要放弃sleepmask,而启用sleppmask则无法使用堆栈欺骗
!
官方给出在sleepmask中启用堆栈欺骗方式,经过实测,效果未达到预期:
- The artifactkit_stack_spoof setting of true will not work with the evasive_sleep capability.
- The provided spoofed stack in evasive_sleep_stack_spoof.c was determined by values from a specific
version of Windows 10.
-
• 如果将 artifactkit_stack_spoof 设置为 true,则不适用于 evasive_sleep 功能。
-
• evasive_sleep_stack_spoof.c 中提供的欺骗堆栈由特定版本的 Windows 10 中的值决定。请参阅 Evasive Sleep Stack Spoof 信息部分。
意思就是如果想要同时实现堆栈欺骗和sleepmask这将需要定制,这无疑是相当复杂。同时,这也验证了我们开头的疑问。
以上所有内容,按条件获取:
(所有付费过Cobaltstrike4.9.1平台高级匿名技术的朋友)
回复
堆栈欺骗
,获取artifact kit(堆栈欺骗插件),及更新后的sleepmask插件
。
推荐阅读
欢迎点赞分享并留言,同时欢迎关注视频号。
原文始发于微信公众号(白帽子安全笔记):堆栈欺骗和内存扫描绕过
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论