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, 加密, 基础设施安全, 多模态安全, 安全评估工具, 安全配置检查, 开源安全工具, 报告对比, 插件架构, 时间戳目录, 服务发现, 漏洞扫描器, 网络安全评估, 网络安全运维, 网络扫描, 聚合仪表盘, 自动化报告, 请求拦截, 跨平台扫描, 逆向工具, 逆向工程平台