sltcnb/cumulonimbus
GitHub: sltcnb/cumulonimbus
一款云取证与应急响应工具包,能够跨 AWS、Azure、GCP 和 Kubernetes 收集、解析日志并标准化为 ECS v8 格式,以支持统一的跨云安全分析。
Stars: 0 | Forks: 0


## 演示

# Cumulonimbus
[](https://github.com/sltcnb/cumulonimbus/actions/workflows/ci.yml)
**云取证与应急响应工具包。** 从 AWS、Azure、GCP 和 Kubernetes 收集云原生日志及
artifacts,并将其解析、标准化为
**Elastic Common Schema (ECS) v8**,运行跨云分析,并导出
随时可用于 Elasticsearch、Splunk、Sigma、STIX pipelines 或 Citadel 的时间线。
以风暴云命名——因为这通常是 IR 项目的真实
写照。
## 目录
- [为什么选择它](#why)
- [核心概念](#concepts)
- [安装说明](#install)
- [快速开始](#quick-start)
- [提供商与数据集](#providers--datasets)
- [命令参考](#command-reference)
- [`collect` (分提供商)](#collect-per-provider)
- [`parse`](#parse)
- [`analyze`](#analyze)
- [`export`](#export)
- [`push`](#push)
- [辅助命令](#helpers)
- [ECS 数据模型](#ecs-data-model)
- [分析阶段](#analysis-passes)
- [身份验证](#authentication)
- [IAM / 最小权限](#iam--least-privilege)
- [部署](#deployment)
- [检测](#detections-sigma)
- [扩展 Cumulonimbus](#extending-cumulonimbus)
- [测试](#testing)
- [仓库结构](#repository-layout)
- [安全说明](#security-notes)
- [路线图](#roadmap)
- [开源许可](#license)
## 为什么选择它
云 IR 人工成本高、依赖特定提供商,且缺乏标准化的
工具。各控制台相互孤立;商业平台价格昂贵。Cumulonimbus
是开源的,支持四大主流云平台,并输出单一的标准化 schema,因此
一条时间线即可跨越所有提供商——并且可以直接对接你
正在使用的工具。
**设计原则**
- **保留原生数据。** `collect` 会将提供商的原生证据原封不动地写入
`raw/`。标准化是一个独立且可重复的步骤——原始数据
绝不会遭到修改。
- **离线解析。** `parse`、`analyze` 和 `export` 不需要云
凭证,也不需要网络。只有 `collect`/`push` 会与提供商进行通信。
- **统一 schema。** 所有内容都会转化为 ECS v8,因此 AWS + Azure + GCP + K8s 共享一条
时间线、相同的字段名以及相同的检测规则。
- **柔性故障。** 单个格式错误的记录或损坏的 enricher 永远不会中止
整个运行过程。
## 核心概念
该工具是一个三阶段 pipeline,并在其基础上附加了分析和导出功能:
```
collect --▶
/raw/*.jsonl provider-native records, untouched
parse --▶ /ecs/*.ecs.jsonl ECS v8, enriched
analyze --▶ reports (tables / JSON) timeline, users, network, IOCs, correlation
export --▶ timeline.csv | .jsonl | .stix | bulk.ndjson | citadel bundle
push --▶ Citadel / Splunk HEC / Elasticsearch
```
| 术语 | 含义 |
|------|---------|
| **Collector** | 从提供商 API/日志源获取原始记录;写入 `raw/.jsonl`。 |
| **Parser** | 将一条原生记录映射为 -> `ForensicEvent` (ECS)。按 dataset 名称注册。 |
| **Dataset** | 一个 `provider.service` 字符串,例如 `aws.cloudtrail`。它也是原始文件名的词干——这是 `parse` 选择 parser 的方式。 |
| **Normalizer** | Enrichment 阶段:始终会判定网络方向;可选开启 GeoIP/ASN、reverse-DNS 和 IOC 匹配。 |
| **Exporter** | 将 `ForensicEvent` 序列化为 jsonl/csv/STIX/ES-bulk/Citadel。 |
## 安装说明
需要 Python 3.9+。
```
pip install -e ".[aws]" # + boto3
pip install -e ".[azure]" # + azure-identity / azure-mgmt-monitor / requests
pip install -e ".[gcp]" # + google-cloud-logging / google-cloud-securitycenter
pip install -e ".[k8s]" # + kubernetes
pip install -e ".[all]" # every provider SDK
pip install -e ".[dev]" # pytest / pytest-cov / moto (development)
```
基础安装(无附加依赖)已经可以运行 `parse`、`analyze` 和基于文件的
`export`——你只需安装对应云平台的附加依赖即可从中执行 `collect`。
## 快速开始
```
# 1. 收集(需要 AWS credentials)
cumulonimbus aws collect --service all \
--profile prod --region us-east-1 \
--start-time 2024-01-01T00:00Z \
--output ./case/
# 2. 解析 + 标准化为 ECS(离线)
cumulonimbus parse ./case/raw -o ./case
# 3. 分析
cumulonimbus analyze ./case/ecs
# 4. 导出时间线
cumulonimbus export ./case/ecs -o timeline.csv --format csv
```
case 目录最终看起来像这样:
```
case/
|-- raw/ # provider-native, verbatim
| |-- aws.cloudtrail.jsonl
| |-- aws.guardduty.jsonl
| `-- aws.vpcflow.jsonl
`-- ecs/ # normalized ECS v8
|-- aws.cloudtrail.ecs.jsonl
|-- aws.guardduty.ecs.jsonl
`-- aws.vpcflow.ecs.jsonl
```
## 提供商与数据集
| 提供商 | 数据集 | 收集来源 |
|----------|----------|----------------|
| **AWS** | `aws.cloudtrail`, `aws.guardduty`, `aws.vpcflow`, `aws.s3access`, `aws.ec2`, `aws.iam`, `aws.lambda`, `aws.rds` | boto3 (LookupEvents, GuardDuty, Describe\*), S3 日志对象 |
| **Azure** | `azure.activity`, `azure.signin`, `azure.audit`, `azure.nsgflow` | azure-mgmt-monitor, Microsoft Graph |
| **GCP** | `gcp.audit`, `gcp.vpcflow`, `gcp.scc` | Cloud Logging, Security Command Center |
| **Kubernetes** | `k8s.audit`, `k8s.event`, `k8s.container`, `k8s.etcd` | 审计日志文件, CoreV1 事件, pod/container 清单, 解码后的 etcd 快照 |
`cumulonimbus parsers` 会打印所有已注册的 parser。
VPC Flow (AWS) 和 NSG Flow (Azure) 也可直接接收**原生日志行**,因此
投递到 S3/Storage 的日志无需结构化的 collector 即可进行解析。
## 命令参考
### `collect` (分提供商)
每个提供商都是一个命令组。所有命令都会将数据写入 `标签:库, 应急响应, 数字取证, 自动化脚本, 逆向工具