背景

CobaltStrike(简称CS)作为一款渗透测试神器,采用C/S架构,可进行分布式团队协作。CS集成了端口转发、服务扫描、自动化溢出、多模式端口监听、Windows exe与dll 木马生、Java 木马生成、Office 宏病毒生成、木马捆绑等强大功能,深受广大红队同学的喜爱。为了规避侦测,红队往往会对CS采用一些隐匿手段,常见方式有云函数和CDN等。这些隐匿手段隐匿了CS的真实IP,诸如DDoS之类的流量无法穿透CDN到达CS,常规的攻击方式难以对CS服务器形成有效干扰和打击。只能止步于此了吗?有没有反击CS的奇技淫巧?答案当然是肯定的!接下来带各位看官体验一种批量伪造肉鸡来戏耍CS的新方法,希望各位蓝队同学引(付)以(诸)为(实)戒(践)。

CS上线流量特征分析

首先,我们先研究下CS上线的流量有无特征。图1使用Wireshark分析HTTP型Beacon的上线包。

图1

肉眼来看,上线包的敏感信息隐藏到了Cookie中,特征非常明显。通过进一步分析,我们发现上线包的请求Cookie值是受控主机元数据经过非对称加密后的密文,CS服务器接收到Cookie值后进行解密从而获取到受控主机信息。受控主机元数据包含了若干敏感信息,如图2所示:


图2

此处划重点,HTTP型Beacon 上线包的核心在于Cookie,而Cookie是对受控主机元数据的非对称加密的密文。

HTTP Beacon重放实验

由于HTTP属于明文传输协议,HTTP型Beacon的上线过程存在中间人重放的可能。

我们做了一个简单的测试,验证了这种可能性(此处迫于运营小姐姐压力,稍微有凑字数嫌疑)。

首先抓取测试环境中的HTTP Beacon上线请求,使用Python脚本(如:图3)进行重放(注意:Header头信息不能错误,CS Server对Header头检查非常严格)。


图3

结果显示,重放Response符合我们的预期,CS Server成功响应了我们的请求。(如:图4)


图4

此外,红队同学在使用CS时候会自定义Malleable C2 Profile修改默认流量特征,但是这个对中间人重放没有影响。

新的问题产生了。

中间人重放的方法,只能伪造已经上线的主机,不能伪造新的受控主机。

这句话翻译过来就是,没啥鸟用。

好了,字数凑够了。书接上回,言归正传。

现在聚焦最迫切的问题:有没有办法伪造全新的受控主机呢?

答案当然是肯定的。

新主机伪造

我们先看一个效果图(如:图5)。

图5

短时间内大量主机上线。想想1分钟上线了千八百个主机,红队同学是不是有点慌?这是如何做到的呢?

我们以Stager型Beacon为例,按照KillChain模型从攻击者角度回顾下CS上线流程(如:图6)。

图6

攻击者利用CS Server生成新的Beacon监听(包括一对非对称公私钥)并生成Stager;

攻击者投递Stager到受控主机;

受控主机在Exploit阶段执行小巧的Stager;

受控主机根据Stager Url请求特征向Beacon Staging Server下载体积较大更复杂的Stage到本地,Beacon Staging Server会校验Url的合法性;

Stage解密并解析Beacon配置信息(比如公钥PublicKey、C2 Server信息);

Stage通过公钥PublicKey加密主机的元数据并发送至C2 Server;

C2 Server用私钥解密数据获取主机元数据。

从上述流程中,我们能Get到2个核心点:

Stager Url校验算法

Beacon配置的解密算法

与CS Server合法通信的问题等价转换为获取Stager Url和Beacon解密问题,即:

CS/C2 Server合法通信 = (Stager Url校验算法,Beacon解密算法)

只要拿到了(Stager Url校验算法,Beacon解密算法),相当于我们掌握了与CS/C2 Server合法通信的凭据。我们分别对上述2个核心点进行分析。

Stager Url校验算法

Stager Url校验算法在公开的NSE脚本中可以找到,关键函数包括:checksum8、MSFURI、isStager。

其中,MSFURI函数从大小写字母+数字的字符数组中随机指定长度的字符序列并调用checksum8函数计算字符序列的ASCII和与256的模是否等于固定值(32位Stage与64位Stage分别使用92、93作为固定值),如果相等返回字符序列,否则继续直至找到符合条件的字符序列。MSFURI(如:图7)、checksum8(如:图8)、isStager(如:图9)函数的定义:

图7

图8

图9
如果找到符合条件的字符序列,则作为Stager Url向Beacon Staging Server发送下载请求。Beacon Staging Server在_serve函数中校验Url的合法性,如:图10。

图10

至此,我们获取到了Stager Url的校验算法,手动下载Stager。下载效果如图11下:

图11

很好!已经成功一半了。接下来,我们再来研究Beacon配置的解密算法。

Beacon配置解密算法

感谢前人栽树!

