一种密钥安全性检测方法及系统与流程

文档序号:14444799阅读:466来源:国知局
一种密钥安全性检测方法及系统与流程

本发明涉及一种密钥安全性检测方法及系统,属于网络和信息安全技术领域。



背景技术:

随着信息安全和密码技术的发展,越来越多的应用程序采用加密手段来保护数据安全,但是由于开发人员的编程失误等原因,会导致加解密过程存在安全隐患,通常将此类隐患称为密码误用漏洞。在加解密机制中,对密钥的正确处理是确保整体安全性核心环节,然而近年来,由于密钥的安全性所引发的各类密码误用漏洞层出不穷。对nationalvulnerabilitydatabase(nvd)中2011年至2016年间的密码误用漏洞进行统计分析,结果显示超过四分之一的密码误用漏洞是由密钥安全性问题所导致的。因此,对加密应用程序的密钥进行安全性检测在提高软件安全性、保护隐私数据等方面具有重要意义。目前,针对加密应用程序的密钥安全性检测主要通过两种方法。一是逆向分析方法。针对具体的加密应用程序样本,分析者基于其个人经验,综合利用反汇编、二进制分析、软件动态调试等逆向分析方法,围绕样本的加解密过程进行静态和动态分析,发现潜在的密钥安全性漏洞。此类方法是应用程序安全性分析的基本方法,应用较为广泛,但对分析人员的水平能力有较高要求,分析效率不高。二是漏洞挖掘方法。该类方法将应用程序中与密钥有关的密码误用漏洞视为一类特殊的软件漏洞,借助符号执行、污点分析和fuzzing测试等漏洞挖掘技术,发现可能存在的此类漏洞,实现密钥安全性的自动化检测。在2017年blackhat会议上,jean-philippeaumasson等人提出了一种类似的加密应用程序安全性检测方案,通过differentialfuzzing技术来检测加密应用程序的安全性、正确性,并实现了自动化检测工具cdf,然而该方案更多关注密码算法整体的输入输出特征,而对于密钥有关的安全漏洞缺乏有效的检测能力。

目前,针对加密应用程序中密钥安全性的两种检测方法都在一定程度上存在问题:

1)对于逆向分析方法而言,尽管有多种逆向分析工具可供分析者使用,但这些工具本身并不能提供关于密钥安全性的直接结论,而需要依赖人工对每个目标样本的逆向结果进行分析并最终得出结论,结论的正确性严重依赖分析者的技能与经验,且需要耗费大量时间和精力,难以对批量样本进行分析。

2)对于漏洞挖掘方法而言,尽管自动化程度较高,能够实现对批量样本的自动化分析,但由于软件漏洞挖掘的一般方法通常较少考虑密码学漏洞独有的规律和特点,因此在密钥安全性漏洞的检测方面缺乏针对性,效果往往并不理想。

另一方面,从安全性检测的对象来看,应用程序中的密码算法的实现方式主要分为两种,一是由开发人员自行编写密码算法的代码;二是直接调用现有的通用密码算法函数库,如cryptoapi、openssl等。由于密码算法的设计实现专业性强,因此对于非密码专业的程序开发人员而言,通常多使用第二种方法来实现相关的安全模块,因此以cryptoapi、openssl等为代表的密码库函数广泛应用于各种应用中。因此,对于密钥安全性检测而言,应特别关注cryptoapi等密码库函数调用过程中出现的密钥相关密码误用漏洞的识别与检测。



技术实现要素:

本发明的目的是提供一种密钥安全性检测方法,以解决目前密钥安全性检测效率低、效率不理想的问题;同时,本发明还提供了一种密钥安全性检测系统。

本发明为解决上述技术问题而提供一种密钥安全性检测方法,包括以下方案,方法方案一:该检测方法包括以下步骤:

1)根据已知密码误用漏洞的成因以及密码api函数特点,构造密钥相关密码误用漏洞的检测规则,并存储到相应的检测规则库,所述的检测规则包括原子规则和复合规则,所述复合规则为原子规则的组合,所述原子规则为为(apiname,parameter,v-vector),其中apiname表示密码函数名称,parameter表示该密码函数中的特定参数名称,v-vector表示该参数对应的漏洞触发向量;

