LLOYD-11/cloud_security_misconfiguration_lab
GitHub: LLOYD-11/cloud_security_misconfiguration_lab
该工具是一个离线的 AWS 安全配置分析实验室,通过解析导出的证据数据来识别身份、存储、网络和审计层面的云安全风险。
Stars: 0 | Forks: 0
# 云安全错误配置实验室
本项目是一个离线优先的 AWS 安全分析实验室,用于从导出的证据中识别有风险的身份、存储、网络和审计事件模式。
其目标是在无需云凭证或对在线 AWS 账户进行任何更改的情况下,提供实用且易于解释的安全发现。
该仓库包含四个分析器,原生 AWS IAM、S3、EC2 安全组和 CloudTrail 输入规范化,版本化的发现、事件、分析摘要、检测规则、修复计划和攻击时间线合约,一个统一的 CLI,一份确定性示例报告,以及涵盖 Python 3.10 和 3.13 的自动化工程检查。
如需技术导览,请从[系统架构](docs/architecture.md)和[2.0.0 版本发布说明](docs/release-v2.0.0.md)开始。
## 快速开始
在仓库根目录下,无需安装运行时依赖即可运行完整的示例 pipeline:
```
python3 -m cloud_security_lab demo --report-date 2026-06-30
```
这将在 `reports/generated/` 目录下生成四个版本化的发现文件、四份分析摘要、一份关联事件文件、一份包含 36 个操作的优先修复计划、一份包含 11 个条目的攻击时间线,以及一份包含 39 项发现的综合报告。结果应与 [`reports/cloud_security_report_sample.md`](reports/cloud_security_report_sample.md) 完全匹配。
在虚拟环境中安装项目以暴露 `cloud-security-lab` 命令:
```
python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/cloud-security-lab --help
```
## 模块
### 模块 1:IAM 策略分析器
第一个模块分析示例 IAM 用户、身份策略和信任策略,以发现常见的云安全风险:
- 完整、服务和部分操作通配符,例如 `*`、`iam:*` 和 `iam:Get*`
- 未限定范围的资源以及宽泛的 `NotAction` 或 `NotResource` 补集
- 管理员级别的访问权限
- 宽泛的 S3 权限
- 没有 MFA 策略保护的敏感用户权限
- 公开和跨账户角色信任,并带有已识别的信任条件护栏
- 直接和组策略暴露
- 长期存在且过期的凭证、root 凭证以及无效的权限边界
该分析器会生成终端发现,并导出结构化的 JSON 证据以供报告。
IAM 输入可以使用已记录的简化环境合约,也可以使用原生 AWS `GetAccountAuthorizationDetails` 以及凭证报告导出。原生输入在应用相同的检测规则之前,会保留直接策略、IAM 组和成员、角色信任、权限边界、控制台密码姿态、root 凭证,以及访问密钥的年龄和使用情况。
规则目录:
| 规则 | 风险模式 |
| --- | --- |
| `IAM-001` | 在 `Resource "*"` 上具有管理员级别的 `Action "*"` |
| `IAM-002` | 完整、服务或部分通配符操作 |
| `IAM-003` | 未限定范围的通配符资源 |
| `IAM-004` | 宽泛的 S3 写入权限 |
| `IAM-005` | 没有 MFA 条件的敏感操作 |
| `IAM-006` | 启用了控制台但未使用 MFA 的用户 |
| `IAM-007` | 长期有效的访问密钥 |
| `IAM-008` | 公开或跨账户的角色信任 |
| `IAM-009` | 使用 `NotAction` 的宽泛允许 |
| `IAM-010` | 使用 `NotResource` 的宽泛允许 |
| `IAM-011` | 过期的活跃访问密钥 |
| `IAM-012` | 过期的控制台密码 |
| `IAM-013` | 活跃的 root 访问密钥 |
| `IAM-014` | 未启用 MFA 的 root 密码 |
| `IAM-015` | 无限制的权限边界 |
### 模块 2:风险报告生成器
报告生成器读取一个或多个发现的 JSON 文件,并创建汇总的 Markdown 风险报告。可选的分析摘要会用已评估和发现的资源数量、覆盖状态、跳过的证据和规范化警告,来替换仅包含发现的模块计数。发现和关联事件还会生成一个可解释的 P0-P3 工作队列,将即时响应与永久配置强化区分开来。带有时间戳的 CloudTrail 发现构成了保留证据的时间线,而事件部分解释了观察到的序列和分诊上下文,而不会将时间顺序作为意图或因果关系的证明。
每个分析器都可以通过 `--summary-output` 写入版本化的分析摘要。摘要独立于发现计数记录 `complete`、`partial` 或 `empty` 覆盖范围,因此零发现不再意味着证据是完整的。有关状态和计数规则,请参见[分析覆盖率](docs/analysis-coverage.md)。
所有分析器都应发出相同的发现 schema:
| 字段 | 用途 |
| --- | --- |
| `rule_id` | 稳定的检测规则标识符 |
| `severity` | `critical`、`high`、`medium`、`low` 或 `info` |
| `module` | 分析器模块名称,例如 `iam` |
| `category` | 安全领域,例如 `identity-and-access` |
| `resource_type` | 受影响的资源类型 |
| `resource_id` | 受影响的资源名称或标识符 |
| `title` | 简短的发现标题 |
| `evidence` | 具体的观察证据 |
| `impact` | 该问题为何重要 |
| `remediation` | 建议的修复方法 |
| `references` | 可选的参考链接 |
| `metadata` | 可选的模块特定详细信息 |
报告会根据版本化的[检测规则目录](docs/rule-catalog.md)验证每个内置发现的规则、模块和严重程度,然后汇总已触发规则的置信度和合格的控制映射。未知的自定义规则 ID 仍与报告兼容,但会被标记为未编目。
优先级排序器在不丢失发现或资源计数的情况下对等效的修复进行分组,将事件响应保留为单独的工作,并通过已发布的规则(而不是隐藏的风险评分)提升与关联活动相关的配置。它可以通过 `--remediation-output` 写入版本化的 JSON 计划;请参见[修复优先级](docs/remediation-prioritization.md)。
时间线仅包含具有有效 UTC 时间和事件 ID 的 CloudTrail 发现,记录每一次遗漏,并仅在规则、资源和事件 ID 一致时才将条目链接到事件。它可以通过 `--timeline-output` 写入版本化的 JSON 产物;请参见[攻击时间线](docs/attack-timeline.md)。
### 模块 3:存储暴露分析器
存储分析器检查示例 S3 样式的存储桶配置是否存在常见的暴露和弹性风险:
- 不完整的 S3 Block Public Access 控制
- 在 Block Public Access 和 Object Ownership 下仍然有效的公共 ACL 授权
- 具有不受限制的 `Principal: "*"` 或宽泛的 `NotPrincipal` 的存储桶策略
- 未创建 AWS 认可的固定值访问边界策略条件
- 启用 ACL 的 Object Ownership 模式
- 缺少超出 S3 SSE-S3 基线的显式存储桶加密配置
- 缺少或暂停的版本控制
存储输入可以使用简化的环境合约,也可以使用包含 `ListBuckets`、账户和存储桶 Public Access Block、Object Ownership、ACL、策略、默认加密和版本控制响应的版本化原生证据包。
公共 ACL 和存储桶策略暴露发现会考虑 `BucketOwnerEnforced`、有效的 `IgnorePublicAcls` 和有效的 `RestrictPublicBuckets`,而不是将被阻止的访问路径报告为活动暴露。仅当受支持的正向条件运算符将访问权限固定为 AWS 认可的组织、账户、源 ARN、VPC、VPC endpoint、数据访问点或足够窄的源网络时,通配符主体策略才会被视为非公开。
在此模块中,非公开意味着声明受到 S3 Block Public Access 模型的约束;这并不意味着指定的外部账户、组织、网络或服务会自动受信任。
规则目录:
| 规则 | 风险模式 |
| --- | --- |
| `STO-001` | S3 公共访问阻止不完整 |
| `STO-002` | 存储桶 ACL 授予公共访问权限 |
| `STO-003` | 存储桶策略允许实际公开的主体 |
| `STO-004` | 存储桶缺少显式加密配置 |
| `STO-005` | 存储桶未启用版本控制 |
| `STO-006` | Object Ownership 仍然启用了存储桶 ACL |
### 模块 4:网络配置分析器
网络分析器检查示例安全组配置是否存在有风险的网络暴露:
- 跨 20 个远程管理、数据库、数据服务和控制平面 endpoint 的协议感知暴露
- 所有入站端口对互联网开放
- 到互联网的不受限制的出站流量
- 可选的、特定于方向的可达性证据,区分允许的安全组路径和报告的端到端连接性
网络输入可以使用简化的环境合约,也可以使用完整的原生 EC2 `DescribeSecurityGroups` 响应。原生规范化在应用相同规则之前,会验证账户、VPC、安全组、对等连接、协议、端口和 CIDR 证据。Prefix-list 和安全组目标会保留并显示可见的警告,但不会被解析为公共可达性。
可选的版本化可达性上下文可以将入口和出口标记为 `reachable`、`not_reachable` 或 `inconclusive`,并带有明确的范围、评估方法、时间戳、证据和相关资源 ID。缺少的上下文会被记录为 `not_assessed`。有效的 `not_reachable` 评估会将严重程度降低一级,但绝不会抑制宽松的配置发现;`reachable`、`inconclusive` 和 `not_assessed` 保留服务默认值。实验室会验证并报告此提供的上下文,但不会独立重现 AWS 路径分析。
规则目录:
| 规则 | 风险模式 |
| --- | --- |
| `NET-001` | 敏感服务端口允许来自互联网范围或广泛公共 CIDR 的流量 |
| `NET-002` | 所有入站端口均对互联网开放 |
| `NET-003` | 允许不受限制的出站流量 |
有关完整的服务目录和可达性语义,请参见[网络分析器文档](network_analyzer/README.md)。
### 模块 5:CloudTrail 风格事件检测器
CloudTrail 检测器检查示例审计事件是否存在可疑的云 API 活动:
- root 账户控制台登录
- MFA 设备被禁用或删除
- 成功的安全组授权更改
- 可能削弱控制的成功的存储桶访问更改
- 可能增加访问权限的成功的 IAM 策略更改
- 来自同一参与者和源的重复 API 失败
- 明确记录的未使用 MFA 的 IAM 用户控制台登录
- 持久凭证创建和角色信任策略更改
- 审计或威胁检测控制被禁用
- KMS 密钥被禁用或计划删除
具有相同 `eventID` 的重复 CloudTrail 事件只会被分析一次。失败的 API 调用仍可用于失败峰值检测器,但不会被报告为成功的配置更改。
CloudTrail 输入可以使用简化的事件合约,也可以使用 JSON 或 gzip 格式的一个或多个原生 `Records` 日志文件。原生规范化在合并文件之前,会验证 1.x 版本的记录、UTC 时间戳、身份和账户上下文以及事件 GUID。相同重复事件将被跳过并发出警告;共享 ID 的冲突记录会停止分析。
规则目录:
| 规则 | 风险模式 |
| --- | --- |
| `CLD-001` | root 账户控制台登录 |
| `CLD-002` | MFA 设备被禁用或删除 |
| `CLD-003` | 安全组配置已更改 |
| `CLD-004` | 存储桶访问策略已更改 |
| `CLD-005` | IAM 策略配置已更改 |
| `CLD-006` | 重复的 API 失败 |
| `CLD-007` | 未使用 MFA 的 IAM 用户控制台登录 |
| `CLD-008` | 创建了持久的云凭证 |
| `CLD-009` | 角色信任策略已更改 |
| `CLD-010` | 审计或威胁检测控制被禁用 |
| `CLD-011` | KMS 密钥被禁用或计划删除 |
检测器还会将来自同一参与者和源的合格发现关联为版本化的事件。默认的 30 分钟时间窗口、资格规则、确定性 ID、置信度模型和限制记录在 [CloudTrail 事件关联](docs/incident-correlation.md)中。报告 pipeline 单独将带有时间戳的发现转换为按时间顺序排列的[攻击时间线](docs/attack-timeline.md),保留汇总的失败窗口和明确的证据缺口。
## 统一 CLI
运行单个分析器:
```
python3 -m cloud_security_lab analyze iam \
sample_data/iam/sample_iam_environment.json \
--output reports/generated/iam_findings.json \
--summary-output reports/generated/iam_analysis_summary.json
```
分析原生 AWS IAM 导出,而无需将实验室连接到账户:
```
python3 -m cloud_security_lab analyze iam \
sample_data/aws/iam/account_authorization_details.json \
--input-format aws \
--credential-report sample_data/aws/iam/credential_report.csv \
--as-of 2026-06-30 \
--normalized-output reports/generated/normalized_iam_environment.json \
--output reports/generated/iam_findings.json \
--summary-output reports/generated/iam_analysis_summary.json
```
有关证据收集、验证行为和限制,请参见[原生 AWS 输入](docs/native-aws-inputs.md)分析捆绑的原生 AWS S3 证据:
```
python3 -m cloud_security_lab analyze storage \
sample_data/aws/s3/s3_security_evidence_bundle.json \
--input-format aws \
--normalized-output reports/generated/normalized_storage_environment.json \
--output reports/generated/storage_findings.json \
--summary-output reports/generated/storage_analysis_summary.json
```
分析捆绑的原生 EC2 安全组响应:
```
python3 -m cloud_security_lab analyze network \
sample_data/aws/ec2/describe_security_groups.json \
--input-format aws \
--reachability-context sample_data/aws/ec2/network_reachability_context.json \
--normalized-output reports/generated/normalized_network_environment.json \
--output reports/generated/network_findings.json \
--summary-output reports/generated/network_analysis_summary.json
```
分析捆绑的原生 CloudTrail JSON 和 gzip 文件:
```
python3 -m cloud_security_lab analyze cloudtrail \
sample_data/aws/cloudtrail/111122223333_CloudTrail_20260630T0200Z_part1.json \
sample_data/aws/cloudtrail/111122223333_CloudTrail_20260630T0300Z_part2.json.gz \
--input-format aws \
--normalized-output reports/generated/normalized_cloudtrail_environment.json \
--output reports/generated/cloudtrail_findings.json \
--incidents-output reports/generated/cloudtrail_incidents.json \
--summary-output reports/generated/cloudtrail_analysis_summary.json
```
检查完整的内置规则目录或按分析器进行过滤:
```
python3 -m cloud_security_lab catalog
python3 -m cloud_security_lab catalog --module storage --format json
```
该目录记录了每条规则允许的严重程度、证据到规则的置信度、置信度基础,以及对 AWS Security Hub CSPM、MITRE ATT&CK 和经验证的 CIS AWS Foundations Benchmark 比对表的 `direct` 或 `related` 映射。已提交的[目录参考](docs/rule-catalog.md)是由分析器和报告生成器使用的同一 JSON 生成的。
合并一个或多个版本化的发现文件:
```
python3 -m cloud_security_lab report \
--findings reports/generated/iam_findings.json \
--findings reports/generated/storage_findings.json \
--findings reports/generated/network_findings.json \
--findings reports/generated/cloudtrail_findings.json \
--incidents reports/generated/cloudtrail_incidents.json \
--analysis-summary reports/generated/iam_analysis_summary.json \
--analysis-summary reports/generated/storage_analysis_summary.json \
--analysis-summary reports/generated/network_analysis_summary.json \
--analysis-summary reports/generated/cloudtrail_analysis_summary.json \
--report-date 2026-06-30 \
--remediation-output reports/generated/remediation_plan.json \
--timeline-output reports/generated/attack_timeline.json \
--output reports/generated/cloud_security_report.md
```
安装后的 `cloud-security-lab` 命令暴露了相同的 `analyze`、`report`、`catalog` 和 `demo` 子命令。显式报告日期使示例输出具有可重现性;省略 `--report-date` 以使用当前本地日期。
## 兼容性入口点
原始模块脚本仍然受支持:
```
python3 iam_analyzer/analyzer.py sample_data/iam/sample_iam_environment.json
python3 storage_analyzer/analyzer.py sample_data/storage/sample_storage_environment.json
python3 network_analyzer/analyzer.py sample_data/network/sample_network_environment.json
python3 cloudtrail_detector/detector.py sample_data/cloudtrail/sample_cloudtrail_events.json
```
## 项目文档
- [升级路线图](ROADMAP.md)
- [系统架构](docs/architecture.md)
- [设计决策](docs/design-decisions.md)
- [2.0.0 版本发布说明](docs/release-v2.0.0.md)
- [数据合约](docs/data-contracts.md)
- [检测规则目录](docs/rule-catalog.md)
- [修复优先级](docs/remediation-prioritization.md)
- [攻击时间线](docs/attack-timeline.md)
- [分析覆盖率](docs/analysis-coverage.md)
- [原生 AWS 输入](docs/native-aws-inputs.md)
- [工程检查](docs/engineering.md)
- [已知限制](docs/known-limitations.md)
- [变更日志](CHANGELOG.md)
## 要求
运行环境:Python 3.10 或更高版本。分析器和统一 CLI 没有第三方运行时依赖。
开发和合约检查使用 `pyproject.toml` 中声明的可选工具:
```
.venv/bin/python -m pip install -e ".[dev]"
```
## 质量检查
```
.venv/bin/ruff check .
.venv/bin/mypy cloud_analysis cloud_security_lab cloud_findings cloud_incidents cloud_remediation cloud_rules cloud_timeline iam_analyzer storage_analyzer network_analyzer cloudtrail_detector report_generator
.venv/bin/coverage run -m unittest discover
.venv/bin/coverage report
```
覆盖率门槛为 85%,并启用了分支覆盖。GitHub Actions 还会重新构建包,并在 Python 3.10 和 3.13 上验证确定性的端到端报告。
## 项目结构
```
cloud_security_misconfiguration_lab/
├── .github/workflows/
│ ├── ci.yml
│ └── release.yml
├── README.md
├── ROADMAP.md
├── CHANGELOG.md
├── pyproject.toml
├── cloud_security_lab/
│ ├── __main__.py
│ ├── analysis.py
│ ├── cli.py
│ └── normalizers/
│ ├── cloudtrail.py
│ ├── common.py
│ ├── ec2.py
│ ├── iam.py
│ ├── network_context.py
│ └── s3.py
├── cloud_analysis/
│ └── summary.py
├── cloud_findings/
│ └── finding.py
├── cloud_incidents/
│ └── incident.py
├── cloud_remediation/
│ └── plan.py
├── cloud_rules/
│ ├── catalog.py
│ └── rules-v1.0.json
├── cloud_timeline/
│ ├── timeline.py
│ └── test_timeline.py
├── cloudtrail_detector/
│ ├── correlation.py
│ ├── detector.py
│ ├── README.md
│ └── test_detector.py
├── iam_analyzer/
│ ├── analyzer.py
│ ├── README.md
│ └── test_analyzer.py
├── network_analyzer/
│ ├── analyzer.py
│ ├── README.md
│ └── test_analyzer.py
├── report_generator/
│ ├── generate_report.py
│ ├── README.md
│ └── test_generate_report.py
├── reports/
│ └── cloud_security_report_sample.md
├── schemas/
│ ├── analysis-summary-v1.0.schema.json
│ ├── attack-timeline-v1.0.schema.json
│ ├── findings-v1.0.schema.json
│ ├── incidents-v1.0.schema.json
│ ├── remediation-plan-v1.0.schema.json
│ ├── rule-catalog-v1.0.schema.json
│ ├── aws-cloudtrail-records-v1.0.schema.json
│ ├── aws-iam-authorization-details-v1.0.schema.json
│ ├── aws-ec2-describe-security-groups-v1.0.schema.json
│ ├── network-reachability-context-v1.0.schema.json
│ ├── aws-s3-evidence-bundle-v1.0.schema.json
│ └── *-environment-v1.0.schema.json
├── sample_data/
│ ├── aws/cloudtrail/
│ │ ├── 111122223333_CloudTrail_20260630T0200Z_part1.json
│ │ └── 111122223333_CloudTrail_20260630T0300Z_part2.json.gz
│ ├── aws/iam/
│ │ ├── account_authorization_details.json
│ │ └── credential_report.csv
│ ├── aws/ec2/
│ │ ├── describe_security_groups.json
│ │ └── network_reachability_context.json
│ ├── aws/s3/
│ │ └── s3_security_evidence_bundle.json
│ ├── cloudtrail/
│ │ └── sample_cloudtrail_events.json
│ ├── iam/
│ │ └── sample_iam_environment.json
│ ├── network/
│ │ └── sample_network_environment.json
│ └── storage/
│ └── sample_storage_environment.json
├── storage_analyzer/
│ ├── analyzer.py
│ ├── README.md
│ └── test_analyzer.py
├── docs/
│ ├── attack-timeline.md
│ ├── architecture.md
│ ├── data-contracts.md
│ ├── design-decisions.md
│ ├── engineering.md
│ ├── incident-correlation.md
│ ├── native-aws-inputs.md
│ ├── remediation-prioritization.md
│ ├── release-v2.0.0.md
│ └── known-limitations.md
├── tests/
│ ├── test_contracts.py
│ └── test_legacy_clis.py
├── LICENSE
└── .gitignore
```
## 安全边界
本项目在离线示例数据上运行。除非账户归您所有或您拥有明确的评估许可,否则请勿将未来的收集器连接到真实的云账户。
标签:AWS, DPI, Python, 关系图谱, 基线检查, 无后门, 逆向工具