anpa1200/AuditAI
GitHub: anpa1200/AuditAI
AuditAI 是一个完全运行在 Docker 中的 Linux 主机漏洞评估工具,通过九个并行扫描模块收集系统数据并借助 Claude AI 生成带攻击链分析的优先级漏洞报告。
Stars: 1 | Forks: 1
# AuditAI
[](https://pypi.org/project/1200km-auditai/)
[](https://pypi.org/project/1200km-auditai/)
[](https://github.com/anpa1200/AuditAI/actions/workflows/ci.yml)
[](https://github.com/anpa1200/AuditAI/actions/workflows/publish.yml)
[](LICENSE)
[](https://github.com/cckuailong/awesome-gpt-security/pull/48)
[](https://github.com/cckuailong/awesome-gpt-security/pull/48)
[](docs/owasp-project-application.md)
[](docs/kali-new-tool-request.md)
**完全运行在 Docker 内部的 AI 驱动的主机漏洞评估工具。**
AuditAI 针对你的 Linux 主机运行九个安全扫描模块,将原始结果发送给 Claude,并生成一份包含攻击链分析的优先级漏洞报告——所有操作仅需一条命令即可完成。
```
export ANTHROPIC_API_KEY=sk-ant-...
./run.sh
```
## 工作原理
AuditAI 是一个三阶段的 pipeline:
```
┌─────────────────────────────────────────────────────────────────┐
│ HOST MACHINE │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ DOCKER CONTAINER (read-only) │ │
│ │ │ │
│ │ ┌─────────────┐ ┌────────────────┐ ┌────────────┐ │ │
│ │ │ STAGE 1 │ │ STAGE 2 │ │ STAGE 3 │ │ │
│ │ │ 9 Scanner │──▶│ Preprocessor │──▶│ Report │ │ │
│ │ │ Modules │ │ + Claude AI │ │ Generator │ │ │
│ │ │ (parallel) │ │ (sequential) │ │ │ │ │
│ │ └─────────────┘ └────────────────┘ └────────────┘ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ ▼ │ │
│ │ raw_output dicts Finding[] + HTML + .md │ │
│ │ attack chains ./output/ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ /proc /sys /etc /var /home /usr (mounted read-only) │
└─────────────────────────────────────────────────────────────────┘
```
**阶段 1 — 扫描:** 九个模块并行运行,收集原始主机数据(进程表、网络状态、文件系统、软件包、内核参数等)。
**阶段 2 — AI 分析:** 预处理器过滤每个模块的原始输出(体积减少 60–90%),然后 Claude 依次分析每个模块,并进行跨模块综合以识别攻击链。
**阶段 3 — 报告:** 扫描结果、攻击链和优先级被渲染为一个独立的 HTML 报告和 Markdown 文件。
容器以**只读**方式挂载主机文件系统,并使用 `--pid=host` + `--network=host` 来查看真实的进程表和网络状态。它**无法修改**主机上的任何内容。
## 环境要求
- Docker(任何近期版本)
- Linux 主机(推荐 Ubuntu/Debian;也支持其他发行版)
- [Anthropic API key](https://console.anthropic.com/) — 在 Sonnet 上每次完整扫描费用约 $0.10–0.30
安装好的 `auditai` CLI 可以直接在 Kali/Linux 主机上运行,无需
Docker 或 API key:
```
pip install 1200km-auditai
sudo auditai --no-ai --output-dir ./output
```
## 快速开始
### PyPI CLI 安装
```
pip install 1200km-auditai
auditai --help
sudo auditai --no-ai --output-dir ./output
```
PyPI 发行版命名为 `1200km-auditai`;安装后的命令仍然是
`auditai`。
### Docker 工作流
**1. 安装 Docker**(如果尚未安装):
```
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER && newgrp docker
```
**2. 克隆并运行:**
```
git clone https://github.com/anpa1200/AuditAI.git
cd AuditAI
export ANTHROPIC_API_KEY=sk-ant-...
./run.sh
```
`run.sh` 会构建镜像,准确向你展示它请求的主机访问权限,并在请求确认后,将报告写入 `./output/` 目录。
无需 `pip install`,无需 virtualenv,也无需你进行任何依赖管理——一切都已内置在 Docker 镜像中。
## Kali Linux 提交
核心包通过 `--no-ai` 在本地运行;Anthropic 分析是可选的。
Debian/Kali 元数据位于 [`debian/`](debian/),并包含一份完整的
[新工具请求草案](docs/kali-new-tool-request.md)。
## 许可证
[MIT](LICENSE)
## 使用方法
```
# 全面评估 — 包含全部 9 个模块、AI 分析、所有严重级别
./run.sh
# 跳过 lynis — 更快(约 2 分钟对比约 10 分钟),节省 API 成本
./run.sh --skip lynis
# 仅特定模块
./run.sh --modules network,users,kernel
# 无 AI 分析 — 仅原始 scanner 输出(无 API 调用)
./run.sh --no-ai
# 仅显示 HIGH 和 CRITICAL 发现
./run.sh --severity HIGH
# 使用 Claude Opus 进行更深入的攻击链推理
./run.sh --model claude-opus-4-6
# 详细日志记录(显示 preprocessor 缩减统计信息、AI 耗时)
./run.sh --verbose
```
### Docker Compose
```
ANTHROPIC_API_KEY=sk-ant-... docker compose run assessment
```
### 直接 CLI(开发模式 — 无需 Docker)
```
# HOST_ROOT="" 使 scanner 读取真实的 / 而不是 /host
HOST_ROOT="" python3 -m assessment.cli --modules kernel,os_hardening --no-ai
```
在迭代开发扫描器且不想重建镜像时非常有用。
## 终端效果展示
```
► Running 9 scanner modules...
Modules: network, services, os_hardening, users, processes,
filesystem, kernel, packages, lynis
✓ network 12.3s
✓ services 0.1s
✓ os_hardening 0.0s
✓ users 0.0s
✓ processes 0.2s
✓ filesystem 31.2s
✓ kernel 0.0s
✓ packages 15.5s
✓ lynis 0.0s
► Running AI analysis (Claude)...
Analyzing modules...
Running synthesis...
► Generating reports...
HTML: ./output/report_2026-03-11T09-18-35Z.html
Markdown: ./output/report_2026-03-11T09-18-35Z.md
╔══════════════════ SUMMARY ══════════════════╗
Overall Risk: HIGH (67/100)
Lynis Hardening Index: 58/100
Findings:
3 Critical 11 High 24 Medium 18 Low
Top Action: Disable PasswordAuthentication in /etc/ssh/sshd_config
╚══════════════════════════════════════════════╝
```
## 扫描模块
| 模块 | 检查内容 |
|--------|---------------|
| `network` | 开放端口(nmap SYN 扫描)、绑定到 0.0.0.0 的服务、防火墙规则(iptables/ufw/nftables)、IPv6 暴露情况 |
| `services` | Systemd 单元(在 Docker 内通过文件系统回退读取)、失败的服务、cron 任务、docker socket 权限 |
| `os_hardening` | 25+ 项 sysctl 参数与安全基线对比、AppArmor/SELinux、GRUB 启动标志、PAM 配置、核心转储 |
| `users` | UID 0 账户、sudoers NOPASSWD、SSH 配置弱点、授权密钥、遗留文件(.rhosts) |
| `processes` | 进程能力(从十六进制 bitmask 解码)、已删除的可执行文件、反弹 shell 指标、root 进程 |
| `filesystem` | SUID/SGID 二进制文件与已知安全基线对比、全局可写的系统文件、敏感文件权限 |
| `kernel` | CPU 漏洞缓解措施(Spectre/Meltdown 等)、内核锁定、BPF 限制、已加载模块 |
| `packages` | 已安装的软件包与 [OSV.dev](https://osv.dev/) CVE 数据库对比(无需 API key)、危险的过期包、自动更新配置 |
| `lynis` | 完整的 lynis 主机审计、强化指数评分(0–100)、警告和建议 |
## AI 分析
对扫描数据执行两轮分析:
**第一轮 — 单模块分析:** 在发送给 Claude 之前,每个模块的输出都会经过预处理器,剔除已知安全的基线数据(例如,合规的 sysctl 参数、已知安全的 SUID 二进制文件、没有登录 shell 的服务账户)。这将减少 60–90% 的 prompt 体积,消除 token 限制错误并降低成本。
**第二轮 — 综合:** 单个 prompt 接收所有模块的扫描结果,并被要求识别:
- **攻击链** — 扫描结果如何在*你的特定主机*上组合成真实的漏洞利用路径
- **前 10 个优先级** — 根据实际可利用性进行排名,而不仅仅是严重性标签
- **总体风险评级** — CRITICAL / HIGH / MEDIUM / LOW 并附上理由
- **执行摘要** — 面向系统所有者的非技术性描述
## 报告输出
每次扫描后,会在 `./output/` 目录下生成两个文件:
- **`report_.html`** — 独立的深色主题 HTML,包含可筛选的扫描结果表、攻击链卡片和可折叠的模块部分。打开时无需互联网连接。
- **`report_.md`** — Markdown 版本,用于存档、提交工单或纯文本分享。
### 报告部分
| 部分 | 描述 |
|---------|-------------|
| 风险徽章 | CRITICAL / HIGH / MEDIUM / LOW 以及 0–100 分的评分 |
| 立即行动 | 3–5 项今天必须修复的问题,按优先级排序 |
| 攻击链 | 特定于你主机的多步骤漏洞利用场景 |
| 前 10 个优先级 | 根据实际可利用性排名的扫描结果 |
| 模块部分 | 可折叠,每个部分包含风险评分、证据和修复命令 |
| Lynis 附录 | 完整的强化指数和原始 lynis 建议 |
## Docker 参数说明
| 参数 | 为什么需要它 |
|------|----------------|
| `--pid=host` | 如果没有这个参数,`/proc` 只会显示容器的 PID。需要用它来枚举所有主机进程、读取能力并解析可执行文件路径。 |
| `--network=host` | 将容器置于主机的网络命名空间中。nmap 能看到真实的接口和 IP 地址——否则它只能看到容器的虚拟 eth0。 |
| `--cap-add=NET_RAW` | nmap SYN 扫描(`-sS`)需要原始 socket 访问权限来构造 TCP 数据包。否则,nmap 会退回到较慢的 TCP connect 扫描。 |
| `--cap-add=NET_ADMIN` | 需要用于从容器内部读取 iptables/netfilter 状态。 |
| `--cap-add=SYS_PTRACE` | 需要用于跟随 `/proc//exe` 符号链接并读取进程内存映射。 |
| `--cap-add=AUDIT_READ` | 允许读取内核审计日志以获取权限提升记录。 |
| `-v /:/host:ro` | 以只读方式将整个主机根目录绑定挂载到 `/host`。提供对 `/etc`、`/var`、`/usr`、`/home` 的访问。 |
| `-v /proc:/host/proc:ro` | `/proc` 是一个虚拟文件系统,不会被 `/` 挂载所捕获。必须单独挂载。 |
| `-v /sys:/host/sys:ro` | 与 `/proc` 相同。包含 CPU 漏洞数据、安全模块状态和内核参数。 |
特意**没有**使用 `--privileged`。容器在正常的 Linux 命名空间边界内运行,无法修改主机内核状态。
## 错误处理
| 错误 | 行为 |
|-------|----------|
| 扫描器崩溃(nmap 超时、权限被拒绝) | 在报告中记录错误,继续执行其他模块 |
| API 速率限制 (429) | 指数退避:15s → 30s → 60s → 120s,最多重试 4 次 |
| API 额度不足 (400) | 立即失败并显示可操作的信息,建议使用 `--no-ai` |
| AI 响应中的 JSON 解码错误 | 最多重试 4 次,最终失败时记录空扫描结果 |
| 未找到 `systemctl` (Docker) | 回退到从主机文件系统读取 `.service` 文件 |
## 安全提示
- 所有主机挂载均为**只读**。唯一可写的路径是 `./output/`。
- 扫描数据将发送到 Anthropic API 进行 AI 分析。在物理隔离或受监管环境中请使用 `--no-ai`。
- 报告包含详细的主机配置信息——请像对待密码一样对待它们。不要提交到公开仓库。
- 此工具仅供**授权使用**,适用于你拥有或已获得评估权限的系统。
## 项目结构
```
AuditAI/
├── Dockerfile
├── docker-compose.yml
├── run.sh # Host-side launcher with consent prompt
├── requirements.txt
└── assessment/
├── cli.py # Click CLI — entry point, orchestrates all stages
├── config.py # HOST_ROOT paths, sysctl baselines, SUID whitelist
├── models.py # Finding, ModuleResult, AttackChain, Report dataclasses
├── runner.py # Stage 1 — parallel scanner execution
├── scanners/
│ ├── base.py # Abstract BaseScanner with error isolation + timing
│ ├── network.py # nmap, ss, iptables, ufw, nftables, IPv6
│ ├── services.py # systemd units (with Docker filesystem fallback)
│ ├── os_hardening.py # sysctl, AppArmor, SELinux, GRUB, PAM
│ ├── users.py # passwd, shadow, sudoers, SSH keys
│ ├── processes.py # /proc enumeration, capability decoding
│ ├── filesystem.py # SUID/SGID, world-writable, sensitive perms
│ ├── kernel.py # CPU vulns, lockdown, modules
│ ├── packages.py # dpkg + OSV.dev CVE API
│ └── lynis_wrapper.py # lynis audit + report.dat parser
├── ai/
│ ├── client.py # Anthropic SDK wrapper, retry + billing error handling
│ ├── preprocessor.py # Per-module data filter (60–90% size reduction)
│ ├── prompts.py # All prompt templates (edit to tune AI quality)
│ └── analyzer.py # Stage 2 — sequential module analysis + synthesis
└── reports/
├── html.py # Self-contained dark-theme HTML (no CDN)
└── markdown.py # Markdown report generator
```
## 添加扫描模块
```
# assessment/scanners/my_module.py
from assessment.scanners.base import BaseScanner
class MyScanner(BaseScanner):
name = "my_module"
def _scan(self) -> tuple[dict, list]:
result = {}
result["data"] = collect_something()
return result, [] # AI identifies findings from raw data
```
在 `assessment/scanners/__init__.py` 中注册:
```
from assessment.scanners.my_module import MyScanner
ALL_SCANNERS = {
...
"my_module": MyScanner,
}
```
AI 分析、预处理器钩子、报告生成和 CLI 集成都是自动完成的。
如果需要为你的模块添加预处理器逻辑,请在 `assessment/ai/preprocessor.py` 中添加一个处理程序:
```
def _process_my_module(raw: dict) -> dict:
# Return only the high-signal subset of raw
return {"key_finding": raw.get("key_finding")}
_HANDLERS["my_module"] = _process_my_module
```
## 了解更多
完整的架构深入解析、设计决策以及在实际机器上运行时的真实发现:
**[构建基于 Docker 的 AI 驱动主机漏洞评估工具](https://medium.com/@1200km/building-a-dockerized-ai-powered-host-vulnerability-assessment-tool-cd6e2147ce59)**
## 许可证
MIT
## 1200km 生态系统
本项目是 1200km 安全研究生态系统的一部分。使用 [AdversaryGraph](https://1200km.com/adversarygraph/) 进行 CTI 到检测的工作流、ATT&CK/ATLAS 映射、攻击者关联分析、IOC 丰富化以及适合分析师查看的报告生成。
- [AdversaryGraph 项目中心](https://1200km.com/adversarygraph/)
- [AdversaryGraph 文档](https://1200km.com/adversarygraph-docs/)
- [在线 ATT&CK/ATLAS 工作区](https://1200km.com/threat-matrix/)
- [1200km 安全研究生态系统](https://1200km.com/)
标签:AES-256, Docker, Python, Web报告查看器, 人工智能, 安全防御评估, 插件系统, 无后门, 无线安全, 漏洞评估, 用户模式Hook绕过, 网络安全审计, 请求拦截, 逆向工具