2)提取加密应用程序中的密码api运行信息,包括函数调用关系、参数取值,通过输入输出参数的污点分析,对不同密码api函数之间的关联关系进行分析和识别,判断参数属性,以密码api调用序列的形式记录;

3)将得到的api调用序列与检测规则库中的漏洞检测规则进行匹配,实现对密钥相关密码误用漏洞的自动化检测。

本发明的检测方法在总结大量现有漏洞成因以及密码api函数特点的基础上,确定出一套有针对性的密钥安全性漏洞检测规则,不仅能够描述单个api函数产生的漏洞,而且能够刻画由不同api函数共同作用所引起的密码漏洞,实现全面有效的密钥安全性检测。

方法方案二:在方法方案一的基础上,所述漏洞触发向量v-vector=(rand,from,view),其3个分量分别描述特定参数的随机性,来源和加密程度。

方法方案三:在方法方案二的基础上,所述的密码api调用序列s=f1,f2,...,fn,其中fi=(apiname,parameter1,p-vector1,parameter2,p-vector2...)表示第i步的密码api函数调用信息,其中apiname表示密码函数名称,parameteri表示该密码函数中的全体参数的名称,p-vectori表示相应参数的属性向量。

方法方案四:在方法方案三的基础上,所述的参数属性向量p-vectori=(rand,from,view),其3个分量分别描述参数的随机性,来源和加密程度。

方法方案五:在方法方案一、二、三或四的基础上,所述步骤2)中加密应用程序中的密码api运行信息的提取过程为:

a.对密码api函数及其参数信息进行整理,将涉及到的函数名称和参数信息,以及不同种类密码函数对于输入输出参数属性的影响情况,分别记录为密码函数知识库和函数属性知识库;

b.利用插桩技术,记录密码api函数调用过程中的指令、内存和寄存器信息,提取密码api名称、返回值和输入输出参数的信息;

c.对密码api输入输出参数进行静态污点分析和动态污点分析,根据不同密码api的参数之间的污点关联关系,以及函数属性知识库,判定参数属性;

d.将提取到信息记录为s=f1,f2,···,fn,其中fi表示为第i步的密码api函数调用信息。

本发明借助动态二进制插桩方法,可实现对密码api函数及其参数的运行时信息进行自动跟踪、监控与记录,以此为基础,实现了密钥相关的密码误用漏洞自动化识别与检测,摆脱了传统方法对于人工经验的依赖,同时大大提高检测效率。

方法方案六:在方法方案五的基础上,所述步骤3)在进行匹配时,若采用的检查规则为原子规则,则首先判断apiname是否匹配、其次判断相应参数parameter对应的属性向量p-vector与检测规则中的v-vector是否匹配,若两者均匹配,则说明满足该漏洞检测的原子规则,输出漏洞信息。

方法方案七:在方法方案六的基础上,所述步骤3)在进行匹配时,若采用的检查规则为复合规则,则从该复合规则中依次选取每一条原子规则进行原子规则检查,如果全部匹配,则输出漏洞信息,否则表明该复合规则检查不通过。

本发明还提供了一种密钥安全性检测系统,系统方案如下:系统方案一:该检测系统包括存储器和处理器,以及存储在所述存储器上并在所述处理器上运行的计算机程序,所述处理器与所述存储器相耦合,所述处理器执行所述计算机程序时实现以下指令:

1)根据已知密码误用漏洞的成因以及密码api函数特点,构造密钥相关密码误用漏洞的检测规则,并存储到相应的检测规则库,所述的检测规则包括原子规则和复合规则,所述复合规则为原子规则的组合,所述原子规则为(apiname,parameter,v-vector),其中apiname表示密码函数名称,parameter表示该密码函数中的特定参数名称,v-vector表示该参数对应的漏洞触发向量;

