CN103827879A - 针对恶意攻击保护存储器的方法 - Google Patents
针对恶意攻击保护存储器的方法 Download PDFInfo
- Publication number
- CN103827879A CN103827879A CN201180071247.7A CN201180071247A CN103827879A CN 103827879 A CN103827879 A CN 103827879A CN 201180071247 A CN201180071247 A CN 201180071247A CN 103827879 A CN103827879 A CN 103827879A
- Authority
- CN
- China
- Prior art keywords
- heap
- computer
- memory section
- readable medium
- data
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
一种用于使用堆存储器或类似动态存储器分配的安全动态存储器管理的方法和系统,包括在随机存取存储器内将堆存储器段初始化,该堆存储器段具有多个缓冲器。当接收到用以将数据存储在堆存储器段中的分配请求时,随机地选择缓冲器中的一个。然后将包含堆存储器段的已分配和未分配缓冲器的细节的元数据保持在与堆对象分开的存储器的一部分中。根据某些实施例,本公开的安全堆能够安全地实现C/C++stdlib库的与动态存储器管理有关的那些部分的函数,具体地malloc()、free()及其变体。
Description
技术领域
本公开针对用于防止软件被恶意攻击的方法和系统。特别地,本公开针对一种用于防止应用的动态分配储存器的方法和系统。
背景技术
软件应用由数据和操纵此数据以便处理到应用的输入且产生某些输出的代码组成。数据被用来在应用的执行期间跟踪其内部状态。某些数据具有恒定值,其通常被嵌入应用的代码中。具有可变值的数据一般被存储在随机存取存储器中。
某些变量可能在编译时间期间被分配给存储器位置。然而,大多数数据取决于应用的执行流程,因此需要动态地分配要求的存储器资源。示例是函数(过程)调用之间的参数交换。这些参数常常被保持在堆栈中,其是用于在函数之间传递参数的通用存储器分配结构。用于堆栈的存储器分配完全由函数的调用序列确定。
在其他情况下,应用本身控制用于某些数据的动态存储器分配,并且因此负责动态分配的存储器资源的整个生命周期。也称为基于堆的存储器分配的动态存储器分配是供应用在该应用的运行时间期间使用的存储器存储的分配。动态存储器分配常常是在特定程序设计语言环境中使用标准函数实现的。此类函数一般得到程序设计语言特定库的支持,诸如C/C++ stdiib。库实现的函数转而从操作系统请求存储器资源。
动态存储器分配函数还可以形成程序设计语言的运行时环境的整体部分。在那种情况下,在运行时间执行环境中实现自动存储器管理。对于这些语言中的某些而言,执行环境能够使用另一升序设计语言的标准存储器分配库。
动态存储器数据易于受到利用已分配存储器的可预测行为的攻击。动态存储器实现常常对数据完整性具有很少的(如果有的话)检查。在某些应用中,某些输入可能损害动态分配存储器中的数据结构的完整性(即,当输入的尺寸大于动态存储器中的已分配缓冲器时)。动态存储器分配的物理位置的知识能够帮助攻击者将数据完整性弱点扩展成能够对应用的操作取得完全控制的成功攻击。
用以缓解这些攻击的方式是使用称为地址空间布局随机化(ASLR)的技术,其在系统启动时将整个堆的基本地址通常修改成少量的可能值中的一个。堆行为仍是完全确定性的,但是所有分配地址在存储器中被移位不同的基本地址。ASLR防止假设分配地址正好是恒定值的相对简单的机器人攻击。ASLR技术需要由支持应用执行的操作系统来实现。
在白盒攻击背景下,其中攻击者对执行环境和软件实现具有完全控制,除非计算设备受到物理保护,攻击者可访问代码、数据结构和执行环境。动态分配储存器的保护是用于此类软件应用的重要安全问题。用于动态存储器分配方案的已知保护技术依赖于操作系统和虚拟存储器硬件,并且并未防止补偿不同基本地址的智能攻击。另外,某些处理器硬件和某些操作系统并不具有支持用于动态分配存储器的保护方案的能力。
另外,当前方案并未提供对堆元数据的完全保护。仅仅基于分配地址,堆元数据描述堆中的未分配(自由)存储器的量和位置以及允许已分配缓冲器的释放的足够信息。至少从堆API角度出发,其正常地对于用户而言是完全不可见的,但是其常常易受逆向工程,因为目标通常是性能而不是安全。根本不支持动态分配储存器的更高级保护,诸如检查和、加密、非相邻分配等。
因此期望的是通过提供标准动态存储器管理功能来提供安全实现而保护应用的动态分配储存器。
发明内容
提供了动态存储器管理的计算机实现方法。该方法包括将存储器内的具有多个缓冲器的堆存储器段初始化。当接收到将数据存储在堆存储器段中的分配请求时,满足该分配请求的所述多个缓冲器中的至少一个被非确定性地选择为用于数据的已分配缓冲器。关于已分配缓冲器的元数据被保持在与堆存储器段分开的存储器的一部分中。该数据然后被关联至非确定性地选择的缓冲器。还提供了一种包含指令的非瞬态计算机可读介质,该指令在被处理器执行时使处理器执行动态存储器管理的方法。
根据实施例,可以通过将堆存储器段划分成固定尺寸的多个页面来将堆存储器段初始化。缓冲器的非确定性选择可以包括生成所述多个页面的排列,并且从所述多个页面的排列中选择满足分配请求的下一个自由页面,或者生成所述多个缓冲器的排列,并从所述多个缓冲器的排列中选择满足分配请求的下一自由缓冲器。该元数据可以包括堆存储器段的已分配和未分配缓冲器的细节,其能够用来实现完整性验证。元数据可以包括指向已分配缓冲器的指针,诸如不能被应用直接解引用的不透明指针。元数据还可以包括施加于数据的各个分配的属性,诸如安全变换的细节,诸如加密细节。该方法还可以包括接收释放所述多个缓冲器中的一个或多个的释放请求;以及向所述多个缓冲器中的一个或多个施加释放策略。该释放策略可以例如确定是否对所述多个缓冲器中的一个或多个数据进行加扰或归零。
附图说明
现在将参考附图仅以示例的方式来描述本公开的实施例。
图1是根据本公开的实施例的用于实现使用安全堆的动态存储器管理的计算环境的图。
图2是根据本公开的实施例的用于使用安全堆的动态存储器管理的方法的流程图。
图3是根据本公开的实施例的安全堆存储器段的图。
具体实施方式
一般地,本公开描述了一种用于安全动态存储器管理的方法和系统。相对于C/C++实施方式描述了实施例,但其并不意图局限于此类实施方式,并且本文所述的方法可以相对于使用堆存储器或类似动态存储器分配的任何动态存储器管理系统来使用。根据某些实施例,本公开的安全堆能够安全地实现C/C++ stdlib库的与动态存储器管理有关的那些部分的函数,具体地malloc ()、free ()及其变体。
概括地讲,安全堆实施方式支持两个类型的存储器分配指针:“平滑(smooth)”和“句柄(handle)”指针。“平滑”指针是指向具有所请求尺寸的一件储存器的标准存储器地址。“平滑”指针可以被调用应用直接解引用。“句柄”指针不是标准存储器地址,并且因此不能被调用应用直接解引用。其被用来支持某些更高级的安全堆特征,诸如非相邻数组分配,并且要求将存储器存取API用于堆用户应用中的已分配储存器的所有引用。
使用标准动态存储器管理实施方式的更关键弱点中的一个是其在代码转换域外面,并且因此保持平滑API。例如,对malloc ()和free ()的调用、包括诸如所请求分配的大小和返回分配地址的关键参数并不是用于由代码转换器进行变换的候选。识别分配了用户数据的应用中的所有位置对于攻击者而言是微不足道的,并且可以使用简单技术(诸如使用调试程序等)来查明感兴趣的特定尺寸的分配请求,例如加密应用的秘钥尺寸。除非能够将存储器管理库带入代码转换域中,否则攻击者能够检测灵敏的用户数据分配和初始化代码。如本文所使用的,“代码转换域”是其中能够将随机化、随机或非确定性的变换应用于存储器调用和分配的域。
堆正常地被实现为不同尺寸的存储器段的集合,全部由当前分配和未分配储存器以及描述堆状态的复杂数据结构(堆元数据)组成。在许多实施方式中,堆元数据实际上是堆储存器本身的一部分,通常是在分配地址前面的许多字节。由于效率通常是用于任何堆实施方式的主要设计标准,所以存在用以实现此堆元数据的少数方式,使得攻击者容易在任何时刻确定堆的状态,常常是通过检查单个已分配储存器的缓冲器。因此,即使是在不存在诸如调试程序的动态攻击的情况下,如果能够获得存储器快照,堆内容也易于被完全解密。
由于效率是用于标准堆实施方式的主要设计标准,所以存在针对任何给定分配请求所返回的存储器分配地址的可预测模式。堆被设计成在堆本身的原始执行性能与最小废物或碎片之间权衡轻重。为此,通常以可预测方式将特定尺寸的分配请求集中在一起以确保堆管理员能够快速地发现存储器的自由区段,并且碎片并未变成特定地方的。因此可以预测针对给定尺寸的未来请求将返回什么分配地址。欺骗堆管理员的一个方式是人工地请求一定尺寸的块,攻击者知道应用对于特定函数将需要该尺寸的块,诸如其加密秘钥缓冲器,并且然后在记录返回地址之后立即将其释放。许多堆实施方式将优选地将最近释放的存储器缓冲器重新用于相同尺寸的下一分配请求。
传统堆实施方式也是确定性的。分配/释放操作的给定序列将始终返回分配地址的相同序列。因此,可以分析应用以将感兴趣的分配隔离,并且在重新运行时,分配将接收到与前述相同的地址。这简化了攻击者的工作,因为来自应用的较早运行的分析能够在稍后的运行中被重新使用。
此弱点的第二方面是数组分配所特定的。按照其真正的本质,堆每次返回存储器的单个块,并且因此数组分配的所有元素在存储器中固有地是相邻的。常规堆不能支持在存储器中具有非相邻布局的数组。数组的非相邻布局能够导致相当大的安全益处。
另外,C/C++储存器通常可以是三个广泛类中的一个:静态分配全局数据(程序全局范围内的任何东西);动态分配本地数据(诸如参数值和本地范围变量),通常在堆栈上分配;以及应用请求的动态分配数据(堆)。这三个存储类中的每一个通常都是在可预测且容易鉴别存储器范围内分配的。这使得仅给定一件储存器的地址,攻击者容易确定其起源。
由于常规堆分配仅仅是指针和因此的存储器地址,所以,还存在用于提供已分配储存器的动态保护的可能性(即使有也极少数)。动态保护包括诸如偶尔地将已分配储存器移动至不同位置、在不同的时间用不同的数据变换对内容进行重新编码等技术。如果攻击者可访问已分配储存器的原始存储器地址,则要有效地实现此类动态保护技术是非常困难的,如果不是不可能的话。
为了消除或至少减少常规动态存储器管理的某些缺点,在本公开中描述了“安全的”堆实施方式。本文所使用的“安全的”意指堆攻击有抵抗力,并且是通过施加于堆组织及其元数据的各种混淆技术。
图1描述了根据实施例的用于实现安全堆的计算环境。该计算环境可以是任何适当的处理器驱动环境,诸如通用计算机、移动设备、网络服务器、机顶盒等。应用100在计算环境中执行。操作系统102管理计算环境的硬件资源,并且提供用于应用100的高效执行的公共服务。应用100和操作系统102通常被存储在持久性存储器(未示出)中。运行时间库104可用于操作系统102。运行时间库104是被操作系统102用来实现在应用的运行时间(执行)期间被构建成程序设计语言的函数的库。运行时间库104通常将包括例程或API以控制输入/输出函数,诸如C/C++ stdio,并且一般地实现智能在运行时间执行(或者更高效或准确)的函数,诸如某些检错、数组界限检查、动态类型检查、异常处理和调试。运行时间库104还包括安全堆例程,被存储为安全堆库106,以支持根据本公开的安全动态存储器管理。
在操作中,当应用100要求用于某些数据的动态存储器分配,此数据被存储在存储器107内的安全堆存储器段108中,诸如随机存取存储器。动态存储器分配函数由与操作系统102通信的堆管理器110来控制。堆管理器110基于直接地或间接地向其提供的策略决策114和安全决策116来管理向堆存储器段的分配。堆管理器110还保持详述堆存储器段108内的已分配和未分配缓冲器的安全堆元数据112。堆元数据112还可以包括其他信息,诸如施加于数据的变换、加密等的细节。
根据实施例,计算环境还可以包括代码转换器118,诸如Cloakware TranscoderTM。“代码转换器”是自动化工具以向数据和代码施加随机化、随机或非确定性变换,包括动态存储器调用和分配。代码转换器118的运行在本文的范围之外,但是一般地可以理解为施加安全变换以使对数据的变量和数学运算混淆或隐匿,特别是密码操作,以确保其对于攻击者而言是不可见的,并且不显示堆关键资产有破坏性的信息。代码转换器118还可以施加控制流变换以伪装应用的程序流,使得对于攻击者而言非常难以静态地或动态地跟踪应用的操作。可以将代码转换器118视为将数据、数据结构以及源代码变换成数学修改数据、数据结构以及源代码的实用程序。已变换数据、数据结构以及源代码在功能上与原始的相同,但是对逆向工程和篡改攻击具有高度抵抗力。
安全变换能够涉及到特性常数的使用。例如,变换能够涉及到数学映射函数的使用,其对位置进行变换以使数学空间交替,如在2003年7月15日颁布的美国专利号美国专利号6,594,761;TAMPER RESISTANT SOFTWARE ENCODING和2005年1月11日颁布的美国专利号美国专利号6,842,862;TAMPER RESISTANT SOFTWARE-MASS DATA ENCODING中所述,其内容被整体地通过引用结合到本文中。为了做到这一点,代码转换器118对每个映射使用一组函数系列和许多特性常数。该常数是随机(且相互之间一致地)选择的。该组常数变成库实例的区别因子,并且是程序正确地运行所必须的。这些常数形成堆元数据的一部分。这些常数的精确值是由代码转换器118基于变换函数的特性而选择的。此外,可以遍及整个应用而发现许多相互关联的安全变换常数,其是以相互一致的方式选择的,使得改变一个常数可能要求以某种一致的方式改变许多其他常数。
在以下专利文献中能够找到数据变换和白盒密码术实施方式的示例:TAMPER RESISTANT SOFTWARE ENCODING AND ANALYSIS,美国专利公开2004/0236955-A1;SOFTWARE CONDITIONAL ACCESS SYSTEM,美国专利公开2005/0039025-A1;METHOD AND SYSTEM FOR SECURE ACCESS,美国专利号7,325,141;METHOD AND SYSTEM FOR SUSTAINABLE DIGITAL WATERMARKING,美国专利公开2005/0021966 A1;SECURE METHOD AND SYSTEM FOR BIOMETRIC VERIFICATION,美国专利公开005/0138392 A1;SECURE METHOD AND SYSTEM FOR COMPUTER PROTECTION,美国专利公开2004/0268322 A1;SECURE METHOD AND SYSTEM FOR HANDLING AND DISTRIBUTING DIGITAL MEDIA,美国专利公开2005/0021989-A1;SYSTEM AND METHOD FOR OBSCURING BIT-WISE AND TWO'S COMPLEMENT INTEGER COMPUTATIONS IN SOFTWARE,美国专利公开2005/0166191 A1;SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK, 美国专利公开2006/0140401-A1;SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK,美国专利公开2004/0139340-A1;SYSTEM AND METHOD OF FOILING BUFFER-OVERFLOW AND ALIEN-CODE ATTACKS,美国专利公开003/0172293-A1;SYSTEM AND METHOD OF HIDING CRYPTOGRAPHIC PRIVATE KEYS,美国专利公开2005/0002532-A1;TAMPER RESISTANT SOFTWARE - CONTROL FLOW ENCODING,美国专利号6,779,114;TAMPER RESISTANT SOFTWARE ENCODING,美国专利号6,594,761;TAMPER RESISTANT SOFTWARE ENCODING,美国专利号6,842,862;TAMPER RESISTANT SOFTWARE-MASS DATA ENCODING,美国专利号7,350,085;其内容全部被整体地通过引用结合到本文中。
根据本公开的实施例的安全堆的实现能够分成以下主要组成部分:(1)“核心”实现;(2)“句柄”指针实现;(3)“类堆栈”实现;以及(4)高级特征。
“核心”实现是根据本公开的安全堆的基本实现。核心功能提供一组原语以将安全堆数据结构初始化,并且分配/释放存储器段,其能够用来直接地实现基本“平滑”指针安全堆API或例程。在此,能够容易地基于核心功能来实现“堆状”例程。实现“句柄”指针例程涉及到提供用以将句柄指针映射到安全堆内的实际分配地址的机制以及实现聚句柄指针访问例程。在这一点上,实现了所有主要安全堆例程,并且代码然后可以经历一段时间的安全调谐以确保实际上针对攻击保护例程和底层数据结构。最后,可以在基本句柄指针功能的顶部上构建诸如已变换/已编码堆内容、非相邻分配以及移动分配的高级特征。以下小节描述根据本公开的实施例的安全堆的每个以上组成部分。
核心实现
安全堆“核心”包括:在先前分配原始存储区内,用以将安全堆存储器段初始化或保护堆对象的代码;数据结构,用以保持关于安全堆内的已分配和自由存储器段的信息;以及用以支持分配/释放请求的代码。根据本公开的其他安全堆特征可以由安全堆核心功能构成。
该安全堆库例程可以使用以下参数来定义:(1)分配策略:用来指定新分配的性质,关于其在存储器中的位置,诸如“相邻”或“非相邻”。例如,当请求“平滑”指针分配时,只有相邻分配策略是合法的。(2)释放策略:用以指定在已分配对象被释放时应对其做什么,或者在安全堆关闭时应对整个安全堆存储区做什么。例如,释放策略可以指示当被释放时,已分配对象被归零、加扰或未归零。在图1中被示出为策略决策114的这些参数可以由应用程序设计员或分发者确定。另外,将需要提供用以引用特定安全堆实例以及用以引用安全堆内的分配对象的标识符。
安全堆库106本身的实施例能够被实现为许多API,诸如用于C/C++ stdlib API的插入式替换,而其他的提供新功能,例如对非相邻数组分配的支持。安全堆特征的用户可以依赖于代码转换器118来自动地将C/C++样式存储器分配变换成安全堆库的调用。
本公开的安全堆库106可以实现为“灵活”库,其使用抽象中间件表示来定义软件到模块中的打包。此类灵活库能够允许由最终用户(集成方)而不是库创建者来完成安全性变换和性能属性的选择。此外,由于灵活库包含软件模块的抽象表示,所以提供该库还可以被提供以包含表示用于安全和性能判定的特定的各组值的任意数目的指定“实例”以及从那些判定得到的相应的本机对象代码。软件模块的收集能够被以灵活库的形式打包,其允许由最终用户而不是软件模块的创建者来选择安全变换和性能优化,并且此外在避免诸如源文件的专有信息的公开的同时以完全平台独立的方式来允许软件模块的分发。在题为“METHOD FOR ENCAPSULATING AND ENABLING PROTECTION THROUGH DIVERSE VARIATIONS IN SOFTWARE LIBRARIES”的PCT申请号CA2010/000451中能够发现灵活库的详细描述,其内容被整体地通过引用结合到本文中。
一般地,如图2中所示,动态存储器管理的本方法包括将诸如随机存取存储器的存储器内的具有多个缓冲器的存储器段对初始化(步骤200)。当接收到用以将数据存储在堆存储器段中的分配请求时(步骤202),以非确定性方式来选择缓冲器中的一个(步骤204);通常是根据分配策略。非确定性意指过去的输出值(在这种情况下,分配)序列的观察不允许预测特定未来值。可以用返回纯随机值(绝对地,在任何已知情况下,不可预测)的函数或用返回伪随机值(不可预测,除非拥有对函数的实现和初始条件的深刻认识)的函数来确定非确定性分配。术语“随机”和“非确定性”被可互换地使用。包含堆存储器段的已分配和未分配缓冲器的细节的元数据然后被保持在与堆对象分开的存储器中(步骤206)。下面描述方法以及将其实现所需的例程和数据结构的更多细节。
根据示例性实施例,安全堆108必须存在于存储器中,诸如由底层stdlib堆实施方式(或其他按用户指定存储区)分配,并且因此要求形式初始化例程。C/C++ stdlib并不具有用于存储器分配(堆)例程的形式初始化或关闭例程。类似地,在可选存储器归零/加扰的情况下,必须提供关闭例程以释放安全堆存储器108。
安全堆例程一般地支持由句柄参数指定的全局、默认、安全堆或任意安全堆上的分配。在内部,还经由安全堆句柄来引用默认安全堆,安全堆句柄被存储在必须被初始化的安全堆库全局对象中。必须由程序员来执行默认安全堆句柄的初始化,因为必须使用一组默认API来确定默认安全堆的尺寸、位置及其他属性。在C++的情况下,其中可能难以确定使用默认安全堆的对象初始化程序的调用顺序,程序员将负责确保默认安全堆在在其上面执行分配的任何尝试之前被初始化。
例如,初始化例程能够使用平台提供的malloc ( )或使用由调用程序提供的存储区来将具有尺寸sheapsize的新安全堆初始化。如果成功的话,例程向初始化安全堆返回句柄。
关闭例程执行安全堆实例的关闭。只有当用malloc ()将安全堆初始化时,才将使用平台提供的free ()将存储区释放;否则,使用适当关闭例程来释放存储区是调用者的职责。关闭例程可以可选地根据释放策略参数来执行整个内容的归零或加扰以指示是归零或加扰还是完全跳过。
下面阐述本公开的安全堆库106所支持的例程的示例。请注意,大多数例程能够进入两个形式:一个采取安全堆句柄参数(下面更详细地描述),并且允许对特定安全堆实例执行操作;另一形式对默认安全堆实例进行操作,其具体地被应用初始化。安全堆句柄参数的可用性允许对安全堆的线程安全使用的用户可控支持,因为每个线程能够简单地将其自己的安全堆初始化。
当使用默认安全堆实例时,还可以使用默认分配策略和默认释放策略。这些默认策略可以由程序员在任何时间使用适当的例程来更新,并且针对所有的后续分配/释放请求生效。采取安全堆句柄参数的API还可以允许与每请求分配或释放策略作为附加参数的规范。
如上文所讨论的,传统堆实施方式被设计成使得在堆利用率(当不能为给定分配请求提供服务时分配给堆中的未使用储存器的比)被最大化的同时使分配/释放请求的执行开销最小化。这通常导致这样的设计,其中,整个堆存储器段被视为原始、未组织储存器,可用于服务于任何分配请求(达到且包括用于整个可用堆存储器的单个请求),并且其中,分配策略(针对分配请求将选择哪块未分配储存器)是该实施方式的最重要方面。然而,此类实施方式通常大大地遭受可预测存储器分配地址的弱点。根据本公开的特定实施例的安全堆设计通过在初始化时对存储器段应用某些组织方案而避免或至少减轻了此弱点。
如图3中所示,将安全堆存储器段108再分成固定尺寸的页面302并使用每个作为用于准确地一个分配尺寸类的子分配的形式提供性能(速度和分段的避免)以及改善的安全两者。根据本公开的某些实施例,安全堆存储器段108被再分成固定尺寸的最大可能页数302。根据可用的页数302(其转而取决于安全堆存储器段的总尺寸),预留一定数目的尺寸类,其中最初向每个尺寸类分配一个页面。该尺寸类可以采取简单的2的幂序列,最小为16字节,并且最大为页面尺寸的1/8。页面数目可以保持与尺寸类无关,并且然后可用于现有尺寸类的随着其被全面分配的重新确定尺寸,诸如扩展。
绑定到尺寸类的每个页面将具有固定数目潜在分配或缓冲器304。为了避免不必要的分段,优选地应由其尺寸类刚好大于或等于请求尺寸的页面来满足分配请求。分配请求导致该页面内的某个当前未分配缓冲器的选择,但是要分配哪个地址的精确选择是以轻型、随机的(即随机或伪随机)方式进行的,从而使简单地分配“下一个”缓冲器的趋势最小化。
此存储器组织提供许多优点,包括: 界定尺寸类内的碎片;用以选择自由存储器以最佳地满足分配请求的算法是简单直接的;其能够基于分配需求动态地对专用于每个尺寸类的页面的数量进行负荷平衡。另外,用此存储器组织可以支持某些高级特征。例如,非相邻分配是简单直接的,因为能够将非相邻分配选择为精确地是一尺寸类,并且跨绑定到该尺寸类的多个页面的分布。通过将来自不同页面的相同尺寸类的分配接合成单个页面,能够执行低开销无用单元收集的原语形式,因此释放页面以供其他尺寸类再使用,并且能够针对另一尺寸类将具有已分配尺寸类(但当前不具有分配)的页面重新确定尺寸,如果出现需要的话。
用于组织安全堆存储器段108的方案涉及到可能对安全堆的性能和安全方面具有影响的几个低水平设计细节或策略。例如,能够建立关于安全堆存储器段108的物理布局的以下策略:(1)页面尺寸的选择:原则上,页面尺寸可以是可变的,但是选择单个、固定页面尺寸相当大地简化了设计。根据实施例,将尺寸选择为大到足以容纳最大尺寸类的至少16个缓冲器;(2)安全堆存储器段中的页面的对准;页面的对准是优选的,因为此类对准改善高速缓冲存储器性能,并且还简化分配例程,诸如安全堆vallocQ例程;(3)尺寸类的选择:能够支持任何尺寸类,但是根据实施例,选择最小尺寸类,并且后续尺寸类全部是最小值的2的幂。例如,能够选择16字节的最小尺寸类(使得例如将由16字节尺寸类来满足单字节的分配请求)。用于尺寸类的2的幂几何序列的选择确保缓冲器始终在存储器中对准,其具有性能益处,如上所述:以及(4)尺寸类的预先分配:能够在安全堆初始化时预先向尺寸类分配页面,这导致分配时的减少的开销。然而,如果给定尺寸类从未使用,这还可能导致页面浪费。预先分配和未分配页面的混合提供最佳性能/浪费权衡。
还可以提供关于分配/释放逻辑的以下策略:(1)用于“下一”自由页面的选择标准:最简单的策略是保持自由页面列表,并且针对每个分配请求简单地选择第一可用页面。然而,这引入安全问题(即,可预测分配模式)。更好的策略是保持所有页面的随机或非确定性地生成的排列,并且使用该排列来搜索自由页面。以分配时间开销为代价,此排列偶尔可能被重新生成而向分配模式进一步引入随机性;(2)用于“下一个”自由缓冲器的选择标准:最简单策略是保持每个页面内的自由缓冲器的列表,并且针对每个分配请求简单地选择第一可用缓冲器。然而,这引入安全问题(即,可预测分配模式)。更好的策略是保持每个页面中的所有缓冲器的随机生成的排列,并且使用该排列来搜索自由缓冲器。以分配时间开销为代价,此排列可能偶尔被重新生成而向分配模式引入进一步的随机性:(3)未分配页面的促进:不具有关联尺寸类的页面能够用来满足任何其他页面以其他方式不能满足的分配请求;(4)完全未使用页面的清除:一旦用于给定尺寸类的页面不具有已分配缓冲器(全部是自由的),由于从未被使用或使所有已分配缓冲器被释放,则该页面能够被清除,并返回到不具有关联尺寸类的页面池;(5)大于最大尺寸类的分配请求:策略可以是此类请求是非法的,或者可以进行利用安全堆存储器段(尚未被划分成页面的存储器)的尾端306(参见图3)的尝试,或者安全堆实施方式可能“失败”或还原到常规堆实施方式以满足最大请求,尽管这可能引入安全问题。
如上所述,安全堆元数据112描述了安全堆内的当前分配存储器和可用(未分配)存储器的位置。其还描述了各个分配的属性,在适当的情况下,诸如变换/编码的存在、将被自由地使用的策略等。根据实施例,安全堆元数据112的一个重要属性是其不使用在堆存储器段本身中放入信息的常规堆实施方式技术。例如,通过将分配的尺寸放入缓冲器的前几个字节中并提供指向刚好在这些字节之后的储存器的指针来识别每个活动分配是非常常见的。此数据然后被用来告知释放操作多少存储器将返回至释放列表。虽然此实践是非常空间高效的,但其引入了安全弱点。以完全隔离的数据结构来保持元数据112允许针对逆向工程更好地保护元数据。
相应地,本公开的实施例提供元数据结构以描述以下各项:(1)所有页面的列表及其当前尺寸类(如果绑定到一);(2)类尺寸与绑定到该类尺寸的页面之间的映射表;(3)针对每个页面,所有当前未分配缓冲器的列表,优选地避免页面存储器本身中的标记的使用,因为这是安全弱点;(4)针对每个有效分配,描述分配属性的数据(这也将被用于诸如非相邻分配、已变换/已编码数据等高级特征)。
还提供了用以将分配指针(或“句柄”,如果使用该分配形式的话)映射回到分配元数据的机制。安全度管理器能够例如保持用于“句柄”指针的哈希映射表。在“平滑”指针的情况下,可以使用更原始的技术,因为分配的地址直接陈述该分配来自哪个页面,并且从该页面地址,就能够映射回到页面元数据,显示分配的类尺寸。
根据实施例,安全堆库能够提供返回“平滑”指针(例如void *)的分配/释放例程。这些例程能够实现为作为用于其替换的C/C++ stdlib API(即malloc ()、calloc ()、realloc ()、valloc ()和free ())的插入式替换的例程。例如,用以替换malloc ()的安全堆例程将返回指向安全堆实例中的已分配存储器的指针。类似于malloc (),其将把所请求分配的尺寸取做参数。另外,安全堆存储器分配例程可以把将被用于分配的安全堆实例的句柄取做参数;以及将使用的分配策略。还可以同样地修改其他标准stdlib例程。
“句柄”指针例程
根据实施例,句柄指针分配/释放例程直接地对应于用于平滑指针分配/释放例程的那些,不同的是其返回安全堆分配句柄指针而不是void*指针。安全堆分配句柄是“不透明”指针,因为其并未直接映射到存储器位置。不透明句柄指针可以例如引用未被相邻地分配的储存器,或者可以实际上是已变换指针。同样地,其不能正常地被用户解引用,并且要求特殊访问例程的使用以便读取/写入已分配储存器。此限制允许针对攻击利用以本不可能的技术来保护已分配储存器,诸如内容的加密、非相邻分配以及移动分配(即时变分配)。
例如,安全堆分配句柄类型可以是指向匿名数据结构的指针(不透明指针)。这对外部用户隐藏了底层数据结构的所有细节。安全堆实施方式能够例如针对不透明指针声明实际数据结构类型。这种简单的实施方式针对逆向工程仍是脆弱的,但是可以使用更成熟的技术,诸如由代码转换器118进行的指针变换。根据实施例,可以将底层分配地址映射到哈希值,并且将此哈希值用作分配句柄。
“句柄”指针访问例程能够在应用代码希望读取或写入不具有“平滑”指针的安全堆分配的内容时被其使用。由于访问例程是到达底层、“原始”储存器的唯一机制,所以安全堆实施方式能够向这些分配应用本不可能的安全技术,诸如非相邻分配、动态编码等。这些访问例程不应施加过度开销,因为否则应用代码将经历急剧减速,诸如,例如当在环路中穿过已分配缓冲器并且对每个元素执行简单算法时。
可以将访问例程设计成支持高效的应用代码,主要是通过使用“memcpy”变体,其将底层储存器的指定块拷贝到临时缓冲器,允许应用代码使用传统的环路构造而不必针对每个元素调用访问例程。尽管如此,优选的是诸如通过利用内嵌等来使这些访问例程的开销最小化。
为了将不透明句柄指针解引用,使用安全堆存储器访问例程。该例程可以例如将要被用于分配的安全堆实例的句柄;指向要存储的值的指针;要引用的对象的安全堆分配句柄;对象的元素尺寸;要返回的元素的索引;以及指向用户指定缓冲器的指针中的一个或多个取作参数。
在一个实施例中,仅提供了两个基本类型的存储器访问例程:“加载”/“存储”操作和“memcpy”式操作。根据本实施例, “加载”/“存储”安全堆存储器访问例程将所有分配视为具有用户指定元素尺寸的对象数组。同样地,所有例程都将采取元素尺寸和索引两者。所有已分配对象的总分配尺寸被记录在安全堆元数据112中,其允许对所有访问执行数组界限检查,因为能够检查元素尺寸以及索引在界限内。使用由“加载”操作返回的指针来尝试更新已分配对象可能是不安全的,因为此指针实际上可以是指向被引用元素的临时拷贝的指针。为了对给定安全堆存储位置执行“更新”操作,程序员将必须执行单独的“加载”,后面是“存储”。
“memcpy”式安全堆存储器访问例程允许向/从安全堆分配拷贝成批数据,并且其能够用来向/从安全堆108传输数据。正常地将用此类“memcpy”操作来执行新分配安全堆存储器的内容的初始化。
由于对已分配安全堆存储器的内容的所有更新是通过“加载”/“存储”和“memcpy”例程发生的,所以实现这些分配的完整性验证是可能的。完整性验证可以在每次访问安全堆分配时或在用户请求时自动地执行。由于对底层安全堆存储缓冲器的所有合法修改通过访问例程发生,所以能够检测由攻击者直接修改存储器内容的任何尝试。
“平滑”指针类堆栈例程
现在将描述能够用来实现与本地声明、参数和正常地将在运行时间堆栈上分配的任何其他对象有关的分配的类堆栈例程。类堆栈例程为将正常地存储在自动堆栈上的数据、诸如C/C++数据迁移到安全堆108提供支持。此安全堆组成部分要求对每当安全堆开始帧例程被调用时创建的帧标记ID的堆栈的支持。当前栈顶帧ID被用来具体地标记由帧分配例程做出的每个分配,允许其在调用安全段结尾帧例程时将被自动地释放,这将把成帧器-标记从堆栈取出。
对于传统C堆栈分配而言,编译程序自动地检测帧开始和结尾位置(基本上,词法范围的开始和结束)。对于本方法而言,程序员必须通过对适当开始和结尾帧例程的调用在默认或特定安全堆实例中手动地标记或指示虚拟“堆栈帧”。一旦程序员已经打开新的安全堆“堆栈帧”,则可以根据期望进行类堆栈分配,其全部在到达下一安全堆结尾真调用时被自动地释放。类堆栈例程的使用在被直接调用时可能有点笨拙,因为程序员将必须手动地跟踪从堆栈“取出”或释放“帧”的时间,但是其对由代码转换器进行的自动插入而言或者对于由库编写者的使用而言是相当有用的。
除提供用以在帧ID被创建和释放时保持帧ID的堆栈之外,还可以将描述活动分配的数据结构扩展至包括帧ID。分配在帧释放时的自动释放可以通过保持用于每个帧ID的链接列表来实现。
作为示例,安全堆库可以提供等价于C/C++ stdlib API的类堆栈例程,诸如alloca ()。例如,安全堆分配例程使用安全堆实例来分配当前虚拟“帧”中的储存器的所请求量,并且可以用来替换本地变量声明。这与stdlib alloca ()例程非常类似,不同的是其使用安全堆而不是C运行时间堆栈。安全堆分配例程将返回指向安全堆实例中的已分配存储器的指针。类似于alloca (),其将把所请求分配的尺寸取做参数。另外,安全堆存储器分配例程可以把将被用于分配的安全堆实例的句柄取做参数;以及将使用的分配策略。为了支持子例程参数,程序员可以使用在调用侧的安全堆帧写例程来将数据拷贝到堆栈上(基本上,“推入”操作),并使用在被调用侧的安全堆帧读例程来从堆栈拷贝数据(基本上,“取出”操作)。还可以类似地修改其他标准stdlib例程。
高级特征
根据本公开的某些实施例的安全堆库106还可以包括用以实现高级特征的例程。此类特征的一个示例是非相邻数组分配。可以将给定尺寸的数组划分成适当数目的尺寸类中的一个的子元素,并且可以经由“数组脊骨(spine)”(包含指向每个子元素的指针的数据结构)将这些子元素串在一起。此类非相邻数组分配仅能与“句柄”指针分配例程一起使用,因为返回的存储器不是存储位置的简单序列,并且因此与数组储存器的C/C++定义不兼容。然而,可以提供“句柄”指针访问例程能够允许用户以透明方式对此类非相邻分配的储存器进行读或写。
用于此特征的考虑是提供用于访问非相邻数组中、尤其是环路上下文中的数据的相当高效的机制。在对环路中的数组的每个元素执行算法、尤其是访问模式为线性(简单地按顺序遍历数组元素)的情况下,实现不应由于访问例程而施加过大开销。其他因素将影响性能,包括与高速缓存器本地性特征的干扰(数组元素不再位于相邻存储器中,因此降低了高速缓存性能)。
类似于非相邻数组分配,另外的实施例可以包括使用“句柄”指针分配例程和安全堆分配访问例程的已变换/已编码分配。可以对安全堆库分配数据进行数据变换或加密,并且编码甚至可以是时变的。实现其在存储器中的物理位置偶尔移动的分配也是可能的。
可以使用自动生成的代码来实现更高级的特征,诸如类堆栈例程的使用以及“句柄”指针访问例程的使用。可以使用代码生成,诸如在2009年5月25日提交、题为“SYSTEM AND METHOD FOR GENERATING WHITE-BOX IMPLEMENTATIONS OF SOFTWARE APPLICATIONS”的PCT公开号WO/2009/140774中描述的白盒上下文中的wbcodegen,但是还应可以使代码转换器118自动地编码构造,其可以被有用地变换成安全堆API调用。
在先前的描述中,出于说明的目的,阐述了许多细节以便提供对实施例的透彻理解。然而,如本领域的技术人员而言将显而易见的是这些特定细节并不是要求的。在其他实例中,以框图形式示出了众所周知的电结构和电路以便不会使理解混淆。例如,未提供关于本文所述的实施例被实现为软件例程、硬件电路、固件还是其组合的特定细节。
本公开的实施例可以被表示为存储在机器可读介质(也被称为计算机可读介质、处理器可读介质或计算机可用介质,在其中体现有计算机可读程序代码)中的计算机程序产品。机器可读介质可以是任何适当的有形、非瞬态介质,包括磁、光或电存储介质,包括磁碟、紧凑盘只读存储器(CD-ROM)、存储器件(易失性或非易失性)或类似存储机制。机器可读介质可以包含指令、代码序列、配置信息或其他数据的各种集合,其在被执行时使处理器执行根据本公开的实施例的方法中的步骤。本领域的技术人员将认识到实现所述实施方式所需的其他指令和操作也可以被存储在机器可读介质上。存储在机器可读介质上的指令能够被处理器或其他适当处理设备执行,并且能够与电路对接以执行所述任务。
本发明的上述实施例仅仅意图是示例性的。在不脱离仅仅由所附权利要求定义的本发明的范围的情况下,可以由本领域的技术人员对特定实施例实现替换、修改和变更。
Claims (30)
1. 一种动态存储器管理的计算机实现方法,该方法包括:
将存储器内的堆存储器段初始化,该堆存储器段具有多个缓冲器;
接收分配请求以将数据存储在堆存储器段中;
非确定性地选择满足分配请求的所述多个缓冲器中的至少一个作为用于数据的已分配缓冲器;以及
将关于已分配缓冲器的元数据保持在与堆存储器段分开的存储器的一部分中。
2. 权利要求1的方法,还包括将数据关联到非确定性地选择的缓冲器。
3. 权利要求1的方法,其中,将堆存储器段初始化包括:将堆存储器段划分成固定尺寸的多个页面。
4. 权利要求3的方法,其中,非确定性地选择所述多个缓冲器中的一个包括:
生成所述多个页面的排列;以及
从所述多个页面的排列中选择满足分配请求的下一自由页面。
5. 权利要求1的方法,其中,非确定性地选择所述多个缓冲器中的一个包括:
生成所述多个缓冲器的排列;以及
从所述多个缓冲器的排列中选择满足分配请求的下一自由缓冲器。
6. 权利要求1的方法,其中,所述元数据包括堆存储器段的已分配和未分配缓冲器的细节。
7. 权利要求6的方法,其中,所述堆存储器段的已分配和未分配缓冲器的细节被用来实现完整性验证。
8. 权利要求1的方法,其中,所述元数据包括到指向分配缓冲器的指针。
9. 权利要求8的方法,其中,所述指针是不能被应用直接解引用的不透明指针。
10. 权利要求1的方法,其中,所述元数据包括各个分配的属性。
11. 权利要求10的方法,其中,所述属性包括施加于数据的安全变换的细节。
12. 权利要求11的方法,其中,施加于数据的安全变换的细节包括加密细节。
13. 权利要求1的方法,还包括:
接收用以释放所述多个缓冲器中的一个或多个的释放请求;以及
对所述多个缓冲器中的一个或多个施加释放策略。
14. 权利要求13的方法,其中,所述释放策略确定是否对所述多个缓冲器中的一个或多个中的数据进行加扰或归零。
15. 一种包含指令的非瞬态计算机可读介质,该指令在被处理器执行时使处理器执行动态存储器管理的方法,该方法包括:
将存储器内的堆存储器段初始化,该堆存储器段具有多个缓冲器;
接收分配请求以将数据存储在堆存储器段中;
非确定性地选择满足分配请求的所述多个缓冲器中的至少一个作为用于数据的已分配缓冲器;
将数据关联到非确定性地选择的缓冲器;以及
将关于已分配缓冲器的元数据保持在与堆存储器段分开的存储器的一部分中。
16. 权利要求15的计算机可读介质,还包括将数据关联到非确定性地选择的缓冲器。
17. 权利要求15的计算机可读介质,其中,将堆存储器段初始化包括:
将堆存储器段划分成固定尺寸的多个页面。
18. 权利要求17的计算机可读介质,其中,非确定性地选择所述多个缓冲器中的一个包括:
生成所述多个页面的排列;以及
从所述多个页面的排列中选择满足分配请求的下一自由页面。
19. 权利要求15的计算机可读介质,其中,非确定性地选择所述多个缓冲器中的一个包括:
生成所述多个缓冲器的排列;以及
从所述多个缓冲器的排列中选择满足分配请求的下一自由缓冲器。
20. 权利要求15的计算机可读介质,其中,所述元数据包括堆存储器段的已分配和未分配缓冲器的细节。
21. 权利要求20的计算机可读介质,其中,所述堆存储器段的已分配和未分配缓冲器的细节被用来实现完整性验证。
22. 权利要求15的计算机可读介质,其中,所述元数据包括指向已分配缓冲器的指针。
23. 权利要求22的计算机可读介质,其中,所述指针是不能被应用直接解引用的不透明指针。
24. 权利要求15的计算机可读介质,其中,所述元数据包括各个分配的属性。
25. 权利要求24的计算机可读介质,其中,所述属性包括施加于数据的安全变换的细节。
26. 权利要求25的计算机可读介质,其中,所述施加于数据的安全变换的细节包括加密细节。
27. 权利要求15的计算机可读介质,还包括:
接收用以释放所述多个缓冲器中的一个或多个的释放请求;以及
对所述多个缓冲器中的一个或多个施加释放策略。
28. 权利要求27的计算机可读介质,其中,所述释放策略确定是否对所述多个缓冲器中的一个或多个中的数据进行加扰或归零。
29. 权利要求15的计算机可读介质,其中,所述指令被结构化为库。
30. 权利要求29的计算机可读介质,其中,所述库是用于C/C++ stdlib库的插入式替换。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CA2011/050167 WO2012129637A2 (en) | 2011-03-30 | 2011-03-30 | Method of securing memory against malicious attack |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103827879A true CN103827879A (zh) | 2014-05-28 |
Family
ID=46931990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180071247.7A Pending CN103827879A (zh) | 2011-03-30 | 2011-03-30 | 针对恶意攻击保护存储器的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20140020112A1 (zh) |
EP (1) | EP2691861A4 (zh) |
CN (1) | CN103827879A (zh) |
WO (1) | WO2012129637A2 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10311228B2 (en) * | 2014-09-30 | 2019-06-04 | Apple Inc. | Using a fine-grained address space layout randomization to mitigate potential security exploits |
US10311227B2 (en) | 2014-09-30 | 2019-06-04 | Apple Inc. | Obfuscation of an address space layout randomization mapping in a data processing system |
JP6316734B2 (ja) * | 2014-11-25 | 2018-04-25 | アイシン・エィ・ダブリュ株式会社 | 道路情報統計システム、道路情報統計方法及びコンピュータプログラム |
US20160334969A1 (en) * | 2015-05-11 | 2016-11-17 | Facebook, Inc. | Methods and Systems for Viewing an Associated Location of an Image |
WO2017116827A1 (en) * | 2015-12-30 | 2017-07-06 | Siege Technologies LLC | Memory fractionation software protection |
CN105810240B (zh) * | 2016-04-12 | 2018-08-21 | 西安紫光国芯半导体有限公司 | 一种大容量静态随机存储器及其生产方法 |
FR3050844B1 (fr) * | 2016-04-27 | 2018-11-23 | Morpho | Procede d'allocation d'espace memoire |
US10268601B2 (en) | 2016-06-17 | 2019-04-23 | Massachusetts Institute Of Technology | Timely randomized memory protection |
US10191791B2 (en) * | 2016-07-02 | 2019-01-29 | Intel Corporation | Enhanced address space layout randomization |
US10310991B2 (en) * | 2016-08-11 | 2019-06-04 | Massachusetts Institute Of Technology | Timely address space randomization |
EP3373208A1 (en) * | 2017-03-08 | 2018-09-12 | Nxp B.V. | Method and system for facilitating reliable pattern detection |
US10552847B2 (en) * | 2017-03-23 | 2020-02-04 | International Business Machines Corporation | Real-time pattern matching of database transactions and unstructured text |
CN108733311B (zh) * | 2017-04-17 | 2021-09-10 | 伊姆西Ip控股有限责任公司 | 用于管理存储系统的方法和设备 |
US10229046B2 (en) | 2017-06-01 | 2019-03-12 | International Business Machines Corporation | Memory categorization |
US10628315B2 (en) * | 2017-09-28 | 2020-04-21 | Intel Corporation | Secure memory repartitioning technologies |
US11176060B2 (en) | 2018-10-29 | 2021-11-16 | Sternum Ltd. | Dynamic memory protection |
US11036406B2 (en) * | 2019-05-21 | 2021-06-15 | International Business Machines Corporation | Thermally aware memory management |
US11281513B2 (en) | 2019-06-07 | 2022-03-22 | International Business Machines Corporation | Managing heap metadata corruption |
US20210157738A1 (en) * | 2019-11-26 | 2021-05-27 | International Business Machines Corporation | Recoverable user cache within recoverable application memory within volatile memory |
US20220215103A1 (en) * | 2021-01-07 | 2022-07-07 | Nxp B.V. | Data processing system and method for protecting data in the data processing system |
US11687440B2 (en) * | 2021-02-02 | 2023-06-27 | Thales Dis Cpl Usa, Inc. | Method and device of protecting a first software application to generate a protected software application |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169739A (zh) * | 2006-10-27 | 2008-04-30 | 三星电子株式会社 | 管理内存的方法和设备 |
US20100106920A1 (en) * | 2008-10-29 | 2010-04-29 | Microsoft Corporation | Data location obfuscation |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7802232B2 (en) * | 2006-03-31 | 2010-09-21 | Microsoft Corporation | Software robustness through search for robust runtime implementations |
US20080094877A1 (en) * | 2006-10-20 | 2008-04-24 | Honeywell International Inc. | Faster initialization of dram memory |
US7761676B2 (en) * | 2006-12-12 | 2010-07-20 | Intel Corporation | Protecting memory by containing pointer accesses |
-
2011
- 2011-03-30 CN CN201180071247.7A patent/CN103827879A/zh active Pending
- 2011-03-30 US US14/007,475 patent/US20140020112A1/en not_active Abandoned
- 2011-03-30 WO PCT/CA2011/050167 patent/WO2012129637A2/en active Application Filing
- 2011-03-30 EP EP11862519.3A patent/EP2691861A4/en not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169739A (zh) * | 2006-10-27 | 2008-04-30 | 三星电子株式会社 | 管理内存的方法和设备 |
US20100106920A1 (en) * | 2008-10-29 | 2010-04-29 | Microsoft Corporation | Data location obfuscation |
Non-Patent Citations (2)
Title |
---|
KHARBUTLI ET.AL: "Comprehensively and Efficiently Protecting the Heap", 《ARCHITECTURE SUPPORT FOR PROGRAMMING LANGUAGES AND OPERATING SYSTEMS》 * |
KHARBUTLI ET.AL: "Comprehensively and Efficiently Protecting the Heap", 《ARCHITECTURE SUPPORT FOR PROGRAMMING LANGUAGES AND OPERATING SYSTEMS》, 30 October 2006 (2006-10-30) * |
Also Published As
Publication number | Publication date |
---|---|
EP2691861A4 (en) | 2015-01-14 |
WO2012129637A3 (en) | 2012-12-06 |
US20140020112A1 (en) | 2014-01-16 |
EP2691861A2 (en) | 2014-02-05 |
WO2012129637A2 (en) | 2012-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103827879A (zh) | 针对恶意攻击保护存储器的方法 | |
Koning et al. | No need to hide: Protecting safe regions on commodity hardware | |
EP1410150B1 (en) | Protecting software applications against software piracy | |
CN101300584B (zh) | 防止对软件或运行时数据的未经授权的修改的方法 | |
US8756434B2 (en) | System and method for executing an encrypted binary from a memory pool | |
TW201839644A (zh) | 安卓平台上可執行程式的保護方法 | |
CN103413073B (zh) | 一种保护java可执行程序的方法及设备 | |
WO2013170724A1 (zh) | 安卓系统中java应用程序的保护方法 | |
CN101553784A (zh) | 将可执行代码编译到较不可信的地址空间中 | |
CN108932406A (zh) | 虚拟化软件保护方法和装置 | |
CN105190570A (zh) | 用于虚拟机器的完整性保护的存储器自省引擎 | |
US10761970B2 (en) | Computerized method and systems for performing deferred safety check operations | |
CN104813330A (zh) | 在运行时测量在安全区域内加载的应用 | |
Tang et al. | Exploring control flow guard in windows 10 | |
CN103413076A (zh) | 一种Android应用程序分块保护的方法 | |
CN103942499A (zh) | 基于移动存储器的数据黑洞处理方法及移动存储器 | |
US7886363B2 (en) | System and method for virtual memory and securing memory in programming languages | |
US20170255780A1 (en) | Methods and systems for securely executing untrusted software | |
US20110145596A1 (en) | Secure Data Handling In A Computer System | |
US9286483B2 (en) | Protecting visible data during computerized process usage | |
Xia | Capability memory protection for embedded systems | |
GB2381090A (en) | Secure software loading | |
Seo et al. | ZOMETAG: Zone-based Memory Tagging for Fast, Deterministic Detection of Spatial Memory Violations on ARM | |
Anikeev et al. | Secure garbage collection: Preventing malicious data harvesting from deallocated Java objects inside the Dalvik VM | |
CN100465980C (zh) | 通过进程行为的配伍禁忌提高操作系统安全性的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C53 | Correction of patent of invention or patent application | ||
CB02 | Change of applicant information |
Address after: Holland Hoofddorp Applicant after: Ai Dide Technology Co., Ltd. Address before: Holland Hoofddorp Applicant before: Irdeto B.V. |
|
COR | Change of bibliographic data |
Free format text: CORRECT: ADDRESS; FROM: Free format text: CORRECT: APPLICANT; FROM: IRDETO B.V. TO: IRDETO B. V. |
|
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140528 |