“考古”之cs4.2内存特征绕过

渗透技巧 2年前 (2021) admin
865 0 0

        特征出自:https://www.elastic.co/cn/blog/detecting-cobalt-strike-with-memory-signatures

        简单来讲,就是当cs在profile中设置sleep_mask为true时,Beacon会在进入sleep之前在内存中混淆自身,但是这个操作只会混淆字符串和数据,而负责进行加解密的代码部分不会混淆,且在内存中可以被标记出来,这就成了cs的内存特征之一

        文章中给出了x64和x86的特征值:

$a_x64 = {4C 8B 53 08 45 8B 0A 45 8B 5A 04 4D 8D 52 08 45 85 C9 75 05 45 85 DB 74 33 45 3B CB 73 E6 49 8B F9 4C 8B 03}
$a_x86 = {8B 46 04 8B 08 8B 50 04 83 C0 08 89 55 08 89 45 0C 85 C9 75 04 85 D2 74 23 3B CA 73 E6 8B 06 8D 3C 08 33 D2}

        可以看到确实能被检测出来:

“考古”之cs4.2内存特征绕过

        下面开始绕过,还是先解密dll(解密相关请看我以前的文章:https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw),然后用ida打开beacon.dll,找到特征对应的地方:

“考古”之cs4.2内存特征绕过

        其实它这个规则匹配的就是功能代码部分,对应的伪代码是这一段:

“考古”之cs4.2内存特征绕过

        由于它是基于程序一小块功能来进行匹配的,那么我们稍微改变一下程序的逻辑或者算法,那么就能改变局部的机器码,细看一下汇编代码,发现可以在这里动手:

“考古”之cs4.2内存特征绕过

        第一条指令是把eax的值给ecx,第二条指令是把eax+4的值给edx,那么很明显这两条指令交换顺序是不影响的,其中mov ecx, [eax]对应的机器码是8B 08,mov edx, [eax+4]对应的机器码是8B 50 04,把他们交换下顺序即可:

“考古”之cs4.2内存特征绕过

        然后两条指令成功交换了执行顺序:

“考古”之cs4.2内存特征绕过

        改完过后就匹配不到了:

“考古”之cs4.2内存特征绕过

        x64的修改也是同样的思路,想研究的就自己去实践下吧。

        本文只是作者前段时间一次内部技术分享中的一个小节,获得更多内容的方式在下面(打个小广告):

青藤云安全招聘

岗位:渗透测试工程师(红队方向)

base:上海、南京

薪资待遇:15-40k


工作内容:

1、参与公司红队评估、护网项目

2、研究最新漏洞和技术

3、对安服人员进行技术赋能


任职要求:

1、熟练掌握各种渗透测试技巧、熟练运用各类安全工具

2、具有丰富的实战经验可独立完成红队工作

3、至少熟悉一种语言(java/python/c/c++/c#/golang/rust等),能编写渗透工具或exp,具有代码审计能力者佳

4.对安全有浓厚的兴趣,有较强的钻研能力,有良好的团队精神


加分项:

1、拥有大型企业内外网渗透经验或大型HW攻击方经验,对APT有深入研究或实践经验

2、开发过安全工具、平台

3、发布过高质量原创文章

4、在各大SRC平台有较好的排名

        请给我一个与您并肩作战的机会,简历投递备注来自零队公众号,邮箱:[email protected]


原文始发于微信公众号(零队):“考古”之cs4.2内存特征绕过

版权声明:admin 发表于 2021年11月26日 上午8:41。
转载请注明:“考古”之cs4.2内存特征绕过 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...