2)提取加密应用程序中的密码api运行信息,包括函数调用关系、参数取值,通过输入输出参数的污点分析,对不同密码api函数之间的关联关系进行分析和识别,判定参数属性,以密码api调用序列的形式记录;

3)将得到的api调用序列与检测规则库中的漏洞检测规则进行匹配,实现对密钥相关密码误用漏洞的自动化检测。

系统方案二:在系统方案一的基础上,所述漏洞触发向量v-vector=(rand,from,view),其3个分量分别描述特定参数的随机性,来源和加密程度。

系统方案三:在系统方案二的基础上,所述的密码api调用序列s=f1,f2,...,fn,其中fi=(apiname,parameter1,p-vector1,parameter2,p-vector2...)表示第i步的密码api函数调用信息,其中apiname表示密码函数名称,parameteri表示该密码函数中的全体参数的名称,p-vectori表示相应参数的属性向量。

系统方案四:在系统方案三的基础上,所述的参数属性向量p-vectori=(rand,from,view),其3个分量分别描述参数的随机性,来源和加密程度。

系统方案五:在系统方案一、二、三或四的基础上,所述步骤2)中加密应用程序中的密码api运行信息的提取过程为:

a.对密码api函数及其参数信息进行整理,将涉及到的函数名称信息及函数参数信息,分别记录为密码函数知识库和函数属性知识库;

b.利用插桩技术,记录密码api函数调用过程中的指令、内存和寄存器信息,提取密码api名称、返回值和输入输出参数的信息;

c.对密码api输入输出参数进行静态污点分析和动态污点分析,根据不同密码api的参数之间的污点关联关系,以及函数属性知识库,判定参数属性,建立密码api调用序列;

d.将提取到信息记录为s=f1,f2,···,fn,其中fi表示为第i步的密码api函数调用信息。

系统方案六:在系统方案五的基础上,所述步骤3)在进行匹配时,若采用的检查规则为原子规则,则首先判断apiname是否匹配、其次判断相应参数parameter对应的属性向量p-vector与检测规则中的v-vector是否匹配,若两者均匹配,则说明满足该漏洞检测的原子规则,输出漏洞信息。

系统方案七:在系统方案六的基础上,所述步骤3)在进行匹配时,若采用的检查规则为复合规则,则从该复合规则中依次选取每一条原子规则进行原子规则检查,如果全部匹配,则输出漏洞信息,否则表明该复合规则检查不通过。

附图说明

图1是本发明密钥安全性检测系统的结构示意图;

图2是本发明实施例中cyptoapi运行信息提取单元的结构示意图。

具体实施方式

下面结合附图对本发明的具体实施方式做进一步的说明。

本发明针对现有密钥安全性检测方法的缺陷,提出了一种基于密码误用漏洞模型和二进制插桩的密钥安全性检测方法,本发明公开的检测方法在总结现有的大量与密钥相关密码误用漏洞的成因以及密码api函数特点的基础上,确定出一套有针对性的密钥相关密码误用漏洞检测规则,不仅能够描述单个api函数产生的漏洞,而且能够刻画由不同函数相互作用产生的密钥漏洞,实现全面有效的密钥安全性检测。该方法的具体实现过程如下:

1.根据已知密钥相关密码误用漏洞的具体成因和密码api函数的密钥使用规范,确定漏洞检测规则,建立检测规则库。

根据现有密钥相关密码误用漏洞的具体成因,本发明将漏洞检测规则r分为原子规则和复合规则,原子规则定义为三元组(apiname,parameter,v-vector),其中apiname表示密码函数名称,parameter表示该密码函数中的特定参数名称,v-vector表示该参数对应的漏洞触发向量。复合规则定义为原子规则的组合。

