乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!
本文作者:zedxx10,本文为zedxx10大佬投稿文章,感谢师傅的文章!
本次文章主要讲解和展示cobalt strike
在对抗主流国外edr
和主流大型杀软的测试效果。
cobalt strike
马分别为:cobalt strike 4.5二开
(完全抹除特征版 ),cobalt strike 4.7
以及cobalt strike 4.9
。edr sentelone
。杀软kb endpoint
, eset smart
。shellcode
的加载形式为:loader
+shellcode
以及白加黑
。之前的两期文章我说过(闲谈免杀1、闲谈免杀2):cs
目前在对抗这些杀软上完全处于一个极其糟糕的情况,这里我再次指出问题的主要原因:特征码!
不管是静态层面还是动态层面上,几乎可以说是被各大厂商研究透彻。但是在静态层面上面,如果你对shellcode
采用强加密和分离式,或者白加黑的方法,是完全可以绕过静态检测的,这里我们排除赛门铁克(这个杀软在静态层查杀不太一样)。
这个作为整个shellcode
运行链最关键的一环, 首先我们测试卡巴,目前三个版本都是可以上线的。
我之前说过卡巴在你的loader
中没有使用特别敏感操作api
的情况下,基本上都是可以正常上线的,但是为什么上线一段时间之后就被查杀了(这里我未做任何操作)?
答案是内存扫描发现了cs
特征码,即便是使用堆栈混淆sleep
操作cs4.5
二开和cs4.7
依旧是被查杀,目前只有cs4.9
的混淆睡眠较为稳定。
简单的分析一下:
很多睡眠混淆的大部分基于一叫做SystemFunction032
函数实现的混淆,该函数很可能被hook
了或者说通过卡巴的栈回溯定位该函数的返回地址,然后追踪到了我们的恶意代码上。
在这里loader
使用了dll hollow
技术,或许也可能是hollow
的行为导致其被卡巴查杀,但基于cs4.9
在没有在sleep
时就被查杀,所以这个暂时也不太好说。
在上线测试中,shellcode
和loader
均未被查杀,只是提示某个线程存在联网的情况。有可能是我在局域网内进行测试,没有使用代理或是eset
将当前的地址直接当作一个非法链接的地址,只是阻止了连接,但未报毒。
当我换成代理或者一个《合法地址》的时候,eset
并未查杀;同时执行sleep
混淆操作,3
个版本的cs
都可以正常上线。但当我执行shell
命令的时却立马被查杀,这也就是我之前所说的,eset
是一个对行为操作极其敏感的杀软。所以在对抗行为检测类杀软的时候,cs
尽量使用模块化插件的方式去获取cmd
或者pw
回显信息。
这个sentinelone edr
和CrowdStrike
是齐名的,在国外的大型公司很受欢迎。在这里使用cs4.9
的shellcode
直接成功上线,但cs4.9
在我执行了一些操作之后也是被查杀了。
但是二开的4.5
和cs4.7
是直接落地无法运行,并在一段时间被杀软删除。
在这里需要补充一下一个前置知识:
edr
和正常的杀软的查杀模式不太一样,虽然整体上都是大差不差的。但是edr
会使用userland hook
或者对接etwti
进行日志行为分析,由于现在市面上绕过userland hook
的手法太多了,edr
渐渐都会以内核层的etwti
作为主流的日志行为进行分析,如果在r3
层你想要对抗etwti
,是非常的困难的,至少目前市面上很多开源的c2
都只是尝试的bypass
。回到查杀原因,我认为在流量层面和行为层面都是查杀的原因,但具体的原因我并未细究,因为用cs
(差不多算是开源了。。。)去挑战顶级edr
,本身就是不太现实的,分析这个比较浪费时间,所以这也就是为什么顶级红队使用自研c2
的原因。
以下仅属于个人观点:
cs
目前已经不能在作为主流的c2
了,建议放弃,可以选择使用其它的小众的c2
或者使用最新的版本c2
,也可以是带有源码的二开版本c2
,cs
的特征非常明显,在各大厂商的特征库中更新极快。
edr
和传统的杀软存在一定的差异,它们或许对于cs
静态和动态不一定非常敏感,而是更多根据你的行为操作,作为跳板进行日志分析和回溯,进一步确定你的行为操作。所以堆栈欺骗的重要性就显得较为重要,其次对于bypass etwti
在r3
层或许对于cs
来说是一个无法绕过的问题了,最好的方法就是使用自研c2
,但是自研的c2
依旧需要进行一些必要的混淆欺骗的操作!
本文不会去重点讲解sentinelone
,鉴于大部分安全人员无法拿到该杀软的实体以及对windows
系统的安全日志机制可能了解不太多,所以这里只是作为一个杀软的参照。
自研c2
对于大部分安全人员来说太困难了,这个我在以前就说过了,完成一套商用版的c2
仅仅靠一个人是很难完成的。如果不想自己去自研的话,我建议还是使用havoc
来进行二开。
项目地址:
https://github.com/HavocFramework/Havoc/tree/main
这是可以自己编译的源码,在这里推荐的主要原因是havoc
的qt
的界面比起sliver
c2
的更好。