CobaltStrike WebServer特征分析

admin 2022年6月1日23:11:36评论56 views字数 3114阅读10分22秒阅读模式

WebServer特征

本文简单介绍了Cobalt Stike 4.4版本的一些特征以及缓解措施。

webserver处理逻辑漏洞

请求状态码异常

正常的服务器对于uri的开头不为/的情况,一般都会产生400的状态。

CobaltStrike WebServer特征分析

而teamserver在处理的时候,返回了404,

CobaltStrike WebServer特征分析

在处理OPTIONS请求时候,更是uri都不看,直接返回200,并且在后面会加上Allow: OPTIONS,GET,HEAD,POST

CobaltStrike WebServer特征分析

正常的网站感觉还是干不出来这种事情的。

CobaltStrike WebServer特征分析

beacon&stager uri异常访问

对于更特殊的请求,类似的情况如下,更是直接暴露了profile的http配置以及beacon。

profile的流量情况:

CobaltStrike WebServer特征分析

beacon:

CobaltStrike WebServer特征分析

uri匹配问题

可以看到对于beacon.http-get、beacon.http-post的uri后面可以随意增加的,profile很灵活导致了webserver没办法做精准的匹配。

CobaltStrike WebServer特征分析

checksum8特征

checksum8算法可以匹配多个值,如aaa9等,个人理解本意是在profile没有设置uri的时候,具有一定的随机性,多个uri都可以获取beacon,但是问题在于profile中 set uri之后,该算法依然可用(可能为了兼容msf的请求),配合默认解密方法可以获取完整的配置。

CobaltStrike WebServer特征分析

WebServer流程、特征分析

UA校验

我们对核心逻辑_serve进行简单的分析。可以看到先经过了一个UA的黑白名单,可以在profile中进行配置。默认黑名单有curl* lynx* wget*。

CobaltStrike WebServer特征分析

如果不符合UA检测,则返回404,并在console中输出。

CobaltStrike WebServer特征分析

处理OPTIONS请求

这块发现teamserver是没有对uri做校验的,直接返回200,并添加了一个Allow的header。

CobaltStrike WebServer特征分析

webserver核心逻辑

Webserver封装了一个名字叫hook的Map,里面push了多个WebService的实现,Map的key为uri,在监听创建的时候,默认会push上述4个WebService进去。

beacon.http-get
stager
stager64
beacon.http-post

其中beacon*类型为MalleableHOOK,负责处理beacon的通讯,如心跳,命令执行等,stager*类型为MalleableStager,负责推送beacon。

当通过UA检测后区分了7种情况:

1.匹配响应一般的uri,用于host file,powershell script等一些情况 (beacon&stager uri异常访问的原因)
2.匹配响应用户配置的beacon.post/get,stager/stagerx64的请求
3.匹配响应目录的uri,自动补全结尾的/,没有找到场景
4.匹配以http://开始的uri,没有找到场景
5.匹配stager64的uri,主要用于响应64位场景下checksum8算法生成的uri(uri长度有限制,checksum8特征的原因)
6.匹配stager的uri,主要用于响应32位场景下checksum8算法生成的uri(uri长度有限制,checksum8特征的原因)
7.所有条件轮空的处理

当第匹配到uri为hooks的key时,就会返回对应的响应,也就产生了beacon&stager uri异常访问的问题。

CobaltStrike WebServer特征分析

当所有条件轮空时,也就是第7种情况,会再次通过checksum8算法匹配uri是否返回beacon的响应,与上文相比,去掉了uri长度的限制。此外,也会判断是否stager关闭导致异常。如果i遍历完成,返回404,由于对uri有特殊的情况,没有判断uri是否需要以/开头。因此产生了一系列的特征。

CobaltStrike WebServer特征分析

这里比较有趣的是,while的条件是startsWith与isFuzzy判断,通过对WebService所有实现类进行分析。MalleableHook的isFuzzy为true。也就是说WebServer对于beacon的交互的uri在后面随便加东西都可以匹配、响应profile配置。个人感觉这也算是teamserver的特征吧。

特征修改

主要处理了/的问题和checksum8的问题,其他问题暂时不处理了,头大。

webserver处理逻辑漏洞

请求状态码异常、beacon&stager uri异常访问都是由于没有校验/的问题导致的,由于我使用的是javaagent,对于大段的代码修改比较麻烦,我选择在WebServer中serve进行修改。增加了一个/的检验,不过http://开头的请求可能会收到影响,目前还清楚是什么功能,还需要进一步测试一下。

CobaltStrike WebServer特征分析

checksum8特征

checksum8特征有很多缓解的方法。

1.修改checkSum8的92L与93L为非默认的值(可破解)
2.更换算法(成本较高)
3.固定URI(容易形成新的特征)
4.kill stager(依赖客户端操作)
5.设置host_stage(无法使用stager)

我同样在serve函数中进行了patch,废掉了checksum的匹配,缺点是必须配置profile的,可能也会有其他的问题,待测试。

    set uri_x86 "xx";    set uri_x64 "xx";
CobaltStrike WebServer特征分析

javaagent实现

             else if(className.equals("cloudstrike/WebServer")){                    ClassPool classPool = ClassPool.getDefault();                    CtClass cls = classPool.get(className.replace("/","."));                    CtMethod readResource = cls.getDeclaredMethod("serve");                    readResource.setBody(                            "{"+                            "   if(!$1.startsWith("/")) {" +                            "       return $0.processResponse($1, $2, $3, $4, false, null, new cloudstrike.Response("400 Bad Request", "text/plain", ""));" +                            "   }" +                            "   if(isStager($1)||isStagerX64($1)){" +                            "       return $0.processResponse($1, $2, $3, $4, false, null, new cloudstrike.Response("404 Not Found", "text/plain", ""));" +                            "   }" +                            "   return handleRanges($2, $3, $0._serve($1, $2, $3, $4));" +                            "}");                    return cls.toBytecode();                }

效果

stager不会带出了

CobaltStrike WebServer特征分析

异常的404也顺带解决了

CobaltStrike WebServer特征分析

aaa9已经无法请求

CobaltStrike WebServer特征分析

其他特征

本文主要分析了webserver的几个特征,内存特征就不再这里提了,javaagent也是可以缓解的。4.5虽然对javaagent做了检查,但是依然很好绕过。4.6貌似server和client分开了,可能就比较麻烦了。

参考:

https://cloud.tencent.com/developer/article/1967094?from=article.detail.1818330
https://github.com/Like0x/0xagent/blob/main/PreMain.java
http://cn-sec.com/archives/300922.html checksum8

CobaltStrike WebServer特征分析

原文始发于微信公众号(JDArmy):CobaltStrike WebServer特征分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月1日23:11:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CobaltStrike WebServer特征分析https://cn-sec.com/archives/1074848.html

发表评论

匿名网友 填写信息