davidalex89/policy-lens

GitHub: davidalex89/policy-lens

通过本地Ollama驱动的三层LLM Prompt链,自动分析安全策略文档对NIST 800-53控制族的覆盖程度并生成合规报告。

Stars: 0 | Forks: 0

# policy-lens 通过 [Ollama](https://ollama.com) 使用分层 LLM Prompt 针对 NIST 800-53 评估安全策略。 `policy-lens` 接收纯文本安全策略文档,将其传递给运行在本地 LLM 上的**三层 Prompt 链**,并生成一份覆盖率报告,显示哪些 NIST SP 800-53 Rev. 5 控制族已被解决、部分覆盖或完全缺失。 ## 工作原理 分析管道链接了三个专门的系统 Prompt,每一层的结构化输出都作为下一层的输入: ``` ┌─────────────────────┐ ┌─────────────────-─────┐ ┌─────────────────────┐ │ Layer 1: Extract │────▶│ Layer 2: Map │────▶│ Layer 3: Evaluate │ │ │ │ │ │ │ │ Parse policy into │ │ Map each statement │ │ Score coverage per │ │ discrete statements│ │ to NIST 800-53 │ │ control family, │ │ │ │ control families │ │ identify gaps │ └─────────────────────┘ └──────────────────-────┘ └─────────────────────┘ ``` 1. **Extract** — 将策略文档解析为离散、可执行的策略声明。 2. **Map** — 将每个声明映射到一个或多个 NIST 800-53 控制族,并附带理由。 3. **Evaluate** — 对每个控制族的覆盖情况进行评分(`addressed` / `partial` / `none`),计算整体覆盖率,并提供缺口建议。 所有推理均通过 Ollama 在**本地**运行——数据不会离开您的设备。 ## Web UI(无需服务器) `policy-lens` 包含一个**单文件 Web 界面**,完全在您的浏览器中运行——无需 Web 服务器、无需后端、无需构建步骤。它通过 `fetch()` 直接调用 Ollama 的本地 API。 ``` # 打开文件 open index.html ``` Web UI 提供: - 具有实时进度条交互式三层管道 - 粘贴或拖放策略文档 - 包含详细发现的完整覆盖率报告 - 通过浏览器打印 / 保存为 PDF ## 先决条件 - **Python 3.10+** - 已安装并运行 **[Ollama](https://ollama.com)** (`ollama serve`) - 已拉取模型(例如 `ollama pull llama3`) ## 安装 ``` # Clone the repo git clone https://github.com/davidalex89/policy-lens.git cd policy-lens # Create a virtual environment and install python3 -m venv .venv source .venv/bin/activate pip install -e . ``` ## 快速开始 ``` # Make sure Ollama is running ollama serve & # Analyze the included sample policy policy-lens examples/sample_policy.txt ``` 这将生成一个格式化的表格,显示每个 NIST 800-53 控制族的覆盖情况,以及执行摘要和缺口建议。 ## 用法 ``` policy-lens [-h] [-m MODEL] [-u OLLAMA_URL] [-f FRAMEWORK] [-o OUTPUT] [--json] [-t TEMPERATURE] [--timeout TIMEOUT] [-v] policy_file ``` | 标志 | 描述 | 默认值 | |------|-------------|---------| | `policy_file` | 策略文档路径(文本/markdown) | *(必需)* | | `-m, --model` | Ollama 模型名称 | `llama3` | | `-u, --ollama-url` | Ollama API 基础 URL | `http://localhost:11434` | | `-f, --framework` | 用于评估的框架 | `nist_800_53` | | `-o, --output` | 将完整 JSON 结果写入文件 | — | | `--pdf FILE` | 生成样式化的 PDF 报告 | — | | `--json` | 打印原始 JSON 而非格式化报告 | — | | `-t, --temperature` | LLM 采样温度 | `0.1` | | `--timeout` | 请求超时时间(秒) | `300` | ### 示例 ``` # Use a specific model policy-lens -m mistral examples/sample_policy.txt # Generate a PDF report policy-lens --pdf report.pdf examples/sample_policy.txt # Save full results (all three layers) to JSON policy-lens -o results.json examples/sample_policy.txt # Pipe JSON output for scripting policy-lens --json examples/sample_policy.txt | jq '.evaluation.overall_coverage_pct' ``` ## 扩展 ### 添加框架 将 JSON 文件放入 `policy_lens/frameworks/`,遵循与 `nist_800_53.json` 相同的 Schema,然后使用 `-f your_framework_name` 引用它。 Schema 要求: ``` { "framework": "Framework Display Name", "description": "...", "control_families": [ { "id": "XX", "name": "Family Name", "description": "What this family covers.", "example_controls": ["XX-1 Control Name", "XX-2 Another Control"] } ] } ``` ### 自定义 Prompt 系统 Prompt 作为纯 Python 字符串位于 `policy_lens/prompts/` 中。编辑它们以调整提取质量、评分标准或输出 Schema。 ## 开发 ``` # Install dev dependencies pip install -e ".[dev]" # Run tests pytest tests/ -v ``` ## 项目结构 ``` policy-lens/ ├── policy_lens/ │ ├── __init__.py │ ├── cli.py # CLI entry point │ ├── analyzer.py # Three-layer pipeline orchestration │ ├── ollama_client.py # Async Ollama HTTP client │ ├── report.py # Rich terminal output │ ├── pdf_report.py # PDF report generation │ ├── prompts/ │ │ ├── layer1_extract.py # System prompt: statement extraction │ │ ├── layer2_map.py # System prompt: control family mapping │ │ └── layer3_evaluate.py# System prompt: coverage evaluation │ └── frameworks/ │ └── nist_800_53.json # NIST 800-53 Rev. 5 control families ├── examples/ │ └── sample_policy.txt # Example policy for testing ├── tests/ ├── index.html # Self-contained web UI (no server needed) ├── pyproject.toml ├── LICENSE # Apache 2.0 └── README.md ``` ## 许可证 Apache 2.0 — 参见 [LICENSE](LICENSE)。
标签:AI风险缓解, C2, DLL 劫持, Homebrew安装, LLM, LLM评估, NIST 800-53, Ollama, Policy-as-Code, Prompt Chaining, Python, TCP SYN 扫描, Unmanaged PE, Web UI, 后端开发, 多模态安全, 大语言模型, 安全合规, 安全策略评估, 对称加密, 差距分析, 控制族映射, 提示词工程, 数据可视化, 文本分析, 无后门, 本地推理, 离线运行, 策略决策点, 网络代理, 网络安全, 网络安全的AI应用, 自动化审计, 逆向工具, 隐私保护