1.一种硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,包括如下步骤:步骤1.将用户源程序编译、链接生成二进制可执行文件;
步骤2.对二进制可执行文件进行模拟运行,得到模拟运行信息;模拟运行信息包括程序在虚拟运行平台的执行路径、程序执行时的寄存器状态以及间接跳转的目标地址;
步骤3.将二进制可执行文件进行反汇编,得到反汇编代码;
步骤4.结合步骤2得到的模拟运行信息以及步骤3得到的反汇编代码,对反汇编代码中无法通过静态分析得到的控制流路径进行数据补充;
步骤5.在经数据补充后的反汇编代码内,分析程序可能执行的函数,将可能执行函数的反汇编代码以跳转指令为边界划分为基本块;
首先筛选出所有可能执行的函数,然后通过分析函数的调用与返回关系,最终在可能执行的函数范围内,根据基本块定义,以跳转指令为边界划分基本块;
筛选出所有可能执行的函数的过程如下:
分析提取反汇编代码中所有函数的地址、指令;
从反汇编代码中的第一个函数开始,遍历当前函数的全部指令;
如果当前函数的最后一条指令为跳转指令,则将跳转指令目标地址所在的函数标记为程序可能执行的函数,并对该函数进行分析;
如果当前函数的最后一条指令不为跳转指令,则检查当前函数下方是否存在相邻函数,如果存在,则将下方的相邻函数标记为程序可能执行的函数,并对该函数进行分析;
以上筛选过程将持续到当前函数下方不存在相邻函数为止;
步骤6.分析基本块之间的跳转关系,构建控制流图;
步骤7.依据控制流图中基本块之间的跳转关系,经过预提取得到控制流特征参数;
步骤8.将预提取的控制流特征参数写入处理器内的控制流特征参数存储单元;
步骤9.程序执行期间,从处理器流水线取得当前指令及其地址,动态计算基本块跳转的控制流特征参数,并与控制流特征参数存储单元存储的控制流特征参数比对校验;
在比对校验过程中,在基本块发生跳转时,检查当前执行的基本块与下一个即将执行的基本块之间的控制流特征参数是否与预提取的控制流特征参数相一致;
步骤10.若比对一致,则继续运行程序;否则判定基本块跳转异常,执行步骤11;
步骤11.向处理器流水线发送暂停信号,并通过处理器内串口模块向外发送异常信息。
2.根据权利要求1所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤2中,将二进制可执行文件输入到虚拟运行平台进行模拟运行;模拟运行信息包括程序在虚拟运行平台的执行路径、程序执行时的寄存器状态以及间接跳转的目标地址。
3.根据权利要求1所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤3中,进行反汇编操作得到反汇编代码时所使用的工具链,与所述步骤1中在进行编译、链接生成可执行二进制文件时所使用的工具链一致。
4.根据权利要求1所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤4中,模拟运行信息在经过整理与分析后,为反汇编代码中的间接跳转指令进行数据补充,完善反汇编代码中间接跳转指令的跳转目标地址。
5.根据权利要求1所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤7中,依据控制流图中基本块之间的跳转关系,使用控制流特征参数耦合算法进行处理,经过预提取得到控制流特征参数,算法处理过程如下:基于指令及其地址信息为每个基本块生成唯一的二进制标识码,并根据基本块在控制流图中所处的位置与层级,为相邻层级内的所有基本块跳转关系生成预设的控制流特征参数。
6.根据权利要求5所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤9中,在处理器内采用与步骤7相同的控制流特征参数耦合算法,基于从处理器流水线取得的指令及其地址信息,实现算法的硬件动态计算,并完成硬件动态计算得到的控制流特征参数与预提取的控制流特征参数之间的比对校验。
7.根据权利要求6所述的硬件辅助的嵌入式系统程序控制流安全认证方法,其特征在于,所述步骤9中,在处理器内设置有控制流特征参数校验模块,用于在程序运行期间,从处理器流水线上取得当前指令及其地址,硬件动态计算控制流特征参数,并完成硬件动态计算得到的控制流特征参数与预提取的控制流特征参数之间的比对校验。