Igr1s-red/maltrace
GitHub: Igr1s-red/maltrace
一款面向防御者的 Rust 终端威胁狩猎、分诊与监控工具包,集成约 20 个情报服务并提供 TUI、CLI 和内置告警引擎。
Stars: 0 | Forks: 0
# maltrace
一款面向防御者的终端 **威胁狩猎、分诊与监控** 工具包
(Rust + ratatui) — 一个统一客户端,集成了约 20 个恶意软件情报、沙箱和
基础设施服务,提供 **统一的 TUI**、**完整的 CLI**、**本地文件
分析**,以及由 SQLite 支持的内置 **订阅源监控 + 告警引擎**。
## 功能
**恶意软件 / 沙箱:** VirusTotal · Hybrid Analysis · MalwareBazaar · ThreatFox ·
Malshare · Triage · Polyswarm · Malpedia · AlienVault OTX · InQuest · VirusExchange
**基础设施 / URL:** IPInfo · BGPView · Shodan · AbuseIPDB · GreyNoise ·
Whois/RDAP · URLhaus · URLScan.io
**漏洞:** NIST NVD · VulnCheck
**本地(离线):** md5/sha1/sha256 · PE imphash 与 overlay · IOC 提取 ·
YARA 扫描 (纯 Rust 编写的 `yara-x`)
**交叉分析:** 跨服务哈希关联 · LLM 富化
(Claude / OpenAI / Gemini / Ollama) · Android (adb) 分诊 · 文本/JSON/CSV/HTML/Markdown 输出
**监控 (`mon`):** 多源订阅源 (RSS/Atom · JSON API + JSONPath · 网站 ·
Tor `.onion`) · 带严重程度的关键词匹配 · 去重告警 · IOC
提取 + 出现历史记录 · 通过相同提供商排队的富化 ·
webhook/Discord/电子邮件通知 · 调度器 + 监控 daemon · SQLite 持久化
## 安装 / 构建
需要最新的稳定版 Rust 工具链(内置 SQLite;无需系统库)。
```
cargo build --release
# 位于 target/release/maltrace 的二进制文件
```
## 快速开始
```
maltrace init # scaffold a blank ~/.malwapi.conf (owner-only)
maltrace keys # show which API keys are configured
maltrace # launch the unified TUI
maltrace vt # one-off CLI lookup
```
## 配置
API 密钥保存在 `~/.malwapi.conf`(Windows: `%USERPROFILE%\.malwapi.conf`)中,这是一个
创建权限为 `0600` 的 INI 文件。每个密钥都是可选的 — 只有当*其对应的*密钥
缺失时,该功能才会报错,而无密钥服务即可开箱即用。监控数据和设置
保存在 `/maltrace/maltrace.db` 处的一个独立 SQLite 数据库中(权限同样
为 `0600`)。
```
[VIRUSTOTAL]
VTAPI = ...
[SHODAN]
SHODANAPI = ...
[LLM]
PROVIDER = claude ; claude | openai | gemini | ollama
CLAUDE_API_KEY = ...
OLLAMA_URL = http://localhost:11434
```
部分支持的服务:VIRUSTOTAL, HYBRID-ANALYSIS, MALSHARE, POLYSWARM, ALIENVAULT, MALPEDIA,
TRIAGE, INQUEST, VIRUSEXCHANGE, IPINFO, BAZAAR, THREATFOX, VULNCHECK, URLHAUS,
SHODAN, ABUSEIPDB, GREYNOISE, URLSCANIO, LLM。
## 统一的 TUI
```
maltrace # or: maltrace tui / maltrace mon tui
```
一个集成了标签栏的应用,贯穿 **Hunt**(交互式分诊)和监控
屏幕 — **Dashboard, Feeds, Keywords, Alerts, Articles, Indicators, Queue, Tags,
Providers, Notifications**。分诊查询和监控操作在后台
任务中运行,因此 UI 永远不会阻塞。
**全局**
| 按键 | 操作 |
|-----|--------|
| `1`–`9`,`0` · `[` `]` | 跳转到 / 循环切换屏幕 |
| `:` · `Ctrl+P` | 命令面板(模糊搜索) |
| `/` | 过滤当前列表 |
| `R` | 运行完整的监控周期 |
| `t` · `?` · `q`/`Ctrl+C` | 切换主题 · 帮助 · 退出 |
**Hunt 屏幕** — 输入一个指示器;它会并发地在支持该类型的
每个服务中展开查询,并提供判定摘要和优先标红恶意结果的
颜色编码。
| 按键 | 操作 |
|-----|--------|
| `Tab`/`i` | 聚焦查询框(`Esc` 离开) |
| `Enter` · `o` | 查询所有支持的服务 · 仅查询选定的服务 |
| `r` · `y` · `p` · `f` | 原始 JSON · 复制 · 转向已找到的 IOC · URLhaus 订阅源 |
| `↑/↓` `j/k` · `PgUp/PgDn` | 选择服务 / 历史记录 · 滚动结果 |
**监控屏幕**
| 按键 | 操作 |
|-----|--------|
| `j/k` `↑/↓` | 移动选择 |
| `a` · `e` · `d` | 添加 · 编辑(就地)· 删除 |
| `space` | 切换启用状态(订阅源/提供商/关键词)· 批量选择(告警) |
| `D` · `m` | 删除批量选择的告警 · 标记为已读 |
| `Enter` | 打开阅读器/详情 · 发送测试(Notifications) |
| `f` · `F` · `e` | 获取订阅源 · 获取全部 · 富化(Indicators/Providers/Queue) |
添加/编辑表单、文章/告警/指示器阅读器和命令面板是
模态覆盖层;`Esc` 可关闭它们。TUI 是一个查看器兼带快速编辑 — 耗时的
获取/富化/运行任务会在后台派发并带有加载动画。
## CLI — 分诊
```
maltrace doctor # test each configured key with one live call
maltrace vt # VirusTotal (ip/domain/url via --op)
maltrace ip 8.8.8.8 # fan out across all IP-intel providers
maltrace whois example.com # RDAP (keyless)
maltrace nist CVE-2021-44228 # NIST NVD (keyless)
maltrace hash ./sample.bin # md5/sha1/sha256 (+ imphash if PE)
maltrace extract ./report.txt # pull IOCs from a file …
maltrace extract https://x/y # … or a fetched URL (SSRF-guarded, size-capped)
maltrace yara ./sample --rules rules.yar
maltrace correlate # query every hash-capable service at once
maltrace enrich # LLM threat assessment
maltrace submit ./f --service vt # explicit upload (never automatic)
maltrace download --service bazaar --dest ./samples
maltrace android packages --third-party
maltrace completions zsh > _maltrace
maltrace interactive # line-based REPL
```
也接受紧凑的单字母标志,并会被重写为现代形式
(例如 `maltrace -b ` → `bazaar`,`maltrace -ip 8.8.8.8` → `ip`)。
全局标志:`--json`, `--csv`, `--html`, `--markdown`, `--proxy `,
`--config `, `--timeout `, `--quiet`, `--verbose`, `--no-cache`,
`--refresh`, `--cache-ttl `, `--audit `(将每次查询+结果附加为
JSONL)。响应缓存在平台缓存目录下,并带有 TTL(默认为 1 小时)。
## CLI — 监控 (`mon`)
maltrace 可以作为订阅源监控器运行:轮询源、匹配关键词、引发
去重的告警、提取并富化 IOC,以及发送通知 — 所有这些都持久化在 SQLite 中。
```
# 来源:RSS/Atom、JSON API(+ JSONPath 模板)、网站抓取、Tor onion
maltrace mon feed-add "BleepingComputer" https://www.bleepingcomputer.com/feed/ --kind rss
maltrace mon feed-add "Ransomfeed" https://api.ransomfeed.it/v1/posts --kind api --template 1
maltrace mon templates # built-in JSONPath templates
maltrace mon keyword-add ransomware --criticality critical # text or --regex
# Enrichment 复用 maltrace 自身的 providers(默认开启 keyless;keyed 为可选启用)
maltrace mon providers
maltrace mon provider-enable VirusTotal
# 通知(webhook / Discord / 电子邮件;SMTP 密码来自环境变量)
maltrace mon notify-add-discord https://discord.com/api/webhooks/... --min high
maltrace mon run # one cycle over all feeds
maltrace mon watch --tick 30 --retention-days 30 # continuous daemon
maltrace mon report --out report.md # export a Markdown report
maltrace mon tui # browse it in the TUI
```
流水线(`获取 → 关键词/告警 → IOC 提取 → 富化 → 通知`)复用了
分诊技术栈:共享的 `HttpClient`(SSRF 防护、重试、主体大小限制)、
`intel::iocs` 提取器,以及所有约 20 个提供商作为富化后端。
## 报告与输出
任何命令都可以使用 `--json`, `--csv`, `--html` 或 `--markdown`。`--html` 会生成一个
独立的暗色主题文档(可在浏览器中打印为 PDF):
```
maltrace correlate --html > report.html
maltrace vt --markdown
```
## 主题
TUI 使用 [opaline](https://github.com/hyperb1iss/opaline) 引擎进行主题化
(Catppuccin, Nord, Dracula, Tokyo Night, Gruvbox, Solarized, …)。按下 `t` 可在运行时循环切换
主题。
## 安全态势
- 在每个出站 URL 上都有 **SSRF 防护**:拒绝字面量的私有/回环/链路本地/ULA/
CGNAT 以及 IPv4 映射的 IPv6 地址,并在请求前解析命名主机并
验证其地址。
- **大小受限的** 响应主体(样本和获取的页面)以限制内存占用。
- **密钥清理:** 配置/缓存/审计/DB 文件创建时仅为所有者可读写(`0600`);
API 密钥尽可能放入标头中,且必须存在于 URL 中的密钥会
在错误输出中进行脱敏处理。SMTP 密码从环境变量中读取,从不存储。
- **选择性出站:** 外部富化提供商默认禁用;LLM
富化在将指示器发送给第三方之前会发出警告。
- 仅使用 rustls 提供 TLS;不使用 `unsafe`;所有 SQL 均已参数化。
## 架构
```
src/
cli/ clap subcommands (triage + `mon`) + compact-flag rewriter
config parse ~/.malwapi.conf
http shared reqwest client: retry/backoff, 429 handling, SSRF guard, body caps
model QueryKind detection + normalized Report + verdict
providers one module per service; Provider trait; make()/CATALOG registry
intel hashing, pe (imphash/overlay), iocs, yara, correlate
llm provider-dispatched enrichment (claude/openai/gemini/ollama)
feed monitoring fetchers: api (JSONPath), rss/atom, website, onion
monitor keyword engine, alert pipeline, enrichment outbox, scheduler, notify
store SQLite persistence (feeds, alerts, indicators, jobs, …)
output text / json / csv / html / markdown rendering
tui unified ratatui app (Hunt + monitoring screens) + opaline theming
```
每个提供商都会返回一个规范化的 `Report`(人类可读字段 + 原始 JSON),因此
CLI、TUI、监控和报告导出都共享同一个模型。
## 测试
```
cargo test # unit + wiremock HTTP + assert_cmd CLI + TUI render tests
cargo clippy --all-targets
```
## 致谢
主题由 [opaline](https://github.com/hyperb1iss/opaline) 提供;TUI 使用
[ratatui](https://github.com/ratatui/ratatui) 构建。
标签:DAST, IOC提取, Rust, YARA, 云资产可视化, 可视化界面, 威胁情报, 安全工具, 安全运营, 开发者工具, 恶意软件分析, 扫描框架, 终端UI工具, 网络流量审计, 通知系统