博客系列:Cobalt Strike:流量解密

  • Cobalt Strike:使用已知的私钥解密流量-Part 1
  • Cobalt Strike: 使用已知的私钥解密流量 - Part 2(当前部分)
  • Cobalt Strike: 使用进程内存解密流量 - Part 3
  • Cobalt Steike: 解密被掩盖的流量 - Part 4
  • Cobalt Strike: 解密DNS流量 - Part 5
    我们发现6个流氓软件Cobalt Strike的私钥,可以用来将C2网络流量进行解密

在这篇文章中,我们将通过查看感染期间捕获的完整数据包来分析Cobalt Strike感染。该分析包括对C2流量的解密。

如果你还没有看,我希望你先阅读下Part 1部分:使用已知的私钥解密流量 - Part 1

在此次分析中,我将使用2021-02-02-Hancitor-with-Ficker-Stealer-and-Cobalt-Strike-and-NetSupport-RAT.pcap.zip文件,该文件是Brad Duncan在他的个人网站分享出来的一个众多恶意软件流量中的其中之一。

我们从最低程度的知识基础开始:这个捕获文件包含Cobalt Strike的beacon与其团队服务器通信的加密HTTP流量。

如果你想了解更多关于Cobalt Strike和其他Cobalt Strike组件方面的只是,强力推荐这个 博客.

第一步:我们使用Wireshark打开这个流量文件,通过stager shellcode查找beacon并进行下载

虽然beacon以多种方式呈现,但是我们可以大致将它分为两类:

一小段shellcode(几百个字节),通常叫做stager shellcode,这段代码下载整个的beacon。
一个完全的beacon:一个可以反射性加载的PE文件
在这一步骤中,我们在流量文件中寻找stager shellcode的踪迹:我们通过一下的过滤器来进行筛选:http.request.uri matches “/…$”.
图1:Cobalt Strike流量抓包

我们一次性就找到了:用来发送GET请求来下载整个beacon的路径,包含满足以下条件的4个字符: 字符值之和的字节值(又称校验和8)是一个已知的常数。我们可以通过工具metatool.py来进行检查:


图2:使用metatool.py

更多关于校验和的进程可以在这里地方去找到

该工具返回的结果显示该路径是一个确实可以用来下载32位完整beacon(CS x86)。

完整的beacon下载流量捕获如下:
图3:完整beacon下载

我们解压这个下载流量
图4:导出HTTP实例

图5:选择下载EbHm下来保存

图6:将选中的文件下载到磁盘

一旦将完整的beacon保存为EbHm到磁盘,就可以用工具 tool 1768.py进行分析。1768.py是个能够用来加密和解密beacon的工具,而且还能解压出配置文件。Cobalt Strike的beacon有多种的配置选项:所有这些配置选项都存储在一个编码的嵌入式表格中。

下面是本次分析的输出:
图7:解压出来的beacon的配置

让我们仔细看下其中的一些选项。

首先,0x000表示这个是个HTTP类型的beacon:它是通过HTTP传输数据。

这个beacon通过HTTP连接到192.254.79.71(option 0x0008)端口8080(选项0x0002).

GET请求使用的路径为 /ptj(选项0x0008),POST请求使用的路径为 /submit.php(option 0x000a)

在本次分析中比较重要的是:该beacon使用的公钥有一个已知的私钥(选项0x0007)。

因此,有了这些消息,我们就可以知道这个beacon会发送GET请求到团队服务器,等待下一步的指示。如果团队服务器有需要这个beacon执行的命令,这个beacon就会通过加密的数据发送GET请求进行回复。当beacon要发送命令执行后的结果到团队服务器,它就会将数据进行加密并使用POST请求发送。

如果团队服务器没有要beacon执行的命令,它会发送没有加密的数据,这并不一定意味着对GET请求的回复不包含任何数据:操作者有可能通过配置文件来掩盖通信。比如,加密的数据是包含在一个GIF文件中。但是,对上面的beacon来说并不是这个情况。我们所知道的是,因为在这个配置文件中没有所谓的可修改的C2指令:选项0x000b 和0x00000004有着相同的作用,这意味着在解密前不应对数据进行任何操作(具体细节将在下一篇文章中进行解释)。

我们创建一个过滤器来查看C2数据流:http and ip.addr == 192.254.79.71

图8:完整的beacon下载过程,以及Cobalt Strike的HTTP加密请求流量

以上显示所所有的发送到团队服务器和从团队服务器接收到HTTP流量。注意,我们已经看了这个视图中的前2个数据包(数据包6034和6703):那是beacon本身的下载,而这种通信是不加密的。因此,我们将用以下显示过滤器过滤掉这些数据包

