CN115563627B - 一种基于人机协同的二进制程序漏洞静态分析方法 - Google Patents

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

Info

Publication number
CN115563627B
CN115563627B CN202211557364.0A CN202211557364A CN115563627B CN 115563627 B CN115563627 B CN 115563627B CN 202211557364 A CN202211557364 A CN 202211557364A CN 115563627 B CN115563627 B CN 115563627B
Authority
CN
China
Prior art keywords
function
binary
binary program
model
program
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.)
Active
Application number
CN202211557364.0A
Other languages
English (en)
Other versions
CN115563627A (zh
Inventor
孙治
毛得明
陈剑锋
饶志宏
韩烨
赵童
王炳文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 30 Research Institute
Original Assignee
CETC 30 Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CETC 30 Research Institute filed Critical CETC 30 Research Institute
Priority to CN202211557364.0A priority Critical patent/CN115563627B/zh
Publication of CN115563627A publication Critical patent/CN115563627A/zh
Application granted granted Critical
Publication of CN115563627B publication Critical patent/CN115563627B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/35Clustering; Classification
    • G06F16/355Class or cluster creation or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; 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正则项有利于防止模型过拟合:
Figure 839402DEST_PATH_IMAGE001
其中
Figure 802941DEST_PATH_IMAGE002
是混合正则项,
Figure 446412DEST_PATH_IMAGE003
Figure 781579DEST_PATH_IMAGE004
分别表示L1、L2正则项,
Figure 448183DEST_PATH_IMAGE005
Figure 526998DEST_PATH_IMAGE006
是参数。
同时使用了在线梯度下降方法,只根据当前一个数据所得到的有偏差的梯度,对 别的项的减少程度是未知的,优势在于每步是需要当前的一个数据,该方法综合了精度和 稀疏性的特点。在线梯度下降算法利用当前得到数据
Figure 24975DEST_PATH_IMAGE007
对进行一次梯度下降得到
Figure 983573DEST_PATH_IMAGE008
,如果 新的
Figure 934211DEST_PATH_IMAGE008
在H中,则将其投影:
Figure 816717DEST_PATH_IMAGE009
其中
Figure 169201DEST_PATH_IMAGE010
是关于
Figure 49432DEST_PATH_IMAGE011
的导数,
Figure 487366DEST_PATH_IMAGE012
是学习率,
Figure 907984DEST_PATH_IMAGE013
是投影子。
需要说明的是,对于前述的方法实施例,为了简便描述,故将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

Claims (8)

1.一种基于人机协同的二进制程序漏洞静态分析方法,其特征在于,包括以下步骤:
S1.通过大规模的二进制程序语义信息提取,建立二进制程序函数粒度的语义知识库,并通过计算语义特征向量的距离将二进制代码转换为文本或者源代码;
S2.建立二进制程序函数同源性分析模型和二进制程序函数功能识别模型,通过这两个深度学习模型将原本需要人工分析的函数功能理解、代码逆向过程转换为半自动化的机器辅助分析过程;
S3. 建立深度学习模型实时在线学习的机制,通过设立接收用户反馈消息队列,利用流式数据处理引擎以及在线学习训练算法,将离线的静态深度学习模型转换为能够实时更新的在线模型;
步骤2中二进制程序函数同源性分析模型的建立和同源性分析包括以下子步骤:
S201.从步骤S1获取的二进制程序中提取二进制字符串、立即数和函数,构建适合二进制程序同源分析的数据集,然后训练一个同源性分析模型,将该模型的倒数第二层作为特征表示层向量,并将提取到的二进制函数输入到该模型获得特征向量;
S202.利用开源的反汇编软件从二进制程序提取程序的多维度特征,按照源代码函数所在的文件路径、函数名称两个准则,将同一份源代码函数对应的不同编译条件下二进制函数的配对作为训练集的正样本,负样本是从剩下的未配对的样本随机抽取配对,从而构建二进制相似函数的正反样例数据集;
S203.使用正反样例数据集训练一个输入特征=[函数调用图、字符串、立即数],输出=[相似、不相似]的深度神经网络,作为二进制程序函数同源性判别模型,该模型的倒数第二层是二进制程序函数特征表示层向量,将提取到的全部二进制函数输入到训练好的同源性判别模型获得特征向量,并将该特征向量存储到知识库;
S204.将待检测的二进制函数输入同源性判别模型得到特征向量,利用存储在知识库中的函数特征向量,通过余弦距离检索待检测的特征向量,判断待测特征向量集是否超过设定的阈值,比对结果判断是否为同源的二进制程序;
步骤2中二进制程序函数功能识别模型的建立和函数功能识别包括以下子步骤:
S211.从步骤S1获取的二进制函数关联的源代码中提取代码注释、库函数API的调用情况,再通过检索库函数自带的文档获取文本信息,将文本按照出现的顺序组合成代码的语义信息;
S212.训练一个无监督深度神经网络的文本聚类模型,再通过修订聚类标签的方法得到准确的类别标签,将源代码识别到的类别关联到二进制函数,完成二进制函数功能识别。
2.根据权利要求1所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S1包括以下子步骤:
S101.从互联网开源代码发布平台采集提取开源项目的相关信息,并根据开源项目的星级对开源项目按活跃度进行分类;
S102.按照开源项目的活跃度优选下载较为活跃的项目,使用开源工具git作为项目下载器下载项目的各个大版本分支;
S103.使用修改过的LLVM编译器作为二进制程序关联源代码的标注器,在多个交叉编译环境不同的编译优化策略下编译漏洞项目,输出多个架构、多个优化策略生成的带有代码标注的二进制程序,使得二进制片段与源代码函数片段能够建立联系;
S104.使用多元组描述存储二进制程序的特征知识,将收集获取到的二进制程序与已构建的知识库中知识进行融合,融合的依据包括二进制程序哈希值。
3.根据权利要求2所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S104中使用多元组描述存储二进制程序的特征知识包括:使用六元组描述二进制程序=[CID、二进制程序哈希值、二进制程序名、程序架构、来源、函数个数],使用七元组描述二进制函数特征=[FID、CID、函数哈希值、函数名、参数个数、特征向量、函数功能],其中CID、FID是用于关联函数与二进制程序的字段,二进制程序哈希值、函数哈希值作为唯一标识,特征向量字段由二进制程序函数同源性分析模型获取,函数功能字段由二进制程序函数功能识别模型获取。
4.根据权利要求1所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S212中无监督深度神经网络的文本聚类模型使用BERT预训练模型作为文本表示为数值向量的词嵌入工具。
5.根据权利要求4所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S212包括以下子步骤:
S2121.载入数据,进行数据预处理以去除干扰元素,所述干扰元素包括特殊符号、非中英文的字符;
S2122.创建高质量的语句嵌入以将文档向量化并减少数据转换过程中带来的语义损失;
S2123.利用HDBSCAN算法进行文档聚类,基于密度的聚类算法寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”,实现源代码语义功能基于层次和密度的聚类;
S2124.使用class-basedTF-IDF方法提取每个“簇”的主题词,将一个“簇”中的所有文档拼接起来作为新的单个文档,然后使用TF-IDF方法提取类别标签,并将其作为源代码语义功能的原始标签;
S2125.修订聚类标签,校正类别标签名称。
6.根据权利要求5所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S2122中使用Sentence-transformer作为文本的编码器,使用Paraphrase-multilingual-MiniLM-L12-v2作为预训练模型。
7.根据权利要求1-6任一项所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S3包括以下子步骤:
S301.模型的部署以及上线:使用docker容器化的方式将二进制程序函数同源性分析模型和二进制程序函数功能识别模型部署上线;
S302.获取用户反馈标签:将静态分析人员反馈的二进制函数原始信息、二进制同源分析、二进制函数功能识别标签信息进行实时切分,得到原始训练数据和原始标签数据,通过pipeline的方式推送到kafka消息队列;
S303.流式代码特征提取:采用开源的流批一体化处理框架flink,建立特征处理管道,最后得到特征向量;
S304.模型的流式训练:基于FTRL即跟随正则化领导算法对二进制程序函数同源性分析模型和二进制程序函数功能识别模型进行在线学习。
8.根据权利要求7所述的基于人机协同的二进制程序漏洞静态分析方法,其特征在于,步骤S303中建立特征处理管道包括StandardScaler和FeatureHasher作为标准化缩放和特征哈希。
CN202211557364.0A 2022-12-06 2022-12-06 一种基于人机协同的二进制程序漏洞静态分析方法 Active CN115563627B (zh)

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 CN115563627A (zh) 2023-01-03
CN115563627B true 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)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115934090B (zh) * 2023-01-05 2023-05-23 山东省计算中心(国家超级计算济南中心) 一种由二进制代码转换源代码的方法
CN115795489B (zh) * 2023-02-09 2023-05-09 中国电子科技集团公司第三十研究所 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置

