v3.8 · AI 辅助分析扫描结果已上线

深度剖析每一份 IoT 固件,在它被攻破之前

IFDA 是一套自动化的 IoT 固件逆向与漏洞发现工具:多架构反汇编、CVE 关联、污点可达性分析、 跨二进制调用链追踪,外加可选的 AI 辅助分析——全部自托管,数据不出本地。

仅限用于你拥有或已获授权评估的固件。防御性/授权安全研究用途。
ifda — zsh
# 分析一个已解包的固件根目录
$ python3 -m ifda.cli analyze ./rootfs \
    --json report.json --sbom sbom.json --progress

@@IFDA@@{"stage":"disassemble","pct":18,...}
@@IFDA@@{"stage":"cve-scan","pct":64,...}
@@IFDA@@{"stage":"done","pct":100,"detail":"37 findings"}

# 摘出一条高危发现
{
  "title": "Hardcoded credential reachable from telnetd",
  "severity": "critical", "confidence": 0.8,
  "vuln_class": "command_injection",
  "cve_ids": ["CVE-2016-5195"],
  "evidence": [{ "binary": "/usr/sbin/telnetd", "function": "handle_login" }]
}
6
CPU 架构
9+
漏洞类别
3
报告格式
100%
自托管运行
适用人群

为谁而做

不只是安全团队——任何需要静态审计一份 IoT 固件的人都用得上。

01

IoT 安全研究者

批量分析厂商固件,定位可复用的漏洞类别与后门。

02

渗透测试 / 红队

在没有设备物理接入的情况下,先用静态分析圈定攻击面。

03

厂商安全 / QA

发布前自查:硬编码凭据、弱鉴权、危险函数、过期组件。

04

学习者 / CTF 玩家

读得到伪代码、taint 路径、调用图——把黑盒过程变成可学习的证据链。

为什么选择 IFDA

静态分析,做到有证据、可复现

每一条发现都带置信度、代码位置和污点路径——不是一个模糊的"可能有问题"。

无需真机的多架构逆向

x86/x86_64、ARM、ARM Thumb-2、AArch64、MIPS LE/BE——纯静态反汇编 + 导入调用解析,剥离符号也能恢复函数边界。

CVE 关联不靠猜

离线策展库 + cve-bin-tool(NVD/OSV/RedHat/GitLab/Curl,350+ 组件),内核版本单独用自研探测器关联,规避第三方 checker 的正则死角。

污点 + 跨二进制追踪

source → sink 可达性分析穿透调用图,并追踪 CGI/脚本调用到共享库内部的真实汇聚点,而不是止步于单个文件。

AI 辅助分诊(新)

按需对已完成的扫描结果做 AI 分析——误报过滤、跨发现关联出攻击链、修复优先级建议,支持任意 OpenAI 兼容服务商。

自托管、可离线

Go 服务层零第三方依赖(仅标准库),前端 Alpine.js 本地打包无需构建步骤——单文件部署,气隙环境也能跑。

CLI + REST API 双形态

一次性脚本化调用,或起服务用队列 + 网页看板批量跑一整批固件——同一套分析核心。

核心能力

从反汇编到报告,一条流水线

按能力分类浏览——每一项都能在需求文档里追溯到对应的 FR 编号。

RE

多架构反汇编

基于 capstone,x86/x86_64/ARM/Thumb-2/AArch64/MIPS,不依赖目标主机架构。

FR-RE-1
RE

调用图与函数边界

符号优先 + 剥离符号后的直接调用/函数序言恢复兜底,ARM/Thumb 自动判别。

FR-RE-3
RE

导入调用解析

x86 PLT、ARM/AArch64 PLT、MIPS GOT + jalr $t9 全覆盖,含 PIC 场景。

FR-RE-1
RE

加固检测

NX / Stack Canary / RELRO / PIE / FORTIFY 逐项识别,评估利用难度。

FR-RE-5
RE

交叉引用

调用点、字符串引用双向索引,定位"谁调用了这个危险函数"秒级完成。

FR-RE-6
RE

Ghidra 反编译(可选)

headless 模式产出伪代码,直接挂到对应 finding 上,不用来回切工具。

FR-RE-2
VUL

CVE 关联

离线库 + cve-bin-tool 双引擎,内核版本单独精确关联(Dirty COW / Dirty Pipe 等)。

FR-VUL-1
VUL

危险函数检测

strcpy/system/sprintf 等经典危险调用一次扫全。

FR-VUL-2
VUL

污点可达性

source(getenv/recv 等) → sink 调用图可达性,标出候选路径供人工复核。

FR-VUL-3
VUL

9+ 漏洞类别

缓冲区溢出、命令注入、代码注入、文件包含、反序列化、格式化字符串、弱加密、路径遍历、鉴权逻辑弱点。

FR-VUL-4
VUL

跨二进制分析

全局调用图串联 CGI → 共享库,发现单文件视角看不到的攻击链。

FR-VUL-5
VUL

优先级 + 分诊留存

按严重度/置信度排序;分诊状态按指纹持久化,重扫不丢历史决策。

FR-VUL-7/8
INV

嵌入式密钥/凭据

私钥、哈希、硬编码账号密码/令牌 + 高熵兜底,可外置规则库(YARA 可选)。

FR-INV-4
INV

网络服务识别

WEB/SSH/FTP/Telnet/SOAP/DNS/SNMP/UPnP/WiFi 管理守护进程,版本只认内嵌 banner,端口按配置/inetd/启动参数/默认值推断。

FR-INV
INV

BusyBox 应用套件审计

已编译 vs 参考列表比对、bin/sbin 额外可执行文件、init.d 脚本全量转储。

FR-INV
INV

证书检测

逐证书判定 RSA/非 RSA,支持证书链/bundle,基于 cryptography 库而非猜测式 PEM 头匹配。

FR-INV
INV

配置文件分类 + 加固审计

按扩展名/路径/UCI/内容嗅探分类,内容层面检查 telnet、匿名 FTP、调试模式、默认 SNMP 团体字、TLS 校验关闭等。

FR-INV
INV

完整文件清单

不止 ELF 和识别出的脚本——目标下的每一个文件都在清单里,确认扫描没有遗漏角落。

FR-INV
REP

JSON / Markdown / SBOM

结构化 JSON 作为集成契约,Markdown 摘要给人看,CycloneDX SBOM 直接喂 Dependency-Track。

FR-REP-1/2
REP

REST API + 队列

批量提交、并发 worker、按内容去重缓存,SSE 推送进度,不用轮询。

FR-INT-1
REP

Web 看板

Alpine.js 单页应用:发现筛选、分诊、对比扫描、7 套主题、双语界面。

FR-INT-1
REP

对比扫描

两次扫描结果 diff——新增/消失的字符串、敏感信息、发现,一眼看出补丁效果。

FR-INT
REP

登录鉴权

PBKDF2 密码哈希 + 按账号锁定 + 登录验证码,标准库手写实现,零额外依赖。

NFR-SEC
REP

SQLite 持久化

发现/二进制/脚本/组件全部落库分页,大规模扫描(3000+ 发现)不再撑爆浏览器标签页。

FR-INT
v3.8 新特性

AI 分析扫描结果

在规则引擎产出的发现之上,加一层可选的 AI 辅助分析——不是重新扫描固件,只是帮你更快看懂已有结果。

  • 按需触发,不产生意外成本报告详情页一个按钮,自己选服务商和时机——不会每次扫描都自动调用外部 API。
  • 任意 OpenAI 兼容服务商自定义 Host URL——自建网关(one-api / newapi / vLLM / Ollama)或云端服务商都行,支持同时配置多个。
  • 模型下拉选,不用手打填完 Host + Key,拉一次 /models 接口,列表里选,拉取失败前无法保存——从根上杜绝模型名手误。
  • Key 加密落盘AES-256-GCM + 本地随机密钥文件,标准库实现;接口响应里永远只看得到末 4 位。
  • 对 prompt 注入有防备固件里提取出的文本(描述/伪代码)被明确当作"证据数据"喂给模型,而非指令;输出只以纯文本渲染,绝不解析成 HTML。
系统:已加载 13 条 findings(3 严重 / 5 高危),开始分析…
发现 #4(硬编码凭据,telnetd)与 #9(该凭据可从 web 后台的鉴权逻辑弱点触达)可以拼成一条完整攻击链: 未授权访问 web 面板 → 绕过弱 strcmp 鉴权 → 拿到 telnetd 硬编码口令 → 设备完全沦陷。 建议优先修复 #9 的鉴权逻辑,其次轮换 #4 的凭据。
已覆盖 13/13 条 findings · 模型:fake-gpt-mini · 用时 4.2s
架构

Python 分析核心 + Go 服务层

核心是一个可独立调用的库/CLI;Go 服务层负责编排、队列与 Web 界面,两者以 JSON 为契约。

01
Loader架构/导入表/字符串
02
Disassemble加固检测/调用图/交叉引用
03
Vuln Scan危险函数/污点/CVE/跨二进制
04
Inventory密钥/服务/BusyBox/证书
05
ReportJSON / Markdown / SBOM

Python 分析核心

  • 纯库 + CLI,可独立于服务层使用
  • 流式输出 @@IFDA@@<json> 进度事件
  • ifda/model.py 定义与 Go 侧共享的 JSON 契约

Go 服务层

  • 队列 + 并发 worker,逐任务调用 Python CLI
  • REST API、SQLite 报告存储、SSE 进度推送
  • AI provider 配置管理与按需分析调用(v3.8)
技术栈

用成熟的部件,不重复造轮子

虚线标注的是可选依赖——缺失时功能优雅降级,而不是直接崩溃。

分析核心(Python 3.10+)

capstonepyelftoolscve-bin-tool yara-python (optional)angr (planned)

