IFDA 是一套自动化的 IoT 固件逆向与漏洞发现工具:多架构反汇编、CVE 关联、污点可达性分析、 跨二进制调用链追踪,外加可选的 AI 辅助分析——全部自托管,数据不出本地。
# 分析一个已解包的固件根目录 $ 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" }] }
不只是安全团队——任何需要静态审计一份 IoT 固件的人都用得上。
批量分析厂商固件,定位可复用的漏洞类别与后门。
在没有设备物理接入的情况下,先用静态分析圈定攻击面。
发布前自查:硬编码凭据、弱鉴权、危险函数、过期组件。
读得到伪代码、taint 路径、调用图——把黑盒过程变成可学习的证据链。
每一条发现都带置信度、代码位置和污点路径——不是一个模糊的"可能有问题"。
x86/x86_64、ARM、ARM Thumb-2、AArch64、MIPS LE/BE——纯静态反汇编 + 导入调用解析,剥离符号也能恢复函数边界。
离线策展库 + cve-bin-tool(NVD/OSV/RedHat/GitLab/Curl,350+ 组件),内核版本单独用自研探测器关联,规避第三方 checker 的正则死角。
source → sink 可达性分析穿透调用图,并追踪 CGI/脚本调用到共享库内部的真实汇聚点,而不是止步于单个文件。
按需对已完成的扫描结果做 AI 分析——误报过滤、跨发现关联出攻击链、修复优先级建议,支持任意 OpenAI 兼容服务商。
Go 服务层零第三方依赖(仅标准库),前端 Alpine.js 本地打包无需构建步骤——单文件部署,气隙环境也能跑。
一次性脚本化调用,或起服务用队列 + 网页看板批量跑一整批固件——同一套分析核心。
按能力分类浏览——每一项都能在需求文档里追溯到对应的 FR 编号。
基于 capstone,x86/x86_64/ARM/Thumb-2/AArch64/MIPS,不依赖目标主机架构。
FR-RE-1符号优先 + 剥离符号后的直接调用/函数序言恢复兜底,ARM/Thumb 自动判别。
FR-RE-3x86 PLT、ARM/AArch64 PLT、MIPS GOT + jalr $t9 全覆盖,含 PIC 场景。
FR-RE-1NX / Stack Canary / RELRO / PIE / FORTIFY 逐项识别,评估利用难度。
FR-RE-5调用点、字符串引用双向索引,定位"谁调用了这个危险函数"秒级完成。
FR-RE-6headless 模式产出伪代码,直接挂到对应 finding 上,不用来回切工具。
FR-RE-2离线库 + cve-bin-tool 双引擎,内核版本单独精确关联(Dirty COW / Dirty Pipe 等)。
FR-VUL-1strcpy/system/sprintf 等经典危险调用一次扫全。
FR-VUL-2source(getenv/recv 等) → sink 调用图可达性,标出候选路径供人工复核。
FR-VUL-3缓冲区溢出、命令注入、代码注入、文件包含、反序列化、格式化字符串、弱加密、路径遍历、鉴权逻辑弱点。
FR-VUL-4全局调用图串联 CGI → 共享库,发现单文件视角看不到的攻击链。
FR-VUL-5按严重度/置信度排序;分诊状态按指纹持久化,重扫不丢历史决策。
FR-VUL-7/8私钥、哈希、硬编码账号密码/令牌 + 高熵兜底,可外置规则库(YARA 可选)。
FR-INV-4WEB/SSH/FTP/Telnet/SOAP/DNS/SNMP/UPnP/WiFi 管理守护进程,版本只认内嵌 banner,端口按配置/inetd/启动参数/默认值推断。
FR-INV已编译 vs 参考列表比对、bin/sbin 额外可执行文件、init.d 脚本全量转储。
FR-INV逐证书判定 RSA/非 RSA,支持证书链/bundle,基于 cryptography 库而非猜测式 PEM 头匹配。
FR-INV按扩展名/路径/UCI/内容嗅探分类,内容层面检查 telnet、匿名 FTP、调试模式、默认 SNMP 团体字、TLS 校验关闭等。
FR-INV不止 ELF 和识别出的脚本——目标下的每一个文件都在清单里,确认扫描没有遗漏角落。
FR-INV结构化 JSON 作为集成契约,Markdown 摘要给人看,CycloneDX SBOM 直接喂 Dependency-Track。
FR-REP-1/2批量提交、并发 worker、按内容去重缓存,SSE 推送进度,不用轮询。
FR-INT-1Alpine.js 单页应用:发现筛选、分诊、对比扫描、7 套主题、双语界面。
FR-INT-1两次扫描结果 diff——新增/消失的字符串、敏感信息、发现,一眼看出补丁效果。
FR-INTPBKDF2 密码哈希 + 按账号锁定 + 登录验证码,标准库手写实现,零额外依赖。
NFR-SEC发现/二进制/脚本/组件全部落库分页,大规模扫描(3000+ 发现)不再撑爆浏览器标签页。
FR-INT在规则引擎产出的发现之上,加一层可选的 AI 辅助分析——不是重新扫描固件,只是帮你更快看懂已有结果。
核心是一个可独立调用的库/CLI;Go 服务层负责编排、队列与 Web 界面,两者以 JSON 为契约。
虚线标注的是可选依赖——缺失时功能优雅降级,而不是直接崩溃。
下方是界面结构的示意重绘,不是截图——真实界面以实际部署为准。
完整环境搭建(交叉编译器、Ghidra/JDK 踩坑记录)见仓库里的 ENVIRONMENT.md。
# 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
# 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
它会在本机维护一份 NVD/OSV/RedHat/GitLab/Curl 的本地 CVE 数据库(约 1GB+),首次扫描会先同步这份数据,需要联网且较慢——之后的扫描直接复用本地缓存。缺失时分析仍会运行,只是 CVE 关联退化为内置的小型策展库,并在报告里给出明确提示。
完整记录见仓库里的 CHANGELOG.md(英文)与 PROGRESS.md(中文,含根因和验证细节)。
AI 分析扫描结果 + AI 服务商配置管理,全部在 Go 服务层实现,Python 核心零改动。
内核版本 CVE 关联(Dirty COW / Dirty Pipe 精确区间匹配)+ 修复内核 banner 扫描上限截断 bug。
新增路径遍历检测(复用污点引擎)与鉴权逻辑弱点检测(非常量时间比较识别)。
新增网络服务识别(WEB/SSH/FTP/Telnet/gSOAP/DNS/SNMP/UPnP/WiFi),独立标签页 + 仪表盘展示。
仅可分析你拥有或已获得书面授权评估的固件。这是一套防御性安全研究工具,不承担因滥用造成的任何后果。
不做反编译的静态分析本质是启发式的。每条发现都带置信度分数——精确调用点(0.8)优先于导入存在性(0.4)与调用图污点可达性(0.5)。污点类发现是"待人工验证的候选路径",不是"已证实的可利用漏洞"。
开源 IoT 固件分析器,其 CVE 关联与敏感信息挖掘思路影响了本项目多处设计决策;config/ 签名文件也启发了本项目的敏感字符串字典。
→ github.com/e-m-b-a/embaOpenSSF 项目,FR-VUL-1 广谱 CVE 覆盖背后的实际引擎——EMBA 自己也在用它做 CVE 关联。
→ github.com/intel/cve-bin-tool