Wes974/indic
GitHub: Wes974/indic
用 Rust 编写的单二进制 CTI/OSINT 情报富化平台,支持对 13 种可观测对象从约 60 个来源并行查询并给出加权判定和关联图谱。
Stars: 1 | Forks: 0
# 指示
[](https://github.com/Wes974/indic/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.rust-lang.org)
**一个用 Rust 编写的单二进制 CTI / OSINT 富化平台。** 粘贴(几乎)
任何 observable,即可从约 60 个免费和需提供密钥的来源获取聚合的威胁情报、
一个校准后的判定、一个递归的 pivot 图,以及主动监控。
## 截图
主页面 —— 包含 13 种 observable 类型,每种都带有可点击的示例:

带有**校准判定**的域名报告 —— `github.com` 显示为**安全 (clean)**,
尽管存在托管恶意软件的信号,这得益于其交叉验证 + 流行度模型
(这些信号指向的是*托管的*内容,而非域名本身):

## 它能做什么
给它一个 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, 可视化界面, 威胁情报, 安全调查, 开发者工具, 情报富化, 网络流量审计, 误配置预防, 请求拦截, 通知系统