EladMoshe98/ThreatScope

GitHub: EladMoshe98/ThreatScope

基于 SecureBERT-NER 模型的本地化威胁情报命名实体识别服务,支持从文本中自动提取 21 类网络安全实体。

Stars: 0 | Forks: 0

# 威胁范围 - 网络安全文档命名实体识别 这是一个本地化部署的本地服务,它使用 **SecureBERT-NER** 从文本中提取 **网络安全威胁情报实体**。它以两个 Docker 容器形式交付——一个托管模型的 FastAPI 服务和一个 Streamlit UI。 该模型是在 **DNRTI** 数据集上对 **SecureBERT-NER 与 CyNER**(以及作为额外数据点的 SecureBERT2.0-NER)进行基准测试后选出的——参见[基准测试](#benchmark)。 ## 功能说明 上传一个 `.txt` 文件 → 在两列表格中按类别获取所有命名实体,以及内联高亮显示实体的文本。SecureBERT-NER 可识别 21 种细粒度类别(威胁行为者、恶意软件、CVE、IP、域名、哈希、文件、时间、位置等)。 ## 仓库结构 ``` NERF/ ├── api/ FastAPI service — hosts SecureBERT-NER │ ├── ner_model.py load model, chunk long text, merge tokens → clean entities │ ├── validation.py input hardening (type / size / decode / control chars) │ ├── logger.py structured logging │ ├── log_store.py SQLite request log (metadata only) │ ├── routers/ predict · health · history │ └── main.py app + startup model warm-up + Swagger /docs ├── ui/streamlit_app.py Streamlit client (Analyze · Model Comparison · History) ├── models/ SecureBERT-NER weights (run scripts/download_model.py) — gitignored ├── logs/ runtime request log (bind-mounted, visible) — gitignored ├── scripts/download_model.py downloads the weights into models/ ├── benchmark/ PREP ONLY (never containerized) │ ├── benchmark.ipynb SecureBERT-NER vs CyNER vs SecureBERT2.0-NER on DNRTI │ └── DNRTI.rar the dataset ├── docker/ Dockerfile.api · Dockerfile.ui · docker-compose.yml ├── .streamlit/config.toml UI theme ├── requirements-api.txt · requirements-ui.txt └── .env.example ``` ## 快速开始 **前置条件:** Docker Desktop,以及 Python 3.11(仅用于一次性获取权重)。 ``` # 1. 将 model weights 下载到 models/ 目录中 (一次性操作,需要互联网) python scripts/download_model.py # 2. 构建并运行两个 containers (从 repo 根目录开始) docker compose -f docker/docker-compose.yml up --build ``` 然后打开: | | URL | |---|---| | **Streamlit UI** | http://localhost:8501 | | **API (Swagger 文档)** | http://localhost:8000/docs | 使用 `docker compose -f docker/docker-compose.yml down` 停止。 在权重被构建到镜像中后,正在运行的堆栈**不需要互联网连接**。 ## 使用 UI - **分析** — 上传一个 `.txt` 文件 → 生成两列表格(类别 → 实体)、内联高亮文本、单文件延迟,以及 CSV/JSON 下载。参考表格解释了每个实体类别的含义。 - **模型对比** — DNRTI 基准测试摘要以及选择 SecureBERT-NER 的原因。 - **历史记录** — 最近的请求(仅元数据;绝不存储上传的文本)。 ## API | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/predict` | 上传一个 `.txt` 文件 → 按类别分组的实体 | | `GET` | `/health` | 存活状态以及模型是否已加载 | | `GET` | `/history?limit=N` | 最近的请求元数据 | | `GET` | `/docs` | 交互式 Swagger UI | ``` curl -F "file=@report.txt;type=text/plain" http://localhost:8000/predict ``` ``` { "filename": "report.txt", "num_entities": 4, "latency_ms": 88.8, "entities_by_class": { "APT": ["APT32"], "MAL": ["Cobalt Strike"], "IP": ["109.248.148.42"], "TIME": ["April 2018"] }, "entities": [ { "text": "APT32", "label": "APT", "start": 3, "end": 8, "score": 0.93 }, ... ] } ``` ## 基准测试 打开 `benchmark/benchmark.ipynb`(最好在 **Google Colab** 中运行——CyNER 在那里可以顺利安装;也可以在本地运行)。通过笔记本的上传框上传 `DNRTI.rar`,然后从头到尾运行。它会报告精确率 / 召回率 / F1(每个类别 + 总体)、延迟和模型占用量,并保存结果 JSON 和图表。 **结果(662 个 DNRTI 测试句子):** | 模型 | F1 (micro) | 精确率 | 召回率 | 参数量 | |---|---|---|---|---| | **SecureBERT-NER** | **0.70** | 0.70 | 0.70 | 124M | | CyNER-base | 0.27 | 0.38 | 0.20 | 277M | | SecureBERT2.0-NER | 0.14 | 0.12 | 0.17 | 150M | **决策 — SecureBERT-NER:**最准确(2–5倍)、最快、最小,且是唯一涵盖时间/区域的模型。它是在 APTNER 上微调的,其分类法与 DNRTI 高度匹配,因此最适合此类数据。 (*CyNER-large 被跳过——其训练权重从未公开发布。*) ## 配置 所有参数均为可选(应用程序使用默认值运行)。参见 `.env.example`。关键变量: | 变量 | 默认值 | 使用方 | |---|---|---| | `NER_MODEL_PATH` | `models/securebert-ner` | API — 存放内置权重的位置 | | `MAX_FILE_SIZE_MB` | `2` | API — 上传大小限制 | | `LOG_LEVEL` / `LOG_FILE` / `LOG_DB_PATH` | `INFO` / `logs/nerf.log` / `logs/requests.db` | API 日志记录 | | `API_URL` | `http://api:8000` | UI — 访问 API 的位置 | ## 设计说明 - **离线 / 本地化部署:**模型权重在构建时被复制到 API 镜像中;容器自带副本,在运行时绝不向外发起调用。 - **输入加固:**仅限 `.txt`,有大小限制,安全的 UTF-8 解码,控制字符剥离;UI 在显示前对上传的文本进行 HTML 转义(防止脚本注入)。 - **隐私:**请求日志仅存储元数据(文件名、延迟、实体计数、状态)——绝不存储上传的文档文本。 - **双容器:**模型服务和 UI 是解耦的,因此 API 可以独立使用(curl / Swagger / 其他客户端),并且两者可以分别进行扩展。 - 已确保防范 XSS。 ## 已知限制 / 未来工作 - 无身份验证(假设为单租户本地部署)。 - 超长文档会在空白处进行分块,以确保不超过模型 512-token 的限制。 - CyNER-large 未进行基准测试(权重不可用);集成多种模型可能是未来的 v2 版本。 - 暂不支持多用户友好。
标签:AI, AV绕过, Docker, FastAPI, Kubernetes, Streamlit, 命名实体识别, 威胁情报, 安全防御评估, 开发者工具, 网络安全, 网络测绘, 自动化代码审查, 访问控制, 请求拦截, 逆向工具, 隐私保护