乔背心(推特:@joevest)

https://github.com/Cobalt-Strike/beacon_health_check

描述

此攻击者脚本使用信标的注释字段来指示信标的健康状态。这是由…

  • 跟踪每个信标的当前睡眠/抖动时间
  • 根据“最大预期检查时间”计算健康状况
  • 使用事件每分钟更新带有适当图标的注释字段 heartbeat_1m
  • 用到达时间将新信标标记为“新”
  • 将信标 id 和 PID 添加到初始信标事件日志消息

演示

YouTube 上的演示

健康检查和图标

☑ - 符号表示信标处于活动状态和工作状态

计算为上次入住时间少于最大预计入住时间 (sleep + (sleep * .01 * jitter))

即,具有 的信标的sleep 300 20最大预期登记时间360计算为300 + (300 * .01 * 20)

💀 - 符号表示信标已经死亡

计算为上次签到时间大于最大预期签到时间 * 2。这被称为“死区时间”。

即,具有 的信标的sleep 300 20死区时间为720

❎ - 符号表示信标已被操作员杀死。

如果beacon['alive']为假,则操作者杀死/退出该信标,并且该信标确认退出命令。

⚠ - 符号表示信标即将死亡

计算为上次签到大于最大预期签到时间且小于死区时间。

⏸ - 符号表示信标已暂停。

这是一个已断开连接但仍被视为活动的链接信标。这些信标依赖于父母进行通信。不是将这些标记为死亡,而是将它们标记为暂停。没有很好的方法来跟踪断开连接的信标的进程。

下面显示了这些图标在 Cobalt Strike 客户端中的外观。

beacon_health_check - 图1

信标 ID 和 PID 已添加到初始信标事件日志消息中。

beacon_health_check - 图2

用法

通过脚本管理器加载beaconhealth.cna 文件。

使用get_BeaconHealthCheck_settings脚本控制台中的功能查看信标睡眠/抖动跟踪器。

关于脚本你应该知道的

  • 它使用 Note 字段。您可以随意编辑。注释的第一个字符将在健康检查期间使用适当的符号进行更新。
  • 链接的信标没有睡眠。睡眠由链接信标的父节点跟踪
  • 在跟踪之前不会验证睡眠设置。在死信标上设置睡眠可能会导致符号在信标处理实际睡眠之前发生变化。
  • 运行状况检查旨在监控运行时间较长的信标。
    • 每分钟测量一次健康
    • 这可能还是太激进了
    • 您可以通过更改启动检查的心跳事件来调整时间。
  • 跟踪数据库不是持久的。如果您关闭 Cobalt Strike 客户端并重新连接,数据库将被刷新并且信标可能被标记为NEW