CN113032737A - 软件的保护方法、装置、电子设备及存储介质 - Google Patents

软件的保护方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN113032737A
CN113032737A CN202110289668.2A CN202110289668A CN113032737A CN 113032737 A CN113032737 A CN 113032737A CN 202110289668 A CN202110289668 A CN 202110289668A CN 113032737 A CN113032737 A CN 113032737A
Authority
CN
China
Prior art keywords
sensitive data
read
software
data
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110289668.2A
Other languages
English (en)
Other versions
CN113032737B (zh
Inventor
张超
谭闻德
李媛
刘莹
吴建平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN202110289668.2A priority Critical patent/CN113032737B/zh
Publication of CN113032737A publication Critical patent/CN113032737A/zh
Priority to EP21931204.8A priority patent/EP4310702A1/en
Priority to PCT/CN2021/123329 priority patent/WO2022193629A1/zh
Application granted granted Critical
Publication of CN113032737B publication Critical patent/CN113032737B/zh
Priority to US18/467,252 priority patent/US20240004967A1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6245Protecting personal data, e.g. for financial or medical purposes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Medical Informatics (AREA)
  • Databases & Information Systems (AREA)
  • Storage Device Security (AREA)

Abstract

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

Description

软件的保护方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术,尤其涉及一种软件的保护方法、装置、电子设备及存储介质。
背景技术
计算机软件一直以来面临着严重的安全威胁,其中内存破坏漏洞是一种最为广泛存在的安全威胁,这些漏洞常被攻击者利用,用于破坏敏感操作所使用的敏感数据,进而劫持或者破坏敏感操作。
现有技术中,针对上述威胁,最根本性的防御方案是确保敏感数据的完整性,一种常见的机制就是基于块密码算法实现对敏感数据的完整性验证,但是这种方式性能开销较大。
发明内容
针对上述问题,本发明提供了一种软件的保护方法、装置、电子设备及存储介质。
第一方面,本发明提供了一种软件的保护方法,包括:识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
在其他可选的实施方式中,所述识别软件源代码中的敏感数据,并确定敏感数据的使用点,包括:识别带有特殊标记符的数据为所述敏感数据;确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。
在其他可选的实施方式中,所述识别带有特殊标记符的数据为所述敏感数据之前,还包括:根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;将所述数据与内存读指令关联。
在其他可选的实施方式中,所述方法还包括:利用所述特殊标记符标记所述内存读指令;所述在所述敏感数据的使用点,插入检查代码,包括:在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
在其他可选的实施方式中,所述将所述敏感数据设置在所述软件源代码的编译产物的只读节中,包括:识别敏感数据的合法取值集合,构成白名单,并将白名单中的数据设置在所述软件源代码的编译产物的只读节中;将所述敏感数据设置为白名单中的数据。
在其他可选的实施方式中,所述根据检查结果确定软件是否继续运行,包括:若所读取的敏感数据在只读区内,则继续运行软件;若所读取的敏感数据不在只读区内,则阻断运行软件。
在其他可选的实施方式中,所述检查代码基于不同处理器、硬件或操作系统的特性生成。
第二方面,本发明提供一种软件的保护装置,包括:识别模块,用于识别软件源代码中的敏感数据,并确定敏感数据的使用点;处理模块,用于将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;插入模块,用于在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
第三方面,本发明提供一种电子设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面任一项所述的方法。
第四方面,本发明提供一种可读存储介质,所述可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面任一项所述的方法。
本发明提供的软件的保护方法、装置、电子设备及存储介质,通过识别软件源代码中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件;即本发明实施例通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
附图说明
图1是现有技术的敏感数据被破坏的示意图;
图2是现有技术中验证敏感数据完整性的三种机制的示意图;
图3为本发明提供的一种软件的保护方法的流程示意图;
图4为本发明提供的另一种软件的保护方法的流程示意图;
图5为本发明提供的一种软件的保护方法示意图;
图6为本发明提供的一种软件的保护装置的结构示意图;
图7为本发明提供的一种电子设备的结构示意图。
具体实施方式
为使本发明示例的目的、技术方案和优点更加清楚,下面将结合本发明示例中的附图,对本发明示例中的技术方案进行清楚、完整地描述。
计算机软件一直以来面临着严重的安全威胁,其中内存破坏漏洞是一种最为广泛存在的安全威胁。这些漏洞常被攻击者利用,用于破坏敏感操作的操作数(即敏感数据),进而劫持或者破坏敏感操作。
其中,敏感操作包括但不限于:程序控制流跳转(程序计数器更新)、敏感API调用(如system()函数、SQL查询等)、安全检查(各种白名单检查等)、关键业务操作(如转账、密码解密等)。而敏感操作的操作数,即敏感数据,包括但不限于:程序控制流跳转的操作数(函数返回地址、函数指针等)、敏感API调用的参数(system()函数执行的命令、SQL查询的语句参数)、安全检查使用的白名单配置、关键业务操作的操作数(如转账操作的收款地址、解密操作的密文输入)等等。
敏感数据被破坏后,攻击者即可发动各种各样的攻击。图1是现有技术的敏感数据被破坏的示意图,如图1所示,当敏感数据,例如可能值1被攻击者破坏后变为恶意值,恶意值就被使用在敏感信息使用点。例如,攻击者可以破坏函数指针或函数返回地址来劫持程序控制流,或者破坏system()或execve()等敏感API函数的参数来执行危险操作(如命令注入攻击、SQL注入攻击),这些是当前最流行且危害最大的攻击类型。攻击者同样可以破坏安全检查中使用的白名单配置,例如用户标识符(uid)、条件标志或其他元数据(如配置信息、策略信息、或影子内存)等,来绕过已部署的安全防护措施或发起面向数据的攻击。攻击者还可以破坏关键业务操作的操作数,如劫持转账操作的收款地址、解密目标密文等等。
针对敏感数据被破坏进而导致敏感操作被劫持这一威胁,最根本性的防御方案需要确保数据流完整性(Data-Flow Integrity,简称:DFI),即确保软件的数据流图(定义点与使用点之间的关系)在运行时不被违反,保障敏感信息使用点不被破坏。数据有其定义点和使用点,根据防御部署阶段不同,数据流完整性机制可以分为三类:一是在定义点阻止恶意内存读写操作的机制;二是将敏感数据流与普通数据流相互隔离的机制;三是在使用点验证数据完整性并检测攻击的机制。图2是现有技术中验证敏感数据完整性的三种机制的示意图。
第一类机制通过在数据定义点(内存写操作)进行安全检查,确保不会出现非法的内存写。SoftBound、AddressSanitizer等方案在软件层面实现了边界检查或者时序检查,提供了较强的数据流完整性保护,但是其性能开销高。MPX(Memory ProtectionEXtension,内存保护扩展)是Intel的一个硬件扩展,其被设计用来高效地进行边界检查,从而阻止越界类型的内存破坏攻击,提供空间上的内存安全保护。ARM提出的MTE(MemoryTagging Extension,内存标签扩展)硬件机制将每个内存字与相应的标签关联,可以被用来实现空间上的和时间上的内存安全保护。这两种方案性能开销较高,相关特性目前从硬件中已移除或者尚未实现。
第二类机制通过隔离代码指针等敏感数据,阻断存在潜在危害的内存写操作破坏敏感数据,来提供数据流完整性保护。HDFI(Hardware-Assisted Data-flow Isolation,硬件辅助的数据流隔离)方案将每个内存字或每若干个内存字与一个1位的内存标签关联,而IMIX(In-Process Memory Isolation Extension,进程内内存隔离扩展)方案将每个内存页与一个1位的内存标签关联,从而提供较强的数据流隔离和安全保证。Intel MPK(MemoryProtection Keys,内存保护键)与ARM DACR(Domain Access Control Register,域访问控制寄存器)将内存页分为若干键(keys)或域(domains),并为用户提供控制寄存器调整内存页的权限来实现数据流隔离。Intel SMAP(Supervisor Mode Access Prevention,特权态访问阻止)、Intel SMEP(Supervisor Mode Execution Prevention,特权态执行阻止)、ARMPAN(Privileged Access Never,特权访问阻止)、RISC-V SUM(Supervisor User Memory,特权态用户内存访问)等硬件特性提供了内核态与用户态的隔离。这些方案的防御强度通常不够高。
第三类机制通过在使用点验证数据完整性,确保敏感操作所使用的操作数未被篡改,保护敏感操作。ARM PA(Pointer Authentication,指针验证)机制基于块密码算法实现了对敏感数据的完整性验证,在苹果手机等产品中得到初步应用,取得了较好的防护效果,但是其性能开销较大。StackGuard等方案通过在栈上放置Canary/Cookie,并在函数返回之前验证Canary/Cookie是否被破坏,来验证返回地址的完整性,但是其防御强度较低。
针对上述问题,本发明的技术构思在于:通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
第一方面,本发明示例提供了一种软件的保护方法,图3为本发明提供的一种软件的保护方法的流程示意图。
如图3所示,该软件的保护方法包括:
步骤101、识别软件源代码中的敏感数据,并确定敏感数据的使用点。
需要说明的是,本发明的执行主体为电子设备中的编译器,例如LLVM/Clang编译器,可通过对编译器扩展实现本实施例。
具体来说,对于待保护的软件源代码,扩展后的编译器对其进行编译,在编译过程中,扩展后的编译器识别用户提供的敏感操作或预定义规则刻画的敏感操作。常见的敏感操作包括:程序控制流跳转(程序计数器更新)、敏感API调用(如system()函数、SQL查询等)、安全检查(各种白名单检查等)、关键业务操作(如转账、密码解密等);扩展后的编译器自动识别软件中对这些敏感操作的调用点(即敏感数据的使用点),以及敏感操作所使用的敏感数据。
作为可选的实施例,所述步骤S101,包括:识别带有特殊标记符的数据为所述敏感数据;确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。
具体来说,敏感数据通过特殊标记符进行标记,比如用户可以通过软件提供的接口为LLVM编译器中间表示(LLVM IR)上的数据(或称为Value对象)打上特殊标记(例如命名为ROLoad-md标记);然后可以将这些数据与某些LLVM IR内存读指令关联,表示这些IR内存读指令所读取的数据需要被保护。
作为可选的实施例,所述识别带有特殊标记符的数据为所述敏感数据之前,还包括:根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;将所述数据与内存读指令关联。
具体来说,在软件源代码编译过程中,逐渐扫描每一行指令,根据预先定义的规则或者用户提供的目标操作,自动识别软件中包含敏感操作的指令,并用特殊标记符(例如ROLoad-md)对所述指令所使用的数据进行标记,并将所述数据与内存读指令关联。
步骤102、将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内。
具体来说,可以将敏感数据设置在软件源代码的编译产物的只读节中,从而使得编译产物(即可执行文件)在装载运行时,将敏感数据放置在软件进程的只读内存区内。
作为可选的实施例,所述步骤S102,包括:识别敏感数据的合法取值集合,构成白名单,并将白名单中的数据设置在所述软件源代码的编译产物的只读节中;将所述敏感数据设置为白名单中的数据。
具体来说,扩展后的编译器自动识别敏感数据合法操作数取值集合(白名单)。需要说明的是,大多数敏感数据的使用点上实质上含有一些白名单,这些白名单由一系列不可变的数据组成。这些白名单的例子包括但不限于:C++软件的虚函数表、软件开发者自定义的函数指针表、格式化字符串以及硬编码的配置信息、安全检查的白名单策略、转账操作的收款地址、敏感操作的发起人等。优选的,本发明提出的方法通过程序分析或者用户指定的方式,自动识别这些白名单信息。在某些情况下,白名单没有在软件源代码中显式地定义,例如,间接控制流转移的目标可以在编译期或运行时被计算出来,但它们并没有直接地写明在软件源代码中,对于这些情况,本发明在编译时预计算这些白名单。也就是说,用户可以创建白名单文件,在文件中指定白名单信息,使得LLVM Pass读取对应的文件后能够获得白名单信息;还可以基于LLVM Pass对源代码进行分析,自动识别并构建部分敏感数据的白名单,例如C++软件的虚函数表等。
进而,扩展后的编译器将这些不可变的白名单数据放置在防篡改的区域内来使其免受破坏(或污染)。优选的,基于性能和易用性考虑,本发明选择内存中的只读页作为防篡改的区域,也就是说,本发明可以通过将白名单数据放置在可执行文件中只读节(section)来实现保护,该可执行文件被装载运行后,这些数据就存储于进程的只读内存区中。
另外,本发明会将软件中对敏感数据的使用改为对放置在只读内存中白名单数据的内存访问,自动修改软件确保正确性。
步骤103、在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
具体来说,扩展后的编译器在敏感数据使用点插入检查代码,在软件运行时调用检查代码,对敏感数据的只读属性进行验证;如果运行时验证成功,则继续执行软件;在运行时的验证失败,则阻断软件继续执行。也就是说,本发明能够限定只有来自防篡改(只读内存)区域的数据可在敏感数据使用点被使用,能够阻止被污染或破坏的数据(非只读数据)在敏感数据使用点被使用,以此缓解内存攻击,从而保护软件的敏感操作。
作为可选的实施例,所述方法还包括:利用所述特殊标记符标记所述内存读指令;所述步骤S103,包括:在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
具体来说,扩展后的编译器,对软件源代码进行详细分析,逐条指令分析判断该指令是否存在敏感操作(包括但不限于虚函数调用等)。若某指令存在敏感操作,则该LLVMPass分析其操作数的来源,找到相应的IR内存读指令,使用ROLoad-md标记该指令;然后逐条修改所有被ROLoad-md标记的IR内存读指令,并在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
作为可选的实施方式,所述检查代码基于不同处理器、硬件或操作系统的特性生成。
具体来说,根据目标平台的硬件特性或者操作系统提供的特性等功能,扩展后的编译器构建并生成可验证数据只读属性的功能代码。例如,部分平台的硬件特性可能提供只读内存页的权限设置及检查,部分操作系统提供内存页的访问权限信息或提供只读内存地址范围等,这些特性或者信息都可以用于检查目标数据是否处于只读内存区。基于这些特性,扩展后的编译器能够构建相应功能代码,实现对敏感数据只读属性的验证。
本实施例提供的软件的保护方法,通过识别软件中的敏感数据,并确定敏感数据的使用点;将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件;即本发明通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
结合前述的各实现方式,图4为本发明提供的另一种软件的保护方法的流程示意图,如图4所示,该软件的保护方法包括:
步骤201、识别软件源代码中的敏感数据,并确定敏感数据的使用点。
步骤202、将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内。
步骤203、在所述敏感数据的使用点,插入检查代码。
步骤204、在软件运行时,根据检查代码判断所读取的敏感数据是否在只读区内。
若是,则执行步骤205;若否,则执行步骤206。
步骤204、继续运行软件。
步骤205、阻断运行软件。
本实施方式中的步骤201、步骤202以及步骤203分别与前述实施方式中的步骤101、步骤102以及步骤103的在所述敏感数据的使用点,插入检查代码的实现方式类似,在此不进行赘述。
与前述实施方式不同的是,本实施例进一步限定了判断软件是否继续运行的具体实现方式。在本实施方式中,若所读取的敏感数据在只读区内,则继续运行软件;若所读取的敏感数据不在只读区内,则阻断运行软件。
具体来说,若运行时验证只读属性失败,说明某敏感指令的敏感操作的操作数(即敏感数据)不在进程的只读内存区中,此时本发明认为该进程执行发生异常,并使用目标平台的硬件特性或者操作系统提供的特性来阻断该进程继续执行(例如向该进程发送一个段错误信号,SIGSEGV),以确保只有只读内存区域的数据能够被此类敏感指令或敏感操作使用。可选的,只读属性的验证和进程的阻断可以由目标平台的同一个硬件特性或者操作系统提供的同一个特性完成。
为了更直观的了解本发明,图5为本发明提供的一种软件的保护方法示意图;如图5所示,敏感数据(例如可能值1、可能值2……可能值N等)存储在只读内存区中,软件运行时是通过指针读取的;正常情况下,软件运行时通过指针获取存储在只读区的敏感数据;当攻击者攻击指针时,有可能将指针指向存储在攻击者希望的区域,但本实施例会因为检查代码检测到敏感数据不是在只读区域内读取的,会发出段错误信号,阻断软件的继续运行。
在前述实施方式的基础上,通过若所读取的敏感数据在只读区内,则继续运行软件;若所读取的敏感数据不在只读区内,则阻断运行软件,即通过验证要读取的敏感数据是否在只读区内,实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
第二方面,本发明示例提供了一种软件的保护装置,图6为本发明提供的一种软件的保护装置的结构示意图,如图6所示,该保护装置包括:
识别模块10,用于识别软件源代码中的敏感数据,并确定敏感数据的使用点;处理模块20,用于将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;插入模块30,用于在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
在其他可选的实施方式中,所述识别模块10,具体用于:识别带有特殊标记符的数据为所述敏感数据;确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。
在其他可选的实施方式中,所述识别模块10,还用于:根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;将所述数据与内存读指令关联。
在其他可选的实施方式中,所述识别模块10还用于:利用所述特殊标记符标记所述内存读指令;所述插入模块30,具体用于:在标记的内存读指令之前,插入所述检查代码;或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
在其他可选的实施方式中,所述处理模块20,具体用于:识别敏感数据的合法取值集合,构成白名单,并将白名单中的数据设置在所述软件源代码的编译产物的只读节中;将所述敏感数据设置为白名单中的数据。
在其他可选的实施方式中,所述根据检查结果确定软件是否继续运行,包括:若所读取的敏感数据在只读区内,则继续运行软件;若所读取的敏感数据不在只读区内,则阻断运行软件。
在其他可选的实施方式中,所述检查代码基于不同处理器、硬件或操作系统的特性生成。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的软件的保护装置的具体工作过程以及相应的有益效果,可以参考前述方法示例中的对应过程,在此不再赘述。
本发明提供的软件的保护装置,通过识别模块,用于识别软件源代码中的敏感数据,并确定敏感数据的使用点;处理模块,用于将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;插入模块,用于在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件,即本发明通过在敏感数据使用点插入检查代码,使得软件在运行时,通过调用的检查代码检查要读取的敏感数据是否在只读区内,从而实现对敏感数据的完整性验证,进而在性能开销较小的同时防御敏感数据被破坏。
第三方面,本发明示例提供了一种电子设备,图7为本发明提供的一种电子设备的硬件结构示意图,如图7所示,包括:
至少一个处理器701和存储器702。
在具体实现过程中,至少一个处理器701执行所述存储器702存储的计算机执行指令,使得至少一个处理器701执行如上的方法,其中,处理器701、存储器702通过总线703连接。
处理器701的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
在上述的图7所示的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器。
总线可以是工业标准体系结构(Industry Standard Architecture,简称:ISA)总线、外部设备互连(Peripheral Component Interconnect,简称:PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称:EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
第四方面,本发明还提供了一种可读存储介质,所述可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上方法。
上述的可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)、磁存储器、快闪存储器、磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,简称:ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (10)

1.一种软件的保护方法,其特征在于,包括:
识别软件源代码中的敏感数据,并确定敏感数据的使用点;
将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;
在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
2.根据权利要求1所述的方法,其特征在于,所述识别软件源代码中的敏感数据,并确定敏感数据的使用点,包括:
识别带有特殊标记符的数据为所述敏感数据;
确定与所述敏感数据关联的内存读指令所在位置为所述敏感数据的使用点,其中,所述内存读指令用于通过指针读取所述敏感数据。
3.根据权利要求2所述的方法,其特征在于,所述识别带有特殊标记符的数据为所述敏感数据之前,还包括:
根据预设规则识别软件源代码中包含敏感操作的指令,并利用所述特殊标记符标记所述指令所使用的数据;
将所述数据与内存读指令关联。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:利用所述特殊标记符标记所述内存读指令;
所述在所述敏感数据的使用点,插入检查代码,包括:在标记的内存读指令之前,插入所述检查代码;
或者将所述标记的内存读指令修改为包含检查代码在内的内存读代码。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述将所述敏感数据设置在所述软件源代码的编译产物的只读节中,包括:
识别敏感数据的合法取值集合,构成白名单,并将白名单中的数据设置在所述软件源代码的编译产物的只读节中;
将所述敏感数据设置为白名单中的数据。
6.根据权利要求5所述的方法,其特征在于,所述根据检查结果确定软件是否继续运行,包括:
若所读取的敏感数据在只读区内,则继续运行软件;
若所读取的敏感数据不在只读区内,则阻断运行软件。
7.根据权利要求1-4任一项所述的方法,其特征在于,所述检查代码基于不同处理器、硬件或操作系统的特性生成。
8.一种软件的保护装置,其特征在于,包括:
识别模块,用于识别软件源代码中的敏感数据,并确定敏感数据的使用点;
处理模块,用于将所述敏感数据设置在所述软件源代码的编译产物的只读节中,以使软件运行时将敏感数据存储在只读区内;
插入模块,用于在所述敏感数据的使用点,插入检查代码,其中,所述检查代码用于在软件运行时,检查所读取的敏感数据是否在只读区内,并根据检查结果确定是否继续运行软件。
9.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至7任一项所述的方法。
10.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至7任一项所述的方法。
CN202110289668.2A 2021-03-15 2021-03-15 软件的保护方法、装置、电子设备及存储介质 Active CN113032737B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202110289668.2A CN113032737B (zh) 2021-03-15 2021-03-15 软件的保护方法、装置、电子设备及存储介质
EP21931204.8A EP4310702A1 (en) 2021-03-15 2021-10-12 Software protection method and apparatus, electronic device, and storage medium
PCT/CN2021/123329 WO2022193629A1 (zh) 2021-03-15 2021-10-12 软件的保护方法、装置、电子设备及存储介质
US18/467,252 US20240004967A1 (en) 2021-03-15 2023-09-14 Software protection method and apparatus, electronic device, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110289668.2A CN113032737B (zh) 2021-03-15 2021-03-15 软件的保护方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN113032737A true CN113032737A (zh) 2021-06-25
CN113032737B CN113032737B (zh) 2021-11-30

Family

ID=76471788

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110289668.2A Active CN113032737B (zh) 2021-03-15 2021-03-15 软件的保护方法、装置、电子设备及存储介质

Country Status (4)

Country Link
US (1) US20240004967A1 (zh)
EP (1) EP4310702A1 (zh)
CN (1) CN113032737B (zh)
WO (1) WO2022193629A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022193629A1 (zh) * 2021-03-15 2022-09-22 清华大学 软件的保护方法、装置、电子设备及存储介质

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080163382A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Method and system for protecting sensitive data in a program
CN102222194A (zh) * 2011-07-14 2011-10-19 哈尔滨工业大学 Linux主机计算环境安全保护的模块及方法
CN102880461A (zh) * 2012-08-29 2013-01-16 华为技术有限公司 一种编译链接方法及装置
CN102930185A (zh) * 2012-11-28 2013-02-13 中国人民解放军国防科学技术大学 运行时程序安全关键数据的完整性验证方法及装置
CN103955362A (zh) * 2014-04-03 2014-07-30 广东工业大学 一种基于Xen的操作系统内核监控方法
CN104011733A (zh) * 2012-08-09 2014-08-27 英特尔公司 在系统预引导期间具有改进的只读存储器锁定的安全数据保护
CN105426223A (zh) * 2015-12-25 2016-03-23 百度在线网络技术(北京)有限公司 应用加载方法和装置
EP3355218A1 (en) * 2017-01-26 2018-08-01 Gemalto Sa Method to secure a software code
CN108920253A (zh) * 2018-06-20 2018-11-30 成都虫洞奇迹科技有限公司 一种无代理的虚拟机监控系统和监控方法
CN111400702A (zh) * 2020-03-24 2020-07-10 上海瓶钵信息科技有限公司 一种虚拟化的操作系统内核保护方法
US20200265135A1 (en) * 2019-02-18 2020-08-20 Verimatrix Protecting a software program against tampering
CN111881485A (zh) * 2020-07-14 2020-11-03 浙江大学 一种基于arm指针验证的内核敏感数据完整性保护方法
CN112100686A (zh) * 2020-08-28 2020-12-18 浙江大学 一种基于arm指针验证的内核代码指针完整性保护方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010007131A1 (en) * 1997-09-11 2001-07-05 Leonard J. Galasso Method for validating expansion roms using cryptography
BR112015018459A2 (pt) * 2013-03-07 2017-07-18 Intel Corp mecanismo para fornecer suporte para fluxos de confiabilidade, disponibilidade e capacidade de serviço (ras) em monitor de ponto
CN111381879B (zh) * 2018-12-31 2022-09-02 华为技术有限公司 一种数据处理方法及装置
US11436315B2 (en) * 2019-08-15 2022-09-06 Nuvoton Technology Corporation Forced self authentication
CN113032737B (zh) * 2021-03-15 2021-11-30 清华大学 软件的保护方法、装置、电子设备及存储介质

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080163382A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Method and system for protecting sensitive data in a program
CN102222194A (zh) * 2011-07-14 2011-10-19 哈尔滨工业大学 Linux主机计算环境安全保护的模块及方法
CN104011733A (zh) * 2012-08-09 2014-08-27 英特尔公司 在系统预引导期间具有改进的只读存储器锁定的安全数据保护
CN102880461A (zh) * 2012-08-29 2013-01-16 华为技术有限公司 一种编译链接方法及装置
CN102930185A (zh) * 2012-11-28 2013-02-13 中国人民解放军国防科学技术大学 运行时程序安全关键数据的完整性验证方法及装置
CN103955362A (zh) * 2014-04-03 2014-07-30 广东工业大学 一种基于Xen的操作系统内核监控方法
CN105426223A (zh) * 2015-12-25 2016-03-23 百度在线网络技术(北京)有限公司 应用加载方法和装置
EP3355218A1 (en) * 2017-01-26 2018-08-01 Gemalto Sa Method to secure a software code
CN108920253A (zh) * 2018-06-20 2018-11-30 成都虫洞奇迹科技有限公司 一种无代理的虚拟机监控系统和监控方法
US20200265135A1 (en) * 2019-02-18 2020-08-20 Verimatrix Protecting a software program against tampering
CN111400702A (zh) * 2020-03-24 2020-07-10 上海瓶钵信息科技有限公司 一种虚拟化的操作系统内核保护方法
CN111881485A (zh) * 2020-07-14 2020-11-03 浙江大学 一种基于arm指针验证的内核敏感数据完整性保护方法
CN112100686A (zh) * 2020-08-28 2020-12-18 浙江大学 一种基于arm指针验证的内核代码指针完整性保护方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘婷婷: "《面向云计算的数据安全保护关键技术研究》", 《中国博士学位论文全文数据库(信息科技辑)》 *
孟姗姗: "《移动智能终端的软件保护研究》", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022193629A1 (zh) * 2021-03-15 2022-09-22 清华大学 软件的保护方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
EP4310702A1 (en) 2024-01-24
US20240004967A1 (en) 2024-01-04
WO2022193629A1 (zh) 2022-09-22
CN113032737B (zh) 2021-11-30

Similar Documents

Publication Publication Date Title
Chiueh et al. RAD: A compile-time solution to buffer overflow attacks
Shanbhogue et al. Security analysis of processor instruction set architecture for enforcing control-flow integrity
EP3069254B1 (en) Improved control flow integrity system and method
Almakhdhub et al. $\mu $ RAI: Securing Embedded Systems with Return Address Integrity
EP3779745B1 (en) Code pointer authentication for hardware flow control
US7603704B2 (en) Secure execution of a computer program using a code cache
US7886148B2 (en) Secure execution of a computer program
US7577992B2 (en) Software security based on control flow integrity
US20080133858A1 (en) Secure Bit
US20240004967A1 (en) Software protection method and apparatus, electronic device, and storage medium
Piromsopa et al. Survey of protections from buffer-overflow attacks
US20230418768A1 (en) Sensitive data reading method and apparatus, electronic device, and storage medium
US11194899B2 (en) Apparatus and methods for transitioning between a secure area and a less-secure area
Moon et al. Architectural supports to protect OS kernels from code-injection attacks and their applications
Lehniger et al. Combination of ROP Defense Mechanisms for Better Safety and Security in Embedded Systems
Almakhdhub et al. uRAI: Return Address Integrity for Embedded Systems.
Novković A Taxonomy of Defenses against Memory Corruption Attacks
Karwayun et al. War of Control Hijacking: Attacks and Defenses
Yongdong Enhancing security check in visual studio c/c++ compiler
Noorman et al. There is safety in numbers: Preventing control-flow hijacking by duplication
Healey et al. Dynamic Tracking of Information Flow Signatures for Security Checking
Healey et al. Ensuring Critical Data Integrity via Information Flow Signatures
Salah et al. Methods of Protecting the Stack Overflow Vulnerability
Kohli AUTOMATIC DETECTION OF MEMORY CORRUPTION ATTACKS

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant