特征出自: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}
可以看到确实能被检测出来:
下面开始绕过,还是先解密dll(解密相关请看我以前的文章:https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw),然后用ida打开beacon.dll,找到特征对应的地方:
其实它这个规则匹配的就是功能代码部分,对应的伪代码是这一段:
由于它是基于程序一小块功能来进行匹配的,那么我们稍微改变一下程序的逻辑或者算法,那么就能改变局部的机器码,细看一下汇编代码,发现可以在这里动手:
第一条指令是把eax的值给ecx,第二条指令是把eax+4的值给edx,那么很明显这两条指令交换顺序是不影响的,其中mov ecx, [eax]对应的机器码是8B 08,mov edx, [eax+4]对应的机器码是8B 50 04,把他们交换下顺序即可:
然后两条指令成功交换了执行顺序:
改完过后就匹配不到了:
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平台有较好的排名
请给我一个与您并肩作战的机会,简历投递备注来自零队公众号,邮箱:wenyue.wang@qingteng.cn