服务层(Go 1.22+,零第三方依赖)

net/http ServeMuxcrypto/hmac + sha256 (PBKDF2) image/png (CAPTCHA)modernc.org/sqliteServer-Sent Events

Web UI

Alpine.js 3.14.1(本地打包)纯 CSS 自定义属性主题(7 套)

可选增强

Ghidra headless(反编译) 任意 OpenAI 兼容 AI 服务商
界面预览

看板长什么样

下方是界面结构的示意重绘,不是截图——真实界面以实际部署为准。

localhost:8080 — IFDA
仪表盘发现 (37)二进制服务AI分析
37
发现
4
严重
9
高危
14
二进制
6
CVE
硬编码凭据可被 telnetd 触达CVE-2016-5195
web 后台鉴权使用非常量时间比较auth-logic-weak
CGI 参数未过滤拼接进 fopen()path_traversal
快速开始

几分钟内跑起第一次扫描

完整环境搭建(交叉编译器、Ghidra/JDK 踩坑记录)见仓库里的 ENVIRONMENT.md。

Linux 和 macOS 都能跑,Apple 芯片和 Intel 都支持。分析跑在你自己的机器上,固件是 ARM 还是 MIPS 不影响。

1 · 分析核心

# apt / pip 二选一
apt-get install -y python3-capstone python3-pyelftools
pip install cve-bin-tool   # FR-VUL-1 必需
pip install yara-python    # 可选

python3 -m ifda.cli analyze ./rootfs \
  --json report.json --md report.md --sbom sbom.json

2 · 服务层(可选,REST API + Web UI)

# Go 1.22+
cd service && go build -o ifda-service .

./ifda-service -addr :8080 \
  -core /path/to/IFDA -data ./.data \
  -user admin -pass 'change-me'
# open http://localhost:8080

在 Mac 上

把上面的 apt 换成 brew,其余照旧。Go 服务是纯 Go 写的,连 SQLite 都是,所以不用装 Xcode、也不用开 CGO,arm64 和 Intel 直接就能编。只有 Ghidra 反编译那一步要额外装个 JDK 17,不做反编译就跳过。

# Homebrew:https://brew.sh
brew install [email protected] go

python3 -m venv .venv && source .venv/bin/activate
pip install -e . cve-bin-tool

# 无需 CGO,arm64 / Intel 都能构建
cd service && go build -o ifda-service .

关于 cve-bin-tool 首次运行

它会在本机维护一份 NVD/OSV/RedHat/GitLab/Curl 的本地 CVE 数据库(约 1GB+),首次扫描会先同步这份数据,需要联网且较慢——之后的扫描直接复用本地缓存。缺失时分析仍会运行,只是 CVE 关联退化为内置的小型策展库,并在报告里给出明确提示。

更新日志

最近几个版本

完整记录见仓库里的 CHANGELOG.md(英文)与 PROGRESS.md(中文,含根因和验证细节)。

v4.02026-07-27

AI 分析可靠性:被中断的服务商流不再当作"已完成"保存(保留部分输出并标为中断);修复打开一个扫描却显示另一个扫描缓存结果的问题;新增 Linux/macOS 跨平台说明与 Mac 安装步骤。

v3.92026-07-27

AI 分析运行期的动态反馈:常驻状态条(脉冲点、分阶段文案、秒表、发丝扫光)、流式打字光标、自动跟随尾部并让位于手动滚动。

v3.82026-07-26

AI 分析扫描结果 + AI 服务商配置管理,全部在 Go 服务层实现,Python 核心零改动。

v3.72026-07-11

内核版本 CVE 关联(Dirty COW / Dirty Pipe 精确区间匹配)+ 修复内核 banner 扫描上限截断 bug。

v3.62026-07-11

新增路径遍历检测(复用污点引擎)与鉴权逻辑弱点检测(非常量时间比较识别)。

v3.52026-07-08

新增网络服务识别(WEB/SSH/FTP/Telnet/gSOAP/DNS/SNMP/UPnP/WiFi),独立标签页 + 仪表盘展示。

⚠ 授权使用声明

仅可分析你拥有或已获得书面授权评估的固件。这是一套防御性安全研究工具,不承担因滥用造成的任何后果。

关于准确性

不做反编译的静态分析本质是启发式的。每条发现都带置信度分数——精确调用点(0.8)优先于导入存在性(0.4)与调用图污点可达性(0.5)。污点类发现是"待人工验证的候选路径",不是"已证实的可利用漏洞"。

致谢

站在巨人的肩膀上

EMBA

开源 IoT 固件分析器,其 CVE 关联与敏感信息挖掘思路影响了本项目多处设计决策;config/ 签名文件也启发了本项目的敏感字符串字典。

→ github.com/e-m-b-a/emba

cve-bin-tool

OpenSSF 项目,FR-VUL-1 广谱 CVE 覆盖背后的实际引擎——EMBA 自己也在用它做 CVE 关联。

→ github.com/intel/cve-bin-tool