当前位置: 首页 > 专利查询>清华大学专利>正文

软件的保护方法、装置、电子设备及存储介质制造方法及图纸

技术编号:29052563 阅读:51 留言:0更新日期:2021-06-26 06:18
本发明专利技术提供的软件的保护方法、装置、电子设备及存储介质,通过识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件;即本发明专利技术通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。破坏。破坏。

【技术实现步骤摘要】
软件的保护方法、装置、电子设备及存储介质


[0001]本专利技术涉及计算机技术,尤其涉及一种软件的保护方法、装置、电子设备及存储介质。

技术介绍

[0002]计算机软件一直以来面临着严重的安全威胁,其中内存破坏漏洞是一种最为广泛存在的安全威胁,这些漏洞常被攻击者利用,用于破坏敏感操作所使用的敏感数据,进而劫持或者破坏敏感操作。
[0003]现有技术中,针对上述威胁,最根本性的防御方案是确保敏感数据的完整性,一种常见的机制就是基于块密码算法实现对敏感数据的完整性验证,但是这种方式性能开销较大。

技术实现思路

[0004]针对上述问题,本专利技术提供了一种软件的保护方法、装置、电子设备及存储介质。
[0005]第一方面,本专利技术提供了一种软件的保护方法,包括:识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
[0006]在其他可选的实施方式中,所述识别软件源代码中的敏感数据,并确定敏感数据的使用点,包括:识别带有特殊标记符的数据为所述敏感数据;确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。
[0007]在其他可选的实施方式中,所述识别带有特殊标记符的数据为所述敏感数据之前,还包括:根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;将所述数据与内存读指令关联。
[0008]在其他可选的实施方式中,所述方法还包括:利用所述特殊标记符标记所述内存读指令;所述在所述敏感数据的使用点,插入检查代码,包括:在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
[0009]在其他可选的实施方式中,所述将所述敏感数据设置在所述软件源代码的编译产物的只读节中,包括:识别敏感数据的合法取值集合,构成白名单,并将白名单中的数据设置在所述软件源代码的编译产物的只读节中;将所述敏感数据设置为白名单中的数据。
[0010]在其他可选的实施方式中,所述根据检查结果确定软件是否继续运行,包括:若所读取的敏感数据在只读区内,则继续运行软件;若所读取的敏感数据不在只读区内,则阻断运行软件。
[0011]在其他可选的实施方式中,所述检查代码基于不同处理器、硬件或操作系统的特
性生成。
[0012]第二方面,本专利技术提供一种软件的保护装置,包括:识别模块,用于识别软件源代码中的敏感数据,并确定敏感数据的使用点;处理模块,用于将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;插入模块,用于在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
[0013]第三方面,本专利技术提供一种电子设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面任一项所述的方法。
[0014]第四方面,本专利技术提供一种可读存储介质,所述可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面任一项所述的方法。
[0015]本专利技术提供的软件的保护方法、装置、电子设备及存储介质,通过识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件;即本专利技术实施例通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
附图说明
[0016]图1是现有技术的敏感数据被破坏的示意图;
[0017]图2是现有技术中验证敏感数据完整性的三种机制的示意图;
[0018]图3为本专利技术提供的一种软件的保护方法的流程示意图;
[0019]图4为本专利技术提供的另一种软件的保护方法的流程示意图;
[0020]图5为本专利技术提供的一种软件的保护方法示意图;
[0021]图6为本专利技术提供的一种软件的保护装置的结构示意图;
[0022]图7为本专利技术提供的一种电子设备的结构示意图。
具体实施方式
[0023]为使本专利技术示例的目的、技术方案和优点更加清楚,下面将结合本专利技术示例中的附图,对本专利技术示例中的技术方案进行清楚、完整地描述。
[0024]计算机软件一直以来面临着严重的安全威胁,其中内存破坏漏洞是一种最为广泛存在的安全威胁。这些漏洞常被攻击者利用,用于破坏敏感操作的操作数(即敏感数据),进而劫持或者破坏敏感操作。
[0025]其中,敏感操作包括但不限于:程序控制流跳转(程序计数器更新)、敏感API调用(如system()函数、SQL查询等)、安全检查(各种白名单检查等)、关键业务操作(如转账、密码解密等)。而敏感操作的操作数,即敏感数据,包括但不限于:程序控制流跳转的操作数(函数返回地址、函数指针等)、敏感API调用的参数(system()函数执行的命令、SQL查询的
语句参数)、安全检查使用的白名单配置、关键业务操作的操作数(如转账操作的收款地址、解密操作的密文输入)等等。
[0026]敏感数据被破坏后,攻击者即可发动各种各样的攻击。图1是现有技术的敏感数据被破坏的示意图,如图1所示,当敏感数据,例如可能值1被攻击者破坏后变为恶意值,恶意值就被使用在敏感信息使用点。例如,攻击者可以破坏函数指针或函数返回地址来劫持程序控制流,或者破坏system()或execve()等敏感API函数的参数来执行危险操作(如命令注入攻击、SQL注入攻击),这些是当前最流行且危害最大的攻击类型。攻击者同样可以破坏安全检查中使用的白名单配置,例如用户标识符(uid)、条件标志或其他元数据(如配置信息、策略信息、或影子内存)等,来绕过已部署的安全防护措施或发起面向数据的攻击。攻击者还可以破坏关键业务操作的操作数,如劫持转账操作的收款地址、解密目标密文等等。
[0027]针对敏感数据被破坏进而导致敏感操作被劫持这一威胁,最根本性的防御方案需要确保数据流完整性(Data

Flow Integrity,简称:DFI),即确保软件的数据流图(定义点与使用点之间的关系)在运行时不被违反,保障敏感信息使用点不被破坏。数据有其定义点和本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种软件的保护方法,其特征在于,包括:识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。2.根据权利要求1所述的方法,其特征在于,所述识别软件源代码中的敏感数据,并确定敏感数据的使用点,包括:识别带有特殊标记符的数据为所述敏感数据;确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。3.根据权利要求2所述的方法,其特征在于,所述识别带有特殊标记符的数据为所述敏感数据之前,还包括:根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;将所述数据与内存读指令关联。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:利用所述特殊标记符标记所述内存读指令;所述在所述敏感数据的使用点,插入检查代码,包括:在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。5.根据权利要求1

4任一项所述的方法,其特征在于,所述将所述敏感数据设置在所述软件源代码的编译产物的只读节中,包括...

【专利技术属性】
技术研发人员:张超谭闻德李媛刘莹吴建平
申请(专利权)人:清华大学
类型:发明
国别省市:

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

1