密码算法程序漏洞检测方法及系统、存储介质转让专利

申请号 : CN202011327250.8

文献号 : CN112149138B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘亮张茜歌原义栋张海峰赵东艳王于波唐明杨珍邵瑾陈燕宁

申请人 : 北京智芯微电子科技有限公司北京芯可鉴科技有限公司武汉大学国网信息通信产业集团有限公司

摘要 :

本发明涉及信息安全技术领域,提供一种密码算法程序漏洞检测方法及系统、存储介质。所述方法包括:对密码算法程序的汇编文件和配置文件进行解析;根据解析后的汇编文件和配置文件构造程序对象;根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。本发明漏洞检出的准确率高,实施性强,扩展性好,适用于在指令集架构上运行的不同类型的密码算法程序。

权利要求 :

1.一种密码算法程序漏洞检测方法,其特征在于,所述方法包括:对密码算法程序的汇编文件和配置文件进行解析;

根据解析后的汇编文件和配置文件构造程序对象;

根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露;

所述根据解析后的汇编文件和配置文件构造程序对象,包括:根据解析后的汇编文件和配置文件通过程序模型和指令模型构造所述程序对象。

2.根据权利要求1所述的密码算法程序漏洞检测方法,其特征在于,所述在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,包括:在任一指令执行完毕后判断当前是否存在不符合所述安全类型系统的域的分配集的异常状态;

若是,则抛出对应的异常信息,之后继续执行下一条指令;

若否,则直接执行下一条指令直到所有的指令执行完毕。

3.根据权利要求1所述的密码算法程序漏洞检测方法,其特征在于,所述对密码算法程序的汇编文件和配置文件进行解析,包括:采用与所述汇编文件匹配的正则表达式获取所述汇编文件中的函数、指令及地址信息。

4.根据权利要求1所述的密码算法程序漏洞检测方法,其特征在于,所述汇编文件是通过反汇编工具反汇编所述密码算法程序的可执行文件得到的。

5.一种密码算法程序漏洞检测系统,其特征在于,所述系统包括:解析模块,用于对密码算法程序的汇编文件和配置文件进行解析;

表示模块,用于根据解析后的汇编文件和配置文件通过程序模型和指令模型构造程序对象;

分析模块,用于根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。

6.根据权利要求5所述的密码算法程序漏洞检测系统,其特征在于,所述分析模块还用于:在任一指令执行完毕后判断当前是否存在不符合所述安全类型系统的域的分配集的异常状态;

若是,则抛出对应的异常信息,之后继续执行下一条指令;

若否,则直接执行下一条指令直到所有的指令执行完毕。

7.根据权利要求5所述的密码算法程序漏洞检测系统,其特征在于,所述解析模块用于采用与所述汇编文件匹配的正则表达式获取所述汇编文件中的函数、指令及地址信息。

8.一种存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被执行时实现权利要求1-4中任一项所述的密码算法程序漏洞检测方法。

说明书 :

密码算法程序漏洞检测方法及系统、存储介质

技术领域

[0001] 本发明涉及信息安全技术领域,具体地涉及一种密码算法程序漏洞检测方法、一种密码算法程序漏洞检测系统以及一种存储介质。

背景技术

[0002] 随着不同的开源密码算法库(例如openssl, libnacl)在各行各业的广泛应用,密码算法安全问题受到广泛关注。在许多情况下,即使密码算法体制的设计是安全的,不恰当的密码算法实现也将导致严重的安全问题。其中,静态时间漏洞是诸多安全问题中较为隐蔽且危害较大的一种,其泄露来源是在密码算法加解密过程中,分支运算(case语句)、条件语句或者运行时间不固定的处理器指令都会导致不同输入的执行时间产生巨大差异,这些差异通常与密钥直接相关,攻击者可以分析时间的差异和密钥之间的相关性来实现密钥破解。
[0003] 目前,对密码算法的时间漏洞检测主要基于程序语言(Language-based),例如针对JAVA语言、C语言等高级程序语言编写的密码算法程序。高级程序语言在漏洞检测过程中存在的问题是:在无法预知编译器行为的情况下,无法保证漏洞检出的准确率,并且在无法获得源代码的情况下难以实施。对于汇编程序语言的漏洞检测仅有针对AVR8位架构的检测模型,尚未应用到实际的检测场景中,且不具有良好的扩展性。
[0004] 目前针对指令集架构(例如RISC-V架构)上运行的密码算法程序,迫切需要一种能够检测静态时间漏洞的方法。

