Detect-Forge/ttp-staleness
GitHub: Detect-Forge/ttp-staleness
通过时间戳对比、语义嵌入相似度和LLM建议三重维度评估检测规则与ATT&CK技术定义的陈旧程度,帮助蓝队发现隐性过期的检测逻辑。
Stars: 0 | Forks: 0
# TTP-Staleness
为您的 Sigma/KQL/EQL 检测规则评估 ATT&CK 技术的陈旧程度。
## 概述
大多数团队通过查看时间戳来检查检测规则的陈旧程度:规则上次修改是什么时候,ATT&CK 上次更新是什么时候,是否存在偏差?这能发现明显的问题,但会遗漏更棘手的问题:那些**时间戳最新但语义已发生偏移**的规则——规则最近因不相关的原因被修改过,但其引用的技术在含义上已经演变。这些是“隐性陈旧”的规则。
`ttp-staleness` 从**三个维度**对每条规则进行评分:
1. **时间戳偏差** — 确定性计算;将 ATT&CK STIX 的 `modified` 时间戳与规则的修改日期进行比较
2. **语义偏差** — 基于嵌入 (embeddings) 计算;计算规则检测逻辑与当前 ATT&CK 技术描述之间的余弦相似度
3. **LLM 差异建议** — 可选功能;自带 LLM (BYOLLM,首选 OpenAI,备选 Claude);为标记为陈旧的条目提供更新规则的建议,并由人工进行审核
旨在作为 CI 门禁在 GitHub Actions 中运行。无需平台,无需注册,数据不会离开您的环境。
## 状态
🔨 开发中 — 路径 B3 AI 增强。时间戳层已完成(阶段 1-2)。语义偏差层开发中(阶段 3)。LLM 差异建议层已规划(阶段 4)。发布目标:2026 年 5 月 23 日。
## 要求
- Python **3.12** 或更新版本
## 安装
```
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
## 使用说明
```
ttp-staleness --help
ttp-staleness --version
ttp-staleness scan path/to/rules
```
### `scan` 选项
| 选项 | 默认值 | 描述 |
|---|---|---|
| `RULE_DIR` (位置参数) | — | 要扫描的 Sigma 规则目录。必须存在。 |
| `--format {terminal,json,html}` | `terminal` | 输出格式。 |
| `-o, --output PATH` | _stdout_ | 将输出写入文件而不是标准输出。 |
| `--min-severity {low,medium,high,critical}` | `low` | 仅显示达到或超过此严重级别的规则。 |
| `--no-cache` | off | 绕过磁盘缓存并获取最新的 ATT&CK 数据包 (`ttl_hours=0`)。 |
| `--domain {enterprise-attack,ics-attack,mobile-attack}` | `enterprise-attack` | 要获取的 ATT&CK 领域。 |
进度指示器会输出到 **stderr**;报告会输出到 **stdout**,以便 JSON 输出可以被安全地通过管道传递:
```
ttp-staleness scan path/to/rules --format json | jq '.findings'
ttp-staleness scan path/to/rules --format json -o report.json
```
退出码:
- `0` — 扫描完成,未发现严重问题
- `1` — 至少有一条规则被评为 `critical` 级别(适用于 CI 门禁)
- 其他 — 来自 Click 的参数/解析错误
### 环境变量
所有设置都可以通过带有 `TTP_` 前缀的环境变量(或工作目录中的 `.env` 文件)进行覆盖:
| 变量 | 默认值 | 用途 |
|---|---|---|
| `TTP_CACHE_DIR` | `~/.cache/ttp-staleness` | ATT&CK 数据包的缓存位置。 |
| `TTP_CACHE_TTL_HOURS` | `24` | 缓存生命周期(以小时为单位)。 |
| `TTP_ATTACK_DOMAIN` | `enterprise-attack` | 默认的 `--domain` 值。 |
| `TTP_NO_CACHE` | `false` | 如果为真值,则始终绕过缓存。 |
## 开发
```
pytest -q # run the test suite (38 tests)
ruff check src/ tests/ # lint
mypy src/ # type-check (strict)
```
包结构:
```
src/ttp_staleness/
├── cli.py # click entrypoint (main + scan)
├── settings.py # pydantic-settings config
├── console.py # rich stdout + stderr consoles
├── models.py # Severity, Rule, Finding, Report, AttackIndex, AttackTechnique
├── cache.py # DiskCache (SHA-256 keys, TTL on read)
├── attack_client.py # build_index() — STUB
├── rule_parser.py # parse_rule_dir() — STUB
├── scorer.py # score_rules() — STUB
└── reporter.py # render() — terminal/json/html (stub rendering)
```
## 许可证
MIT
标签:AI安全, Chat Copilot, DLL 劫持, EQL, GitHub Actions, KQL, LLM, PB级数据处理, Python, SecOps, Sigma规则, STIX, Unmanaged PE, 云安全架构, 余弦相似度, 大语言模型, 安全运维, 嵌入向量, 持续集成CI, 无后门, 时间戳漂移, 检测规则, 目标导入, 网络资产发现, 聊天机器人, 自动笔记, 规则有效性, 规则质量评估, 语义漂移, 逆向工具, 防御有效性