一种基于深度学习图网络的加密算法识别方法与流程

文档序号:21635781发布日期:2020-07-29 02:46阅读:512来源:国知局
一种基于深度学习图网络的加密算法识别方法与流程

本发明属于计算机软件安全领域,涉及算法的加密与识别,特别涉及一种基于深度学习图网络的加密算法识别方法。



背景技术:

1.1相关技术背景

信息安全目前已上升到国家安全的战略地位,加密算法作为数据传输安全与否的核心,广泛的应用于政治,金融,通讯等方面。而随着lot技术的发展,嵌入式系统也越来越多地应用于各种lot设备中,其安全性也是当前信息安全研究的重点之一。长期以来,我国在金融企业、政府机关等安全要求等级高的行业,除了沿用3des、sha-1、rsa等国际通用的密码算法体系和标准,还有一套国家密码管理局制定的自主可控的国产算法:国密算法,包括sm1~4、sm7、sm9、祖冲之密码算法(zuc)等。在金融领域目前主要使用公开的sm2(非对称加密算法)、sm3(哈希算法)、sm4(对称加密算法)三种商用密码算法。国密算法比起传统国际标准算法有计算轮数多,密码复杂度高,压缩函数更加复杂等优势。

由于加密技术在信息安全中的重要性,国家密码局出台了一系列措施来进行密码技术管理的规范化。然而很多情况下,有些公司和企业在进行对软甲的加密保护时存在“误用不符合规定的加密算法”、“加密算法强度不够”、“未使用加密算法”等问题。使用高强度加密措施一定会在某种程度上影响软件的性能和用户体验,某些企业为了效益最大化并未按照要求的安全标准使用加密算法进行加密,导致文件中存在大量安全隐患,用户和机关的安全隐私受到威胁。同时恶意软件也往往采用密码算法的保护机制隐藏其静态恶意特征,加大了程序逆向分析人员的剖析难度。

因此,亟需一种可适用于文件的加密状态和加密算法合规性检查的技术,以支撑密码检查工作的高效推进。

1.2与本发明相关的现有技术

1.2.1密码算法检测

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码“密文”的过程。加密算法检测作为密码分析的重点,受到研究人员的广泛关注,maiorcad等人使用静态指令分析,通过加密算法中,“指令的大部分为位运算指令”这个特征来判断是否为加密算法。liutieming等人通过特征字匹配来进行加密算法识别,虽然识别效率很高,但是识别的误报率却难以让人接受。tzermiasz等人通过加密算法的两个特征“密集计算型”和“大量循环操作”来分析软件的信息熵,判断是否使用了加密算法(加密过程中函数的信息熵会增加)。李继中等人在此基础上验证了密码算法内存数据的高熵值性,并且构建了信息熵动态循环加密函数,结合静态特征分析建立了分析模型。但上述方法仅能对“目标文件是否使用加密函数”这一问题进行分析,并不能得到目标函数中具体使用了哪种加密算法,而在密码分析中确定加密算法类型往往是分析的第一步。蒋烈辉等人通过构建汇编级加密算法特征向量的贝叶斯决策识别模型,利用了贝叶斯分类模型速度快、空间开销小等特点,高效的进行了加密算法分析,但准确率仍有待提高。liux等人使用了一种使用循环i/o的加密算法识别法。通过识别与记录程序轨迹信息中的循环结构,将其输入输出数据代入到标准加密算法中进行匹配,如匹配成功则代表使用方法与标准算法一致,但该方法无法识别无循环的加密算法,同时在o3优化级别下有些加密算法的循环结构会被隐藏(如aes),这时在汇编代码中将无法检测到加密算法。林伟等人提出一种基于数据流分析的加密算法识别方法,利用递进式多特征方法对加密算法进行识别。可以精确的定位到加密算法在函数中的位置,方便做后续的分析与查证,但由于数据流特性以及污点分析等方式的局限性,较原有方法虽有较高的精度,但其性能表现较差。

1.2.2静态二进制相似性检测

静态代码分析是指在不运行代码的情况下对软件进行分析,静态分析的优势是在于能够覆盖到全部代码,并且能够简单适配跨平台体系的二进制代码相似性检测方案。havrilla等人和wesleyjin等人对组成函数的所有代码块的语义和结构进行哈希运算,然后进行二次非对称运算,通过比较这些值来比较函数是否相似。jannikpewny等人通过对二进制代码反汇编将其转化为一种中间语言vex-ir来生成基本块的表达式,进而生成各个基本块儿的签名,生成函数的签名列表,以此来比较两个函数的相似度。但是,它基于模糊基本块的相似度比较算法开销过于昂贵,无法处理大量函数问题。discovre利用预过滤法来增强基于cfg的匹配过程,但是它的性能仍然让人难以接受,并且预过滤不可靠,会输出过多的假阴性用例。esh都将基本块间的数据流进行切片,并将其作为基本单元进行比较,得到了更好的结果。