发明内容

[0005] 本发明实施方式的目的是提供一种密码算法程序漏洞检测方法及系统,以针对指令集架构上运行的密码算法程序进行静态时间漏洞检测。
[0006] 为了实现上述目的,本发明第一方面提供一种密码算法程序漏洞检测方法,所述方法包括:
[0007] 对密码算法程序的汇编文件和配置文件进行解析;
[0008] 根据解析后的汇编文件和配置文件构造程序对象;
[0009] 根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。
[0010] 进一步地,所述在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,包括:
[0011] 在任一指令执行完毕后判断当前是否存在不符合所述安全类型系统的域的分配集的异常状态;若是,则抛出对应的异常信息,之后继续执行下一条指令;若否,则直接执行下一条指令直到所有的指令执行完毕。
[0012] 进一步地,所述对密码算法程序的汇编文件和配置文件进行解析,包括:
[0013] 采用与所述汇编文件匹配的正则表达式获取所述汇编文件中的函数、指令及地址信息。
[0014] 进一步地,所述汇编文件是通过反汇编工具反汇编所述密码算法程序的可执行文件得到的。
[0015] 进一步地,所述根据解析后的汇编文件和配置文件构造程序对象,包括:根据解析后的汇编文件和配置文件通过程序模型和指令模型构造所述程序对象。
[0016] 本发明第二方面提供一种密码算法程序漏洞检测系统,所述系统包括:
[0017] 解析模块,用于对密码算法程序的汇编文件和配置文件进行解析;
[0018] 表示模块,用于根据解析后的汇编文件和配置文件构造程序对象;
[0019] 分析模块,用于根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。
[0020] 进一步地,所述分析模块还用于:
[0021] 在任一指令执行完毕后判断当前是否存在不符合所述安全类型系统的域的分配集的异常状态;若是,则抛出对应的异常信息,之后继续执行下一条指令;若否,则直接执行下一条指令直到所有的指令执行完毕。
[0022] 进一步地,所述解析模块用于采用与所述汇编文件匹配的正则表达式获取所述汇编文件中的函数、指令及地址信息。
[0023] 进一步地,所述表示模块用于根据解析后的汇编文件和配置文件通过程序模型和指令模型构造所述程序对象。
[0024] 另一方面,本发明还提供一种机器可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被执行时实现上述的密码算法程序漏洞检测方法。
[0025] 本发明实施方式提供的密码算法程序漏洞检测方法及检测系统,基于安全类型系统,根据密码算法程序的汇编文件构造程序对象,在执行程序对象的对应指令的过程中监测每一指令的执行情况,通过比较安全类型系统的最终分配集与指定分配集的偏序关系确定是否存在信息泄露,检测过程可观察,检测结果可验证,漏洞检出的准确率高。
[0026] 此外,本发明通过密码算法程序的汇编文件即可实现静态时间漏洞检测,不需要获取密码算法程序的源代码,实施性强,扩展性好,适用于在指令集架构上运行的不同类型的密码算法程序。
[0027] 本发明实施方式的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

[0028] 附图是用来提供对本发明实施方式的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施方式,但并不构成对本发明实施方式的限制。在附图中:
[0029] 图1是本发明一种实施方式提供的密码算法程序漏洞检测方法的流程图;
[0030] 图2是本发明一种实施方式提供的密码算法程序漏洞检测系统的框图。

具体实施方式