http and ip.addr == 192.254.79.71 and frame.number > 6703

过滤出来的结果显示了一组有回复的GET请求,注意,有个每分钟都会发送的GET请求。这也能够从配置文件中发现:60.000ms 的睡眠时间(option 0x0003)0%的变化(又称抖动,选项0x0005)。
图9:加密的Cobalt Strike HTTP请求

我们查看HTTP数据流进行查看:
图10:查看数据流
图11:第一个HTTP流

这是一个向/ptj路径进行GET请求的流,接收到了一个200状态回复,但是没有数据。这就意味着当前的团队服务器没有发送要beacon执行的命令,这个包中显示当时操作者没有发送任何命令。

注意这个GET请求中的Cookie头,这看起来是一个BASE64编码的字符串:

KN9zfIq31DBBdLtF4JUjmrhm0lRKkC/I/zAiJ+Xxjz787h9yh35cRjEnXJAwQcWP4chXobXT/E5YrZjgreeGTrORnj//A5iZw2TClEnt++gLMyMHwgjsnvg9czGx6Ekpz0L1uEfkVoo4MpQ0/kJk9myZagRrPrFWdE9U7BwCzlE=

该值是加密的元数据,beacon以BASE64字符串的形式发送到团队服务器。该数据是用RSA的公钥进行加密过的,该公钥在beacon的配置中能查看到(选项0x0007),团队服务器能够使用私钥进行解密,因为团队服务器有私钥。记住有些私钥已经被泄露了,我们第一片文章中就讲过。

我们的beacon分析显示,这个beacon使用的公钥对应的私钥已经被泄露了。也就意味着我们能够使用

cs-decrypt-metadata.py工具将元数据(cookie)进行解密,如下:
图12:解密beacon元数据

我们能看到解密后的元数据,最重要的是有原钥匙:

caeab4f452fe41182d504aa24966fbd0。我们要使用这个要是进行解密流量(AES和HMAC密钥是由这个原始密钥衍生出来的)。

更多的能偶发现的元数据有:计算机名,用户名等等

现在我们将用9379和9383数据包跟踪HTTP流:这是操作者(团队服务器)向信标发送的第一个命令。


图13:有加密命令的HTTP流

我们能看到回复的包中包含48字节的数据,这个数据是加密了的

图14:加密命令的HTTP流的十六进制视图

像这样的加密数据,可以用工具cs-parse-http-traffic.py进行解密。由于数据是加密的,我们需要提供原始密钥(选项-r caeab4f452fe41182d504aa24966fbd0),并且由于数据包捕获包含除纯Cobalt Strike C2流量之外的其他流量,最好提供一个显示过滤器(选项-Y http and ip.addr == 192.254.79.71 and frame.number > 6703),以便该工具可以忽略所有非C2流量的HTTP流量。

以下是输出结果:

图15:解密后的命令和结果

现在我们可以看到,9383号包中的加密数据是一个睡眠指令,睡眠时间为100毫秒,抖动系数为90%。这意味着操作员指示信标进行互动。

解密的数据包9707包含一个未知的命令(id 53),但当我们看数据包9723时,我们看到一个目录列表输出:这是未知命令53被送回团队服务器的输出结果(注意POST网址/submit.php)。因此,我们可以安全地假设53号命令是一个目录列表命令。

在这个捕获文件中,有许多命令和结果是工具cs-parse-http-traffic.py可以解密的,太多了,在此不一一展示。但我们邀请你重现这篇博文中的命令,并查看工具的输出。

捕获文件中的最后一条命令是一个进程列表命令。


图16:解密后的进程列出了命令和结果

结论

尽管我们在这里解密的数据包捕获文件是半年多以前由Brad Duncan通过在沙盒内运行恶意的Cobalt Strike信标产生的,但我们今天可以解密它,因为操作者使用了一个恶意的Cobalt Strike包,包括一个私钥,我们从VirusTotal恢复了这个私钥。

如果没有这个私钥,我们将无法解密该流量。

私钥并不是解密流量的唯一方法:如果可以从进程内存中提取AES密钥,我们也可以解密流量。我们将在接下来的一篇博文中介绍这个问题。

