内核运行时随机化的装置和方法与流程

文档序号:28106747发布日期:2021-12-22 13:22阅读:227来源:国知局
1.所公开的实施例的方面总体涉及计算装置,更特别地,涉及移动通信装置内的软件安全性。
背景技术
::2.现代计算装置,例如手机和其他支持通信的移动计算设备,使用操作系统内核(称为内核)来管理装置内运行的软件应用。内核,尤其是linuxtm内核,已知容易受到各种攻击,这些攻击可能会进行权限升级,例如获取根访问权限或根能力。3.linux内核通常从由内核链接配置确定的众所周知的虚拟地址开始,在链接期间确定内核中所有功能和数据的位置,并且每次加载内核时保持不变。许多漏洞或攻击都是基于对内核函数和数据的了解,以及它们在地址空间中的位置。例如,有一类攻击被称为返回导向编程(returnorientedprogramming,简称rop)攻击或返回libc,基于对其运行时地址的了解,利用内核代码的一小部分(称为小工具)。这种类型的攻击所需的信息可以从内核镜像和数据泄露中获得。4.防止这些攻击的一种方法是内核地址空间布局随机化(kerneladdressspacelayoutrandomization,简称kaslr)。kaslr旨在通过随机安排程序的重要数据区域,如随机安排可执行文件的基址、数据、栈、堆以及包含库的类似区域,防止攻击者跳转到已知的小工具。5.当在内核加载时使用kaslr时,攻击者只需获取单个函数的地址,即可确定其余所有内核函数和数据对象的地址。在内核的启动或执行过程中,某些内核函数的地址往往会通过数据泄露而暴露出来,从而危害利用kaslr加载的内核。6.其他的随机化和加载技术已经被尝试过,然而每一种技术都有其已知的漏洞。因此,需要改进的方法和装置来保护内核或其他加载的软件程序不被利用。相应地,需要提供解决至少一些上述问题的方法和装置。技术实现要素:7.所公开的实施例的目的是在计算装置中执行时为内核和其他软件程序提供更好的软件安全性。这个目的由独立权利要求的主题实现。进一步有利的修改可以在从属权利要求中找到。8.第一方面,上述及其他目的和优点通过包括耦合至非易失性存储器和运行时内存的处理器的装置获得。所述处理器用于从所述非易失性存储器中读取链接可执行镜像和随机化镜像。所述链接可执行镜像包括链接可执行程序,所述随机化镜像包括符号表、重定位表和对象表中的一种或多种。所述处理器将所述链接可执行镜像加载到所述运行时内存中以生成运行时程序,并对所述运行时程序进行运行时随机化以生成随机化运行时程序,并执行所述随机化运行时程序。所述运行时随机化包括将所述运行时程序的段复制到临时位置,其中,所述复制的段包括多个可重定位对象;根据所述多个可重定位对象的随机顺序,将所述多个可重定位对象中的每个可重定位对象写入所述运行时程序,生成随机化运行时程序;以及对所述随机化运行时程序执行重定位。执行所述重定位包括更新符号表、重定位表、代码段和数据段中的一个或多个。随机排序所述多个可重定位对象可以防止攻击者使用所述可重定位对象的一部分,通过将每个可重定位对象放置在所述运行时程序内不可预测和未知的位置,从而危害所述运行时程序。9.根据第一方面,在所述装置的一种可能的实现方式中,所述处理器用于在复制所述段之后擦除所述段。擦除或初始化所述段使用的内存,确保程序对象或函数均不能被攻击者定位和/或使用。10.根据第一方面,在所述装置的一种可能的实现方式中,所述段包括多个段,所述多个段可以包括文本段和数据段中的一个或多个,所述处理器用于将所述多个段复制到所述临时位置。通过随机化运行时程序的较大部分,复制多个段提高安全性。11.根据第一方面,在所述装置的一种可能的实现方式中,所述链接可执行镜像和所述随机化镜像包括压缩数据,所述处理器用于读取和解压所述压缩数据。将所述链接可执行镜像和所述随机化镜像以压缩形式存储,减少了用于存储所述链接可执行镜像和所述随机化镜像的非易失性存储量。12.根据第一方面,在所述装置的一种可能的实现方式中,所述多个可重定位对象包括编译单元、函数和数据对象中的一个或多个,所述处理器用于根据所述多个可重定位对象的随机顺序,将所述多个可重定位对象中的每个可重定位对象写入所述随机化运行时程序。使用不同类型的可重定位对象提供了替代方案,可以根据被随机化的应用程序的具体细节提供不同的优势。13.根据第一方面,在所述装置的一种可能的实现方式中,加载所述链接可执行镜像包括:生成随机偏移值;根据所述随机偏移值加载所述运行时程序;根据所述随机偏移值更新动态重定位表。将所述运行时程序的基址与所述运行时随机化过程进行随机化会为所述随机化运行时程序中的代码和数据对象的位置增加额外的随机化,从而使得攻击者更难识别他们试图攻击的程序对象或小工具的位置。14.根据第一方面,在所述装置的一种可能的实现方式中,所述处理器用于在启动加载器的上下文中执行所述运行时随机化。配置所述加载器或启动加载器以执行运行时随机化,使得对未设计成随机化的链接可执行镜像执行运行时随机化。15.根据第一方面,在所述装置的一种可能的实现方式中,所述随机化镜像嵌入在所述链接可执行镜像中,所述处理器用于读取所述链接可执行镜像和随机化镜像。将所述链接可执行镜像和所述随机化镜像组合为同一可加载镜像中,使得用于执行自身运行时随机化的程序能够被传统加载器加载,而无需所述加载器知道所述运行时随机化过程,或者用于执行运行时随机化。16.根据第一方面,在所述装置的一种可能的实现方式中,所述运行时程序包括内核,所述处理器用于在所述内核的上下文中执行所述运行时随机化。当应用于内核时,运行时随机化是特别有利的,因为内核倾向于长时间运行,而且内核的许多部分都是在高权限级别上运行的。17.根据第一方面,在所述装置的一种可能的实现方式中,所述装置包括移动通信设备。手机等移动通信设备由于运行着许多高度敏感的应用,如银行应用、购物应用、社交媒体账户等,一旦被泄露,会造成严重的财务和个人后果,因此安全性的提高使其受益匪浅。18.第二方面,通过以下方法获得上述及其他目的和优点,所述方法包括:从非易失性存储器中读取链接可执行镜像和随机化镜像,其中,所述链接可执行镜像包括链接可执行程序,所述随机化镜像包括符号表、重定位表和对象表中的一种或多种;将所述链接可执行镜像加载到所述运行时内存中以生成运行时程序;对所述运行时程序进行运行时随机化以生成随机化运行时程序;以及执行所述随机化运行时程序。执行所述运行时随机化包括:将所述运行时程序的段复制到临时位置,其中,所述复制的段包括多个可重定位对象;根据所述多个可重定位对象的随机顺序,将所述多个可重定位对象中的每个可重定位对象写入所述运行时程序,生成随机化运行时程序;以及执行所述随机化运行时程序的重定位。执行所述重定位包括更新符号表、重定位表、代码段和数据段中的一个或多个。所述多个可重定位对象的运行时随机化导致每个可重定位对象的内存地址或位置对攻击者来说不可预测且不可知。19.根据第二方面,在所述方法的一种可能的实现方式中,所述段包括多个段,所述多个段包括文本段和数据段中的一个或多个,所述多个段复制到所述临时位置。通过随机化所述运行时程序的较大部分,复制多个段提高安全性。20.根据第二方面,在所述方法的一种可能的实现方式中,加载所述链接可执行镜像包括:生成随机偏移值;根据所述随机偏移值加载所述链接可执行镜像;根据所述随机偏移值更新动态重定位表。将所述运行时程序的基址与所述运行时随机过程进行随机化会为所述随机化运行时程序中的代码和数据对象的位置增加额外的随机化,从而使得攻击者更难识别他们试图攻击的程序对象或小工具的位置。21.根据第二方面,在所述方法的一种可能的实现方式中,所述方法在移动通信设备中执行。手机等移动通信设备由于运行着许多高度敏感的应用,如银行应用、购物应用、社交媒体账户等,一旦被泄露,会造成严重的财务和个人后果,因此安全性的提高使其受益匪浅。22.第三方面,上述及其他目的和优点通过包括非瞬时性计算机程序指令的计算机程序产品获得,所述非瞬时性计算机程序指令在被处理器执行时用于使所述处理器执行根据第二方面的方法。23.通过结合附图所描述的实施例,示例性实施例的这些和其他方面、实现形式和优点将变得显而易见。然而,应当理解的是,所述描述和附图仅出于说明目的而设计,而不是作为所公开的发明的限制的定义,对于所述限制,应当参考所附权利要求。本发明的其他方面和优点将在下面的描述中阐述,并且部分地从描述中显而易见,或者可以通过本发明的实践获知。此外,本发明的方面和优点可以通过所附权利要求中特别指出的工具和组合来实现和获得。附图说明24.在本公开内容的以下详述部分中,将参看附图中所展示的示例性实施例来更详细地解释本发明,其中:25.图1示出了用于生成和执行包含所公开实施例各方面的随机化程序可执行文件的计算装置的框图;26.图2示出了用于生成包含所公开实施例各方面的随机化镜像的增强构建过程;27.图3示出了一个序列图,该序列图显示了如何将运行时随机化纳入到包含所公开的实施例的各个方面的内核的加载和启动过程中;以及28.图4示出了包含所公开实施例的各个方面的加载和执行随机化运行时程序的示例性方法的流程图。具体实施方式29.参见图1,可以看到用于生成和执行包含所公开实施例的各个方面的随机化程序可执行文件118的计算装置100的框图。装置100通过在存储器120中执行运行时程序112的运行时随机化以生成随机化运行时程序118来提高安全性。随机化过程随机修改可重定位对象,例如函数或编译单元,的顺序和位置,使得随机化运行时程序118中函数和其他对象的运行时位置对攻击者是不可预测的且不可知的。如本文所使用的,术语运行时程序是指已加载到计算装置100的主存储器或其他主存储器106中并准备执行的软件程序或软件应用,使得所有地址均已被调整并且运行时程序已完全准备好开始执行。在支持虚拟地址空间的计算装置,例如计算装置100中,运行时程序指的是已经加载到虚拟存储器中并完全准备执行的软件程序镜像。出于本公开的目的,运行时程序例如可以是编译、链接和加载的操作系统内核,或者已经编译、链接和加载到计算机存储器106中的任何其他期望的软件应用或程序。30.运行时随机化修改或改变运行时应用112中对象和/或函数的内存位置或内存地址,以生成随机化运行时程序118。为帮助理解本公开的各个方面,将针对操作系统内核(在此称为内核)进行描述,然而,本领域的技术人员将容易认识到,所公开的各个方面可以有利地被用于随机化任何类型的软件应用或可执行程序的内存镜像,不限于内核。本文将应用运行时随机化的对象称为可重定位对象,并且可以是可执行程序的任何适当部分,例如编译单元、函数、函数组、数据对象等。31.当处理器102从存储设备或其他非易失性存储器104中读取150链接二进制镜像或链接可执行镜像108并将其加载152到运行时内存106时,计算装置100开始执行程序或软件应用。此处使用的术语运行时内存106指的是计算机主存储器,可以是处理器102在执行软件应用时访问软件应用使用的虚拟地址空间。在某些实施例中,运行时内存106可称为主存储器,并可实现为相对高速的计算机存储器,例如随机存取存储器,其中,计算机程序可在其执行期间存储。在采用虚拟地址空间的计算装置中,运行时内存106是指处理器访问当前正在执行的软件程序时使用的虚拟地址空间。虚拟地址空间106的部分可以根据需要被交换到底层物理存储器中和从底层物理存储器中交换出来。与非易失性存储器104的速度相比,所述底层物理存储器可以是较高的速度。运行时内存106与存储器或非易失性存储器104不同,存储器104通常具有显著较慢的访问时间,并且提供大量本质上非易失性的数据存储空间。32.从非易失性存储器104以及链接可执行镜像108中读取150随机化镜像110。如下面将进一步讨论的,随机化镜像110,也可以称为重定位镜像,包括各种数据表和重定位信息,例如符号表、对象表和重定位表,其用于帮助随机化过程从包含在链接可执行镜像108或运行时程序112中的数据生成随机化运行时程序118。33.在图1所示实施例中,链接可执行镜像108和随机化镜像110分别位于非易失性存储器104内。在一个实施例中,链接可执行镜像108和随机化镜像110可以放置在不同的文件或包中,如图所示,并存储在非易失性存储器104内的不同分区上。可选地或任选地,链接可执行镜像108和随机化镜像可以合并为单个文件或包,或者链接可执行镜像108和随机化镜像可以根据需要使用两个以上的文件或包进行分发。在某些实施例中,可以将加密签名纳入分布式包中,并用于验证分布式包的完整性。当需要时,可以对包的整体进行加密保护或保护,以确保分发包或包中信息的保密性。34.作为准备运行时程序112执行的一部分,将链接可执行镜像108加载152到内存106的区域120中,以在内存106中生成运行时程序112或运行时镜像。在将运行时程序112加载152到内存区域120之后,将运行时随机化过程应用到运行时程序112以生成随机化运行时程序118。注意,运行时程序112和随机化运行时程序118占用内存106的相同区域120。为清楚起见,运行时程序112与随机化运行时程序118分别通过使用不同的参考编号112和118区分。如下面将进一步讨论的,运行时随机化过程随机改变运行时程序112中各种可重定位对象的顺序和相对位置,以产生随机化运行时程序118,其中每个可重定位对象的随机化运行时程序118中的位置从其在链接可执行镜像108中的原始位置被修改,使得攻击者不可知且无法预测。35.在某些实施例中,可以通过随机偏移运行时程序112的关键数据区域的地址空间位置来提高安全性。随机偏移关键数据区域的过程可以称为内核地址空间布局随机化(kerneladdressspacelayoutrandomization,简称kaslr),并且可以通过生成一个或多个随机偏移值来完成,然后使用这些随机偏移值偏移运行时程序112的每个关键存储区域加载的内存位置或地址。运行时程序112的一个或多个关键内存区域可以以这种方式随机排列。根据随机顺序,在加载过程152中适当地更新任何重定位、符号或其他表。aslr防止攻击者直接使用链接可执行镜像的先验知识来定位运行时程序112中的函数、数据或其他小工具的内存地址。36.使用kaslr的缺点在于,修改基址不会改变运行时程序112中各种函数或数据之间的相对偏移。一旦攻击者找到一个函数或数据对象的地址或位置,则其他函数或数据对象的位置根据链接可执行镜像108中程序对象的相对位置的先验知识变得已知。该缺点通过下面描述的运行时随机化过程来解决。37.所述运行时随机化过程应用于运行时程序112的内存镜像120,以生成随机化运行时程序118。所述运行时随机化过程随机修改运行时程序112的可重定位对象的位置和相对位置,例如函数、编译单元和数据对象,使得攻击者无法知道或预测每个可重定位对象在随机化运行时程序118所占用的运行时内存120中的位置。进一步地,通过对内存120运行时程序112执行随机化过程并将生成的随机化运行时程序118写入相同的运行时内存区域120,随机化运行时程序118从未写入或存储在非易失性存储器中。写入非易失性存储器的数据可以称为静态数据。由于静态数据可以在较长时间内保持恒定,因此将诸如随机化运行时程序之类的数据写入非易失性存储器104会使存储的数据暴露于攻击中。直接对内存中运行时程序112执行运行时随机化,并且从不将生成的随机化运行时程序118存储到非易失性存储器104,从而消除与静态数据相关的风险。38.在将所述随机化过程加载到内存120中之后,所述随机过程对链接可执行镜像108进行操作。在一个实施例中,所述随机化过程是在运行时程序112内实现的,并且在运行时程序112执行的非常早期阶段例如在程序初始化开始之前在运行时程序112的上下文中执行。在本实施例中,将随机化镜像110直接嵌入或插入链接可执行镜像108中可能是有利的。在运行时程序112启动后执行所述随机化过程,允许应用安全启动过程和方法以确保链接可执行镜像108和随机化镜像110的完整性。39.或者,所述随机化过程可以作为用于将链接可执行程序108加载到内存106中的加载器或启动加载器的一部分来实现。当随机化在运行时程序112被启动之前由启动加载器执行或在其上下文中执行时,将随机化镜像110与链接可执行镜像108分开存储在非易失性存储104上可能是有利的,例如存储在单独的文件中或存储在不同的分区上。40.在运行时内存120的区域内生成随机化运行时程序118之后,可以安全地执行随机化运行时程序。41.所述用于从运行时程序112生成随机化运行时程序118的随机化过程将运行时程序112的段114复制154到内存116的临时区域。所述段可以是运行时程序112的任何期望部分,例如加载到运行时内存120中的文本段、数据段和/或运行时程序112的其他期望部分。增加段114的大小,例如通过包括文本段和数据段和/或运行时程序112的其他期望部分,增加随机化的数量并改善所产生的安全效益。然而,通过增加段114的大小而获得的优势是以完成随机化过程和准备随机化运行时程序118的执行所需的处理量增加为代价的。42.可选地,在将段114复制到临时位置116之后,可以初始化或设置段114所占用的运行时内存120的原始区域为任意期望值。可以进行初始化以擦除原始信息,也可以用于将随机数据或故意伪造信息写入段114所占用的原始内存中,以进一步挫败攻击者。43.有益地,复制的段116包括多个可重定位对象。可重定位对象是运行时程序112的一部分,例如编译单元函数、函数组或数据对象,它们可以移动或重定位到随机化运行时程序118中的不同地址或内存位置。可以选择任何合适的对象作为可重定位的对象,例如编译单元、函数、函数组、数据对象等。如此处所使用的编译单元是由包含源代码的单个文件(例如c编程语言源文件)的编译或组装所产生的对象代码,并且可能包括多个函数或类。如下面将进一步讨论的,随机化镜像110包括特定于每个可重定位对象的信息,以促进关联的可重定位对象的重定位。44.所述多个可重定位对象以随机顺序从临时位置116复制156回原始段114,从而确保内存区域120内的每个可重定位对象的位置不可预测。随机排序可以以任何合适的方式完成。例如,通过使用随机数生成器或其他随机过程来选择和复制可重定位对象。或者,可以创建多个可重定位对象的列表并随机排序,随后用于引导将可重定位对象复制156回运行时内存120。45.通过更新所有关联的符号表和重定位表以及准备随机化运行时程序118的执行所需的任何其他信息,完成随机排序的可重定位对象114的重定位。由于随机化运行时程序118是在运行时程序112加载之后以及可选地在运行时程序112启动之后直接在运行时内存106中生成的,因此随机化运行时程序118不会存储在非易失性存储器中,在非易失性存储器中可能容易受到攻击。46.在某些实施例中,通过压缩链接可执行镜像108和可选地压缩随机化镜像110,可以更有效地使用非易失性存储器104上的空间。任何合适的压缩技术都可以用于压缩,例如用于排出和熵编码压缩技术。在加载期间,可以对链接可执行镜像108和随机化镜像110进行解压,以恢复原始程序数据。47.链接可执行镜像108,例如内核镜像,由构建过程产生并封装成内核镜像,该内核镜像在制造过程中或由特别配置的软件更新工具闪存到装置100上的非易失性存储器104。当装置100上电或重启时,启动加载程序从存储器104加载所述内核镜像,并将控制传递给加载的内核112。所述构建过程包括编译阶段,其中编译或组装源代码,所述源代码是计算机程序的人类可读表示,以生成此处称为对象文件的程序的二进制机器可读表示。然后将一个或多个对象文件链接在一起,以生成链接可执行程序镜像108。所述链接可执行镜像是启动加载器可以用来加载和执行运行时程序112的形式。48.图2示出了用于生成包含所公开实施例的各个方面的随机化镜像214的增强构建过程200。增强构建过程200适于生成上文结合图1描述的链接可执行镜像108和随机化镜像110。通过增强构建过程200,以包括产生适合于作为上述参照图1的随机化镜像108使用的随机化镜像214的生成阶段,促进对运行时程序(例如上述运行时程序112)的运行时随机化,以产生随机化运行时程序,例如上述随机化运行时程序118。49.图2所示的增强构建过程200接收一个或多个对象文件202,例如通过编译或组装计算机源代码生成的对象文件。然后,对象文件202被链接,例如与链接器程序链接,以生成静态链接的程序镜像208,例如可以称为vmlinux的内核镜像。术语vmlinux是指配置用于虚拟内存的静态链接linux内核镜像。以下对增强构建过程200的描述包括与构建内核一致的术语,但是本领域技术人员将容易认识到,可以有利地采用增强构建过程200来构建任何期望类型的计算机程序。50.链接器204创建的文件,例如链接映射vmlinux.map206和链接可执行镜像vmlinux208,用于生成210随机化镜像214。在一个实施例中,随机化镜像214存储在名为krr.img的文件中。当需要时,随机化镜像214可以包括从vmlinux.map206和vmlinux208衍生的符号和重定位表,并且可以格式化为可执行连接格式(executableandlinkableformat,简称elf)二进制文件。51.链接器204输出vmlinux镜像208和对应的vmlinux.map206,vmlinux.map206包含符号表或链接映射,以及用于处理vmlinux镜像208的其他重定位信息。在随机化过程中,可重定位对象移动到运行时程序镜像中的不同位置,从而使静态链接期间设置的地址无效,并使映射vmlinux.map206中包含的地址无效。链接可执行镜像vmlinux208和系统链接映射vmlinux.map206包括额外的表,例如全局符号表、kallsyms、导出的符号表、ksymtab和动态重定位表realadyn,在可重定位对象在运行时随机化期间重新排序后,该表还将包含无效地址。52.为了支持在运行时随机化期间对可重定位对象进行重新排序,为每个可重定位对象生成单独的一组表,该表包含特定于相应可重定位对象的信息。这些特定对象的表的组在这里被称为所有者表,因为它们对应于或被特定的可重定位对象所拥有。该组表可以包括符号所有者表、重定位所有者表、全局符号所有者表等,例如kallsyms所有者表和/或运行时或动态重定位所有者表或reladyn所有者表。移动特定可重定位对象所需的信息包含在相应的一组所有者表中。53.生成210创建上述符号、重定位、对象和所有者表数据,并将其纳入随机化镜像214中。得到的随机化镜像214包含有效执行运行时随机化和准备随机化运行时程序(例如上述随机化运行时程序118)执行所需的所有数据和其他信息。54.在某些实施例中,期望将随机化镜像214嵌入到与链接可执行镜像208相同的文件或分发包中。例如,可以通过使用对象复制程序212从vmlinux镜像208创建可启动的原始二进制镜像image.in216来实现这一点。然后将随机化镜像krr.img214插入218可启动的二进制镜像216中,以生成单个镜像或包220。55.图3示出了一个序列图,该序列图显示了如何将运行时随机化纳入到包含所公开的实施例的各个方面的linux内核的加载和启动过程中。为了帮助理解图3所示的过程300,示出了一个实施例,其中运行时随机化在最早的内核执行阶段(例如在内核代码的处理器特定head.s302部分的执行期间)的linux内核中执行。运行时随机化组件304描述了本文公开的新的随机化过程,内核的非处理器特定部分示出为第三组件306。56.在从存储设备(例如上文结合图1描述的非易失性存储设备104)读取链接可执行镜像和随机化镜像之后,开始所示过程300,并加载到计算装置(例如上文描述的计算装置100)的主存储器中。所述链接可执行镜像可以是上文参考图1描述的链接可执行镜像108等链接可执行镜像,以及上文参考图2描述的可启动镜像216或组合镜像220,或者可以用于将运行时程序加载到计算装置的运行时内存中的任何其他合适的镜像。所述随机化镜像可以是任何合适的随机化镜像,例如上文参考图1描述的随机化镜像110,上文参考图2描述的随机化镜像214或组合镜像220,或任何合适的用于支持运行时随机化过程310的随机化镜像。57.在内核已加载到计算装置的主存储器中之后,所示的过程300开始。在所示实施例300中,计算装置用于在虚拟内存空间内执行计算机程序,并根据需要将虚拟内存页交换到物理内存和从物理内存中交换出来。过程308对加载的内核镜像执行运行时随机化310,然后开始312内核初始化过程306的非处理器特定部分。58.一旦内核head.s代码接收控制,执行初始设置308。设置308包括创建页表和启用内存管理单元(memorymanagementunit,简称mmu)。当需要时,可以如上所述执行aslr,以帮助隐藏内存位置不被攻击者发现。aslr完成后,mmu关闭,页表根据新的地址空间布局进行更新,mmu重新打开。59.然后,发起314运行时随机化310。在一个实施例中,.text段随机化。可选地,运行时随机化310中还可以包括所述内核代码的附加段或部分,例如所述数据段。包括多个段仅影响所述内核或正在随机化的其他应用的启动期间所花费的时间,并且不会对所述计算装置的后续操作中的执行时间产生不利影响或增加执行时间。将正在随机化的内核代码的所有期望部分复制到临时位置。所述内核代码的复制部分包括多个可重定位对象,每个对象由随机化镜像中包括的一组所有者表描述。可选地,所述代码的复制部分的原始位置可以初始化为任意期望值。初始化可以防止攻击者根据运行时随机化过程未覆盖的数据或指令进行攻击。60.然后,根据新创建的随机顺序将所述多个可重定位对象复制回所述原始码区,并生成运行时偏移表,并将偏移填充到所述随机排序的可重定位对象。所述偏移表示所述可重定位对象的所述新创建的运行时地址与所述链接可执行镜像中包括的所述链接时对象地址之间的差值。所述偏移可如等式1所示计算:61.对象偏移[i]=运行时对象地址[i]–链接时对象地址[i]ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(等式1)[0062]其中,i表示所述多个可重定位对象中的第i个可重定位对象,所述运行时对象地址[i]为所述随机化重排序中的第i个可重定位对象的地址,所述链接时对象地址[i]为所述内核的静态链接期间生成的所述链接可执行镜像中的第i个可重定位对象的地址。[0063]当需要时,所述全局符号表,如kallsyms,可以用所述可重定位对象随机重排序所产生的新位置进行更新。可以如等式(2)所示计算运行时符号地址:[0064]运行时符号地址[i]=链接时符号地址[i]+对象偏移[i]ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(等式2)[0065]其中,i表示所述全局符号表,kallsyms,中的第i个符号,运行时符号地址[i]为可重定位对象随机重排序后运行时的第i个符号的地址,链接时符号地址[i]为内核静态链接时生成的链接可执行镜像中的第i个符号的地址,对象偏移[i]由等式1给出。[0066]对每个重定位地址和符号地址应用重定位,得到与随机重排序重定位对象对应的运行时值。可以有效地计算运行时重定位地址,如等式(3)所示:[0067]运行时重定位地址[i]=链接时重定位地址[i]+对象偏移[i]ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(等式3)[0068]其中,i表示第i个重定位地址的地址,运行时重定位地址[i]为可重定位对象随机重排序后运行时的第i个重定位地址的地址,链接时重定位地址[i]为所述链接可执行镜像中的第i个地址的地址,对象偏移[i]由等式1给出。使用等式4计算运行时符号地址:[0069]运行时符号地址[i]=链接时符号地址[i]+对象偏移[i]ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(等式4)[0070]其中,i表示第i个重定位符号的地址,运行时符号地址[i]为可重定位对象随机重排序后的运行时第i个重定位符号的地址,链接时符号地址[i]为所述链接可执行镜像中第i个符号的地址,对象偏移[i]由等式1给出。[0071]在应用aslr的实施例中,也可能需要更新内核的动态重定位表。通过应用重定位并根据等式3和等式4更新动态重定位表,可以以与上文所述类似的方式实现该更新。[0072]现在参考图4,可以看到流程图,其示出了包含所公开实施例的各个方面的用于加载和执行随机化运行时程序的示例性方法400。示例性方法400在计算装置,例如移动智能手机或其他支持通信的移动计算装置中,提供改进的软件安全性。[0073]示例性方法400用于将运行时程序读取并加载430到计算装置的主存储器中,将所述运行时程序随机化432以生成随机化运行时程序,并启动和执行434所述随机化运行时程序。使用示例性方法400通过修改函数、数据对象和其他程序特征的地址来提高软件安全性,使得这些编程小工具的运行时地址对于攻击者是未知的且不可知的。[0074]计算装置通过从计算装置内的处理器或其他处理设备可访问的非易失性存储器中读取402链接可执行镜像,开始执行软件程序,例如操作系统内核或其他期望的软件应用。随机化镜像也从所述非易失性存储器中读取402。如下所述,所述随机化镜像提供与所述链接可执行镜像相对应的信息,并用于支持运行时程序的运行时随机化。[0075]将所述链接可执行镜像写入或加载404到所述计算装置的运行时内存中,所述运行时内存可以是任何类型的计算机可访问存储器,例如随机存取存储器,适于在处理器执行时存储运行时程序。在某些实施例中,所述运行时内存可以是虚拟地址空间,根据需要映射到物理计算机存储器。所述链接可执行镜像可以由链接器在软件构建过程中生成,并包括加载和执行运行时程序所需的所有信息。[0076]在某些实施例中,在所述链接可执行镜像加载到主存储器中之后,可能期望将aslr进程应用406于所述链接可执行镜像。如上所述,应用aslr可以提高运行时程序的软件安全性,并且当与当前公开的运行时随机化方法结合时,可以显著提高对软件攻击的防护能力。[0077]作为启动所述程序之前的步骤,应用所述运行时程序的运行时随机化432来生成随机化运行时程序。所述运行时程序的段或其他期望部分,例如文本段和/或数据段,可以复制408到内存的临时位置。所述复制的段包括多个可重定位的对象,例如函数、数据对象、函数组或其他合适的可重定位的对象,这些可重定位的对象可能受益于被所述运行时程序所占用的所述内存的随机和不可预测的位置。[0078]可选地,最初由所述复制的段占用的内存可以被初始化410为任何所期望的值,从而消除原始运行时程序的任何证据,否则该证据可能被攻击者有利地用于在执行期间危害随机化运行时程序。[0079]所述多个可重定位对象按照随机顺序412复制回所述运行时程序的所述原始段或期望部分。以随机顺序412复制所述多个可重定位对象会导致每个可重定位对象位于所述运行时程序占用的所述内存中的不可预测和不可知位置。[0080]随机化镜像提供的信息可用于对随机化运行时镜像执行所有重定位414。执行所有重定位414包括使用与所述新生成的顺序对应的信息和所述多个可重定位对象的位置更新所有符号和重定位表。如上所述,所述随机化镜像包括一组所有者表和每个可重定位对象对应的其他信息。所述随机化镜像中包括的信息提供数据,以便于有效地重新定位和更新执行被随机化程序所需的地址。[0081]一旦正确复制了所有可重定位对象并且完成了所有重定位和其他地址更新,则可以启动416随机化运行时程序,并且可以继续执行。[0082]因此,尽管文中已示出、描述和指出应用于本发明的示例性实施例的本发明的基本新颖特征,但应理解,所述领域的技术人员可以在不脱离本发明的精神和范围的情况下,对装置和方法的形式和细节以及装置操作进行各种省略、取代和改变。进一步地,明确希望,以大体相同的方式执行大体相同的功能以实现相同结果的那件元件的所有组合均在本发明的范围内。此外,应认识到,结合所揭示的本发明的任何形式或实施例进行展示和/或描述的结构和/或元件可作为设计选择的通用项而并入所揭示或描述或建议的任何其他形式或实施例中。因此,本发明仅受限于随附权利要求书所述的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1