[0031] 以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0032] 图1是本发明一种实施方式提供的密码算法程序漏洞检测方法的流程图。如图1所示,本发明实施方式提供一种密码算法程序漏洞检测方法,所述方法包括:
[0033] S1、对密码算法程序的汇编文件和配置文件进行解析。
[0034] 所述汇编文件可通过objdump反汇编工具反汇编所述密码算法程序的可执行文件获得。所述配置文件为系统配置文件,包括密码算法的函数、输出形式、漏洞检测密级等信息。本实施方式中,所述汇编文件为RISC-V架构下的汇编语言文件,通过采用与汇编文件匹配的正则表达式获取汇编文件中的函数、指令及地址信息来实现解析。
[0035] RISC-V是基于精简指令集(RISC)原则的开源指令集架构(ISA)。与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,且能耗低,广泛用于现代计算设备(例如仓库规模云计算机,嵌入式系统)。
[0036] S2、根据解析后的汇编文件和配置文件构造程序对象。
[0037] 根据解析后的汇编文件和配置文件,通过程序模型和指令模型构造程序对象。本实施方式中,对特定的RISC-V架构CPU进行分层的形式化定义,定义寄存器模型、函数、执行点等程序模型,定义基于安全类型系统(Secure Type System)的自上而下分类的指令模型(例如每一类指令对域(Domain)的影响,指令执行周期及指令对硬件模型的赋值)。
[0038] S3、根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。
[0039] 具体的,在执行所述程序对象的过程中,从首个执行点开始建立安全类型系统的初始分配集,根据指令分类信息执行对应的指令,在任一指令执行完毕后判断当前是否存在不符合安全类型系统的域的分配集的异常状态;若是,则抛出对应的异常信息,之后继续执行下一条指令;若否,则直接执行下一条指令直到所有的指令执行完毕(即所有执行点都执行完毕)。在所有执行点执行完毕后,比较最终分配集与指定分配集的偏序关系,从而确定密码算法程序是否存在信息泄露,可检测出分支时间泄露 (Branch Time Differs) 和循环时间泄露(Loop On High Condtion),根据抛出的异常信息确定泄露点、泄露量、泄露类型,生成报告信息。
[0040] 所述安全类型系统可基于现有的安全类型来定义和构造,通过形式化、可证明的安全类型系统来监测程序代码执行过程中信息流的传递,判断信息流的传递情况是否符合安全类型系统的定义,从而判断安全类型系统的域的分配集是否处于异常状态。
[0041] 图2是本发明一种实施方式提供的密码算法程序漏洞检测系统的框图。如图2所示,本发明实施方式提供一种密码算法程序漏洞检测系统,所述系统包括解析模块、表示模块和分析模块。
[0042] 所述解析模块用于对密码算法程序的汇编文件和配置文件进行解析。所述汇编文件可通过objdump反汇编工具反汇编所述密码算法程序的可执行文件获得。所述配置文件为系统配置文件,包括密码算法的函数、输出形式、漏洞检测密级等信息。本实施方式中,所述汇编文件为RISC-V架构下的汇编语言文件,通过采用与汇编文件匹配的正则表达式获取汇编文件中的函数、指令及地址信息来实现解析。
[0043] 所述表示模块用于根据解析后的汇编文件和配置文件构造程序对象。具体为,根据解析后的汇编文件和配置文件,通过程序模型和指令模型构造程序对象。本实施方式中,对特定的RISC-V架构CPU进行分层的形式化定义,定义寄存器模型、函数、执行点等程序模型,定义基于安全类型系统(Secure Type System)的自上而下分类的指令模型(例如每一类指令对域(Domain)的影响,指令执行周期及指令对硬件模型的赋值)。
[0044] 所述分析模块用于根据指令分类信息执行所述程序对象的对应指令,在执行首个指令的过程中建立安全类型系统的初始分配集,在执行所述程序对象的对应指令的过程中监测每一指令的执行情况,在所有指令执行完毕后比较所述安全类型系统的最终分配集与指定分配集的偏序关系,以确定所述密码算法程序是否存在信息泄露。具体的,在执行所述程序对象的过程中,从首个执行点开始建立安全类型系统的初始分配集,根据指令分类信息执行对应的指令,在任一指令执行完毕后判断当前是否存在不符合安全类型系统的域的分配集的异常状态;若是,则抛出对应的异常信息,之后继续执行下一条指令;若否,则直接执行下一条指令直到所有的指令执行完毕(即所有执行点都执行完毕)。在所有执行点执行完毕后,比较最终分配集与指定分配集的偏序关系,从而确定密码算法程序是否存在信息泄露,并根据抛出的异常信息确定泄露点、泄露量、泄露类型,生成报告信息。
[0045] 本发明实施方式提供的密码算法程序漏洞检测方法及检测系统,基于安全类型系统,根据密码算法程序的汇编文件构造程序对象,在执行程序对象的对应指令的过程中监测每一指令的执行情况,通过比较安全类型系统的最终分配集与指定分配集的偏序关系确定是否存在信息泄露,检测过程可观察,检测结果可验证,漏洞检出的准确率高。此外,本发明通过密码算法程序的汇编文件即可实现静态时间漏洞检测,不需要获取密码算法程序的源代码,实施性强,扩展性好,适用于在指令集架构上运行的不同类型的密码算法程序。
[0046] 本发明实施方式还提供一种机器可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被执行时实现上述的密码算法程序漏洞检测方法。
[0047] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0048] 本申请是参照根据本申请实施例的方法、系统和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0049] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0050] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0051] 最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。