# Cobalt Strike:使用已知的私钥解密流量-Part 2相关推荐

  1. Cobalt Strike:使用已知的私钥解密流量 -Part 2

    Cobalt Strike:使用已知的私钥解密流量 -Part 2 博客系列:Cobalt Strike:流量解密 Cobalt Strike: 使用已知的私钥解密流量 - Part 2(当前部分) ...

  2. UDF——已知入口压力和流量计算压降

    有时候我们在计算内流,比如管道内的流动时,只知道入口压力和流量,而我们想要计算得到出口的压力,这个应该怎么办呢?当然新版本的Fluent已经自带了流量出口边界,而这里我们采用Fluent的UDF来实现 ...

  3. # Cobalt Strike: 使用进程内存解密流量-Part 3

    博客系列:Cobalt Strike:流量解密 Cobalt Strike:使用已知的私钥解密流量-Part 1 Cobalt Strike: 使用已知的私钥解密流量 - Part 2 Cobalt ...

  4. Cobalt Strike:解密 DNS 流量——第 5 部分

    博文系列:Cobalt Strike:解密流量 Cobalt Strike:使用已知私钥解密流量 - 第 1 部分 Cobalt Strike:使用已知私钥解密流量 - 第 2 部分 Cobalt S ...

  5. Cobalt Strike使用教程——基础篇

    本文主要介绍 Cobalt Strike 4.3 的基本功能及使用方法,具体分析和实战中使用放在另一篇讲解:Cobalt Strike使用方法--实战篇. 文章目录 一.基本介绍 (一) 目录结构 ( ...

  6. Cobalt Strike 域内渗透

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. Co ...

  7. 【计算机网络】网络安全 : 公钥密码体质 ( 公钥 - 加密密钥 | 私钥 - 解密密钥 | 与对称密钥体质对比 | 特点 | 数字签名引入 )

    文章目录 一.公钥密码体质 二.公钥密码体质 中的 加密密钥 与 解密密钥 三.公钥密码体质 与 对称密钥体质对比 四.公钥密码体质算法特点 五.公钥密码体质 与 数字签名 一.公钥密码体质 公钥密码 ...

  8. cobaltstrike扩展_Malwarebytes:使用可变C2下发Cobalt Strike的APT攻击

    6月中旬,Malwarebytes Labs的研究人员发现了一个伪装成简历的恶意Word文档,该文档使用模板注入来删除.Net Loader.研究人员认为这是与APT攻击有关的多阶段攻击的第一部分.在 ...

  9. 记录一道已知是n,(p-1)*(q-2)和(p-2)*(q-1)的RSA题目writeup

    目录 题目 解题思路 解题脚本 题目 题目还是来源于qq群聊,是昨晚看到一个师傅问的,聊天记录中的图片如下: 这个图片还是比较容易ocr的,后面会给出解题脚本,就包括上面这些数字了. 解题思路 刚看到 ...

最新文章

  1. mysql explain 解释
  2. Web前端开发笔记——第二章 HTML语言 第九节 框架标签、脚本标签
  3. 关于内容分发网络 CDN 的可靠性和冗余性
  4. apacheBench对网站进行压力测试
  5. 创建苹果id失败_自制无添加苹果干 无糖
  6. ITUT-T recommendations G.168 标准回声模型
  7. 4.File类、Lambda表达式、JAVA IO
  8. 用PHP+MYSQL写一个完整的登录界面
  9. pb9 日历控件(源码)
  10. 国产数据库南大通用新三板上市获批
  11. 【数据分析】了解数据分析
  12. 小班关于计算机运用的教案,实用的小班教案四篇
  13. 陶瓷电容器的失效分析
  14. 10个优秀的日志分析工具
  15. PE解决蓝屏问题,蓝屏码:0X0000009A
  16. mysql的longblob在java中如果使用
  17. 前端代码规范参考和如何保持前端代码规范
  18. IFS系统成本资料来源
  19. 取石子游戏,程序员用博弈论教你如何必胜
  20. 微信小程序开发一些有趣的小程序

热门文章

  1. 978. Longest Turbulent Subarray——array
  2. [渝粤教育] 西南科技大学 证券投资学 在线考试复习资料
  3. 域格9x07模块电信物联网卡(单4G卡)处理方法
  4. [Docker + Github + Jenkins] PR触发Jenkins自动建置(1)
  5. 毕业论文(二)文章中多次引用同一参考文献的不同内容该如何标注
  6. android米思奇打地鼠源代码,打地鼠 - 源码下载|游戏|源代码 - 源码中国
  7. 软件测试转行做软件销售,转行做软件测试2年了,终于实现收入过万的梦想
  8. 以太坊 2.0:如何实现最终性
  9. 【Unity3D读取数据】(四)Excel文件操作(创建、读取、写入、修改)
  10. 西安市经开区-公司设立流程