基于图神经网络的物联网固件漏洞静态挖掘技术方案
------ 从 ACFG 特征提取到跨架构相似性检测的完整实践路径
摘要
随着物联网设备的爆发式增长,固件安全问题已成为网络空间安全的重点与难点。本方案面向多架构物联网 ELF 固件,提出一套以静态分析为基础、以图神经网络为核心的漏洞挖掘技术路线。方案首先利用 IDA Pro 与 IDA-python 提取带属性的控制流图(ACFG),随后分别采用 Structure2vec + Siamese 架构以及 Graph Matching Network(GMN)将函数级图结构嵌入为低维向量,并通过余弦相似度与层次聚类完成漏洞点函数的识别。同时,方案设计"单架构最优方法"与"跨架构最优方法"双轨对比路径,以期在多架构数据集上获得可落地的漏洞挖掘能力。
一、问题背景
1.1 物联网连接规模与安全形势
根据 GSMA 发布的《The mobile economy 2020(2020年移动经济)》报告,2019 年全球物联网总连接数已达 120 亿,预计到 2025 年将增长至 246 亿。其中,中国物联网连接数在 2019 年达到 36.3 亿,占全球比重约 30%。然而,在物联网为生活与生产带来巨大便利的同时,其安全问题也日益严峻。
仅以 2020 年 1 月至 11 月 NVD(National Vulnerability Database)披露数据为例,平台共披露 12,805 个漏洞,其中物联网相关漏洞高达 1,541 个,占比约 12%。这意味着几乎每 8 个新增漏洞中就有 1 个与物联网设备相关。
1.2 物联网漏洞的严重性与现实影响
从攻击复杂度维度看,上述物联网相关漏洞中约 96% 的攻击复杂度较低,攻击者开发 Exploit 的门槛并不高。结合 CVSS v3 评级分布,严重占比 16%、高危 40%、中危 42%、低危 2%,合计高危及以上占比达 56%。由于物联网设备往往长期在线、部署分散且更新周期长,一旦漏洞被利用,影响面可达上亿台设备,波及能源、制造、交通、家居等关键场景。
因此,如何在固件层面快速、准确地发现潜在漏洞,已成为物联网安全防御体系中亟待解决的核心问题。
1.3 业务与技术需求
本项目的业务目标可概括为:给定一批来自真实物联网设备的 ELF 可执行文件及其漏洞点标签,设计并实现一套自动化系统,从二进制层面识别出可能存在漏洞的函数或代码位置。该需求直接映射到以下技术挑战:
- 缺乏源代码:物联网固件多为闭源商业程序,无法依赖源码级分析。
- 硬件异构严重:ARM、MIPS、PowerPC 等嵌入式架构与 x86/x86_64 指令集差异显著。
- 数据规模与标注稀缺:漏洞样本有限,需要在小样本条件下实现高召回与低误报。
二、现状分析
2.1 漏洞挖掘技术路线:静态 vs 动态
漏洞挖掘技术按照是否依赖程序运行可划分为静态分析方法与动态分析方法两大类。
- 静态分析方法无需实际运行程序,通过扫描并分析词法、语法、控制流、数据流等信息来发现潜在漏洞。其优势在于覆盖率高、无需构建运行环境、适合大规模批量扫描。
- 动态分析技术则在程序运行状态下,对执行路径、寄存器状态、内存行为进行观测,典型方法包括模糊测试(Fuzzing)、动态符号执行与动态污点分析。其优势在于能发现真实运行时可触发的漏洞,但受限于运行环境与测试用例覆盖率。
对于物联网固件而言,动态分析往往面临固件难以仿真、外设依赖复杂、运行环境搭建困难等问题;因此,静态分析成为更优先、更可扩展的技术路线。
2.2 静态分析中的代码表征形式
近年来,人工智能尤其是深度学习被广泛应用于漏洞挖掘的静态分析中。由于模型输入通常为向量形式,必须先将代码转换为某种可计算的表征。当前主流表征形式包括:
- 代码度量:如代码行数、圈复杂度、继承深度、类耦合等,粒度粗、语义信息不足。
- Token 序列:通过词法分析将源代码字符流转换为标识符、关键字、函数名、运算符等 Token 序列,适合自然语言处理模型,但对二进制直接适用性较差。
- 抽象语法树(AST):捕获代码语法结构信息,通常借助 lex/yacc、flex/bison、ANTLR 等工具生成,适用于源码分析。
- 基于图的表征:以程序依赖图(PDG)、控制流图(CFG)等为代表,能够表达控制依赖与数据依赖关系,反映更丰富的语法与语义特征,因而在漏洞检测中表现更优。
在物联网无源码、多架构的场景下,基于图(特别是 CFG/ACFG)的表征形式成为最自然、最具扩展性的选择。
2.3 物联网漏洞挖掘的特有难点
与传统通用软件漏洞挖掘相比,物联网场景面临以下三重特殊困难:
- 硬件复杂异构:通用软件多基于 x86/x86_64 指令集,而物联网设备广泛采用 ARM、MIPS、PowerPC 等嵌入式架构,导致跨架构代码相似性度量成为核心难题。
- 代码与文档未公开:大多数物联网程序为定制商业固件,分析对象只能是二进制固件;大量源代码级分析技术因此失效。
- 固件组织形式差异:物联网固件的文件系统、加载地址、链接方式、数据内容等均与通用程序不同,传统二进制静态分析工具也不能直接套用。
2.4 现有方法评述
围绕二进制代码相似性检测,学术界已提出若干具有代表性的方法:
- Genius:基于 ACFG 特征,通过二分图匹配(bipartite graph matching)计算图相似度,并利用谱聚类生成"代码本"(codebook),将函数映射为 codebook 上的坐标向量。该方法奠定了图特征在二进制相似性检测中的应用基础,但计算代价较高,难以扩展到大规模固件。
- Gemini:沿用 ACFG 作为原始特征,采用 Structure2vec 作为图嵌入网络,并结合 Siamese 网络学习嵌入参数,将每个 ACFG 嵌入为 64 维向量;通过余弦相似度进行漏洞函数匹配。在 Top-500 实验中,命令注入检测率约为 10%,密码学误用约为 37.5%,格式化字符串约为 25%。
- Graph Matching Network(GMN):在嵌入传播层中让两个图的表示相互"交流",从而捕捉图间细微差异,对相似但非完全相同的漏洞变体更鲁棒。实验显示,Top-500 条件下漏洞识别率可达 34.2%,且首个漏洞函数排名为第 1。
上述方法共同揭示了一个核心思路:把函数表示为图,再把图映射为向量,最终通过向量空间中的距离完成漏洞识别。
2.5 多架构问题的应对思路
跨架构代码相似性检测的关键在于消除指令集差异。当前存在两条主流路径:
- 中间表示(IR)统一:利用 IDA Pro、Ghidra 等逆向工具将不同架构二进制提升到统一的中间表示(IR),再基于 IR 提取 CFG 等特征。
- 汇编指令嵌入:直接以各架构汇编指令为输入,通过 asm2vec 等技术学习指令语义向量,使不同架构的相似汇编语义在向量空间中相互靠近。
三、方案设计
3.1 总体目标
本方案旨在构建一套面向多架构物联网 ELF 固件的静态漏洞挖掘系统。系统应能自动完成函数级特征提取、图嵌入、相似性计算与聚类识别,输出疑似漏洞函数列表及其置信度。
3.2 整体架构
系统采用"数据---特征---模型---决策"四层架构:
- 数据层:管理多架构 ELF 固件、漏洞点标签、已知漏洞函数样本及元数据。
- 特征层:基于 IDA Pro 反汇编与 IDA-python 插件,提取函数级 CFG 并进一步构建 ACFG。
- 模型层:训练 Structure2vec + Siamese 图嵌入模型或 GMN 图匹配网络,将 ACFG 映射为 64 维向量。
- 决策层:基于余弦相似度与层次聚类,识别与已知漏洞函数相似的候选函数,并给出排名与解释。
3.3 关键模块划分
为便于工程落地,系统拆分为以下六个核心模块:
- 固件预处理模块:解析 ELF 文件头、段表、符号表,按架构(ARM/MIPS/x86 等)分组,建立样本索引。
- 特征提取模块:调用 IDA Pro 对 ELF 文件进行反汇编,利用 IDA-python 插件自动抽取函数 CFG 与基本块属性,生成 ACFG。
- 图嵌入训练模块:基于 Structure2vec 或 GMN 训练函数级图嵌入模型,输出 64 维函数向量。
- 相似性计算模块:对训练集与测试集函数向量两两计算余弦相似度,生成相似度矩阵。
- 聚类识别模块:对函数向量进行层次聚类,将相似函数归为一个簇;若某簇包含已知漏洞函数,则该簇其余函数为候选漏洞。
- 评估可视化模块:统计漏洞识别率、误报率、首个漏洞函数排名等指标,并提供相似函数对比视图。
3.4 详细实现流程
整个系统的数据处理与决策流程如下:
- Step 1 --- 输入原始二进制:读取待分析的 ELF 固件集合。
- Step 2 --- 反汇编与 CFG 提取:利用 IDA Pro 反编译每个 ELF,获取函数的汇编代码与控制流图。
- Step 3 --- ACFG 构建:在 CFG 基础上为基本块附加属性,形成带属性的控制流图(ACFG)。
- Step 4 --- 图嵌入训练:以 ACFG 为输入,训练 Structure2vec + Siamese 或 GMN 模型,得到函数的 64 维向量表示。
- Step 5 --- 相似性度量:计算训练集漏洞函数向量与测试集函数向量之间的余弦相似度。
- Step 6 --- 层次聚类:对函数向量实施层次聚类,把相似函数聚为一个簇。
- Step 7 --- 漏洞识别:根据聚类结果与已知漏洞标签,输出候选漏洞函数及其排名。
3.5 单架构与跨架构双轨对比策略
为在这类包含多架构二进制文件的数据集上取得最优效果,方案设计两条并行路线并最终进行对比:
- 单架构最优路线:将数据集按 CPU 架构拆分,分别训练各自架构下的最优模型,最后将各架构结果组合形成"单架构组合方案结果"。该路线可以充分拟合单一架构的指令与编译特征。
- 跨架构最优路线:通过 IR 提升或汇编语义嵌入,构建跨架构统一的向量空间,训练一个能同时处理多架构的模型,形成"跨架构方案结果"。
- 对比评估:从漏洞识别率、误报率、首个漏洞函数排名、运行效率等维度,对单架构组合方案与跨架构方案进行综合评估,选择最适合实际落地场景的方案。
该策略既尊重了"同架构内相似性更容易学习"的直觉,也探索了"跨架构统一表示"的前沿方向,为后续方案迭代提供数据支撑。