一种基于人机协同的二进制程序漏洞静态分析方法技术

技术编号:36230022 阅读:38 留言:0更新日期:2023-01-04 12:29
本发明专利技术公开了一种基于人机协同的二进制程序漏洞静态分析方法,包括以下步骤:通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。本发明专利技术可提高二进制程序静态分析的效率,降低二进制程序分析的门槛。程序分析的门槛。程序分析的门槛。

【技术实现步骤摘要】
一种基于人机协同的二进制程序漏洞静态分析方法


[0001]本专利技术涉及软件缺陷分析
,尤其涉及一种基于人机协同的二进制程序漏洞静态分析方法。

技术介绍

[0002]随着软件规模的不断扩大,软件构成也变得日趋复杂。软件开发者通常通过组装开源组件来快速创建软件产品,其为了保护其核心技术和知识产权,在软件开发过程中大量使用了混源代码(既有开源代码又有闭源代码),复杂的软件构成会引入一系列的软件安全性问题。近年来,针对软件或操作系统的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。
[0003]二进制程序静态分析是挖掘二进制程序漏洞的重要方法,通常包括了数据流分析、别名分析、符号执行和静态污点分析等技术。软件产品往往会适配不同的操作系统、不同的硬件架构平台,这给二进制程序静态分析带来新的挑战和需求。虽然静态分析技术在源代码分析上发展已经较为成熟,然而在二进制程序分析还有诸多困难。
[0004]目前,二进制程序静态分析一般是半自动或者人工分析的过程,特别是一些逻辑类的漏洞,往往只能依靠漏洞挖掘专家凭借经验去对目标软件进行逆向分析,需要耗费大量专业人员的时间成本。现有方法没有很好地综合利用计算机高效的计算和搜索能力,以及漏洞挖掘者在静态分析过程中的认知能力。近年来人工智能技术的飞速发展,基于机器学习的软件漏洞挖掘展现出了广阔的应用前景。由于不同类型的漏洞特征和分析方式存在巨大差异,如何使人类与机器智能在二进制程序静态分析的多种方法产生协同作用,创建一个“人+机器”互补型的人机协同二进制程序漏洞静态分析方式成为了学术界/工业界的热点。

技术实现思路

[0005]本专利技术主要针对二进制程序漏洞静态分析效率低问题提出解决方案,具体针对以下几个方面的问题:1)如何快速准确的提取二进制程序的语义特征,解决二进制程序的语义一致性表达问题;2)如何建立漏洞挖掘者与机器之间的通信交互机制,解决机器智能与漏洞挖掘者知识的共享;3)如何实现机器智能与漏洞挖掘者的能力互补反馈,构建能够自我不断更新的机器智能。
[0006]为了解决上述问题,本专利技术提出一种基于人机协同的二进制程序漏洞静态分析方法,可以提高二进制程序静态分析的效率,降低二进制程序分析的门槛,适用于跨平台的二进制程序人机协同逆向分析与漏洞挖掘,对实现二进制程序高效漏洞挖掘具有非常重要的意义。
[0007]本专利技术采用的技术方案如下:一种基于人机协同的二进制程序漏洞静态分析方法,包括以下步骤:S1. 通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;S2. 建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;S3. 建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。
[0008]进一步地,步骤S1包括以下子步骤:S101. 从互联网开源代码发布平台采集提取开源项目的相关信息,并根据开源项目的星级对开源项目按活跃度进行分类;S102. 按照开源项目的活跃度优选下载较为活跃的项目,使用开源工具git作为项目下载器下载项目的各个大版本分支;S103. 使用修改过的LLVM编译器作为二进制程序关联源代码的标注器,在多个交叉编译环境不同的编译优化策略下编译漏洞项目,输出多个架构、多个优化策略生成的带有代码标注的二进制程序,使得二进制片段与源代码函数片段能够建立联系;S104. 使用多元组描述存储二进制程序的特征知识,将收集获取到的二进制程序与已构建的知识库中知识进行融合,融合的依据包括二进制程序哈希值。
[0009]进一步地,步骤S104中使用多元组描述存储二进制程序的特征知识包括:使用六元组描述二进制程序=[CID、二进制程序哈希值、二进制程序名、程序架构、来源、函数个数],使用七元组描述二进制函数特征=[FID、CID、函数哈希值、函数名、参数个数、特征向量、函数功能],其中CID、FID是用于关联函数与二进制程序的字段,二进制程序哈希值、函数哈希值作为唯一标识,特征向量字段由二进制程序函数同源性分析模型获取,函数功能字段由二进制程序函数功能识别模型获取。
[0010]进一步地,步骤2中二进制程序函数同源性分析模型的建立和同源性分析包括以下子步骤:S201. 从步骤S1获取的二进制程序中提取二进制字符串、立即数和函数,构建适合二进制程序同源分析的数据集,然后训练一个同源性分析模型,将该模型的倒数第二层作为特征表示层向量,并将提取到的二进制函数输入到该模型获得特征向量;S202. 利用开源的反汇编软件从二进制程序提取程序的多维度特征,按照源代码函数所在的文件路径、函数名称两个准则,将同一份源代码函数对应的不同编译条件下二进制函数的配对作为训练集的正样本,负样本是从剩下的未配对的样本随机抽取配对,从而构建二进制相似函数的正反样例数据集;S203. 使用正反样例数据集训练一个输入特征=[函数调用图、字符串、立即数],输出=[相似、不相似]的深度神经网络,作为二进制程序函数同源性判别模型,该模型的倒数第二层是二进制程序函数特征表示层向量,将提取到的全部二进制函数输入到训练好的同源性判别模型获得特征向量,并将该特征向量存储到知识库;
S204. 将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断待测特征向量集是否超过设定的阈值,比对结果判断是否为同源的二进制程序。
[0011]进一步地,步骤2中二进制程序函数功能识别模型的建立和函数功能识别包括以下子步骤:S211. 从步骤S1获取的二进制函数关联的源代码中提取代码注释、库函数API的调用情况,再通过检索库函数自带的文档获取文本信息,将文本按照出现的顺序组合成代码的语义信息;S212. 训练一个无监督深度神经网络的文本聚类模型,再通过修订聚类标签的方法得到准确的类别标签,将源代码识别到的类别关联到二进制函数,完成二进制函数功能识别。
[0012]进一步地,步骤S212中无监督深度神经网络的文本聚类模型使用BERT预训练模型作为文本表示为数值向量的词嵌入工具。
[0013]进一步地,步骤S212包括以下子步骤:S2121. 载入数据,进行数据预处理以去除干扰元素,所述干扰元素包括特殊符号、非中英文的字符;S2122. 创建高质量的语句嵌入以将文档向量化并减少数据转换过程中带来的语义损失;S2123. 利用HDBSCAN算法进行文档聚类,基于密度的聚类算法寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”,实现源代码语义功能基于层次和密度的聚类;S2124. 使用class