Citations (10)

* Cited by examiner, † Cited by third party
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 深圳前海微众银行股份有限公司 一种检测组件漏洞的方法及装置
CN112800423A (zh) * 2021-01-26 2021-05-14 北京航空航天大学 一种二进制代码授权漏洞检测方法
CN113468525A (zh) * 2021-05-24 2021-10-01 中国科学院信息工程研究所 针对二进制程序的相似漏洞检测方法及装置
CN113742205A (zh) * 2020-05-27 2021-12-03 南京大学 一种基于人机协同的代码漏洞智能检测方法
CN115033895A (zh) * 2022-08-12 2022-09-09 中国电子科技集团公司第三十研究所 一种二进制程序供应链安全检测方法及装置
CN115129864A (zh) * 2022-05-06 2022-09-30 深圳追一科技有限公司 文本分类方法、装置、计算机设备和存储介质
CN115168856A (zh) * 2022-07-29 2022-10-11 山东省计算中心(国家超级计算济南中心) 二进制代码相似性检测方法及物联网固件漏洞检测方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220329616A1 (en) * 2017-11-27 2022-10-13 Lacework, Inc. Using static analysis for vulnerability detection
US11210405B2 (en) * 2019-07-31 2021-12-28 Blackberry Limited Binary vulnerability determination
US11934458B2 (en) * 2020-05-22 2024-03-19 The George Washington University Binary code similarity detection system

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110717328A (zh) * 2019-07-04 2020-01-21 北京达佳互联信息技术有限公司 文本识别方法、装置、电子设备及存储介质
CN110708279A (zh) * 2019-08-19 2020-01-17 中国电子科技网络信息安全有限公司 一种基于群体智能的漏洞挖掘模型构建方法
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)

