batuhan-satilmis/security-audit-toolkit
GitHub: batuhan-satilmis/security-audit-toolkit
基于 Python 的轻量级安全审计工具包,自动检查 AWS、M365 和 Supabase 的配置合规性并生成带修复建议的优先级报告。
Stars: 0 | Forks: 0
# security-audit-toolkit
[](https://github.com/batuhan-satirmis/security-audit-toolkit/actions/workflows/ci.yml)
[](https://www.python.org/)
[](./LICENSE)
```
$ audit-toolkit run --config audit.yaml --out report.md
Loaded 14 checks across 3 modules (m365, aws_iam, supabase)
[m365] ✓ MFA enforced for all admins (CIS 1.1.1)
[m365] ✗ Legacy auth (basic/imap) is enabled (CIS 1.2.1)
[aws_iam] ✓ Root account has MFA (CIS 1.5)
[aws_iam] ✗ IAM users with console access older than 90 days unused (CIS 1.12)
[supabase] ✓ All tables have RLS enabled (custom)
[supabase] ✗ 2 tables missing FORCE ROW LEVEL SECURITY (custom)
Findings: 3 high · 1 medium · 0 low
Report written to report.md
```
## 它的功能
对于每个检查模块,它会拉取配置快照(通过 SDK / API),评估一组规则,并生成包含以下内容的 Markdown 或 JSON 报告:
- 每次检查的通过/失败状态
- 严重程度 (info / low / medium / high / critical)
- NIST CSF 功能和 CIS 控制映射
- 针对每次失败的具体修复步骤(命令或控制台点击操作)
- 执行摘要块(按严重程度统计数量,安全态势评分)
## 为什么开发它
我在 [Forsman Tech](https://forsmantech.com) 的每次 SMB(中小企业)合作中都会在此基础上进行构建。每次清单式的评估最终都需要相同的自动化过程:从 M365 / AWS / Supabase / Azure 拉取配置,根据基线进行评估,生成客户的 IT 团队真正可以操作的交付物。这个工具包将该过程代码化了。
它**不是** [Prowler](https://github.com/prowler-cloud/prowler)、[ScoutSuite](https://github.com/nccgroup/ScoutSuite) 或 AWS Security Hub 的替代品——它们非常出色且覆盖面更广。这是一个更小、更具主观针对性的工具,重点在于:
- 在合作项目中能快速运行(只需单次 Python 安装)。
- 输出的是*报告*,而不仅仅是发现的问题——可直接用于面向客户的交付物。
- 映射到 NIST CSF + CIS,这是 SMB 客户实际关心的两个框架。
## 安装
```
pip install -e .
```
需要 Python 3.11+。
## 配置
```
# audit.yaml
output:
format: markdown # or json
include_passing: false
modules:
m365:
enabled: true
tenant: contoso.onmicrosoft.com
auth: device_code # or service_principal
aws_iam:
enabled: true
profile: default
regions: [us-west-2, us-east-1]
supabase:
enabled: true
project_ref: xxxxxxx
service_role_key: ${SUPABASE_SERVICE_ROLE_KEY}
```
## 运行
```
audit-toolkit run --config audit.yaml --out report.md
audit-toolkit list-checks
audit-toolkit show-check m365.legacy_auth_disabled
```
## 示例输出
参见 [examples/sample-report.md](./examples/sample-report.md)。
## 检查内容(当前模块)
### `m365` — Microsoft 365 / Entra ID
| 检查 ID | 内容 | 映射 |
|---|---|---|
| `m365.mfa_admins_enforced` | 所有目录角色管理员均已强制启用 MFA | CIS 1.1.1 / NIST PR.AC-1 |
| `m365.legacy_auth_disabled` | 已阻止传统身份验证 (basic/IMAP/POP) | CIS 1.2.1 |
| `m365.password_never_expires_off` | 已禁用“密码永不过期”(或根据 NIST 800-63B 替换为长密码短语) | NIST 800-63B |
| `m365.audit_log_enabled` | 已启用统一审计日志 | CIS 6.1.1 / NIST DE.AE-3 |
| `m365.guest_invite_restricted` | 访客邀请仅限于管理员 | CIS 5.1 |
### `aws_iam` — AWS IAM
| 检查 ID | 内容 | 映射 |
|---|---|---|
| `aws_iam.root_mfa` | Root 账户已启用 MFA | CIS 1.5 |
| `aws_iam.no_root_access_keys` | Root 账户没有活跃的访问密钥 | CIS 1.4 |
| `aws_iam.users_mfa` | 所有具有控制台访问权限的 IAM 用户均已启用 MFA | CIS 1.10 |
| `aws_iam.unused_users` | 没有超过 90 天未使用控制台访问权限的 IAM 用户 | CIS 1.12 |
| `aws_iam.no_wildcard_resources` | 没有客户管理的策略在数据访问操作上具有 `Resource: *` | NIST PR.AC-4 |
### `supabase` — Supabase / Postgres
| 检查 ID | 内容 | 映射 |
|---|---|---|
| `supabase.rls_enabled` | 所有公开表均已启用 RLS | 自定义 |
| `supabase.rls_forced` | 所有公开表均具有 FORCE RLS | 自定义 |
| `supabase.anon_key_unused_in_admin` | 客户端代码中从未使用过 Service role key | 自定义 |
计划开发更多模块:Google Workspace、GitHub 组织设置、Stripe 受限密钥清单。
## 架构
```
src/audit/
cli.py argparse entry point
config.py load + validate audit.yaml
findings.py Finding dataclass; severity; NIST/CIS metadata
report.py Markdown / JSON renderers
checks/
base.py abstract Check class
m365.py M365 checks
aws_iam.py AWS IAM checks
supabase.py Supabase checks
tests/
test_findings.py
test_report.py
fixtures/
```
添加一个检查只需大约 30 行代码:继承 `Check` 子类,实现 `evaluate(context) -> list[Finding]`,并在模块的 `CHECKS` 列表中注册。
## 贡献
欢迎提交 Issue 和 PR —— 尤其是新的检查模块。参见 [CONTRIBUTING.md](./CONTRIBUTING.md)。
## 许可证
MIT
标签:Anthropic, AWS安全, CIS基准, GPT, IAM审计, IT合规, M365安全, NIST CSF, Python, SaaS安全, Supabase安全, 修复报告, 安全基线, 安全态势管理, 对称加密, 开源安全工具, 教学环境, 无后门, 漏洞管理, 网络安全, 自动化审计, 逆向工程平台, 配置核查, 隐私保护