wxldon/cloudtrailwatch
GitHub: wxldon/cloudtrailwatch
一个轻量级的 AWS CloudTrail 日志检测工程管道,集摄取、规则检测、告警、威胁狩猎与历史回放于一体,帮助蓝队快速构建和迭代云端威胁检测能力。
Stars: 0 | Forks: 0
# CloudTrailWatch
一个针对 AWS CloudTrail 日志的检测工程管道。
它将 CloudTrail JSON 事件摄取到可查询的 SQLite 存储中,根据 YAML 检测规则库(受 Sigma 启发的模式)对每个事件进行评估,并通过严重性路由和去重机制,将分类后的警报发布到兼容 Slack 的 webhook。威胁狩猎 CLI 提供了针对事件存储的参数化 SQL 查询,而重放引擎则可以在历史数据上运行新规则,从而无需等待实时事件即可回填检测覆盖率并调整误报。
## 它的功能
1. **摄取 (Ingest)** - 解析 CloudTrail 记录(单事件、批量数组或 `{"Records": [...]}` 信封格式),将其标准化为扁平模式,并写入 SQLite。
2. **检测 (Detect)** - 从 `rules/` 加载 YAML 规则,针对每个事件评估每条规则,并将结果放入警报接收器。
3. **告警 (Alert)** - 将每条发现的消息发送到兼容 Slack 的 webhook,支持严重性路由,并使用去重键在可配置的时间窗口内抑制重复告警。
4. **狩猎 (Hunt)** - 针对存储执行参数化 SQL 查询(支持 `principal`、`event-name`、`region-pivot`、`assumed-role-chain`、`time-window` 等参数)。
5. **重放 (Replay)** - 对历史事件运行任意规则,以回填检测覆盖率或比较不同规则版本之间的误报率。
## 内置检测
每条规则都映射到 MITRE ATT&CK,以便它们能清晰地汇总到覆盖率矩阵中。
| 规则 | 严重性 | 技术 | 捕获内容 |
|---|---|---|---|
| `iam_console_login_no_mfa` | HIGH | T1078 | 未使用 MFA 的控制台登录。 |
| `iam_user_created` | MEDIUM | T1136.003 | 创建了新的 IAM 用户(通常是遭到入侵后的持久化步骤)。 |
| `s3_bucket_made_public` | CRITICAL | T1530 | 存储桶策略或 ACL 更改导致存储桶对全世界公开。 |
| `root_api_call` | CRITICAL | T1078.004 | 来自根账户的任何 API 调用(根账户应被锁定)。 |
| `guardduty_disabled` | CRITICAL | T1562.001 | GuardDuty 检测器被关闭或暂停(防御规避)。 |
| `unusual_region_iam` | MEDIUM | T1078 | 来自不在允许列表中的区域的 IAM 活动。 |
| `s3_mass_download` | HIGH | T1567 | 来自某一主体的 `GetObject` 调用激增(数据渗出启发式判断)。 |
## 快速开始
```
# 安装
pip install -e .
# 摄取示例事件
ctw ingest samples/cloudtrail-fixtures.json --db ctw.db
# 针对存储评估所有规则
ctw detect --db ctw.db --rules rules/ --webhook https://hooks.slack.com/services/...
# 威胁狩猎示例
ctw hunt principal --db ctw.db --user alice --since 24h
ctw hunt assumed-role-chain --db ctw.db --since 7d
ctw hunt event-name --db ctw.db --name ConsoleLogin
ctw hunt region-pivot --db ctw.db --principal alice
# 针对历史事件重放单一规则
ctw replay --db ctw.db --rule rules/iam_console_login_no_mfa.yml --since 90d
```
## 规则格式
```
id: iam_console_login_no_mfa
title: Console Login without MFA
severity: HIGH
description: |
Console login events where no MFA was used. MFA bypass is a strong
indicator of credential compromise, especially for privileged accounts.
attack:
tactic: TA0001
technique: T1078
match:
eventName: ConsoleLogin
responseElements.ConsoleLogin: "Success"
additionalEventData.MFAUsed: "No"
exclude:
userIdentity.userName: ["break-glass-bot"]
dedup:
by: ["userIdentity.userName"]
window: 1h
```
`match` 子句支持精确相等、`in:` 列表、`not:` 取反和 `regex:` 模式。多个子句采用 AND 逻辑组合。`exclude` 通过字段抑制匹配项。`dedup` 用于在时间窗口内折叠重复警报。
## 架构
```
CloudTrail JSON -> ingest -> SQLite store
|
v
rules/ (YAML) -> rule engine
|
v
findings -> alert sink (webhook + stdout)
|
v
hunt CLI / replay
```
存储模式被有意设计为扁平结构——每个 CloudTrail 事件占一行,将高频查询的字段提取为类型化的列,同时将完整的原始事件保留为 JSON。这确保了规则评估和临时威胁狩猎都能保持高效。
## 限制
- 单租户;不按账户分片。
- Slack webhook 是目前唯一内置的警报接收器(添加 PagerDuty / OpsGenie 很容易实现)。
- 尚未支持实时 S3 摄取——需指向已下载的日志归档或本地 JSON 转储文件。
## 许可证
MIT
标签:AWS, Cloudflare, CloudTrail, DPI, EDR, IAM监控, JSON解析, MITRE ATT&CK, S3安全, SecOps, Sigma规则, Slack集成, SQLite, URL发现, Webhook告警, YAML, 事件重放, 云基础设施安全, 云安全架构, 凭证访问, 初始访问, 协议分析, 告警去重, 安全库, 安全检测, 安全运营, 扫描框架, 持续集成安全, 数据摄取, 权限提升, 目标导入, 私有化部署, 脆弱性评估, 逆向工具, 防御规避