* Cited by examiner, † Cited by third party
Title
Binary Similarity Analysis for Vulnerability Detection;Zeming Tai 等;《2020 IEEE 44th Annual Computers, Software, and Applications Conference (COMPSAC)》;20200922;1121-122 *
Software Vulnerability Mining Based on the Human-Computer Coordination;Jie Liu 等;《IHSI 2020: Intelligent Human Systems Integration 2020》;20200122;532–538 *
基于图拓扑特征的恶意软件同源性分析技术研究;黎奇等;《现代计算机(专业版)》;20190325(第09期);29-34 *
基于机器学习的二进制代码相似性分析技术综述;韩烨 等;《通信技术》;20220930;第55卷(第09期);1105-1111 *
群智漏洞挖掘技术;饶志宏;《信息安全与通信保密》;20190228(第2期);14-17 *
自动协议逆向工程研究综述;王晓晨等;《计算机应用研究》;20200905(第09期);7-16+31 *

Also Published As

Publication number Publication date
CN115563627A (zh) 2023-01-03

Similar Documents

Publication Publication Date Title
CN107885999B (zh) 一种基于深度学习的漏洞检测方法及系统
CN115563627B (zh) 一种基于人机协同的二进制程序漏洞静态分析方法
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
US20220405592A1 (en) Multi-feature log anomaly detection method and system based on log full semantics
Staar et al. Corpus conversion service: A machine learning platform to ingest documents at scale
CN111309910A (zh) 文本信息挖掘方法及装置
WO2022226716A1 (zh) 基于深度学习的Java程序内部注释的生成方法及系统
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN113609488A (zh) 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统
CN103049490A (zh) 知识网络节点间属性生成系统及生成方法
CN112925879A (zh) 信息处理装置、存储介质及信息处理方法
CN114691525A (zh) 测试用例的选择方法及装置
CN111859862B (zh) 文本的数据标注方法和装置、存储介质及电子装置
CN116663019B (zh) 一种源代码漏洞检测方法、装置和系统
Altinbas et al. GUI element detection from mobile UI images using YOLOv5
Zeng et al. An efficient vulnerability extrapolation using similarity of graph kernel of pdgs
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN113377962B (zh) 一种基于图像识别和自然语言处理的智能过程模拟方法
CN114822726A (zh) 构建方法、分析方法、装置、存储介质和计算机设备
CN112733144B (zh) 一种基于深度学习技术的恶意程序智能检测方法
Han et al. A novel malware detection approach based on behavioral semantic analysis and LSTM model
CN115204179A (zh) 基于电网公共数据模型的实体关系预测的方法及装置
Panthum et al. Generating functional requirements based on classification of mobile application user reviews
CN110019772B (zh) 一种文本情绪分类方法及系统
CN116994076B (zh) 一种基于双分支相互学习特征生成的小样本图像识别方法

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