ag2020sa/cti-ai-trust-gateway

GitHub: ag2020sa/cti-ai-trust-gateway

面向AI生成网络威胁情报的本地验证网关,通过证据溯源、STIX校验和策略引擎拦截篡改、虚构和夸大声明,仅导出经审核批准的结构化情报。

Stars: 0 | Forks: 0

# CTI AI Trust Gateway [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/ag2020sa/cti-ai-trust-gateway/actions/workflows/ci.yml) ![Python 3.12 and 3.13](https://img.shields.io/badge/python-3.12%20%7C%203.13-3776AB.svg) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](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 ![显示 PASS、REVIEW、ABSTAIN、QUARANTINE 和 REJECT 的案例仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/db/dbf2cdae9530b6623b64705f7e16911698b83f69479b30d496867c44e6367658.png) ![具有策略阻止导出和来源/候选声明的被拒绝归因案例](https://static.pigsec.cn/wp-content/uploads/repos/cas/50/509f9d3c6370c6c3bfd30d4f2782352121c0a7947466e324e18900f738bf8d8a.png) ## 使用 `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 下授权。被引用的组织均未对此项目进行背书。
标签:请求拦截, 逆向工具, 零日漏洞检测