漏洞触发向量v-vector=(rand,from,view),其3个分量分别描述特定参数的随机性、来源和加密程度。其中rand={none,limit,full}标识数据的随机性,none表示数据在程序多次调用中保持不变;limit表示数据在程序多次调用中发生变化,但本身不符合随机序列的特征;full表示数据在程序多次调用中发生变化,且本身复合随机序列的条件。from={net,file,dialog,inner,unknown}标识数据的来源,包括来自net表示数据来源于网络数据流,file表示从本地文件读入,dialog表示从对话框输入,inner表示取自内部固定数据,unknown表示数据来源未知。view={covered,exposed}标识程序外部观察者对于数据所含信息的了解情况,covered表示数据对于外部观察者而言是未知的,exposed表示数据已被或可被外部观察者所知。

复合规则用于描述函数调用的关联性特征。由于很多安全性漏洞需要多个彼此关联的原子规则共同作用才会触发,因此对于此类安全性漏洞的检测需要对不同函数间的同时成立的漏洞触发条件判别。

2.提取加密应用程序中的密码api运行信息,形成应用程序执行的密码api序列。

在提取密码api运行信息之前,首先需要人工对密码api函数及其参数信息进行整理,将加解密过程中可能涉及到的密码函数名称信息以及函数参数信息,同时结合漏洞触发向量的定义,分析各类型密码函数对于输入输出参数属性的影响模式,分别记录为密码函数知识库和函数属性知识库,作为动态二进制插桩和密码api序列生成的依据。

运行信息提取的基本方法是利用动态二进制平台,根据实现定义好的密码函数知识库,通过插桩的结合,监控应用程序调用密码api函数过程中的指令、内存和寄存器等信息,提取api名称、返回值和输入输出参数等信息。同时,结合函数属性知识库,对提取到的api函数各参数的属性进行分析,如对于加密算法而言,其密文的view属性根据明文和密钥的属性而定,仅当二者均为exposed时,密文属性为exposed。

将提取到的信息记录为密码api调用序列s=f1,f2,...,fn,其中fi=(apiname,parameter1,p-vector1,parameter2,p-vector2...)表示第i步的密码api函数调用信息,其中apiname表示密码函数名称,parameteri表示该密码函数中的全体参数的名称,p-vectori表示相应参数的属性向量。

3.将提取到的密码api调用序列与检测规则库中的漏洞检测规则进行匹配,确定密钥程序中存在密钥安全性漏洞。

首先将定义好的检测规则集合映射到xml规则描述文件中,得到检测规则库;分析程序参照规则库对加解密过程中提取到的cryptoapi运行信息进行检测。针对规则r的漏洞检测算法如下:

上述方法可以作为一种计算机程序,存储在密钥安全性检测系统中的存储器中并可在密钥安全性检测系统中的处理器上运行。具体而言,如图1所示,本发明的密钥安全性检测系统包括规则库建立单元、漏洞检测规则库、api信息提取单元和漏洞检测单元,规则库建立单元用于根据已知密钥安全性漏洞的具体成因和相关api函数的密钥使用规范,根据人工输入生成漏洞检测规则;漏洞检测规则库用于存储规则库建立单元所确定的漏洞检测规则;api信息提取单元用于提取加密应用程序中的密码api运行信息,包括函数调用关系、参数取值,结合密钥污点分析的结果,判别函数参数属性,形成应用程序执行的密码api调用序列;漏洞检测单元用于将得到的密码api调用序列与检测规则库中的漏洞检测规则进行匹配,检测出密钥相关的密码误用漏洞。其中api信息提取单元是利用动态二进制平台,根据实现定义好的密码函数知识库和函数属性知识库,通过插桩的结合,监控应用程序调用密码api函数过程中的指令、内存和寄存器等信息,提取api名称、返回值、输入输出参数信息及属性,其原理如图2所示。各单元的具体实现手段已在方法的实施例中进行了详细说明,这里不再赘述。

通过本发明提供的上述方案,能够极大提高识别密钥相关密码误用漏洞的效率,且本发明所确定的漏洞检测规则具有良好的通用性和扩展性,不局限于对密钥相关漏洞的检测,也可用于一般密码误用漏洞的检测;不局限于当前已知类型密码误用漏洞的识别,还可通过添加规则库适用于未来新型漏洞的识别。

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