DawidTrochim/AccuScanner
GitHub: DawidTrochim/AccuScanner
一款基于 Python 的漏洞扫描器,集成 nmap 并以插件化架构提供多场景安全评估与报告生成。
Stars: 0 | Forks: 1
# AccuScanner
AccuScanner 是一个基于 Python 构建的防御性漏洞评估工具,灵感来源于 Nessus,专用于拥有并获得授权的系统。它协调 `nmap`,解析结构化结果,应用跨网络、Web、TLS、AWS 和 Azure 姿态的模块化检查,并导出精美的 JSON 和 HTML 报告。
## 为什么这个项目是优秀的作品集素材
- 使用真实的防护工具,而非重新实现端口扫描器
- 展示清晰的 Python 架构,包含模块化检查、类型化模型、配置文件和插件加载
- 生成招聘方友好的产物:样式化报告、示例、CI、测试、Docker 支持和跨平台使用文档
- 在一个项目中涵盖基础设施暴露、常见 Web 弱点和云姿态检查
## 核心能力
- 基于 `argparse` 构建的 CLI
- 扫描模式:`quick`、`full`、`web`、`aws` 和 `azure`
- 支持 IP、主机名、CIDR 范围和 URL
- 通过 `subprocess` 使用 `nmap` 进行主机发现、服务检测和版本检测
- 将 `nmap` XML 解析为结构化数据类
- 基于插件的检查架构,支持外部插件加载
- 带有忽略规则和可复用扫描设置的 YAML 扫描配置文件
- 通过 SSH 进行认证的 Linux 主机审查
- 通过 WinRM 进行认证的 Windows 主机审查
- 基于检测的服务/版本数据进行本地 CVE 映射
- 跨多个报告生成聚合仪表板
- 导出 JSON、HTML 和可选的原始 XML
- 带时间戳的目录和清晰的带时间戳的文件名
- 比较报告以展示新发现和已解决项
- 当 `nmap` 可用且在 `PATH` 或 `NMAP_PATH` 中时,Ubuntu 和 Windows 均可友好使用
## 检测覆盖范围
### 网络与服务检查
- 高风险暴露端口,如 `21`、`23`、`3389`、`5900`
- 面向互联网的 SMB、Docker、Memcached、MongoDB、Redis、Elasticsearch、SNMP 和 SMTP 暴露警告
- 匿名 FTP 检测
- 对 Redis、Docker API、Elasticsearch 和 MongoDB 暴露的轻量级主动验证
- 横幅和服务元数据暴露警告
### Web 检查
- 缺少 `HSTS`
- 缺少 `CSP`
- 缺少 `X-Frame-Options`
- 缺少 `X-Content-Type-Options`
- 缺少 `Referrer-Policy`
- 缺少 `Permissions-Policy`
- 缺少 `COOP`、`CORP` 和 `COEP`
- 未启用 HTTPS 重定向的不安全 HTTP
- 弱 Cookie 标志:
缺少 `Secure`
缺少 `HttpOnly`
缺少 `SameSite`
广泛的显式 `Domain` 作用域信号
- 目录列表指示器
- 默认页面检测
- 高风险 HTTP 方法,如 `TRACE`、`PUT` 和 `DELETE`
- TRACE 方法响应验证
- `Server` 头部泄露
- 敏感文件和路径检查,例如 `.git`、`.env`、`phpinfo`、`server-status` 和备份路径
- 管理员和登录界面检测
- 对 WordPress、phpMyAdmin、Jenkins、Grafana、Tomcat、Kibana 和 Prometheus 的轻量级指纹识别
### TLS 检查
- 已过期证书
- 即将过期的证书
- 自签名证书指示器
- 主机名不匹配
- 遗留 TLS 版本
- 弱密码套件
- 信任链验证错误
- 发现项的置信度和标签元数据
- 基于检测的服务/产品/版本匹配进行潜在 CVE 相关性
### 认证的 Linux 检查
- 无密码 sudo 检测
- 世界可写的高权限路径检查
- SSH 根登录检测
- 主机防火墙不活跃信号
- 内核版本清单采集
### 认证的 Windows 检查
- Windows 防火墙配置文件禁用检测
- RDP 已启用检测
- 访客账户已启用检测
- Defender 禁用信号
- Windows 版本清单采集
### AWS 检查
- 公共 S3 存储桶指标
- 允许 `0.0.0.0/0` 访问高风险端口的网络安全组
- 公共 EC2 实例清单摘要
- 公共 RDS 检测
- 面向互联网的负载均衡器摘要
- 弱或缺失的 IAM 密码策略
- 公共 EBS 快照检测
- 公共 AMI 检测
### Azure 检查
- 公共 IP 实例清单摘要
- 允许互联网访问高风险端口的 NSG 规则
- 启用了 Blob 公共访问的存储账户
- 启用了公共网络访问的存储账户
- VM 实例清单摘要
## 架构
```
flowchart TD
A[CLI] --> B[Discovery Layer]
B --> C[nmap subprocess]
C --> D[XML Parser]
D --> E[Structured Models]
E --> F[Check Engine]
F --> F1[Network Checks]
F --> F2[Web Checks]
F --> F3[TLS Checks]
F --> F4[AWS Checks]
F --> F5[Azure Checks]
F --> F6[Custom Plugins]
E --> G[JSON Report]
E --> H[HTML Report]
E --> I[Optional Raw XML Export]
G --> J[Report Comparison]
```
## 项目结构
```
src/mininessus/ # Internal implementation package
src/accuscanner/ # Public package entrypoint
tests/
examples/
.github/workflows/
Dockerfile
```
## Ubuntu 设置
```
sudo apt update
sudo apt install -y python3 python3-venv nmap
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -e .[dev]
```
如果需要 AWS 和 Azure 检查:
```
aws configure
pip install -e ".[azure]"
az login
```
## Windows 设置
1. 安装 Python 3.11+
2. 安装适用于 Windows 的 Nmap,并确保 `nmap.exe` 在 `PATH` 中可用
3. 如果 Nmap 安装在自定义位置,请设置 `NMAP_PATH`
PowerShell 示例:
```
py -3 -m venv .venv
.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install -e .[dev]
accuscanner scan 192.168.1.10 --mode quick --timestamped-dir
```
如有必要:
```
$env:NMAP_PATH="C:\Program Files (x86)\Nmap\nmap.exe"
```
## CLI 帮助
显示所有命令和选项:
```
accuscanner --help
accuscanner -h
accuscanner -help
```
显示扫描子命令帮助:
```
accuscanner scan --help
accuscanner scan -h
accuscanner scan -help
```
显示比较子命令帮助:
```
accuscanner compare --help
```
显示仪表板子命令帮助:
```
accuscanner dashboard --help
```
## 示例命令
快速扫描:
```
accuscanner scan 192.168.1.10 --mode quick --timestamped-dir
```
完整扫描:
```
accuscanner scan 10.0.0.0/24 --mode full --timestamped-dir
```
Web 扫描:
```
accuscanner scan https://app.internal.example --mode web --timestamped-dir
```
AWS 姿态扫描:
```
accuscanner scan 10.0.0.0/24 --mode aws --aws-region eu-west-2 --timestamped-dir
```
Azure 姿态扫描:
```
accuscanner scan 10.0.0.0/24 --mode azure --azure-subscription-id --timestamped-dir
```
自定义端口和原始 XML 导出:
```
accuscanner scan 18.175.232.63 --mode quick --ports 22,80,443,6379 --save-raw-xml --timestamped-dir
```
使用 YAML 扫描配置文件:
```
accuscanner scan 18.175.232.63 --mode full --config examples/scan-profile.yml
```
同时启用两个云提供者:
```
accuscanner scan 18.175.232.63 --mode full --enable-aws-checks --enable-azure-checks --timestamped-dir
```
加载自定义插件:
```
accuscanner scan 18.175.232.63 --mode full --plugin-dir examples/plugins
```
通过 SSH 运行认证的 Linux 检查:
```
accuscanner scan 18.175.232.63 --mode full --ssh-user ubuntu --ssh-key-path ~/.ssh/id_rsa --timestamped-dir
```
通过 WinRM 运行认证的 Windows 检查:
```
accuscanner scan 10.0.0.50 --mode full --winrm-user Administrator --winrm-password "Password123!" --winrm-transport ntlm --timestamped-dir
```
比较两个报告:
```
accuscanner compare reports/old.json reports/new.json --output reports/report-diff.json
```
从多个 JSON 报告构建聚合仪表板:
```
accuscanner dashboard reports/*.json --html-output reports/dashboard.html --json-output reports/dashboard.json
```
运行测试:
```
pytest
```
## 示例输出
报告使用带时间戳的文件名写入:
```
reports/20260415_120000/
app.internal.example-web-20260415_120000.json
app.internal.example-web-20260415_120000.html
app.internal.example-web-20260415_120000.xml
```
示例工件位于 [examples/sample_report.json](examples/sample_report.json)、[examples/sample_report.html](examples/sample_report.html) 和 [examples/sample_cli_output.txt](examples/sample_cli_output.txt)。
示例自动化资产位于 [examples/scan-profile.yml](examples/scan-profile.yml)、[examples/plugins/example_custom_check.py](examples/plugins/example_custom_check.py) 和 [examples/docker-compose.lab.yml](examples/docker-compose.lab.yml)。
## HTML 报告亮点
- 严重性总计和整体严重性评分
- 快速分诊的顶部风险部分
- 主机清单和开放端口
- 按资产分组的修复建议
- 包含证据、置信度、标签和修复指导的完整发现卡片
## 仪表板输出
`dashboard` 命令生成:
- 跨多个报告的聚合严重性总计
- 组合严重性评分
- 所有扫描的顶部发现
- 每个报告的摘要用于趋势和覆盖范围审查
## 屏幕截图
未来截图的占位路径:
- `docs/screenshots/cli-summary.png`
- `docs/screenshots/html-report-overview.png`
- `docs/screenshots/html-top-risks.png`
- `docs/screenshots/html-findings.png`
## Docker
构建:
```
docker build -t accuscanner .
```
运行:
```
docker run --rm -it accuscanner scan 192.168.1.10 --mode quick
```
## 自定义插件
AccuScanner 可以加载简单的外部检查插件:
```
accuscanner scan 192.168.1.10 --plugin-dir examples/plugins
```
每个插件文件可以暴露以下之一:
- `get_checks()` 返回已实例化的检查对象
- `CHECKS` 包含已实例化的检查对象
## 扫描配置文件
AccuScanner 支持用于可复用设置的轻量级 YAML 配置文件:
```
accuscanner scan 18.175.232.63 --config examples/scan-profile.yml
```
## CI
GitHub Actions 在推送和拉取请求时运行测试套件,使用 Ubuntu 并安装 `nmap` 作为工作流的一部分。
## 限制
- 这是一个防御性评估 MVP,并非完整认证企业扫描器的替代品
- 发现项是基于启发式的,侧重于暴露风险
- AWS 和 Azure 检查依赖有效的凭证和权限
- 认证的 Linux 检查需要有效的 SSH 访问,目前仅针对常见 Linux 管理模式
- 认证的 Windows 检查需要有效的 WinRM 访问,目前侧重于常见主机加固信号
- TLS 和 Web 检查有意保持轻量级且未认证
- 扫描结果仍取决于网络可达性和目标的过滤行为
## 道德使用
仅对您拥有或明确获得授权的系统与云账户使用 AccuScanner。未经书面许可,不得扫描第三方基础设施。
标签:argparse, AWS安全分析, Azure安全评估, CI/CD安全, CodeQL, CVE映射, Docker支持, Elasticsearch暴露检测, Frida, FTP匿名登录检测, Homebrew安装, HTML报告, JSON报告, Llama, Memcached暴露检测, MongoDB暴露检测, Python安全工具, Redis暴露检测, SMB暴露检测, SSH主机审查, TLS检查, Web弱点扫描, WinRM主机审查, YAML配置, 云存储安全, 云安全 posture, 加密, 基础设施安全, 多模态安全, 安全评估工具, 安全配置检查, 开源安全工具, 报告对比, 插件架构, 时间戳目录, 服务发现, 漏洞扫描器, 网络安全评估, 网络安全运维, 网络扫描, 聚合仪表盘, 自动化报告, 请求拦截, 跨平台扫描, 逆向工具, 逆向工程平台