总之,目前信息化系统的加密算法使用情况检查主要以询问、调研等管理手段为主,缺乏有效检查技术和工具,来支撑密码检查工作的高效推进,其中,技术难点主要体现在:

1、对于大部分待检测文件,无法得到目标源码;

2、文件分布在不同应用系统,提取较难,需要解决文件跨平台检测的难题;

3、文件格式多样,无法甄别是否进行加密,更难以判断采用的加密机制是否合规;



技术实现要素:

针对上述现有技术存在的缺陷或不足,本发明的目的在于,提供一种基于深度学习图网络的加密算法识别方法,该方法将深度学习图网络与二进制相似性检测相结合,进行加密算法识别。

为了实现上述任务,本发明采取如下的技术解决方案:

一种基于深度学习图网络的加密算法识别方法,其特征在于,该方法由训练过程和检查过程组成,其中:

训练过程是:首先对爬取的加密无关的源代码整合大量爬取的与加密相关的源码数据,来构建基础源码库;然后通过对基础源码库进行交叉编译预处理,得到二进制代码库;分别提取二进制加密算法的统计特征与结构特征整合生成加密算法图,将加密算法图嵌入到神经网络中变为向量形式,通过检查比较向量间的距离远近即可判断代码是否相似,经训练后得到有能力判断加密算法图的嵌入向量是否相似的模型;

检查过程是:首先,生成标准加密算法库,将实现规范且已经确定具体种类的加密算法分别挑选一份,并生成加密算法图;接着,将未知种类的待检测加密算法也生成一份加密算法图。最后,将待检测加密算法生成的加密算法图嵌入训练完成的模型中,与标准加密算法库的嵌入依次比较其向量距离;与待检测算法向量距离最短的标准算法的种类即为待检测加密算法的种类。

根据本发明,所述基础源码库具体由以下两部分构成:

1)通过爬虫工具爬取的与加密算法无关的源代码;

2)通过爬虫工具爬取的加密算法源代码。

优选地,所述加密相关的数据是不同版本的开源加密库文件、项目托管平台上的加密算法源代码数据、以及通过黑帽会议中文章开源数据收集到一些加密算法。

所述二进制代码为特定加密算法数据和加密无关的基础数据。

进一步优选地,所述标准加密算法库为开源特征库openssl中剥离出的不同种类的加密算法,在生成加密算法图之前已知其具体加密种类。

本发明的基于深度学习图网络的加密算法识别方法,与现有技术相比,带来的技术创新在于:

1、将原本需要大量领域知识的加密算法检测问题转化为不依赖领域知识的相似度检测问题,降低了研究难度。

2、可以通过十分简单的调整模型的训练集来检测不同种类的加密算法。对于不同的任务,只需调整数据,并不需要对系统本身进行任何更改。

3、构造的“加密算法图”结构同时包含加密算法的语义信息与结构信息,与传统手段中仅通过指令统计等静态分析方式相比,该数据结构能更好的代表函数的各种特点;同时,这一图结构在进行嵌入操作后,可经少许处理直接应用于各种深度学习图网络,方便后续的研究。

附图说明

图1是本发明的基于深度学习图网络的加密算法识别方法方法流程图;

图2为opensslaes_init函数在o0与o3下的区别;

图3为“加密算法图”概念图;

图4为图嵌入网络第1次递归中节点迭代结果;

图5为图嵌入网络第2次递归中节点迭代结果;

以下结合附图和实施例对本发明作进一步地详细说明。

具体实施方式

首先,申请人对本发明中所涉及的技术术语作如下说明:

基本块:是指程序—顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第—个语句,出口就是其中的最后一个语句。代码中的函数由多个基本块组成。

爬取:指用octoparse等爬虫类工具对网页、开源库、代码托管平台等源代码进行线上到本地的拷贝过程。

本发明的基于深度学习图网络的加密算法识别方法,其设计技术思路是,将传统的“二进制加密算法识别问题”转换为“二进制相似性检测问题”。

参见图1,本实施例给出一种基于深度学习图网络的加密算法识别方法,该方法由训练过程和检查过程组成,其中:

训练过程是:首先对爬取的加密无关的源代码中整合大量爬取的与加密相关的源码数据,来构建基础源码库;然后通过对基础源码库进行交叉编译预处理,得到二进制代码库,分别提取二进制加密算法的统计特征与结构特征整合生成加密算法图,将加密算法图嵌入到神经网络中变为向量形式,通过比较向量间的距离远近即可判断代码是否相似,经训练后得到有能力判断加密算法图的嵌入向量是否相似的模型;

检查过程是:首先,生成标准加密算法库,将实现规范且已经确定具体种类的加密算法分别挑选一份,并生成加密算法图。接着,将未知种类的待检测加密算法也生成一份加密算法图。最后,将待检测加密算法生成的加密算法图嵌入训练完成的模型中,与标准加密算法库的嵌入依次比较其向量距离。与待检测算法向量距离最短的标准算法的种类即为待检测加密算法的种类。

以下是具体的实施步骤:

步骤一,源代码获取

通过爬取常见的不同版本的开源加密库(openssl,sodium,tomcrypt)文件、常见的项目托管平台(github,googlecode等)上的源代码数据、以及通过黑帽会议中文章开源数据收集到一些加密算法,并整合大量爬取到的与加密无关的源码数据,构建基础源码库,该基础源码库具体由以下两部分构成:

1)通过爬虫工具爬取的与加密算法无关的源代码;

2)通过爬虫工具爬取的加密算法源代码。

步骤二,交叉编译预处理

在得到基础源码库后,第一步操作为对基础源码库中的源码算法进行交叉编译预处理,即选取不同版本、不同优化级别、不同编译器和不同指令集等方式对基础源代码进行编译,得到了二进制特征代码库(图1,对二进制特征代码库中的编译后的基础数据,分别通过特征提取和流程图提取就能够得到二进制算法统计特征和二进制算法结构特征),并以此作为接下来的数据集。这么做的目的主要有以下两点:

(1)定义相似性数据:

对于代码相似性的定义有许多种,不同情况下对于两份二进制代码是否相似的判断不一定相同。例如,剽窃检测中,小部分代码有区别可视为相似,而在漏洞检测中若是出现小部分代码不同,则有可能是对于漏洞的修复,在这种情况下则不能视为相似。结合密码算法检测的实际情况,两份代码在编译过程中出现以下几种情况应视为相似:

a、不同优化级别:程序编译时会有不同的情景需要优化来提高效率或缩小程序体积,不同的优化级别会造成代码间出现差异。例如gcc编译器优化级别o2中,将执行几乎所有的不包含时间和空间折中的优化,编译器会舍弃函数内联,优化循环操作,删除迭代变量等。其差异显示在程序流程图上十分明显,如图2所示。

b、不同编译器种类:从gcc到clang、llvm不同的编译器在侧重点上有所区别。clang性能优异,其生成的ast所耗用掉的内存仅仅是gcc的20%左右。而gcc则是目前兼容性最强的编译器。加密算法是否相似不应受到编译器影响。

c、不同版本:开源加密库会按照一定频率更新新版本,其中有些加密算法会有些许改动,原则上认为这些小幅改动后的算法与未改动的算法应被判定为相似。

(2)解决跨平台问题:

跨平台检测一直以来是二进制代码分析的一个重要问题,造成跨平台编译差异的原因在于指令集的差异。指令集与cpu架构相关,可以分为cisc(精简指令集)和risc(复杂指令集),每个指令集系统又可以分为多种具体的指令集架构,如cisc中有arm、powerpc、alpha、mips等架构,而risc中有x86、x86-64等架构。不同指令集下编译相同源码,其指令理所当然会有一定差异。通过该类型的数据可以让后续训练的模型准确识别出跨平台问题。

步骤三:加密算法特征提取

由于加密算法的特殊性,不同种类的加密算法中包含很多不同的特征,例如分组加密包含大量的算数指令、跳转指令、逻辑运算指令。而公钥密码中的指令则分布较为均匀。通过对这些特征的筛选与分析,借助idapython脚本,分别从以下两个不同方面进行加密算法特征提取。

(1)指令操作码统计特征

进行加密算法操作码统计时,以基本块为单位,进行特征出现频度的统计,由于需要考虑指令集的不同,在设计时需要分别对各种不同的指令集单独设计需要统计的操作码,根据指令功能,分为以下几个类别:

(2)非操作码统计特征

在逆向分析加密算法时,除去直接的指令特征,还有一些较为重要的非操作码特征值的提取,在分析加密算法相似性时,这些非操作码统计特征同样十分重要:

a.函数基本块个数(大小)\总指令条数\局部变量个数:

在进行函数间比较时,经常会遇见函数大小不同的情况,而这些情况静态分析中的具体体现就是上述这些非操作码统计特征。理论上,函数内存在一定的指令条数差距,二者仍然有可能实现相同的算法,完成相似的功能。但当差异大于某阈值时,二者是否相似将没有讨论价值。同时,加密算法由于其复杂性与特殊性,当总基本块数、总指令条数过少时,函数将不足以支持完成复杂的加密功能,同样没有检测的意义。统计该类数据进行预处理,将有效完成检测性能的提升。

b.基本块外部调用数量\基本块向外部调用数量:

函数的基本块定义为—系列顺序执行的语句,只能有一个入口和一个出口,只能从入口进入出口退出。在静态分析时,基本块间的调用关系即转移指令间的转移关系,跳转之后的第一条语句必为基本块入口。根据这些特性,一般情况下,在函数中基本块被指向的数目越多,代表该基本块权重越重。此类特征能够提供一定程度上的结构信息,帮助后续构建树型结构。

步骤四,加密算法图构建

结合步骤三中获得的加密算法特征,构造一种新的数据结构,即“加密算法图”,将加密函数转化成以基本块特征集合为结点,以调用关系作为边的图网络。这种情况下,结点内容保证了文本信息,而边的流向保证了结构信息。比起直接使用各基本块进行特征聚合,使用流程图构造加密算法图能更好的保留函数中的信息。

本实施例的“加密算法图”的具体结构如图3所示,其中边流向的具体表示采取“后缀树”表示法,树中每个节点按顺序记录与其相连的子节点,代表其直接指向的基本块信息,通过后缀树,可以从第一个节点开始,完整的构建整个函数的流程图。至此,得到了一个包含顶点集合和边集合的数据结构,t=<v,e>其中顶点还包含上一步中取得的指令特征数据。

选择构建此结构主要目的是将传统分析方法中离散的基本块信息联系起来,使每个基本块不再单纯与自己内部的指令相关,而是与自己相连的全部基本块相关。从直觉上进行分析,判断两份加密函数是否相似,除了判断指令文本分布是否相似外,同时需要考虑其指令调用关系是否相似。如分析des加密与3des加密算法时,单纯分析其基本块信息无法得到明显区别,原因是3des并未实现新的分组加密方式,只是通过对每个数据块进行三次des加密来增强保护效果。单纯的静态统计分析将难以发现这两种方式的区别。但若使用图网络进行分析,每个节点的特征将由其本身特征与相邻节点特征经过多次迭代后聚合而成,即使两份自身核心特征相同的代码块,也会因为其邻接图连接关系不同而得到不同的特征值。

步骤五,加密算法图嵌入神经网络

加密算法图,其本质是一个离散的稀疏特征矩阵,为了比较其的相似度,需要将其映射到更低的相同维度来使其变成稠密向量,即需要进行“图嵌入”这一过程。

本实施例的“加密算法图”(encryptionfunctionsgraph)的数据结构具体表示为:

g=<v(μ,ω),e(u,v)>

其中,v代表图中所有节点的集合,e则代表有向边的集合。边信息较为简单,u,v分别记录每条边所对应的起点与终点,代表有向边从u指向v。以及权重ω,每个节点的权重由其邻接表中的结点权重共同决定,其中心思想是:被更多结点引用的结点,应该拥有更高的权重。

在计算efg的节点权重时,表示为:

其中,u是目标结点,c(t)是节点t的出度n代表u的子节点邻接矩阵,d是一个取值范围为[0,1]的数,被称为阻尼系数。

网页图里存在很多与其他网页节点间无跳转关系的孤立节点,即不被其他节点引用的网页,但同时有可能被用户直接访问到。增加阻尼系数相当于为无邻接矩阵的孤立结点设置初始值(直接访问概率),起到平滑计算的作用。在二进制分析时,一个函数中存在从未引用到的基本块,代表控制流无法执行到这部分,可将其认定为无效块而直接忽略,故将d赋值为1。

则权重表达可以更新为:

根据每个节点的权重pr(i)和反编译特征μ(i),可以计算出每个节点的加权特征。在计算时,并未采取简单的相乘运算,因为在对比两份加密算法时,会有很大概率存在一些与核心加密方法块无关却十分相似的方法块,当其权值低于一定程度时,可以认为该节点在加密算法中很少被用到,理应舍弃该代码块对程序的影响。节点的加权特征可以表示如下:

