Wes974/indic

GitHub: Wes974/indic

用 Rust 编写的单二进制 CTI/OSINT 情报富化平台,支持对 13 种可观测对象从约 60 个来源并行查询并给出加权判定和关联图谱。

Stars: 1 | Forks: 0

# 指示 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/Wes974/indic/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Rust](https://img.shields.io/badge/rust-2024-orange.svg?logo=rust)](https://www.rust-lang.org) **一个用 Rust 编写的单二进制 CTI / OSINT 富化平台。** 粘贴(几乎) 任何 observable,即可从约 60 个免费和需提供密钥的来源获取聚合的威胁情报、 一个校准后的判定、一个递归的 pivot 图,以及主动监控。 ## 截图 主页面 —— 包含 13 种 observable 类型,每种都带有可点击的示例: ![indic 主页面](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/999c75982751452f5c81ec7a792821ecef91ba671f98582391354dcf18893faa.png) 带有**校准判定**的域名报告 —— `github.com` 显示为**安全 (clean)**, 尽管存在托管恶意软件的信号,这得益于其交叉验证 + 流行度模型 (这些信号指向的是*托管的*内容,而非域名本身): ![github.com 的 indic 报告](https://static.pigsec.cn/wp-content/uploads/repos/cas/e7/e7d8a8d88020c07cfed5ea747f2aadbebeb72a1616804be53521e7cf3c0d8e79.png) ## 它能做什么 给它一个 observable —— indic 会检测其类型,并行地向每个相关来源 发送请求,进行去重、缓存,并返回一份统一的报告。 **13 种 observable 类型**:`ip`、`cidr`、`domain`、`url`、`email`、`hash`、`cve`、 `asn`、`crypto` (BTC/ETH + tx)、`username`、`phone`、`.onion`、`package` (`pkg:pypi/requests` → OSV)。 **亮点** - **约 60 个 enricher** —— geo/ASN,VPN/proxy/Tor/relay 归属(类似 spur.us), 威胁反馈,blocklist,RDAP/DNS/CT,passive DNS,sandbox/AV,泄露/paste, 加密货币制裁等。需要密钥的来源仅在其密钥存在时才会激活。 - **加权判定** —— 基于交叉验证的评分(需要多个独立的来源)+ 流行度先验 (精选列表 + Majestic top-100k + 保留域名),因此*托管*恶意软件的合法平台 不会被标记为恶意。 - **递归 pivot 图** —— 力导向画布,在 domain ↔ IP ↔ ASN ↔ CVE ↔ 加密地址等 之间点击展开。 - 针对 CVE 的**公开 PoC 查找**(离线索引),以及完整的 CVE 数据 (NVD / EPSS / OSV / CISA KEV)。 - **主动 veille** —— 定时监控器(CISA KEV、paste 关键词、Apple 安全公告),在发现*新*内容时通过 Pushover 发送警报。 - **可选的 MISP / OpenCTI 推送** —— 将精选/交叉验证的 IOC 发送到下游。 - **Offline-first 数据集** —— IP-to-ASN,PeeringDB,云服务 IP 范围,VPN 提供商 IP 范围,blocklist,GeoLite2,按计划自动刷新。 ## 快速开始 ``` # 1. 配置 — 复制 template 并填入你拥有的 keys(全部可选)。 cp .env.example .env # 2a. 使用 Docker 运行(推荐) docker compose up -d --build # 2b. …或者原生构建并运行 cargo build --release && ./target/release/indic serve ``` 首次启动会下载离线数据集,然后在 `127.0.0.1:8080` 上提供服务。 请将其放置在你自己的反向代理 / 隧道(Cloudflare、Caddy、nginx…)之后。 ``` # CLI 一次性查询(无 server) cargo run --release -- lookup 8.8.8.8 ``` ### Endpoints | Route | 用途 | |---|---| | `GET /` | Web UI(深色/浅色,pivot 图,页面示例) | | `GET /lookup?q=` | 富化任何 observable | | `GET /healthz` | 存活检测 | | `GET /metrics` | 各来源计数器(受权限控制) | | `GET /settings` | 密钥存在状态(受权限控制,绝不返回具体值) | | `POST /push?q=` | 富化后推送到 MISP/OpenCTI(受权限控制) | 需要密钥的 enricher 需要通过 `?token=`、`x-indic-token` header 或 `indic_token` cookie 提供令牌(`INDIC_TOKEN`)。如果未配置令牌且存在付费密钥,服务将默认关闭以保护你的配额。 ## 配置 一切都由环境变量驱动 —— 请参阅 [`.env.example`](.env.example) 获取受支持的 API 密钥(均为可选)和 feed 覆盖的完整列表。任何密钥都不是必需的;每个来源只需在设置了密钥后就会自动激活。 主动 veille 是可选的:设置 `INDIC_VEILLE_ENABLED=1` 以及 Pushover 的 `PUSHOVER_TOKEN` / `PUSHOVER_USER` 即可接收警报。 ## 架构 ``` observable.rs type detection enrich.rs parallel dispatch + TTL cache + per-source/global rate limits enrich/*.rs one module per source store.rs offline datasets (hot-swappable via arc-swap) ranges.rs O(log n) CIDR membership over sorted u32 intervals verdict.rs corroboration + popularity → calibrated verdict veille.rs scheduled watchers → Pushover push.rs MISP + OpenCTI push api.rs axum HTTP + embedded web UI (web/index.html via include_str!) ``` 单一的 distroless 镜像,不包含 OpenSSL(基于 rustls 的 reqwest)。支持为 `arm64`/`amd64` 构建。 ## 免责声明 indic 是一个用于**防御性**安全、威胁情报以及对**已授权**资产进行 OSINT 调查的个人工具。聚合的来源拥有它们各自的服务条款、许可证和速率限制 —— 请尊重它们并使用你自己的 API 密钥。某些功能(例如跨站点枚举 username)可能会被滥用;请在法律允许的范围内负责任地使用。本工具**按“原样”提供,不提供任何保证**。 ## 许可证 MIT —— 请参阅 [`LICENSE`](LICENSE)。
标签:Rust, 可视化界面, 威胁情报, 安全调查, 开发者工具, 情报富化, 网络流量审计, 误配置预防, 请求拦截, 通知系统