Miguel-DevOps/passive-sentry

GitHub: Miguel-DevOps/passive-sentry

一款被动 OSINT 安全审计框架,基于确定性风险评分与标准化报告,帮助组织合规评估外部攻击面。

Stars: 1 | Forks: 0

Passive Sentry logo # PassiveSentry PassiveSentry 是一个被动(仅限 OSINT)的安全审计框架,与 OWASP Top 10:2025 (A01-A10) 保持一致,为管理层和技术人员提供确定性的报告。
## 当前状态 - 运行时基线:Python 3.14+ - 包管理器:uv 及确定性 lockfile (uv.lock) - 安全模型:100% 纯被动收集 - OWASP 范围:映射 A01-A10 的被动启发式检测 - 最新验证:2026-04-06 - 测试结果:40/40 通过 已验证的命令: ``` uv run --python 3.14 pytest -q ``` ## 核心功能 - 通过 CLI 进行单域名审计 - 多域名批处理 - 规范的 OWASP A01-A10 模块编排 - 确定性风险评分和发现结果标准化 - JSON 报告生成 - PDF 报告生成(延迟加载,生成时需要原生依赖) - 用于结果探索的 Streamlit dashboard - Docker 和 Docker Compose 工作流 ## 日志和输出行为 PassiveSentry 运行干净且噪音极低: - **预期的 404(已抑制)**:可选资源(robots.txt、sitemap.xml、security.txt 等)的 HTTP 404 响应将在 DEBUG 级别记录,以避免警告刷屏。 - **外部库日志已抑制**:第三方库(fontTools、Pillow、urllib3 等)已被静音,以保持输出专注于 PassiveSentry 的结果。 - **详细模式**(`--verbose`):如果需要排查问题,请传递此标志以启用 DEBUG 日志记录。 ## 纯被动强制执行 PassiveSentry 被设计为非侵入式: - 无漏洞利用 - 无暴力破解 - 无模糊测试 - 无主动 payload 注入 - 无经过身份验证的内部应用测试 HTTP 收集被限制为安全方法(GET/HEAD/OPTIONS)。结果基于公开可见的工件。 ## OWASP 覆盖范围 (Top 10:2025) 在 [src/passivesentry/modules/owasp_top10_2025.py](src/passivesentry/modules/owasp_top10_2025.py) 中实现: - A01 失效的访问控制 - A02 安全配置错误 - A03 软件和供应链漏洞 - A04 加密失败 - A05 注入 - A06 安全设计缺陷 - A07 身份认证失败 - A08 软件和数据完整性失败 - A09 安全日志记录和监控失败 - A10 异常情况处理不当 覆盖范围说明: - 所有类别均已包含并在完整审计中执行。 - 深度被刻意限制为被动;某些类别仅提供指标级别的置信度。 - A09 是基于外部可见的 DNS 和相关遥测数据建模的,因此应将其视为间接证据。 ## 确定性报告模型 规范的数据真实来源: - 字段:risk_analysis.normalized_findings - 生成者:[src/passivesentry/reporting/risk_scoring.py](src/passivesentry/reporting/risk_scoring.py) 标准化保证: - 按 category + text 去重 - 重复项取最高严重性 - 稳定的排序顺序以实现可重现的输出 - 对历史发现变体使用标准化的英文表述 ## 输出路径和域名处理保证 单次和批处理工作流的默认输出目录现在均为 results。 单域名审计输出: - results 目录中的 JSON 报告 - 可选的摘要文本 - 可选的 PDF 批处理输出: - 每个输入域名一个子目录 - 每个域名对应 audit_results.json - 可选的针对单个域机的技术和执行 PDF - 根输出目录中的批处理 JSON 摘要和执行日志 域名处理保证: - 输入文件中的每个非空、非注释行都会被处理。 - 批处理摘要包括 total_domains、succeeded、failed 以及每个域名的状态。 - 无效域名将被计为已处理的失败项(不会被静默跳过)。 ## 环境要求 - Python >= 3.14 - uv 作为受支持的解析器和运行器 - 提交 uv.lock 以实现可重现的安装 - Docker(可选) ### PDF 生成的原生要求 PDF 输出依赖于 WeasyPrint 原生库。在 Debian/Ubuntu 环境中,请安装: ``` sudo apt-get update sudo apt-get install -y libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf-2.0-0 libffi8 shared-mime-info fonts-dejavu ``` 如果这些库不可用,请在没有 PDF 工件的情况下运行批处理模式: ``` uv run --python 3.14 passivesentry batch --input domains.txt --no-pdf --no-summary ``` 批处理运行时行为: - 在启动时,批处理模式会检查 PDF 运时功能。 - 该检查是静默的,不会直接导入 WeasyPrint(以避免启动噪音)。 - 如果缺少依赖项,警告中将包含确切缺失的组件。 - 如果缺少 WeasyPrint 原生依赖项,将自动禁用 PDF 工件。 - 域名处理将继续以仅 JSON 模式进行,而不是导致批处理失败。 - 会记录一条警告,以便运维人员稍后可以启用 PDF 支持,而不会丢失执行覆盖率。 ## 站点质量指标 除了 OWASP Top 10:2025 漏洞评估外,PassiveSentry 还会评估反映运营成熟度和安全意识实践的**站点质量指标**: - `robots.txt` - 爬虫指令(SEO、公开/私有内容处理) - `sitemap.xml` - 站点结构声明(可爬取性) - `security.txt` - 漏洞披露政策(兼容 RFC 9110) - `llms.txt` - LLM/AI 训练指令(数据治理) - `ai.json` - AI 机器人行为配置(新兴标准) - `dnt-policy.txt` - 请勿追踪政策(隐私) ### 它们在报告中的体现方式 **执行摘要 PDF:** - 简明的存在/缺失列表 - 针对每个指标的高层级建议 **完整技术报告 PDF:** - 详细的逐域名评估 - 对于每个**存在**的指标:URL、大小和针对性指导 - 对于每个**缺失**的指标:目的、实施步骤和优先级排序 - 指导修复顺序的优先级重点列表 **JSON 输出(`audit_results.json`):** ``` "site_quality_indicators": { "present": { "sitemap.xml (site structure)": { "url": "https://example.com/sitemap.xml", "status_code": 200, "size_bytes": 1524 } }, "absent": [ "robots.txt (crawler directives)", "security.txt (security policy)" ] } ``` ### 自定义 站点质量指标可以根据您组织的标准进行**完全自定义**: - 添加/删除要检查的资源(例如,行业合规文件、自定义 endpoint) - 修改每个指标的建议文本 - 调整优先级排序 - 添加合规框架映射 有关以下内容的详细说明,请参阅 [`docs/customizing_reports.md`](docs/customizing_reports.md): - 在哪里编辑模板 - 如何添加自定义资源或字段 - 映射到您组织的合规标准 - 自动化和 CI/CD 集成示例 ## 安装 安装锁定的运行时依赖: ``` uv sync --frozen ``` 安装开发依赖: ``` uv sync --dev ``` 依赖项更改后刷新 lockfile: ``` uv lock --python 3.14 ``` ## CLI 用法 帮助: ``` uv run --python 3.14 passivesentry --help ``` 完整审计(A01-A10): ``` uv run --python 3.14 passivesentry audit example.com ``` 范围审计: ``` uv run --python 3.14 passivesentry audit example.com -m security_misconfiguration -m cryptographic_failures ``` 批处理(默认输出为 results): ``` uv run --python 3.14 passivesentry batch --input domains.txt ``` 带有明确输出的批处理: ``` uv run --python 3.14 passivesentry batch --input domains.txt --output results ``` ## Streamlit 仪表盘 运行: ``` streamlit run scripts/streamlit_dashboard.py ``` 默认的 dashboard 输入目录为 results。 ## Docker 构建镜像: ``` docker build -t passivesentry:latest . ``` 运行单次审计: ``` docker run --rm passivesentry:latest passivesentry audit example.com ``` 运行批处理并将输出持久化到 results: ``` docker run --rm \ -v $(pwd)/results:/app/results \ -v $(pwd)/domains.txt:/app/domains.txt:ro \ passivesentry:latest \ passivesentry batch --input domains.txt --output results ``` 运行 dashboard: ``` docker run --rm -p 8501:8501 \ -v $(pwd)/results:/app/results \ passivesentry:latest \ streamlit run scripts/streamlit_dashboard.py --server.address=0.0.0.0 --server.port=8501 ``` Compose: ``` docker compose up --build ``` ## 测试 完整套件: ``` uv run --python 3.14 pytest -q ``` 批处理和输出行为检查: ``` uv run --python 3.14 pytest -q tests/e2e/test_batch_cli.py tests/unit/test_batch_processing.py ``` ## 仓库结构 ``` src/passivesentry/ core.py cli.py batch.py modules/ owasp_top10_2025.py security_misconfiguration.py software_supply_chain.py cryptographic_failures.py security_logging.py reporting/ risk_scoring.py json_reporter.py pdf_reporter.py templates/ executive_summary.html full_technical_report.html scripts/ batch_processing.py streamlit_dashboard.py tests/ unit/ e2e/ docs/ ``` ## 文档 - [docs/architecture.md](docs/architecture.md) - [docs/technical_decisions.md](docs/technical_decisions.md) - [docs/owasp_coverage.md](docs/owasp_coverage.md) ## 所有权与联系 PassiveSentry 的核心代码和模块是专有的。如需商业访问权限,请联系 [miguel@developmi.com](mailto:miguel@developmi.com)。 作者:Miguel Lozano | Developmi - GitHub: [Miguel-DevOps](https://github.com/Miguel-DevOps) - 网站: [developmi.com](https://developmi.com/) - LinkedIn: [Miguel DevOps](https://www.linkedin.com/in/miguel-dev-ops/)
标签:GitHub, OWASP标准, Python, Snort++, Streamlit, 安全审计, 实时处理, 开源情报, 无后门, 被动扫描, 访问控制, 风险评估