CN115563627A - 一种基于人机协同的二进制程序漏洞静态分析方法 - Google Patents
一种基于人机协同的二进制程序漏洞静态分析方法 Download PDFInfo
- Publication number
- CN115563627A CN115563627A CN202211557364.0A CN202211557364A CN115563627A CN 115563627 A CN115563627 A CN 115563627A CN 202211557364 A CN202211557364 A CN 202211557364A CN 115563627 A CN115563627 A CN 115563627A
- Authority
- CN
- China
- Prior art keywords
- function
- binary program
- binary
- model
- analysis
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/35—Clustering; Classification
- G06F16/355—Class or cluster creation or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Machine Translation (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于人机协同的二进制程序漏洞静态分析方法,包括以下步骤:通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。本发明可提高二进制程序静态分析的效率,降低二进制程序分析的门槛。
Description
技术领域
本发明涉及软件缺陷分析技术领域,尤其涉及一种基于人机协同的二进制程序漏洞静态分析方法。
背景技术
随着软件规模的不断扩大,软件构成也变得日趋复杂。软件开发者通常通过组装开源组件来快速创建软件产品,其为了保护其核心技术和知识产权,在软件开发过程中大量使用了混源代码(既有开源代码又有闭源代码),复杂的软件构成会引入一系列的软件安全性问题。近年来,针对软件或操作系统的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。
二进制程序静态分析是挖掘二进制程序漏洞的重要方法,通常包括了数据流分析、别名分析、符号执行和静态污点分析等技术。软件产品往往会适配不同的操作系统、不同的硬件架构平台,这给二进制程序静态分析带来新的挑战和需求。虽然静态分析技术在源代码分析上发展已经较为成熟,然而在二进制程序分析还有诸多困难。
目前,二进制程序静态分析一般是半自动或者人工分析的过程,特别是一些逻辑类的漏洞,往往只能依靠漏洞挖掘专家凭借经验去对目标软件进行逆向分析,需要耗费大量专业人员的时间成本。现有方法没有很好地综合利用计算机高效的计算和搜索能力,以及漏洞挖掘者在静态分析过程中的认知能力。近年来人工智能技术的飞速发展,基于机器学习的软件漏洞挖掘展现出了广阔的应用前景。由于不同类型的漏洞特征和分析方式存在巨大差异,如何使人类与机器智能在二进制程序静态分析的多种方法产生协同作用,创建一个“人+机器”互补型的人机协同二进制程序漏洞静态分析方式成为了学术界/工业界的热点。
发明内容
本发明主要针对二进制程序漏洞静态分析效率低问题提出解决方案,具体针对以下几个方面的问题:
1)如何快速准确的提取二进制程序的语义特征,解决二进制程序的语义一致性表达问题;
2)如何建立漏洞挖掘者与机器之间的通信交互机制,解决机器智能与漏洞挖掘者知识的共享;
3)如何实现机器智能与漏洞挖掘者的能力互补反馈,构建能够自我不断更新的机器智能。
为了解决上述问题,本发明提出一种基于人机协同的二进制程序漏洞静态分析方法,可以提高二进制程序静态分析的效率,降低二进制程序分析的门槛,适用于跨平台的二进制程序人机协同逆向分析与漏洞挖掘,对实现二进制程序高效漏洞挖掘具有非常重要的意义。
本发明采用的技术方案如下:
一种基于人机协同的二进制程序漏洞静态分析方法,包括以下步骤:
S1. 通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;
S2. 建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;
S3. 建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。
进一步地,步骤S1包括以下子步骤:
S101. 从互联网开源代码发布平台采集提取开源项目的相关信息,并根据开源项目的星级对开源项目按活跃度进行分类;
S102. 按照开源项目的活跃度优选下载较为活跃的项目,使用开源工具git作为项目下载器下载项目的各个大版本分支;
S103. 使用修改过的LLVM编译器作为二进制程序关联源代码的标注器,在多个交叉编译环境不同的编译优化策略下编译漏洞项目,输出多个架构、多个优化策略生成的带有代码标注的二进制程序,使得二进制片段与源代码函数片段能够建立联系;
S104. 使用多元组描述存储二进制程序的特征知识,将收集获取到的二进制程序与已构建的知识库中知识进行融合,融合的依据包括二进制程序哈希值。
进一步地,步骤S104中使用多元组描述存储二进制程序的特征知识包括:使用六元组描述二进制程序=[CID、二进制程序哈希值、二进制程序名、程序架构、来源、函数个数],使用七元组描述二进制函数特征=[FID、CID、函数哈希值、函数名、参数个数、特征向量、函数功能],其中CID、FID是用于关联函数与二进制程序的字段,二进制程序哈希值、函数哈希值作为唯一标识,特征向量字段由二进制程序函数同源性分析模型获取,函数功能字段由二进制程序函数功能识别模型获取。
进一步地,步骤2中二进制程序函数同源性分析模型的建立和同源性分析包括以下子步骤:
S201. 从步骤S1获取的二进制程序中提取二进制字符串、立即数和函数,构建适合二进制程序同源分析的数据集,然后训练一个同源性分析模型,将该模型的倒数第二层作为特征表示层向量,并将提取到的二进制函数输入到该模型获得特征向量;
S202. 利用开源的反汇编软件从二进制程序提取程序的多维度特征,按照源代码函数所在的文件路径、函数名称两个准则,将同一份源代码函数对应的不同编译条件下二进制函数的配对作为训练集的正样本,负样本是从剩下的未配对的样本随机抽取配对,从而构建二进制相似函数的正反样例数据集;
S203. 使用正反样例数据集训练一个输入特征=[函数调用图、字符串、立即数],输出=[相似、不相似]的深度神经网络,作为二进制程序函数同源性判别模型,该模型的倒数第二层是二进制程序函数特征表示层向量,将提取到的全部二进制函数输入到训练好的同源性判别模型获得特征向量,并将该特征向量存储到知识库;
S204. 将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断待测特征向量集是否超过设定的阈值,比对结果判断是否为同源的二进制程序。
进一步地,步骤2中二进制程序函数功能识别模型的建立和函数功能识别包括以下子步骤:
S211. 从步骤S1获取的二进制函数关联的源代码中提取代码注释、库函数API的调用情况,再通过检索库函数自带的文档获取文本信息,将文本按照出现的顺序组合成代码的语义信息;
S212. 训练一个无监督深度神经网络的文本聚类模型,再通过修订聚类标签的方法得到准确的类别标签,将源代码识别到的类别关联到二进制函数,完成二进制函数功能识别。
进一步地,步骤S212中无监督深度神经网络的文本聚类模型使用BERT预训练模型作为文本表示为数值向量的词嵌入工具。
进一步地,步骤S212包括以下子步骤:
S2121. 载入数据,进行数据预处理以去除干扰元素,所述干扰元素包括特殊符号、非中英文的字符;
S2122. 创建高质量的语句嵌入以将文档向量化并减少数据转换过程中带来的语义损失;
S2123. 利用HDBSCAN算法进行文档聚类,基于密度的聚类算法寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”,实现源代码语义功能基于层次和密度的聚类;
S2124. 使用class-based TF-IDF方法提取每个“簇”的主题词,将一个“簇”中的所有文档拼接起来作为新的单个文档,然后使用TF-IDF方法提取类别标签,并将其作为源代码语义功能的原始标签;
S2125. 修订聚类标签,校正类别标签名称。
进一步地,步骤S2122中使用Sentence-transformer作为文本的编码器,使用Paraphrase-multilingual-MiniLM-L12-v2作为预训练模型。
进一步地,步骤S3包括以下子步骤:
S301. 模型的部署以及上线:使用docker容器化的方式将二进制程序函数同源性分析模型和二进制程序函数功能识别模型部署上线;
S302. 获取用户反馈标签:将静态分析人员反馈的二进制函数原始信息、二进制同源分析、二进制函数功能识别标签信息进行实时切分,得到原始训练数据和原始标签数据,通过pipeline的方式推送到kafka消息队列;
S303. 流式代码特征提取:采用开源的流批一体化处理框架flink,建立特征处理管道,最后得到特征向量;
S304. 模型的流式训练:基于FTRL即跟随正则化领导算法对二进制程序函数同源性分析模型和二进制程序函数功能识别模型进行在线学习。
进一步地,步骤S303中建立特征处理管道包括StandardScaler和FeatureHasher作为标准化缩放和特征哈希。
本发明利用了互联网二进制程序提取语义信息,构建了二进制程序大规模语义特征知识库,训练二进制程序函数同源性分析和二进制程序函数功能识别模型,设计了二进制程序漏洞静态分析的人机协同反馈机制,大大提升了二进制程序漏洞静态分析的速度,相比现有方案主要具备以下有益效果和优点:
1.构建了大规模的二进制程序特征知识库,可解决人机协同环节中机器智能与人类智能的知识互通;
2.采用二进制程序函数同源性分析和二进制程序函数功能识别两个机器智能模型,可解决二进制程序漏洞挖掘中人力投入大且效率较低的问题;
3.采用实时的在线学习机制,可解决机器智能与漏洞挖掘者的能力互补反馈问题,构建能够自我不断更新的机器智能。
附图说明
图1 典型的二进制程序漏洞静态分析方法流程图。
图2 本发明二进制程序漏洞静态分析方法流程图。
图3 本发明的二进制程序特征知识库建立流程图。
图4 本发明的二进制特征提取流程图。
图5 本发明的二进制程序函数功能识别流程图。
图6 本发明的模型在线学习流程图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现说明本发明的具体实施方式。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为典型的二进制程序漏洞静态分析方法流程,首先是使用静态反汇编软件自动解析目标二进制程序,获取控制流图、字符串、函数调用图等信息;然后漏洞挖掘者理解二进制程序中各个函数的功能以及它们之间的逻辑关系,利用反汇编代码逆向可能存在漏洞的函数功能源代码;最后是人工分析可能存在的漏洞。典型的二进制程序漏洞静态分析目标是利用静态分析的手段,挖掘分析二进制程序中可能存在的漏洞,这个过程往往是人工参与较多且需要参与者的专业知识,非常耗费人力资源。
因此,本实施例提供了一种基于人机协同的二进制程序漏洞静态分析方法流程,如图2所示,在挖掘漏洞前的先期工作是通过对二进制程序的大规模语义信息提取,建立二进制程序的语义知识库,进而训练二进制程序函数同源性分析模型和二进制程序函数功能识别模型两个深度学习模型;然后使用反汇编软件自动解析目标二进制程序,获取控制流图、字符串、函数调用图等信息,并将这些信息进行特征抽取作为深度学习模型的输入;接下来,漏洞挖掘者(二进制程序漏洞静态分析人员)根据机器智能给出的分析结果完成二进制程序漏洞挖掘分析;最后漏洞挖掘者将分析结果反馈到机器智能完成模型的在线训练。
具体地,本实施例提供的一种基于人机协同的二进制程序漏洞静态分析方法包括以下步骤:
S1. 通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;
S2. 建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;
S3. 建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型。
其中,信息采集(信息提取)是在遵守各种现有代码协议(如BSD、GPL、LGPL、MIT)的基础上,从互联网开源代码发布平台(如GitHub、Gitee、SourceForge等)获取各种编程语言的现有项目。
优选地,如图3所示,步骤S1包括以下子步骤:
S101. 从互联网开源代码发布平台采集提取开源项目的相关信息,例如名称、开发者、关注度、星级、链等;并根据开源项目的星级对开源项目按活跃度进行分类,例如分为较为活跃项目、一般活跃项目以及不活跃项目;
S102. 按照开源项目的活跃度优选下载较为活跃的项目,使用开源工具git作为项目下载器下载项目的各个大版本分支,例如:git clone -b项目版本分支-项目地址;
S103. 为了使得二进制片段与源代码函数片段能够建立联系,使用修改过的LLVM编译器作为二进制程序关联源代码的标注器,在多个交叉编译环境不同的编译优化策略下编译漏洞项目,例如:arm、mips、X86交叉编译环境,O1、O2、O3等编译优化策略;输出多个架构、多个优化策略生成的带有代码标注的二进制程序;
S104. 使用多元组描述存储二进制程序的特征知识,将收集获取到的二进制程序与已构建的知识库中知识进行融合,融合的依据包括二进制程序哈希值。
更为优选地,步骤S104中使用多元组描述存储二进制程序的特征知识包括:使用六元组描述二进制程序=[CID、二进制程序哈希值、二进制程序名、程序架构、来源、函数个数],使用七元组描述二进制函数特征=[FID、CID、函数哈希值、函数名、参数个数、特征向量、函数功能],其中CID、FID是用于关联函数与二进制程序的字段,二进制程序哈希值、函数哈希值作为唯一标识,特征向量字段由二进制程序函数同源性分析模型获取,函数功能字段由二进制程序函数功能识别模型获取。
优选地,如图4所示,步骤2中二进制程序函数同源性分析模型的建立和同源性分析包括以下子步骤:
S201. 从步骤S1获取的二进制程序中提取二进制字符串、立即数和函数,构建适合二进制程序同源分析的数据集,然后训练一个同源性分析模型,将该模型的倒数第二层作为特征表示层向量,并将提取到的二进制函数输入到该模型获得特征向量;
S202. 利用开源的反汇编软件从二进制程序提取程序的多维度特征,按照源代码函数所在的文件路径、函数名称两个准则,将同一份源代码函数对应的不同编译条件下二进制函数的配对作为训练集的正样本,负样本是从剩下的未配对的样本随机抽取配对,从而构建二进制相似函数的正反样例数据集;
S203. 使用正反样例数据集训练一个输入特征=[函数调用图、字符串、立即数],输出=[相似、不相似]的深度神经网络,作为二进制程序函数同源性判别模型,该模型的倒数第二层是二进制程序函数特征表示层向量,将提取到的全部二进制函数输入到训练好的同源性判别模型获得特征向量,并将该特征向量存储到知识库;
S204. 将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断待测特征向量集是否超过设定的阈值,比对结果判断是否为同源的二进制程序。
优选地,如图5所示,步骤2中二进制程序函数功能识别模型的建立和函数功能识别包括以下子步骤:
S211. 从步骤S1获取的二进制函数关联的源代码中提取代码注释、库函数API的调用情况,再通过检索库函数自带的文档获取文本信息,将文本按照出现的顺序组合成代码的语义信息;
S212. 训练一个无监督深度神经网络的文本聚类模型,再通过修订聚类标签的方法得到准确的类别标签,将源代码识别到的类别关联到二进制函数,完成二进制函数功能识别。
更为优选地,步骤S212中无监督深度神经网络的文本聚类模型使用BERT预训练模型作为文本表示为数值向量的词嵌入工具,具体包括以下子步骤:
S2121. 载入数据,进行数据预处理以去除干扰元素,所述干扰元素包括特殊符号、非中英文的字符;并过滤掉较短的文本,例如将小于5个词的句子进行过滤;
S2122. 创建高质量的语句嵌入以将文档向量化并减少数据转换过程中带来的语义损失,具体可使用Sentence-transformer作为文本的编码器,使用Paraphrase-multilingual-MiniLM-L12-v2作为预训练模型,它支持包括中文在内的多语言,处理速度较快;
S2123. 利用HDBSCAN算法进行文档聚类,基于密度的聚类算法寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”,实现源代码语义功能基于层次和密度的聚类;
S2124. 使用class-based TF-IDF方法提取每个“簇”的主题词,将一个“簇”中的所有文档拼接起来作为新的单个文档,然后使用TF-IDF方法提取类别标签,并将其作为源代码语义功能的原始标签;
S2125. 修订聚类标签,由于自动化打的函数功能标签可能存在可读性差的问题,这一步通过人工校正类别标签名称。
为了解决人机交互反馈的问题,本实施例设计了一种模型的在线学习方式,能够根据二进制程序漏洞静态分析反馈的数据,实时快速地进行模型调整,使得模型及时反映线上的变化,提高线上辅助分析的准确率,流程包括:将模型的预测或分类结果展现给二进制静态分析人员,然后收集用户的反馈数据,再用来训练模型,形成闭环的系统。如图6所示,具体包括以下步骤:
S301. 模型的部署以及上线:使用docker容器化的方式将二进制程序函数同源性分析模型和二进制程序函数功能识别模型部署上线;
S302. 获取用户反馈标签:将静态分析人员反馈的二进制函数原始信息、二进制同源分析、二进制函数功能识别标签信息进行实时切分,得到原始训练数据和原始标签数据,通过pipeline的方式推送到kafka消息队列;
S303. 流式代码特征提取:采用开源的流批一体化处理框架flink,建立特征处理管道,其包括StandardScaler和FeatureHasher作为标准化缩放和特征哈希,最后得到特征向量;
S304. 模型的流式训练:一般的非实时的线上模型使用的批量(batch)训练算法需要把训练数据加载到内存中计算(计算全局梯度),而在线学习模型处理的样本都是稀疏且没有批次的,批量训练算法没法应用于数据流做在线学习。本实施例使用的是FTRL(Follow-the-regularized-Leader)算法,该算法在目标函数使用了混合正则项,添加L1正则项可增加模型解的稀疏性,添加L2正则项有利于防止模型过拟合:
同时使用了在线梯度下降方法,只根据当前一个数据所得到的有偏差的梯度,对
别的项的减少程度是未知的,优势在于每步是需要当前的一个数据,该方法综合了精度和
稀疏性的特点。在线梯度下降算法利用当前得到数据对进行一次梯度下降得到,如果
新的在H中,则将其投影:
需要说明的是,对于前述的方法实施例,为了简便描述,故将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
Claims (10)
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. 将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断待测特征向量集是否超过设定的阈值,比对结果判断是否为同源的二进制程序。
5.根据权利要求1所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤2中二进制程序函数功能识别模型的建立和函数功能识别包括以下子步骤:
S211. 从步骤S1获取的二进制函数关联的源代码中提取代码注释、库函数API的调用情况,再通过检索库函数自带的文档获取文本信息,将文本按照出现的顺序组合成代码的语义信息;
S212. 训练一个无监督深度神经网络的文本聚类模型,再通过修订聚类标签的方法得到准确的类别标签,将源代码识别到的类别关联到二进制函数,完成二进制函数功能识别。
6.根据权利要求5所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S212中无监督深度神经网络的文本聚类模型使用BERT预训练模型作为文本表示为数值向量的词嵌入工具。
7.根据权利要求6所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S212包括以下子步骤:
S2121. 载入数据,进行数据预处理以去除干扰元素,所述干扰元素包括特殊符号、非中英文的字符;
S2122. 创建高质量的语句嵌入以将文档向量化并减少数据转换过程中带来的语义损失;
S2123. 利用HDBSCAN算法进行文档聚类,基于密度的聚类算法寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”,实现源代码语义功能基于层次和密度的聚类;
S2124. 使用class-based TF-IDF方法提取每个“簇”的主题词,将一个“簇”中的所有文档拼接起来作为新的单个文档,然后使用TF-IDF方法提取类别标签,并将其作为源代码语义功能的原始标签;
S2125. 修订聚类标签,校正类别标签名称。
8.根据权利要求7所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S2122中使用Sentence-transformer作为文本的编码器,使用Paraphrase-multilingual-MiniLM-L12-v2作为预训练模型。
9.根据权利要求1-8任一项所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S3包括以下子步骤:
S301. 模型的部署以及上线:使用docker容器化的方式将二进制程序函数同源性分析模型和二进制程序函数功能识别模型部署上线;
S302. 获取用户反馈标签:将静态分析人员反馈的二进制函数原始信息、二进制同源分析、二进制函数功能识别标签信息进行实时切分,得到原始训练数据和原始标签数据,通过pipeline的方式推送到kafka消息队列;
S303. 流式代码特征提取:采用开源的流批一体化处理框架flink,建立特征处理管道,最后得到特征向量;
S304. 模型的流式训练:基于FTRL即跟随正则化领导算法对二进制程序函数同源性分析模型和二进制程序函数功能识别模型进行在线学习。
10.根据权利要求9所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S303中建立特征处理管道包括StandardScaler和FeatureHasher作为标准化缩放和特征哈希。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557364.0A CN115563627B (zh) | 2022-12-06 | 2022-12-06 | 一种基于人机协同的二进制程序漏洞静态分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557364.0A CN115563627B (zh) | 2022-12-06 | 2022-12-06 | 一种基于人机协同的二进制程序漏洞静态分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115563627A true CN115563627A (zh) | 2023-01-03 |
CN115563627B CN115563627B (zh) | 2023-03-14 |
Family
ID=84770721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211557364.0A Active CN115563627B (zh) | 2022-12-06 | 2022-12-06 | 一种基于人机协同的二进制程序漏洞静态分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115563627B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795489A (zh) * | 2023-02-09 | 2023-03-14 | 中国电子科技集团公司第三十研究所 | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 |
CN115934090A (zh) * | 2023-01-05 | 2023-04-07 | 山东省计算中心(国家超级计算济南中心) | 一种由二进制代码转换源代码的方法 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110708279A (zh) * | 2019-08-19 | 2020-01-17 | 中国电子科技网络信息安全有限公司 | 一种基于群体智能的漏洞挖掘模型构建方法 |
CN110717328A (zh) * | 2019-07-04 | 2020-01-21 | 北京达佳互联信息技术有限公司 | 文本识别方法、装置、电子设备及存储介质 |
CN111651768A (zh) * | 2020-08-05 | 2020-09-11 | 中国人民解放军国防科技大学 | 计算机二进制程序的链接库函数名识别方法及装置 |
CN111723380A (zh) * | 2020-06-22 | 2020-09-29 | 深圳前海微众银行股份有限公司 | 一种检测组件漏洞的方法及装置 |
US20210034757A1 (en) * | 2019-07-31 | 2021-02-04 | Blackberry Limited | Binary vulnerability determination |
CN112800423A (zh) * | 2021-01-26 | 2021-05-14 | 北京航空航天大学 | 一种二进制代码授权漏洞检测方法 |
CN113468525A (zh) * | 2021-05-24 | 2021-10-01 | 中国科学院信息工程研究所 | 针对二进制程序的相似漏洞检测方法及装置 |
CN113742205A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于人机协同的代码漏洞智能检测方法 |
US20220244953A1 (en) * | 2020-05-22 | 2022-08-04 | The George Washington University | Binary code similarity detection system |
CN115033895A (zh) * | 2022-08-12 | 2022-09-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
CN115129864A (zh) * | 2022-05-06 | 2022-09-30 | 深圳追一科技有限公司 | 文本分类方法、装置、计算机设备和存储介质 |
CN115168856A (zh) * | 2022-07-29 | 2022-10-11 | 山东省计算中心(国家超级计算济南中心) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 |
US20220329616A1 (en) * | 2017-11-27 | 2022-10-13 | Lacework, Inc. | Using static analysis for vulnerability detection |
-
2022
- 2022-12-06 CN CN202211557364.0A patent/CN115563627B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220329616A1 (en) * | 2017-11-27 | 2022-10-13 | Lacework, Inc. | Using static analysis for vulnerability detection |
CN110717328A (zh) * | 2019-07-04 | 2020-01-21 | 北京达佳互联信息技术有限公司 | 文本识别方法、装置、电子设备及存储介质 |
US20210034757A1 (en) * | 2019-07-31 | 2021-02-04 | Blackberry Limited | Binary vulnerability determination |
CN110708279A (zh) * | 2019-08-19 | 2020-01-17 | 中国电子科技网络信息安全有限公司 | 一种基于群体智能的漏洞挖掘模型构建方法 |
US20220244953A1 (en) * | 2020-05-22 | 2022-08-04 | The George Washington University | Binary code similarity detection system |
CN113742205A (zh) * | 2020-05-27 | 2021-12-03 | 南京大学 | 一种基于人机协同的代码漏洞智能检测方法 |
CN111723380A (zh) * | 2020-06-22 | 2020-09-29 | 深圳前海微众银行股份有限公司 | 一种检测组件漏洞的方法及装置 |
CN111651768A (zh) * | 2020-08-05 | 2020-09-11 | 中国人民解放军国防科技大学 | 计算机二进制程序的链接库函数名识别方法及装置 |
CN112800423A (zh) * | 2021-01-26 | 2021-05-14 | 北京航空航天大学 | 一种二进制代码授权漏洞检测方法 |
CN113468525A (zh) * | 2021-05-24 | 2021-10-01 | 中国科学院信息工程研究所 | 针对二进制程序的相似漏洞检测方法及装置 |
CN115129864A (zh) * | 2022-05-06 | 2022-09-30 | 深圳追一科技有限公司 | 文本分类方法、装置、计算机设备和存储介质 |
CN115168856A (zh) * | 2022-07-29 | 2022-10-11 | 山东省计算中心(国家超级计算济南中心) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 |
CN115033895A (zh) * | 2022-08-12 | 2022-09-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
Non-Patent Citations (6)
Title |
---|
JIE LIU 等: "Software Vulnerability Mining Based on the Human-Computer Coordination", 《IHSI 2020: INTELLIGENT HUMAN SYSTEMS INTEGRATION 2020》 * |
ZEMING TAI 等: "Binary Similarity Analysis for Vulnerability Detection", 《2020 IEEE 44TH ANNUAL COMPUTERS, SOFTWARE, AND APPLICATIONS CONFERENCE (COMPSAC)》 * |
王晓晨等: "自动协议逆向工程研究综述", 《计算机应用研究》 * |
韩烨 等: "基于机器学习的二进制代码相似性分析技术综述", 《通信技术》 * |
饶志宏: "群智漏洞挖掘技术", 《信息安全与通信保密》 * |
黎奇等: "基于图拓扑特征的恶意软件同源性分析技术研究", 《现代计算机(专业版)》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115934090A (zh) * | 2023-01-05 | 2023-04-07 | 山东省计算中心(国家超级计算济南中心) | 一种由二进制代码转换源代码的方法 |
CN115934090B (zh) * | 2023-01-05 | 2023-05-23 | 山东省计算中心(国家超级计算济南中心) | 一种由二进制代码转换源代码的方法 |
CN115795489A (zh) * | 2023-02-09 | 2023-03-14 | 中国电子科技集团公司第三十研究所 | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115563627B (zh) | 2023-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107885999B (zh) | 一种基于深度学习的漏洞检测方法及系统 | |
US20220405592A1 (en) | Multi-feature log anomaly detection method and system based on log full semantics | |
Yang et al. | A survey on deep learning for software engineering | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN115563627B (zh) | 一种基于人机协同的二进制程序漏洞静态分析方法 | |
CN112070138B (zh) | 多标签混合分类模型的构建方法、新闻分类方法及系统 | |
CN108491228B (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN112307473A (zh) | 一种基于Bi-LSTM网络和注意力机制的恶意JavaScript代码检测模型 | |
CN110888798B (zh) | 一种基于图卷积神经网络对软件缺陷预测方法 | |
CN110968869B (zh) | 一种基于深度学习的大规模恶意软件分类系统和方法 | |
CN113138920B (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN110929119A (zh) | 数据标注方法、装置、设备及计算机存储介质 | |
CN103049490A (zh) | 知识网络节点间属性生成系统及生成方法 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN116661805A (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
Altinbas et al. | GUI element detection from mobile UI images using YOLOv5 | |
CN111859862B (zh) | 文本的数据标注方法和装置、存储介质及电子装置 | |
Omar et al. | From text to threats: A language model approach to software vulnerability detection | |
Panthum et al. | Generating functional requirements based on classification of mobile application user reviews | |
CN113377962B (zh) | 一种基于图像识别和自然语言处理的智能过程模拟方法 | |
CN115098637A (zh) | 一种基于汉字形音义多元知识的文本语义匹配方法和系统 | |
CN115204179A (zh) | 基于电网公共数据模型的实体关系预测的方法及装置 | |
CN114822726A (zh) | 构建方法、分析方法、装置、存储介质和计算机设备 | |
Phan et al. | Exploiting tree structures for classifying programs by functionalities |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |