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, 事件重放, 云基础设施安全, 云安全架构, 凭证访问, 初始访问, 协议分析, 告警去重, 安全库, 安全检测, 安全运营, 扫描框架, 持续集成安全, 数据摄取, 权限提升, 目标导入, 私有化部署, 脆弱性评估, 逆向工具, 防御规避