based TF

IDF方法提取每个“簇”的主题词,将一个“簇”中的所有文档拼本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于人机协同的二进制程序漏洞静态分析方法,其特征在于,包括以下步骤:S1. 通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;S2. 建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;S3. 建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。2.根据权利要求1所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S1包括以下子步骤:S101. 从互联网开源代码发布平台采集提取开源项目的相关信息,并根据开源项目的星级对开源项目按活跃度进行分类;S102. 按照开源项目的活跃度优选下载较为活跃的项目,使用开源工具git作为项目下载器下载项目的各个大版本分支;S103. 使用修改过的LLVM编译器作为二进制程序关联源代码的标注器,在多个交叉编译环境不同的编译优化策略下编译漏洞项目,输出多个架构、多个优化策略生成的带有代码标注的二进制程序,使得二进制片段与源代码函数片段能够建立联系;S104. 使用多元组描述存储二进制程序的特征知识,将收集获取到的二进制程序与已构建的知识库中知识进行融合,融合的依据包括二进制程序哈希值。3.根据权利要求2所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S104中使用多元组描述存储二进制程序的特征知识包括:使用六元组描述二进制程序=[CID、二进制程序哈希值、二进制程序名、程序架构、来源、函数个数],使用七元组描述二进制函数特征=[FID、CID、函数哈希值、函数名、参数个数、特征向量、函数功能],其中CID、FID是用于关联函数与二进制程序的字段,二进制程序哈希值、函数哈希值作为唯一标识,特征向量字段由二进制程序函数同源性分析模型获取,函数功能字段由二进制程序函数功能识别模型获取。4.根据权利要求1所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤2中二进制程序函数同源性分析模型的建立和同源性分析包括以下子步骤:S201. 从步骤S1获取的二进制程序中提取二进制字符串、立即数和函数,构建适合二进制程序同源分析的数据集,然后训练一个同源性分析模型,将该模型的倒数第二层作为特征表示层向量,并将提取到的二进制函数输入到该模型获得特征向量;S202. 利用开源的反汇编软件从二进制程序提取程序的多维度特征,按照源代码函数所在的文件路径、函数名称两个准则,将同一份源代码函数对应的不同编译条件下二进制函数的配对作为训练集的正样本,负样本是从剩下的未配对的样本随机抽取配对,从而构建二进制相似函数的正反样例数据集;S203. 使用正反样例数据集训练一个输入特征=[函数调用图、字符串、立即数],输出=[相似、不相似]的深度神经网络,作为二进制程序函数同源性判别模型,该模型的倒数第二层是二进制程序函数特征表示层向量,将提取到的全部二进制函数输入到训练好的同源性
判别模型获得特征向量,并将该特征向量存储到知识库;S204. 将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断...

【专利技术属性】
技术研发人员:孙治毛得明陈剑锋饶志宏韩烨赵童王炳文
申请(专利权)人:中国电子科技集团公司第三十研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1