软件代码安全加固框架。嵌入式软件的自动安全加固和代码补充过程可分为以下五个阶段:
1)利用LLVM、ANT-LR等软件源代码解析工具,提取源代码的中间表示包括抽象语法树和。
函数调用图。
2)分析源代码中间的结构化源代码信息,生成特征值属性逻辑表达式。
3)计算源代码信息特征值的表达式和规约库中的特征值规约,从而生成测试报告。
4)利用安全防护库提供的检测报告和防护模板生成安全防护代码。
5)将安全保护代码和软件代码整合形成安全软件源代码。
为了支持设备嵌入式软件的自动安全加固和代码补充,本文提出了嵌入式软件的安全漏洞检测和代码加固框架,如图1所示。该框架由四个部分组成:基于漏洞特征的软件安全特征分析、安全保护库建设(漏洞特征、规范库和模板库)、加固代码生成和代码植入。
建造安全防护库。
建立安全保护库的目的主要是软件安全分析,为代码生成方法提供支持。其内容主要包括漏洞特征和规范库、模板库、特征和规范库的构建,为模板的建立提供了依据。漏洞特征提取和软件安全漏洞检测是软件安全加固的基础。为了提取嵌入式软件的漏洞特征,设置漏洞特征值,构建漏洞检测规范库,用漏洞特征三元组(VC、VP、F)表示。其中,1)VC是漏洞特征变量的集合,每个变量都描绘了一种漏洞特征形式;2)VP是漏洞特征值属性的集合,表示不同特征值的值范围,漏洞的表现形式由特征值描述;3)F是定义在特征值变量中的漏洞安全属性规约的逻辑命题,用于检测软件中是否存在满足某些漏洞特征值规定的漏洞。例如,对于缓冲区溢出的漏洞,其中一个是由脆弱函数引起的缓冲区溢出,那些可能导致的API名称是缓冲区溢出的特征值。特征变量strcpy的特征值属性包括六个属性,即VP={name_arg1,name_arg2,vol_arg1,len_arg2,kind_arg1,kind_arg2}。name_arg1是指strcpy第一个参数变量的名称,name_arg2是指strcpy第二个参数变量的名称。vol_arg1是strcpy第一个参数所指向的内存空间容量。len_arg2是strcpy第二个参数所指向的字符串长度。king_arg1是指第一个参数类型,kind_arg2是第二个参数类型。定义strcpy特征值属性的安全属性规定f:vol_arg1>len_arg2。软件安全分析技术在工业和学术界形成了许多研究成果和工具,对源代码具有很强的分析和处理能力。根据漏洞特征模型和安全规定,然后得到加固软件代码漏洞的特征、特征值的属性及其安全属性规范,利用安全保护库的现有知识,检测代码中所有漏洞的安全规范是否符合现有漏洞规范,然后生成加固需求报告。加固需求报告以JSON的文件格式描述,加固需求报告的内容描述如图2所示。FilePath标识被检测源代码文件的路径位置信息。content标识被检测源代码文件中的所有加固需求信息。需求内容content中的每个漏洞用character表示漏洞特征值,Attribute表示漏洞的属性值信息。