之前已经有人发布了Beacon配置的解密算法,比如JPCERT的Volatility插件cobaltstrikescan(https://github.com/jpcertcc/aa-tools/blob/master/cobaltstrikescan.py)、美国SentinelOne安全公司开源的CobaltStrikeParser工具(https://github.com/Sentinel-One/CobaltStrikeParser)等。

具体的解密算法此处不再赘述,感兴趣的同学可参考上述的开源工具。解密结果如图12所示:


图12

从解密的配置中可以看到PublicKey和C2 Server地址。

OK!2个算法我们都已经搞定,接下来就该反击CS了!

反击!

万事俱备,只欠东风!

想象以下场景:蓝队同学防守时获取到了一个CS的上线地址。

首先,构造Stager Url下载Stage,如果在抓到CS上线地址的同时抓到了Stage,此步可跳过。

然后,解析Stager Beacon的配置文件,得到了PublicKey公钥与C2 Server地址。

最后,构造虚假主机元数据,加密发送至C2 Server。

Github上开源的CobaltSpam(https://github.com/hariomenkel/CobaltSpam)已实现此功能,但CobaltSpam上线的主机信息都是随机生成,很容易被识破。因此,需要将主机信息伪造的更加准确,提高混淆度。

最终,通过修改CobaltSpam代码,添加自定义的更加精准的主机信息,达到了我们想要的效果,如:图13。

图13

最终效果见下图(图14)!!!

图14

结语

通过这种以假乱真的方法,蓝队同学可很好的混淆红队同学的视线,以此来反制攻击者。

对于低级的攻击者而言,目前不能够很好的防御这种攻击手段。

同样,上面提及的2种算法可用于Beacon Staging Server和C2 Server的挖掘。

目前,防御上述反制的方法,可通过修改CS代码上述2种算法的逻辑,阻止虚假主机上线和C2挖掘。

在HVV过程中,如果发现红队的CS木马样本或者CS服务器,我们可以用上述方法来混淆红队同学的视线、拖延他们的时间,让红队同学陷入怀疑人生的地步。

【网络安全学习资料笔记】

反击CobaltStrike相关推荐

  1. 正面反击 Google、FB 等巨头,万维网之父携 Solid 归来

    外媒消息,万维网之父 Tim Berners-Lee , 正在打造一个名为 Solid 的项目,旨在让人们获得更公平.安全的互联网体验. 近 30 年前,Berners-Lee 创建了万维网,给网络世 ...

  2. cobaltstrike安装_Cobalt Strike发送钓鱼邮件

    Hello大家好哇,我是你们可爱的lmn小姐姐,今天我们来研究一下如何使用Cobalt Strike发送钓鱼邮件. 使用CS钓鱼需要四个步骤: 1. 创建一个目标列表 2. 创建一个钓鱼模版 3. 选 ...

  3. 显卡玩家の反击!矿难一个月,618集体大战黄牛“降价也不买”

    晓查 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 有一个让玩家感到大快人心的消息,"矿难"似乎要来了. 据第一财经报道,继内蒙古.青海等地清退数字货币挖矿项目后,矿 ...

  4. 每日一皮:男性同胞,是时候反击了!

    当你女朋友这样时 开始反击!让她说出每一代的名字! 往期推荐 每日一皮:这设计师真有才... 每日一皮:千万别和杠精一般见识... 每日一皮:这翻译...真辛苦老外看纪录片纯靠脑补 ... 每日一皮: ...

  5. cobaltstrike扩展_Cobalt Strike系列教程第七章:提权与横向移动

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  6. cobaltstrike安装_CobaltStrike + Metasploit 组合安装

    1. 环境及软件 CentOS 7 CobaltStrike v2.5 Metasploit v5.0+ 2. 程序安装 旧版安装程序下载地址 https://github.com/rapid7/me ...

  7. CobaltStrike使用

    下面演示的是CobaltStrike4.4版本(因为4.0版本我没有上线成功,惨兮兮): 环境要求:VPS(java版本11),windows10的java11及以上吧(笔者是15.0.2) 操作演示 ...

  8. 反击“猫眼电影”网站的反爬虫策略

    0×01 前言 前两天在百家号上看到一篇名为<反击爬虫,前端工程师的脑洞可以有多大?>的文章,文章从多方面结合实际情况列举了包括猫眼电影.美团.去哪儿等大型电商网站的反爬虫机制.的确,如文 ...

  9. 入侵和反击 动态规划

    入侵和反击 时间限制: 1 Sec  内存限制: 128 MB 题目描述 A国部署的反导系统遇到了一个致命BUG,那就是每一次发射的拦截导弹的飞行高度都将只能小于等于上一枚导弹的飞行高度,第一次发射的 ...

最新文章

  1. C++ 多线程:条件变量 std::condition_variable
  2. 水下自动循迹机器人_自动循迹测距机器人
  3. mysql event 学习
  4. 10个强大的Ajax jQuery文件上传程序
  5. java集合之failfast机制
  6. 没有文化可以学php吗,宋威龙深夜发文感慨,却被吐槽文化低,学历真的重要吗?...
  7. drop user和drop user cascade的区别
  8. MySQL-创建表时建立索引和在已存在表中添加索引
  9. 【SpringBoot】62、SpringBoot中接入xxl-job实现分布式任务调度
  10. 电脑怎么截图,4种简单常用的截图方法
  11. V4L2 pixel format 格式参考
  12. windows10和linux流畅,《古墓丽影10:崛起》Linux平台与Windows平台流畅度对比
  13. unity替换模型材质
  14. 浅析大规模多语种通用神经机器翻译方法
  15. 学生签到系统c代码_学生考勤系统源代码
  16. ADFでパラメーターのやり取り
  17. 三菱ST言语编程梳理
  18. 如何更加深入地学习Python?
  19. (1)WireShark
  20. 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)

热门文章

  1. Python之Pandas:pandas.DataFrame.to_csv函数的简介、具体案例、使用方法详细攻略
  2. 成功解决This DCH driver package is not compatible with the currently installed version of Windows. This
  3. pip:成功解决pip下载时速度超慢(pip下载慢)的几种方法
  4. EL之RF(RFR):利用RandomForestRegressor对回归问题(实数值评分预测)建模(调2参)
  5. 成功解决调用密钥报错4001 加密方式错误
  6. 蓝桥杯_算法训练_ALGO12_摆动序列
  7. 有感而发,恍然大悟。
  8. 前端基础-jQuery的事件的用法
  9. 【UVA 437】The Tower of Babylon(记忆化搜索写法)
  10. ESP32 OTA升级策略