一种C/C++密码学误用分类和检测方法技术

技术编号:37855421 阅读:8 留言:0更新日期:2023-06-14 22:48
本发明专利技术公开了一种C/C++密码学误用分类和检测方法,属于信息安全领域;具体是:首先,对C/C++源代码进行模糊分析,提取代码属性图CPG;然后,对OpenSSL文档提供的各种函数接口进行分类,当接口函数所需的参数涉及到密码学属性,将该接口函数归为关键函数集合A中;接着,从CPG的根节点出发进行遍历,当遇到函数调用节点时,判断该节点的调用函数名是否属于关键函数集合A,如果是,将该节点加入到关键函数列表中,否则继续向下遍历CPG,直到没有后继节点为止;对关键函数列表中的每一项进行分析提取,得到各项对应的要素表,进一步构造最终的密码学要素,并识别其中的误用类型。本发明专利技术相比于其他检测技术,减少了检测时需要的条件,提高了程序的易用性。提高了程序的易用性。提高了程序的易用性。

【技术实现步骤摘要】
一种C/C++密码学误用分类和检测方法


[0001]本专利技术属于信息安全中的应用安全领域,具体是一种C/C++密码学误用分类和检测方法。

技术介绍

[0002]随着互联网的发展,越来越多的软件开发涉及到用户的数据以及隐私保护,在软件开发的过程中,需要实现软件本身业务逻辑的同时,还要实现信息安全的相应功能。在使用软件同互联网进行通信时,要满足信息安全的三个基本要素:可用性、保密性和完整性。
[0003]随着密码学应用的发展,不同的语言逐渐开始支持现有的各种密码学原语和安全通信框架,如JAVA提供了JCA和JSSE作为JAVA软件中安全通信的工具;这些密码学库为软件开发提供了相关密码学原语的接口;然而,理解密码学原语的正确用法需要一定的学习门槛,而在软件开发中又不得不需要密码学原语作为信息安全的保证,由于大多数开发者对于密码学以及应用并不了解,在涉及到密码学应用的开发时,往往习惯于从互联网上查找相关示例代码,并没有真正地理解密码学原语的作用,导致引入了密码学误用。
[0004]在现阶段,数据加密、消息摘要生成以及SSL框架的使用上均存在大量的误用问题,以使用了过时的密码学算法、不正确配置算法和错误的验证逻辑为主。
[0005]现阶段的工具大多针对Android应用中的密码学误用,如Zhiwu Xu等人[1]提出了一种基于概率模型的方法,来静态检测Android应用中的密码学API使用问题;Cong Sun等人[2]提出了CryptoEval工具,来确定Android应用中由于密码学误用而造成的风险水平;Larry Singleton等人开发了FireBugs[3],用来检测Android应用中关于密码学API的使用情况;Sascha Fahl等人[4]提出了MalloDroid来分析Android应用中与安全通信有关的代码,判断被检测的应用是否会由于SSL相关接口的滥用而遭到MITM攻击;Manuel Egele等人[5]开发了CryptoLint用来静态检测常见的误用情况;Ildar Muslukhov等人[6]开发了BinSight工具,通过静态方法检测Android应用中使用的密码学第三方库来确认密码学滥用来源;Siqi Ma等人[7]开发了CDRep用来自动修复Android应用中的密码学误用。一些通用的代码检测工具也支持密码学误用检测,如Sonarqube[8]和Xanitizer[9]支持CWE327、CWE295、CWE330、CWE326和CWE757有关的密码学误用检测。
[0006]检测C/C++代码中密码学误用的技术比较少,如文献[10]提出了利用污点分析的方法来提取C/C++代码中的密码学误用语义,来完成对密码学误用的检测。[11]林昊等人通过动态分析的方式来识别Windows平台下密码学漏洞。
[0007]目前针对C/C++中密码学误用可以分为静态检测和动态检测两类:其中静态检测利用Clang的语言检查能力提取代码的AST图,通过提取AST图中的密码学语义信息同已有的密码学误用规则进行匹配,动态检测则将C/C++代码编译成可执行文件后,利用二进制插桩的方法来检测程序运行时,对密码学API调用信息进行捕获分析,从而确认是否存在密码学误用。但是,目前针对C/C++密码学误用检测技术主要有两点不足:
[0008]1)、代码的信息提取技术需要对代码进行编译,这类方法依赖检测环境,很多代码
可能需要特殊的开发环境,在检测这类代码时由于编译失败等问题导致检测失败。
[0009]2)、由于C/C++的加密库种类较多,各种加密库之间的API各不相同,目前没有一个通用的方法来检测各种密码库中存在的误用。
[0010]参考文献:
[0011][1]Xu Z,Hu X,Tao Y,et al.Analyzing Cryptographic API Usages for Android Applications Using HMM and N

Gram[C]//2020International Symposium on Theoretical Aspects ofSoftware Engineering(TASE).IEEE,2020:153

160.
[0012][2]Sun C,Xu X,Wu Y,et al.CryptoEval:Evaluating the Risk of Cryptographic Misuses in Android Apps with Data

Flow Analysis[J].arXiv preprint arXiv:2112.06146,2021.
[0013][3]Singleton L,Zhao R,Siy H,et al.FireBugs:Finding and Repairing Cryptography API Misuses in Mobile Applications[C]//2021IEEE 45th Annual Computers,Software,and Applications Conference(COMPSAC).IEEE,2021:1194

1201.
[0014][4]Fahl S,Harbach M,Muders T,et al.Why Eve and Mallory love Android:An analysis of Android SSL(in)security[C]//Proceedings of the 2012ACM conference on Computer and communications security.2012:50

61.
[0015][5]Egele M,Brumley D,Fratantonio Y,et al.An empirical study of cryptographic misuse in android applications[C]//Proceedings of the 2013ACM SIGSAC conference on Computer&communications security.2013:73

84.
[0016][6]Muslukhov I,Boshmaf Y,Beznosov K.Source attribution of cryptographic api misuse in android applications[C]//Proceedings of the 2018on Asia Conference on Computer and Communications Security.2018:133

146.
[0017][7]Ma S,Lo D,Li T,et al.Cdrep:Automatic repair of cr本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种C/C++密码学误用分类和检测方法,其特征在于,具体步骤如下:首先,使用提取工具joern

fuzzyc对C/C++源代码进行模糊分析,提取代码属性图CPG;代码属性图CPG包含节点和边;其中,节点类型包含AST相关的节点,控制流图相关节点以及数据流图相关节点;边的类型中,包括REACH、IS_AST_PARENT、DEF和USE,以及与AST、控制流图数据流图相关的边;然后,对OpenSSL文档提供的各种函数接口进行分类,当接口函数F所需的参数涉及到密码学属性,将该接口函数F归为关键函数集合A中;接着,从代码属性图CPG的根节点出发,遍历代码属性图CPG,当遇到函数调用节点时,判断该节点的调用函数名是否属于关键函数集合A,如果是,将该节点加入到关键函数列表中,否则继续向下遍历代码属性图CPG,直到没有后继节点为止;最后,对关键函数列表中的每一项分别进行分析提取,得到各项对应的要素表;利用每一项对应的要素表构造最终的密码学要素,并识别其中的误用类型;具体为:首先,找出关键函数集合A中的每个调用函数,分别建立各自对应的前缀搜索树;然后,对于每个调用函数,通过检查调用关键函数时传入的参数的具体值,对代码中的密码学误用进行分类,构成密码学误用规则集Γ;具体为:该函数的每个参数分别对应一个密码学属性,应用密码库API对每个参数进行映射,对应到各种密码学属性上,即将密码库API的各个参数同密码学属性对应起来,构成集合Β,对于一对{α,β},α∈Α,β∈Β,构成一个误用类型γ,所有误用类型构成了密码学误用规则集Γ;接着,采用前缀搜索树来构建密码学误用索引,并与密码学误用规则集Γ进行匹配;针对调用函数fun,其前缀搜索树的根节点为该关键函数,最后的叶子节点为误用类型m;中间的n层对应函数的参数数量;当获得调用函数fun的密码学要素表后,利用要素表中每个元素,即对应的每个参数分别与调用函数fun的前缀搜索树的节点逐一进行匹配,当要素表中的当前参数符合前缀搜索树的节点的判断条件,则认为由调用函数fun实现的密码学应用中含有误用类型m;形成完整的密码学要素c以及密码学误用类型:c=(fun,{p1,p2,

,},m)。2.根据权利要求1所述的一种C/C++密码学误用分类和检测方法,其特征在于,所述代码属性图CPG的所有节点存储在nodes.csv中;如果某个节点是一条语句,那么location属性表示了该语句在文件中的偏移量,否则为空值;如果某个节点属于控制流图,则isCFGNode的属性值为true;每个节点都有code属性,用于描述该节点的值。3.根据权利要求1所述的一种C/C++密码学误用分类和检测方法,其特征在于,所述代码属性图CPG中,属于同一个文件的子图会被IS_FILE_OF类型的边连接到File节点,...

【专利技术属性】
技术研发人员:徐国胜徐国爱王晨宇高新杰
申请(专利权)人:北京邮电大学
类型:发明
国别省市:

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

1