rangertaha/exfil

GitHub: rangertaha/exfil

Exfil 是一个基于 Rust 的离线 DevSecOps 静态分析引擎,通过插件化扫描代码、基础设施配置、依赖项和远程主机,在安全漏洞发布前将其捕获并存储到可查询的图数据库中。

Stars: 0 | Forks: 1

# Exfil ***检查文件、基础设施与库*** — 一个基于插件的静态分析 DevSecOps 引擎。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/39/39faa54be350a1dab8afd3b2fb8c1c83e4d9cff84abfef2374d19a18053687c4.svg)](https://github.com/Rangertaha/exfil/actions/workflows/ci.yml) [![文档](https://static.pigsec.cn/wp-content/uploads/repos/cas/7e/7eae97fd2ac8af944908e28d39a282e8dd49ff1f79d3c624d79fb9191f4f3bae.svg)](https://rangertaha.github.io/exfil/) [![许可证:MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) exfil 是一个离线、基于插件的 DevSecOps 引擎,可扫描您的整个交付面以查找安全问题,并将所有发现记录到一个可查询的图中——从而让您在泄露的秘密、存在漏洞的代码和高风险配置发布之前就将其捕获,且整个过程完全在您的本地机器上完成。 ``` flowchart LR T["Targets
code · config · deps
hosts · web"] --> S["Scan
walk · parse · render"] S --> M["Match
secrets · taint · IOCs
YARA · PII · supply-chain"] M --> G[("Findings graph
SurrealDB")] G --> R["Report
search · TUI · reports
HTTP · GraphQL · MCP"] ``` **扫描范围** - **代码** — 通过 tree-sitter 支持 17 种语言(危险调用 + 污点分析),外加针对任意文本的 secret/regex 规则 - **基础设施与配置** — Terraform/HCL、Dockerfiles、Kubernetes/YAML - **依赖项** — `package.json`、`requirements*.txt`、`Cargo.toml` - **压缩包与容器层** — zip/jar/war/tar/tar.gz/gz,解压后就地扫描 - **主机** — 本地文件系统、通过 SSH 连接的远程主机,以及正在运行的进程 - **Web 与网络** — 爬取的站点(包括通过 WebDriver 渲染的 JavaScript 页面)以及 TCP 服务 banner **检测目标** — 泄露的凭证、代码注入流、供应链风险(恶意及拼写错误的依赖项)、恶意软件特征(YARA · ClamAV)、IOC(恶意域名/IP/哈希值)以及 PII。扫描发现将存入一个嵌入式图数据库(或远程集群),您可以对其进行查询、在 TUI 中浏览,或通过 HTTP/GraphQL 提供服务。 📖 **完整文档:** ## 安装 exfil 是一个单一的可执行二进制文件 — 采用纯 Rust 编写,支持在 Linux、macOS 和 Windows 上运行。 ``` # 从 source checkout 安装到你的 PATH cargo install --path crates/exfil-cli # 或者直接 build 它 cargo build --release # binary at target/release/exfil ``` ## 快速开始 ``` # 扫描当前目录 (流式输出匹配项; 终端上显示进度条) exfil scan # 查询已存储的 findings exfil search # everything exfil search severity=critical # by field: rule/cwe/severity/path exfil search aws # free text against rule names # 打开 live TUI (mutt 风格的 index + pager) exfil tui # 查看单条记录,列出 rules,进行清理 exfil get file: exfil rules exfil clean ``` 示例扫描输出(严重程度在终端中通过颜色区分): ``` ./.env:1:26 CRIT [aws-access-key-id] export AWS_ACCESS_KEY_ID=AKIA0123456789ABCDEF ./src/config.toml:1:7 HIGH [password-in-url] db = "postgres://admin:hunter2@db.internal/prod" scanned 3 files (0 unchanged): 2 new matches, 0 unreadable ``` ## 常用命令 | 命令 | 功能说明 | |---|---| | `exfil scan [path]` | 扫描目录树以查找 secret 和安全问题 | | `exfil scan-remote [user@]host:/path` | 通过 SSH/SFTP 扫描远程主机 | | `exfil search [query]` | 查询已存储的扫描发现(按字段或自由文本) | | `exfil analyze` | 生成图报告 (`--format text\|json\|markdown`) | | `exfil tui` | 打开 mutt 风格的 TUI 进行实时扫描和浏览 | | `exfil pull [ref]` | 将规则/IOC 数据集下载到目录中 | | `exfil rules` | 显示扫描将应用的规则 | | `exfil clean` | 删除扫描发现存储(保留已下载的数据集) | [完整命令参考](https://rangertaha.github.io/exfil/guide/commands.html) 涵盖了远程、进程、网络、关联和 MCP 命令。运行 `exfil --help` 可查看特定命令的标志。 ## 配置 首次运行时会在用户配置目录(例如 `~/.config/exfil/config.toml`)中写入默认的 TOML 配置;`exfil config` 会显示解析出的路径及其内容。每个插件都有自己的 `[plugins.]` 表: ``` store = ".exfil" [plugins.regex] datasets = [] # empty = built-in security ruleset [plugins.ast] languages = ["go", "python", "javascript", "rust"] ``` 扫描发现存储(默认为 `.exfil/`,可通过 `--store` 覆盖)是当前扫描项目本地的,可通过 `exfil clean` 删除;下载的数据集位于配置目录中,且在清理后依然保留。详情请参阅 [配置指南](https://rangertaha.github.io/exfil/guide/configuration.html) 。 ## 文档 完整文档位于 ****: - [exfil 分析内容](https://rangertaha.github.io/exfil/guide/surfaces.html) 以及完整的[功能列表](https://rangertaha.github.io/exfil/guide/features.html) - [命令参考](https://rangertaha.github.io/exfil/guide/commands.html)、 [TUI 快捷键](https://rangertaha.github.io/exfil/guide/tui.html) 以及 [配置](https://rangertaha.github.io/exfil/guide/configuration.html) - [架构指南](https://rangertaha.github.io/exfil/architecture/) — 包含多页内容的详细介绍,讲解了 exfil 的构建方式,专为 Rust 初学者编写 这些文档使用 [mdBook](https://rust-lang.github.io/mdBook/) 和 [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid)(用于绘制图表)构建, 源文件位于 [`docs/`](docs/)。要在本地预览: ``` mdbook-mermaid install docs # vendor the mermaid assets once mdbook serve docs ``` ## 开发 ``` cargo test --workspace # run all tests cargo fmt --all && cargo clippy --workspace --all-targets # lint cargo llvm-cov --workspace # coverage report ``` 代码中刻意包含了大量文档 — 每个 crate 的文档都包含 *Rust 笔记*,解释了其所使用的语言惯用法,旨在帮助 Rust 初学者。 ## 许可证 [MIT](LICENSE)
标签:DevSecOps工具, 可视化界面, 基础设施即代码扫描, 安全专业人员, 机密检测, 通知系统, 错误基检测, 静态代码分析