其中,函数f是非线性激活函数,当加权特征大于某阈值时才参与后续计算,否则忽略,这一步处理减少了无关代码块的干扰,在实验中明显的提升了训练效果。

经过上述过程,每个单独的节点的特征就计算完成,接下来需要将结点互相关联。具体来说,需要根据图拓扑关系,计算出全部邻接子节点在各节点上的聚合。这是一个递归的过程,每个节点的特征由节点本身的加权特征以及其邻接矩阵共同确定,其邻接矩阵中子节点的特征又由各自的子节点矩阵确定。值得说明的是,每次递归过程是相对独立的,只有当本次递归中全部节点的特征值都更新完毕后,才会开始下一轮更新。

如图4所示,在第一次递归时,节点d的特征μd1由自己的初始特征μd0以及结点e的特征μe0共同决定,同理结点c的特征μc1由μc0与μd0决定。图网络将暂时记录这些特征值,在第一次递归完全结束之后,统一进行更新。

如图5所示,在第二次递归中节点c的特征值μc2则由μc1和μd1共同决定。可以发现,在第二轮迭代时,各节点的特征非线性的传播了两步,c节点的特征同时受到d、e两结点的影响。由此很容易得到一个结论,即结点特征在图网络上的传播距离与递归次数有关。在一定范围内,当迭代越深入时,各节点之间的联系也就越大。

至于非线性函数的选取,其不止单纯影响非线性化,它同时会影响反向传播效果和损失函数的选取。申请人尝试了relu及其变体、sigmoid等常见的函数,relu的效果均好于其余函数,尤其当嵌入深度越深时,relu的优势就越明显,这是因为相较于sigmoid和tanh函数,relu对于随机梯度下降的收敛有巨大的加速作用,同时能解决梯度消失等问题。但在输出层,relu的表现却不如softmax。

综上,本实施例最终确定选取relu函数作为隐藏层的激活函数,softmax函数作为全连接层函数。则最终嵌入网络第k层节点用公式表达为:

其中,n是结点i的邻接矩阵,代表其子节点的集合,μn代表k-1层子节点的特征值,代表第k-1层结点i本身的加权特征值,ws是大小为m*n的权重矩阵,m是特征向量的维度,n是嵌入大小。

值得说明的是,该权重矩阵具体取值将由之后的训练过程调整,其代表的含义是每个节点内的m维特征中各自的重要程度,与之前提出的节点间权重nr无关。

步骤六,检查

首先,生成标准加密算法库,将实现规范且已经确定具体种类的加密算法分别挑选一份,并生成加密算法图;接着,将未知种类的待检测加密算法也生成一份加密算法图;最后,将待检测加密算法生成的加密算法图嵌入训练完成的模型中,与标准加密算法库的嵌入依次比较其向量距离;与待检测算法向量距离最短的标准算法的种类即为待检测加密算法的种类。

具体过程如下:

第一步,选取openssl开源加密库中的加密算法作为标准加密算法,从中分别挑选不同种类的加密算法,如aes,des,rsa等,对它们进行交叉编译,形成二进制形式的标准加密算法库。接着对标准加密算法库中的每一个加密算法进行上述步骤四处理,生成加密算法图。

第二步:将目标待检测文件的二进制文件(pe,elf等)经过上述步骤四处理生成加密算法图。

第三步:将第二步中生成的加密算法图和上述步骤一中生成的大量加密算法图一同嵌入上述步骤五所训练好的神经网络,通过比较其相似性判断加密算法是否合规。具体来讲,就是在样本空间里判断两个函数的嵌入向量之间的距离的能力,若函数f1与函数f2的距离大于某个阈值,认定其为不相似,否则认定其为相似,本实施例选取马哈拉诺比斯距离(mahalanobisdistance,)作为相似度衡量的方法。

其中x,y为两个函数在相同向量空间的嵌入,f为非线性函数,将结果压缩至方便比较的范围。不选用余弦相似度的原因是其对于绝对数值不敏感这一特点,余弦相似度更多是对于整体方向上的区分,这在密码检测中可能会面临一些问题:如待检测源代码按照des标准实现了最低限度的aes加密,在方向判断上,这份源码与正规开源库中的安全加密算法将只有很少的区别。马哈拉诺比斯距离的优势在于能够体现个体数值特征的绝对差异,更加契合于加密算法的检测问题。

在经过距离判断后,对于任意两个输入都会进行其在距离上的判别,并根据结果推测待检测文件中加密算法的使用情况,最终得出结论。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1