安全矩阵

 找回密码
 立即注册
搜索
查看: 3332|回复: 0

魔改CobaltStrike:免杀就像便秘一样

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-3-19 17:57:20 | 显示全部楼层 |阅读模式
原文链接:魔改CobaltStrike:免杀就像便秘一样

一、概述

最近快开展护网行动,陆续有老哥问是否有免杀的马子。遂本篇文章简要介绍CobaltStrike的免杀方式。若有什么错误之处,请大伙指出,谢谢。下面主要分三部分来展开。

环境配置如下:
受害端:192.168.202.143、192.168.202.1
控制端:192.168.202.1
Teamserver:192.168.202.1


二、Stager执行返回Beacon时的网络特征及规避网络测绘
当CobaltStrike的stager在受害端运行时,会请求TeamServer端拉取Beacon进行在内存中反射注入运行,有关stager端的详细分析可以看之前我所写的文章,https://www.52pojie.cn/thread-1334525-1-1.html
先运行stage,打开wireshark抓包:


可见受害端访问teamserverhttp://192.168.202.1/7v9v,返回206k的数据包,结合之前上文的CS的stager分析文章可以得出响应得数据就是经过异或后的Beacon数据。

先来具体看看stager是如何生成相关URI的:调用MSFURI(),传入参数4:

跟入,可见传入的参数4表示所生成的URI为”/”再假上4个字符串组成的,最后传入checksum8()后并判断结果是否为92:

字符串由var1传入pick()方法来随机生成:

跟入checksum8()方法,该方法就是计算传入的URI字符(不包括/)的asc值的总和,再把和与256进行求余:

所以,URI的规则就是四个字符串的asc码之和,再把和值与256求余,若求余后的值等于92则生成该URI值。

现在来观察TeamServer是如何响应stage并返回Beacon的:
现跟入NanoHTTPD对应的线程中先接受请求头的数据:

再将请求头的数据、请求方式和URI传入_serve()方法,在该方法中先对useragent进行判断:

紧接着把URI传入checksum8()函数进行规则判断:


在isStager()中调用checksum8()函数对传入的URI进行判断,checksum8()上述已介绍过:

拼接相应的响应头和响应数据:

最后调用sendResponse()发送数据:

在该方法中每次发送2048个字节数据:


直接使用浏览器访问该URI,能返回相应的Beacon:


所以目前有网络测绘技术对这种特征根据相应的算法拼接URI在公网上进行扫描,所以我们需要对其修改,需要修改的点主要有两个:
1、当控制端Aggressor生成stage时,调用MSFURI()生成请求URI这个函数后,再把生成的URI写入stage;
2、WebServer中的响应请求头的函数,当调用isStager()时会验证传入的URI,所以可以修改isStage()该函数来个改变对URI的校验;
修改的方法有很多是比较灵活的,可以直接写定某个URI,也可以换一种生成的规则,只要能避免网络测绘就可以了。

三、Shellcode的转换为C代码

CobaltStrike所生成的shellcode其实是一个使用wininet库及其对应函数的加载器,其作用就是用来下载对应的stage,并在内存中反射注入。所以我们完全可以把对应shellcode转为c代码,然后进行一系列混淆等操作来实现免杀,这里混淆或加密就比较多发挥的空间了。
我直接把C代码所生成的shellcode写入,都没有任何加任何垃圾代码或者混淆和加密编码等操作就已经免杀了:





执行上线:



代码功能就是一个连接Teamserver端并下载stage,并跳转执行,这里截取部分代码:


另外我再用另一个库winhttp实现了该功能:


均能正常上线的,这两份转shellcode为C的代码,上传到之前CS源码的地址,混淆可以自行加上去:
https://github.com/mai1zhi2/CobaltstrikeSource

四、Beacon的内存查杀特征
虽然上述的stager已能免杀绝大部分的杀软,但是卡巴对内存反射注入加载的beacon查杀比较厉害,DOS头的花指令对卡巴作用不大:
这里DOS头的前面是一串不定长的花指令,这串花指令应该是用来干扰360/火绒内存查杀的,我们也可以nop掉,:

花指令的后面就是异或解密dll的操作了,具体异或解密算法可以看我之前发的CS分析的帖子:


这里有妹纸分享无阶段生成的beacon.exe特征的帖子,https://xz.aliyun.com/t/9224?page=1,里面总结了beacon端被查杀的几个特征:
  • 读取了默认的default. profile内容,可以看看之前我发的帖子后门生成beacon部分里有提及,所以不要使用默认的default. profile,需要加载自己profile。
  • 导出反射注入的函数名字,默认生成是ReflectiveLoader,这个也是需要在profile替换的。
  • 就是查杀IAT表,可以在profile配置 set obfuscate "true"


但有点比较遗憾的是,我复现该方法时,卡巴和火绒的静态和实时监控都过不了,可能是我操作步骤问题抑或是加了其他壳,同样我在CS4.1解密出的dll也是报毒的:


但360是能过掉的:



五、总结
如果能从规避网络测绘->shellcode混淆->beacon去特征(成功的话)这几步做下来,应该是能规避市面上一些杀软,其实在没有源码的情况下能做的动作还是比较有限和麻烦的,去特征码、加资源、伪造签名、搞IAT表、搞入口点等,小弟功力尚浅,希望老哥能发表高见,请老哥指导,谢谢大家观看。










回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 00:36 , Processed in 0.014912 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表