ag2020sa/cti-ai-trust-gateway
GitHub: ag2020sa/cti-ai-trust-gateway
面向AI生成网络威胁情报的本地验证网关,通过证据溯源、STIX校验和策略引擎拦截篡改、虚构和夸大声明,仅导出经审核批准的结构化情报。
Stars: 0 | Forks: 0
# CTI AI Trust Gateway
[](https://github.com/ag2020sa/cti-ai-trust-gateway/actions/workflows/ci.yml)

[](LICENSE)
**研究 MVP / Beta (`0.1.0b1`) — 仅限本地评估,未达到生产就绪状态。**
代码库:[github.com/ag2020sa/cti-ai-trust-gateway](https://github.com/ag2020sa/cti-ai-trust-gateway)
AI 提取功能可以将报告转换为精美的 STIX,但同时可能会悄无声息地篡改 IP,虚构一个
攻击者,夸大置信度,或者将同一页面上的两个名称视为已证实的关系。
这个本地优先的 gateway 位于该生产者与 OpenCTI、MISP、SIEM 或 EDR 之间。它会将
候选声明绑定到提供的来源,应用透明的策略,在证据不足时询问分析师,
并且仅导出已批准的对象。
例如,一份报告指出 CVE-2026-1234 有可能被利用,攻击者未知,并且
观察到的 IP 是 `203.0.113.53`。一个 AI bundle 声称 APT28 以 95 的置信度从 `203.0.113.58` 利用了它。该 gateway 会传递精确的 CVE 提及,
根据正确的来源值拒绝发生单数字篡改的 IP,拒绝虚构的归因和关系,
标记置信度膨胀,并将被拒绝的 STIX 排除在导出之外。
## 功能
- 安全地提取 TXT、Markdown 和 PDF 文本,对原始字节进行哈希处理,保留页面和偏移量,
检测阿拉伯语/英语/混合文本,并扫描隐藏或类似指令的内容。
- 验证支持的 STIX 2.1 对象、标识符、时间戳、模式、别名、必填字段、
重复对象和悬空关系。
- 将 STIX 转换为原子 observable、漏洞、ATT&CK、实体、置信度和关系
声明,然后附加精确或带标签的实体证据跨度。
- 应用易于理解的 YAML 策略,返回 PASS、REVIEW、REJECT、QUARANTINE 或 ABSTAIN。
- 提供响应式、无依赖的分析师 UI 和版本化 API;将符合条件的接受/拒绝
决定记录在哈希链审计历史中,并拒绝绕过重新分析的就地编辑。
- 导出已验证的 STIX 以及 `findings.json`、`evidence-manifest.json` 和 `audit.json`。
它不是威胁平台、数据馈送、聊天机器人、拦截系统、分析师的替代品、合规
认证、完美的提示注入检测器或模型训练项目。判决结果意味着
“已针对此提供的来源进行了验证”,绝不代表“普遍真理”。
## 保障边界
- **确定性验证:** 确切的 observable 值、STIX 结构、标识符、固定的
schema 执行、引用和显式矛盾均可在本地进行检查。
- **语义验证:** 关系含义、归因、时间解释和
不确定性通常仍保持为 REVIEW 或 ABSTAIN,除非可选的验证器返回了引用的支持。
- **来源验证:** PASS 意味着针对提供的来源执行并通过了所有强制性检查;
它并不确立全局的真实性或时效性。
- **人工审查:** REVIEW/ABSTAIN 导出需要明确的合格对象决定,并保留
原始判决结果、理由、时间戳和由此产生的审查状态。在此未经过身份验证的 MVP 中,REJECT 和 QUARANTINE
无法被接受。
- **安全启发式方法:** 提示注入和隐藏的 PDF 发现是可解释的指标,而非
完整的防御。生产环境仍需要身份验证和沙盒解析器服务。
## 架构
```
flowchart LR
A[Untrusted source] --> B[Safe parser and security scanner]
C[AI candidate STIX] --> D[STIX validation and atomic claims]
B --> E[Evidence binding]
D --> E
E --> F{Optional semantic verifier}
F --> G[YAML policy]
G --> H[Analyst review and hash-chained audit]
H --> I[Approved STIX and evidence manifest]
```
默认的语义提供者是确定性的,从不使用网络。确切的 IOC 可以通过。
实体提及并不证明归因,共现绝不代表存在关系。
可选的 OpenAI 兼容提供者处于禁用状态,除非操作员明确设置了所有必需的
环境变量;故障时会安全地投弃权票(ABSTAIN)。请参阅[架构](docs/architecture.md)、
[证据模型](docs/evidence-model.md)和[策略引擎](docs/policy-engine.md)。
gateway 调用 `stix2-validator`,并使用固定在提交 `c4f8d589acf2bdb3783655c89e0ffb6e150006ae` 的内置离线 OASIS STIX 2.1 schema 树。
它验证聚合 schema 摘要,并在每个清单中记录
验证器版本、schema 来源/版本/哈希、状态和错误。缺失、
修改、跳过或失败的强制验证无法产生 PASS。显式的
`CTI_GATEWAY_STIX_SCHEMA_DIR` 覆盖会被记录为操作员提供的。正常的分析从不
下载 schema。请参阅 `src/cti_trust_gateway/data/stix2.1/PROVENANCE.md`。
## 分析师 UI


## 使用 `uv` 快速开始
Python 3.12 和 3.13 已在 CI 中声明并验证。Python 3.13 也在本地验证过。
```
uv venv --python 3.12
uv pip install -e ".[dev]"
uv run cti-trust demo
uv run uvicorn cti_trust_gateway.api.app:app --host 127.0.0.1 --port 8000
```
打开 。该 UI 专为本地/演示设计,没有身份验证。
## 使用标准 venv 和 pip 快速开始
```
python3.12 -m venv .venv
# Linux/macOS: source .venv/bin/activate
# Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
cti-trust demo
python -m uvicorn cti_trust_gateway.api.app:app --host 127.0.0.1 --port 8000
```
## Docker 快速开始
```
docker compose up --build
```
发布的端口绑定到 `127.0.0.1`。该容器会丢弃权限,并且仅持久化
本地 SQLite 运行时卷。Dockerfile 和 Compose 配置已经过静态审查,
并且镜像构建和实时健康检查已在 CI 中验证。
## CLI
```
cti-trust verify report.pdf candidate.json
cti-trust verify report.txt candidate.json --policy policies/default.yml
cti-trust show CASE_ID
cti-trust export CASE_ID --format stix
cti-trust demo
```
`verify` 打印最终判决结果、发现计数、不支持的声明计数、证据覆盖率以及
被忽略的 `data/runtime/exports` 目录下的绝对工件路径。
## API
```
curl -s http://127.0.0.1:8000/health
curl -s -X POST http://127.0.0.1:8000/api/v1/cases \
-F source=@report.txt \
-F candidate=@candidate.json \
-F tlp=TLP:CLEAR
curl -s http://127.0.0.1:8000/api/v1/cases/CASE_ID/manifest
curl -s http://127.0.0.1:8000/api/v1/cases/CASE_ID/export/stix
```
审查操作接受 JSON,例如下面的拒绝决定。`accept` 需要一个对象 ID 和
非空的理由,并仅限于符合条件的 REVIEW/ABSTAIN 对象。`edit` 被故意
拒绝:硬性发现需要更正后的候选对象和完整的重新分析。
```
{"finding_id":"finding--...","object_id":"indicator--...","action":"reject","comment":"Attribution is unsupported"}
```
## 演示场景
`cti-trust demo` 创建了五个可重现的本地案例:
- PASS — 精确的恶意 IP 和 CVE 证据。
- REJECT — 上述的错误归因场景。
- QUARANTINE — 一个明显的关键提示注入短语。
- ABSTAIN — 实体共现,但关系没有语义证明。
- REVIEW — 阿拉伯语/英语归因上下文需要人工核对。
错误归因导出省略了被篡改的 IP、虚构的攻击者和关系。详细的演练
请参见 [docs/demo-walkthrough.md](docs/demo-walkthrough.md)。
## 阿拉伯语证据
阿拉伯语和混合证据保留了其原始字符和偏移量。搜索规范化绝不会
改变导出的证据:
```
الجهة المسؤولة غير معروفة. لوحظ العنوان الخبيث 198.51.100.77.
```
Web 界面对每个证据块使用自动方向,并对阿拉伯语文档使用从右到左的布局。
## 策略示例
```
- id: reject-corrupted-ioc
when: {rule_id: EVIDENCE-IOC-002}
verdict: REJECT
reason: An observable differs from the exact value in the source.
```
策略响应记录了每个触发的规则、其原因以及审查发现 ID。策略判决
优先级依次为 QUARANTINE、REJECT、REVIEW、ABSTAIN、PASS。
## 证据清单示例
```
{
"schema_version": "1.0",
"case_id": "case--...",
"source_sha256": "...",
"candidate_sha256": "...",
"verdict": "REJECT",
"validation": {
"name": "cti-stix-validator",
"version": "3.3.1",
"schema_version": "c4f8d589acf2bdb3783655c89e0ffb6e150006ae",
"schema_sha256": "43c2bf45bbaeeb44e5852553abffdebeaaa1584111d92d8a8d3a3101d8bd220f",
"status": "EXECUTED",
"errors": []
},
"evidence_coverage": 0.4,
"claims": [{"statement": "The source contains ipv4-addr 203.0.113.58.", "status": "NOT_FOUND"}],
"disclaimer": "Verified only against the supplied source document."
}
```
## 合成基准测试与许可
运行 `python scripts/build_synthetic_benchmark.py` 以重现十个原始的英语、阿拉伯语和
混合报告以及 100 个带种子的突变。清单说明了来源、Apache-2.0 许可、
突变类别、预期判决结果和预期发现类别。注册表仅存储链接
和元数据;不复制任何专有或公共机构的报告。
运行 `python scripts/run_synthetic_benchmark.py` 以执行所有突变,并在出现任何判决或
发现类别不匹配时报错。
## 验证状态
发布候选版本目前包含 122 个本地测试(包括独立对抗目录下的 87 个测试),在发布候选运行中获得了 87.82% 的分支感知覆盖率,
在 Python 3.13 上的 100 个突变基准测试达到零不匹配,并通过了 Ruff、mypy 和 Bandit 检查。
确切的发布候选总数在 `RELEASE_READINESS.md` 中重现。强制性的
Python 3.12、Python 3.13、打包以及 Docker 构建/健康检查作业已在 GitHub Actions 中验证。
MITRE ATT&CK 标识符在使用时带有归因且无背书。CTIBench 未被内置(vendored),
因为其许可为 CC BY-NC-SA;请在单独评估时遵循其许可。请参阅
[数据策略](docs/data-strategy.md)和[第三方声明](THIRD_PARTY_NOTICES.md)。
## 安全限制
请勿公开暴露此 MVP。生产环境需要身份验证、授权、恶意软件
扫描、沙盒解析器 worker、速率限制、安全对象存储、CSRF 防护、加密
存储、签名审计保留、监控以及受控的模型出口。请参阅 [SECURITY.md](SECURITY.md)。
## 开发
```
make format
make lint
make typecheck
make test
make coverage
```
Windows 用户可以运行等效的 `.venv\Scripts\python.exe -m ...` 命令。贡献
必须包含确定性测试,且不得包含真实报告、上传内容、机密、数据库
或导出数据。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 路线图
- 对分析师进行身份验证并添加基于角色的审查队列。
- 在资源受限的 worker 中隔离 PDF 解析,并添加恶意软件扫描。
- 添加已签名、仅追加的外部审计存储和组织策略包。
- 通过显式的批准队列和幂等适配器集成 OpenCTI/MISP。
- 添加 ATT&CK 目录锁定、更丰富的双语矛盾检查以及针对
单独授权基准测试的校准语义提供者评估。
在 Apache-2.0 下授权。被引用的组织均未对此项目进行背书。
标签:请求拦截, 逆向工具, 零日漏洞检测