二进制转换器驱动的程序状态重新定位的制作方法
【技术领域】
[0001] 本公开涉及装置安全性,并且更具体地说,涉及用于通过二进制转换器驱动的程 序状态重新定位增强相对于恶意软件的安全性的系统。
【背景技术】
[0002] 随着人们越来越多地电子地执行个人和/或保密的事务,电子安全性已经演进成 更突出的关注。此外,具有恶意意图的黑客和/或其他人在回避装置中的现有安全措施上 正变得越来越有创造性。为了对抗通过恶意软件和/或病毒的演进的并且无处不在的入 侵,设备和/或软件制造商继续采取对新装置的硬件更内在的保护措施。例如,响应于外来 代码被注入到程序中以从装置盗取信息或甚至接管装置的控制的情形,实现了包含代码签 名和不可执行存储器片段的新保护方案。这些安全措施允许程序被认证,并且甚至允许某 些脆弱代码被标记为在硬件级不可执行。例如,尝试注入外来代码或执行被保护代码将使 处理器(诸如管理程序)中的硬件控制资源介入以保护系统的完整性。
[0003]然而,有事业心的编程人员想出了回避这些保护的办法。例如,在面向返回的编程 (R0P)中,攻击者可劫持装置的控制流以访问某些程序功能(例如小组件)。小组件一般可 包括程序指令集。例如,小组件可包含可支持对编程操作(例如读数据、写数据、数学操作 等)必要的初步功能性的程序的部分。当按有益软件的编程人员意图的方式、顺序等执行 时,小组件对装置操作没有不良影响。然而,在夺取了装置中控制流的控制时,有可能操纵 小组件(例如按不同顺序、用不同变元(argument)等调用)以导致完全不同于最初意图的 操作,并且可能能够克服现有保护方案。而且,当前提出的保护免受R0P的安全措施实现起 来非常困难,或者可能有可能克服强力攻击。
【附图说明】
[0004] 随着如下【具体实施方式】的继续,并参考附图,其中相似数字表示相似部分,所要求 保护的主题的各种实施例的特征和优点将变得显而易见,并且附图中: 图1图示了按照本公开的至少一个实施例的二进制转换器驱动的程序状态重新定位 的示例; 图2图示了按照本公开的至少一个实施例的可使用的装置的示例配置; 图3图示了按照本公开的至少一个实施例的添加到程序以实现二进制转换器驱动的 程序状态重新定位的示例代码; 图4图示了按照本公开的至少一个实施例可在面向返回的编程(R0P)攻击期间发生的 示例代码执行; 图5图示了按照本公开的至少一个实施例当图4的R0P攻击由转换器驱动的程序状态 重新定位来重新定向时的示例代码执行;以及 图6图示了按照本公开的至少一个实施例的二进制转换器驱动的程序状态重新定位 的示例操作。
[0005] 尽管如下【具体实施方式】将参考说明性实施例进行,但其许多备选、修改和变化对 本领域技术人员将是显而易见的。
【具体实施方式】
[0006] 此公开指向二进制转换器驱动的程序状态重新定位。一般而言,装置可通过将脆 弱的程序功能设置为不可执行来保护它们。如果尝试执行被保护的程序功能,则程序可设 陷(trap)到可配置成将程序状态从(例如在栈寄存器上)已经建立的进行重新定位的装 置中的二进制转换器。本文所提及的程序状态可包含程序可在执行过程期间建立的任何资 源(例如存储在存储器位置中的临时数据)。二进制转换器然后可基于重新定位的程序状 态将程序转换成可执行形式(例如二进制代码),并且因此可以被执行。尝试克服正常程序 执行并实现恶意操作(例如基于在栈寄存器中反映的原始程序状态)的入侵代码将不按意 图运作,因为重新定位的程序状态将保持未预料到的结果。
[0007] 在一个实施例中,装置例如可包括存储器模块、二进制转换器模块和处理模块。存 储器模块可保持对应于程序的程序状态信息。二进制转换器模块可接收所述程序执行被保 护的功能的尝试的指示,以便使所述程序状态信息的至少一个元素在所述存储器模块中重 新定位,并基于所述程序状态信息的重新定位的至少一个元素将所述程序中的指令转换成 可执行二进制代码。处理模块可执行所述可执行的二进制代码。
[0008] 在引起程序状态信息的至少一个元素被重新定位时,二进制转换器模块可引起以 下中的至少一项:基于随机偏移重新定位变元栈,重新定位溢出的寄存器栈,重新定位中央 处理单元(CPU)栈,或者重新定位局部变量。在一个实施例中,处理模块还可将被保护的功 能设置成不可执行,并且当尝试所述被保护的功能的执行时生成所述指示。二进制转换器 模块还可确定当尝试执行所述程序中的第一指令时是否接收到所述指示。如果确定当试图 执行程序中的第一指令时接收到指示,则二进制转换器还可将移动命令插入到程序中。例 如,插入的移动命令可引起在所述存储器模块中重新定位所述程序状态信息的至少一个元 素。插入的移动命令还可传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程 序。此外,插入的移动命令可检索重新定位的程序状态信息以用于执行所述功能。符合本公 开的示例方法可包含:接收程序已经尝试执行被保护的功能的指示;标识引起所述指示的 所述程序;引起重新定位对应于所述程序的程序状态信息的至少一个元素;基于所述程序 状态信息的所述重新定位的至少一个元素将所述程序中的指令转换成可执行二进制代码; 以及执行所述可执行二进制代码。
[0009] 在过去的数十年,恶意代码注入已成为可能在装置中破坏安全性的最普遍的攻 击。作为响应,一些制造商(例如英特尔、AMD等)开始将数据执行保护(诸如,例如写X0R 执行(W气X)安全性特征)合并到它们的处理装置中。W AX允许将可执行代码的某些 部分标记为可写或可执行,但不是二者。用这种方式,恶意的注入代码可被写到装置中,但 可不被执行。WAX以及其它类似保护方案已经被广泛采用作为硬件实现的安全性,而未 遭受基于软件的解决方案的漏洞。
[0010] 然而,最近的备选办法已经被设计成例如通过面向返回的编程(R0P)攻击来回避 数据执行保护。R0P可使程序的控制流转向,而无需恶意代码注入。相反,攻击可通过将小 组件的地址放在程序栈上而将装置中已经存在的小组件(例如可由程序调用并且然后返 回到它们被调用的地方的子例程)链接在一起。这个栈操纵允许攻击者"构造"来自小组 件的程序,其否则将对装置没有造成威胁。用这种方式构造的程序可与原始小组件创造者 所意图的非常不同地执行,并且可用于恶意动作,诸如,例如盗取信息、破坏信息、控制装置 等。所有这些可在没有恶意代码注入的情况下实现。
[0011] 尝试减轻R0P的现有技术基于装置中可存在的三个漏洞:程序中缺乏控制流完整 性检查、预先对攻击者已知的指令序列(例如小组件)位置以及在R0P攻击中可改变目的 的小组件的丰富使用。静态流程控制监视技术,比如,例如在现代编译器(例如GNU编译器 集合中的ProPolice和CRED)中已经采用栈特高频噪声和界限检查。动态流程控制监视技 术例如可包含采用阴影返回栈来观察控制流的不可侵犯。然而,这些技术的实现已经由于 性能和实现问题在行业中受到限制。代码随机化技术如地址空间布局随机化(ASLR)被设 计成阻碍小组件位置察觉和可用性以在R0P攻击中使用。ASLR在加载时间随机化程序中每 个模块的位置,使得攻击者难以定位所需小组件。尽管ASLR不影响性能,但它也不是极简 单的技术,并且仍易受概率性攻击。研宄已经显示,ASLR可在小于200秒内被强力R0P攻 击破坏。尽管在行业中已经存在增大由ASLR经由位置无关的可执行(PIE)支持和内核空 间随机化提供的熵的尝试,但ASLR仍易受熵减小技术影响,诸如,例如,尝试经由数据结构 (如装置的虚拟地址空间中的*. got or *. pit)获得位置信息的信息泄露攻击、尝试在堆上 分配大量存储器以减小随机化的范围的"堆喷射(heap spraying)"攻击,以及尝试喷射不 难发现执行开发所需的信息的开发代码的充分实例的"JIT喷射"攻击。在实际实践中,对 微软的Internet Explorer (例如在国家漏洞数据库条目CVE-2012-1875/1889中备案的) 的近来R0P攻击已经进一步演示了 ASLR没有可能反对熵减小攻击。
[0012] 图1图示了按照本公开的至少一个实施例的二进制转换器驱动的程序状态重新 定位的示例。与本公开的至少一个实施例一致,装置100可包含配置成以允许实际程序 访问它们的小组件同时保持那些小组件的实际位置对入侵程序(例如恶意软件)隐藏的 方式重新定位程序状态的资源。装置100的示例可包含但不限于
移动通信装置(诸如基 于Android? 操作系统(OS)、iOS?、Windows?OS、Blackberry?OS、Palm?OS、Symbian? 〇S等的蜂窝手机或智能电话)、移动计算装置(诸如平板计算机,如iPad?、GalaxyTab?、 Surface?、KindleFire?等)、包含由英特尔公司制造的低功率芯片集的Ultrabooks?、上 网本、笔记本计算机、膝上型计算机、掌上计算机等,以及通常固定计算装置(诸如台式计 算机、服务器、机顶盒等)。
[0013] 装置100例如可包括程序102、二进制转换器模块104、含有程序状态106的存储 器模块106以及处理模块114。程序102可包含可使能够在装置100上执行的各种软件。 当程序102尝试调用装置100中的某些功能(例如小组件)时,装置100例如可配置成使 程序102设陷到二进制转换器模块104。某些功能可包括如果以具体方式调用则可能对装 置100的操作有害的功能。这些功能例如可使用防止它们被执行的W AX保护来进行保护。 用这种方式,如果程序102尝试执行被保护的功能,则将发生错误,将控制导向二进制转换 器模块104。二进制转换器模块104可配置成将程序102转换成可执行二进制代码。然而, 按照本公开的至少一个实施例,二进制转换器模块104可进一步配置成执行与程序状态重 新定位相呼应的这个转换。程序状态重新定位可涉及将存储在存储器模块106中的至少一 个程序状态元素(例如变元栈、溢出的寄存器栈、中央处理单元(CPU)寄存器、局部变量等) 从在装置100的程序栈中定义的位置110移动到如在112所示的另一位置114。例如,一个 或多个程序状态元素可偏移对应栈指针随机偏移。程序状态重新定位可由设陷到二进制转 换器模块104的程序102触发,并且然后可在持久的基础上继续。可在修改的程序状态中 跟踪程序状态元素从原始位置110到新位置114的重新定位。
[0014] 在引起程序状态106的重新定位之后,二进制转换器模块104可接收或可正好察 觉修改的程序状态,并且在代码转换中可利用修改的程序状态。例如,二进制转换器模块 104可生成修改察觉代码118以便由处理模块执行。虽然未示出,但修改察觉代码118可被 存储在代码高速缓存模块(未示出)中。修改察觉代码118可执行在程序102中定义的所 有功能,但与从主程序栈操作相反,修改察觉代码118可使用在修改的程序状态中定义的 存储器位置114操作。而且,入侵者120可尝试获得对程序栈的控制以便将程序调用插入 到小组件以拼合对装置100恶意的操作(例如盗取或删除来自装置100的信息,获得对装 置100的控制等)。然而,由于装置100的程序栈不用程序状态108的重新定位元素的新位 置114更新,因此操作将不访问期望信息(例如,它们将尝试访问原始程序状态位置110), 并且攻击将失败。
[0015] 图2图示了按照本公开的至少一个实施例可使用的装置100'的示例配置。装置 100'是可用于执行在图1中所示的操作的设备的示例。虽然与本公开一致的实施例可采 用装置100',但这些实施例不仅仅局限于具有公开配置的装置。每个装置100'可包括配 置成管理装置操作的系统模块200。系统模块200例如可包含处理模块116'、存储器模块 106'、电源模块202、用户接口模块204和通信接口模块206以便与通信模块208交互。虽 然通信模块208已经被图示为与系统模块200分开,但这个位置在本文中只是为了说明目 的。与通信模块208关联的一些或所有功能性也可被合并在系统模块200内。
[0016] 在装置100'中,处理模块116'可包括位于单独部件中的一个或多个处理器,或 者备选地,可包括嵌入在单个部件中(例如在片上系统(S0C)配置中)的一个或多个处理 核心以及任何处理器相关的支持电路(例如桥接接口等)。示例处理器可包含从英特尔公 司可得到的各种基于x86的微处理器,包含Pentium?、Xeon?、Itanium?、Celeron?、Atom?、 Core?i系列产品家族、高级RISC(例如精简指令集计算)机器或"ARM"处理器等中的那些。 支持电路的示例可包含芯片集(例如,从英特尔公司可得到的北桥、南桥等),所述芯片集 配置成提供处理模块116'可与其它系统部件交互所通过的接口,所述其它系统部件可在 装置1〇〇'中以不同速度、在不同总线上等操作。通常与支持电路关联的一些或所有功能性 也可被包含在与处理器相同的物理封装中(例如S0C封装,如从英特尔公司可得到的Sandy 桥集成电路)。
[0017] 处理模块116'可配置成执行装置100'中的各种指令。指令可包含配置成使处 理模块116'执行与读数据、写数据、处理数据、规划数据、转换数据、变换数据等相关的活 动的程序代码。在一个实施例中,处理模块116'可配置成执行对所公开的实施例特定的各 种功能,例如,包含二进制转换器模块104的一些或所有功能。信息(例如指令、数据等) 可存储在存储器模块106'中。示例信息可包括程序102、二进制转换器模块104和程序状 态108中的一些或所有。存储器模块106'可包括以固定或可移动格式的随机存取存储器 (RAM)或只读存储器(ROM)。RAM可包含配置成在装置100'(诸如,例如静态RAM (SRAM)或 动态RAM (DRAM))操作期间保存信息的存储器。ROM可包含配置为BIOS、UEFI等用于当装 置100'激活时提供启动指令的存储器、可编程存储器,诸如电子可编程ROM (EPROMS)、闪存 等。其它固定和/或可移动存储器可包含磁存储器(诸如,例如软盘、硬驱动器等)、电子存 储器(诸如固态闪存(例如嵌入式多媒体卡(eMMC)等))、可移动存储器卡或存储器棒(例 如微存储装置(uSD)、USB等)、光存储器(诸如基于压缩盘的ROM (⑶-ROM))等。在一个 实施例中,存储器模块106'可包含用于存储可执行二进制代码的代码高速缓存模块。
[0018] 电源模块202可包含内部电源(例如电池)和/或外部电源(例如机电或太阳能 发电机、电网、燃料电池等)以及配置成给装置100'提供操作所需的电力的相关电路。用 户接口模块204可包括配置成允许用户与装置100'交互的元件部分,诸如例如各种输入机 制(例如麦克风、开关、按钮、旋钮、键盘、扬声器、触敏表面、配置成捕获图像和/或感测接 近度、距离、运动、手势等的一个或多个传感器)以及各种输出机制(例如扬声器、显示器、 发光/闪光指示器、用于振动、运动等的机电部件)。通信接口模块206可配置成处理通信 模块208的分组路由和其它控制功能,其可包含配置成支持有线和/或无线通信的资源。有 线通信可包含串行和并行有线介质,诸如,例如以太网、通用串行总线(USB)、火线、数字视 觉接口(DVI)、高清多媒体接口(HDMI)等。无线通信例如可包含近紧密接近无线介质(例 如射频(RF),诸如基于近场通信(NFC)标准、红外(IR)、光学字符识别(0CR)、磁字符感测 等)、短程无线介质(例如蓝牙、WLAN、Wi-Fi等)和长程无线介质(例如蜂窝、卫星等)。在 一个实施例中,通信接口模块206可配置成防止在通信模块208中活动的无线通信彼此干 扰。在执行这个功能时,通信接口模块206例如可基于等待传送的消息的相对优先级调度 通信模块208的活动。
[0019] 在操作的示例中,处理模块116'可执行程序102,并且然后例如基于调用装置100 中被保护的功能的尝试将程序102设陷到二进制转换器模块104中。处理模块116'可包 含在二进制转换器模块104中,其重新定位存储在存储器模块106'中的程序状态108,并基 于修改的程序状态将程序102转换成修改察觉代码118。处理模块116'可包含在执行修改 察觉代码118中。重要的是要指出,虽然在以上示例模块中被标识为初级作用器,但还有可 能图2中未图示的其它模块(例如基于专用硬件/软件的二进制转换器模块104)独自或 结合以上示例模块操作。
[0020] 图3图示了按照本公开的至少一个实施例添加到程序以实现二进制转换器驱动 的程序状态重新定位的示例代码。图3的示例演示了通过改变调用约定来重新定位程序状 态108。示例程序代码300反映了在与本公开一致的动作之前的程序102的可能内容。如 在300所示的现有调用约定在装置100中的程序栈上传递所有变元(例如引入攻击漏洞)。
[0021] 具有重新定位302的示例程序代码示出了如何
可与本公开一致实现重新定位。序 言304中的前四个指令可执行程序状态108的初始重新定位。特别重要的是,具有重新定 位302的示例程序代码中的调用约定在寄存器EAX和EBX中传递前两个变元,与在示例程 序代码300中所示的程序栈上传递它们相反。随后的指令(例如在306所示的)然后可反 映修改的程序状态,使得程序按修改的程序状态访问正确的存储器位置。跳到具有重新定 位302的示例程序代码中间的任何R0P附连将不察觉在EAX和EBX寄存器中传递的修改的 程序状态,并且从而将无法在其期望位置发现程序状态108,这将引起攻击失败。
[0022] 图4图示了按照本公开的至少一个实施例可在R0P攻击期间发生的示例代码执 行。对小组件1至9的调用可被放在程序栈400上,以便使小组件1-9用具体变元执行(例 如使可允许攻击者获得装置100的访问的功能性发生)。例如,基于存储在程序栈400上的 程序状态,小组件1、3和5可使用栈指针相关寻址来分别执行创建、写和关闭操作。中间小 组件2、4和6然后可起作用以使用"pop"指令的序列从程序栈400中移除信息来清除程序 栈400上的程序状态,使得下一小组件可执行。小组件7和8是单指令小组件,它们可将存 储在程序栈400上的程序状态传送到寄存器中,使得下一小组件可在对应寄存器中找到它 们,并因此执行计算(例如系统调用:execve)。
[0023] 图5图示了按照本公开的至少一个实施例当图4的R0P攻击由转换器驱动的程序 状态重新定位来重新定向时的示例代码执行。在图5的示例中,调用约定已经被改变,使得 前两个变元总是通过寄存器EAX和EBX传递,而剩余变元在程序栈400上推送。图5中的 箭头"夺"指示通过以这种方式变更操作可影响的指令。例如,在(例如程序102)的正常 操作期间,小组件1、3、5可不再使用栈指针相关寻址访问所有程序状态,而是期望某个程 序状态存在于EAX和EBX寄存器中。然而,任何R0P攻击者将不察觉在程序栈400外推送 的变元,并且作为结果,将仍在程序栈400上呈现所有程序状态。通过在程序栈400上呈现 所有程序状态而引起的任意行为然后可挫败攻击所意图的(例如通过调用小组件1-9所意 图的)恶意动作。
[0024] 具体地说,在程序102正常操作期间,小组件7和8从备选位置(例如ESI和EDI 寄存器)而不是栈位置取程序状态。然而,R0P攻击者仍期望小组件7和8从程序栈400取 值。结果,在小组件9中发生的计算操作在无效数据上,使攻击失败。重新定位的另一效果 是消除了小组件7和8的〃pop-ret〃序列。这可能是重要的,因为pop-ret序列可广泛地 用在R0P攻击中。
[0025] 图6图示了按照本公开的至少一个实施例的二进制转换器驱动的程序状态重新 定位的示例操作。在操作600中,可在装置中的二进制转换器模块接收尝试执行被保护的 功能的指示。例如,具体功能(例如可用在R0P攻击中的功能)可在装置被保护为只写,并 且程序执行功能的尝试可使程序设陷到二进制转换器模块。在操作602中,可执行引起该 指示的程序的标识。在操作604中,可确定状态重新定位对于该程序是否已经活动。如果 在操作604中确定状态重新定位对于该程序不是已经活动的,则在操作606中,可确定程序 状态重新定位规则。例如,程序状态重新定位规则可阐述变元栈、溢出的寄存器栈、CPU寄 存器、局部变量等的重新定位条件。程序状态元素中的一个或多个例如可基于与程序栈指 针的随机偏移等重新定位。在操作608中,在操作606中确定的重新定位规则然后可被添 加到重新定位映射中以便在装置中实现。在与本公开一致的实施例中,将重新定位规则添 加到重新定位映射可允许重新定位对于程序是持久的。
[0026] 在操作604中确定状态重新定位对于该程序已经是活动的之后,或备选地在操作 608之后,然后可在操作610中进一步确定在程序是否在第一指令设陷。如果在操作610中 确定程序在第一指令设陷,则在操作612中,代码可被插入到程序中(例如诸如在图3中的 304所示的),以维持程序状态的重新定位。在操作610中确定程序的设陷不发生在第一指 令之后,或者备选地在操作612之后,在操作614中程序可被二进制转换成可执行形式。在 操作614中将程序转换成可执行二进制代码可基于重新定位的程序状态,使得程序可知道 在重新定位后在哪里访问资源。在操作616中,然后可执行转换的程序代码(例如可执行 二进制代码)。虽然图6中未图示,但可执行中间操作,其中在执行代码之前,可执行二进制 代码被加载到存储器(例如,代码高速缓存模块)中。可选地,操作616后面是返回操作600, 以便例如准备程序已经尝试执行装置中被保护的功能的下一指示。
[0027] 虽然图6图示了根据一实施例的各种操作,要理解到,对于其它实施例不是所有 图6中描绘的操作都是必需的。实际上,本文充分考虑到,在本公开的其它实施例中,图6 中描绘的操作和/或本文描述的其它操作可以任何附图中未明确示出的方式组合,但仍完 全符合本公开。由此,针对一个附图中未明确示出的特征和/或操作的权利要求被视为在 本公开的范围和内容内。
[0028] 如在此申请和权利要求书中所使用的,通过术语"和/或"连接的项目列表可意味 着所列项目的任何组合。例如,短语"A、B和/或C"可意味着A ;B ;C ;A和B ;A和C ;B和 C ;或者A、B和C。如在此申请和权利要求书中所使用的,通过术语"中的至少一个"连接的 项目列表可意味着所列项目的任何组合。例如,短语"A、B或C中的至少一个"意味着A ;B ; C ;A和B ;A和C ;B和C ;或者A、B和C。
[0029] 如本文任何实施例中所使用的术语"模块"可指的是配置成执行上面提到的操作 的软件、固件和/或电路。软件可实施为记录在非暂时性计算机可读存储介质上的软件包、 代码、指令、指令集和/或数据。固件可实施为硬编码(例如非易失性)在存储器装置中的 代码、指令或指令集和/或数据。如在本文任何实施例中所使用的,"电路"例如可单个或以 任何组合包括硬连线电路、可编程电路(诸如包括一个或多个单独的指令处理核心的计算 机处理器)、状态机电路和/或存储由可编程电路执行的指令的固件。模块可共同或单独实 施为形成更大系统(例如集成电路(1C)、片上系统(SoC)、台式计算机、膝上型计算机、平板 计算机、服务器、智能电话等)的一部分的电路。
[0030] 本文描述的任何操作都可实现在系统中,所述系统包含其上单独或以组合方式存 储有指令的一个或多个机器可读存储介质,所述指令当由一个或多个处理器执行时执行所 述方法。这里,处理器例如可包含服务器CPU、移动装置CPU和/或其它可编程电路。此外, 意图是本文所描述的操作可跨多个物理装置(诸如在多于一个不同物理位置的处理结构) 分布。存储介质可包含任何类型的有形机制,例如任何类型的盘(包含硬盘、软盘、光盘、压 缩盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)和磁光盘);半导体装置,诸如只读存储器 (R0M)、随机存取存储器(RAM)(诸如动态和静态RAM)、可擦除可编程只读存储器(EPROM)、 电可擦除可编程只读存储器(EEPR0M)、闪存、固态盘(SSD)、嵌入式多媒体卡(eMMC)、安全 数字输入/输出(SDI0)卡、磁卡或光卡或者适合于存储电子指令的任何类型的介质。其它 实施例可实现为由可编程控制装置执行的软件模块。
[0031] 从而,此公开指向二进制转换器驱动的程序状态重新定位。一般而言,装置可通过 将脆弱的程序功能设置为不可执行来保护它们。如果尝试执行被保护的程序功能,则程序 可设陷到可配置成将程序状态从(例如在栈寄存器上)已经建立的进行重新定位的装置中 的二进制转换器。程序状态可包含程序在执行过程期间使用的资源(例如存储器位置)。 二进制转换器然后可基于重新定位的程序状态将程序转换成可执行形式,并且因此可以被 执行。尝试克服正常程序执行并实现恶意操作(例如基于在栈寄存器中反映的程序状态) 的入侵代码将不按意图运作,因为重新定位的程序状态将引起未预料到的结果。
[0032] 如下示例涉及另外的实施例。在一个示例中,提供了一种装置。所述装置可包含: 存储器模块,用于保持对应于程序的程序状态信息;二进制转换器模块,用于接收由程序执 行被保护的功能的尝试的指示,引起在所述存储器模块中重新定位所述程序状态信息的至 少一个元素,以及基于所述程序状态信息的所述重新定位的至少一个元素将所述程
序中的 指令转换成可执行二进制代码;以及处理模块,用于执行所述可执行二进制代码。
[0033]上面的示例装置可被进一步配置,其中所述二进制转换器模块将进一步引起以下 中的至少一项:基于随机偏移重新定位变元栈,重新定位溢出的寄存器栈,重新定位中央处 理单元(CPU)寄存器,或者重新定位局部变量。
[0034]上面的示例装置可单独或结合上面的另外配置被进一步配置,其中所述处理模块 将进一步将被保护的功能设置成不可执行,并且当尝试所述被保护的功能的执行时生成所 述指示。
[0035]上面的示例装置可单独或结合上面的另外配置被进一步配置,其中所述二进制转 换器模块将进一步确定当尝试执行所述程序中的第一指令时是否接收到所述指示。在此 配置中,示例装置可被进一步配置,其中所述二进制转换器模块将进一步:如果确定当尝试 执行所述程序中的第一指令时接收到所述指示则将移动命令插入到所述程序中。在此配置 中,示例装置可被进一步配置,其中插入的移动命令将引起在所述存储器模块中重新定位 所述程序状态信息的至少一个元素。在此配置中,示例装置可被进一步配置,其中所述插入 的移动命令将进一步传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程序。 在此配置中,示例装置可被进一步配置,其中所述插入的移动命令将进一步检索重新定位 的程序状态信息以用于执行所述程序。
[0036] 在另一示例中,提供了一种方法。所述方法可包含:接收程序已经尝试执行被保护 的功能的指示;标识引起所述指示的所述程序;引起重新定位对应于所述程序的程序状态 信息的至少一个元素;基于所述程序状态信息的所述重新定位的至少一个元素将所述程序 中的指令转换成可执行二进制代码;以及执行所述可执行二进制代码。
[0037]上面的示例方法可被进一步配置,其中引起重新定位对应于所述程序的程序状态 信息的至少一个元素包括如下至少一项:基于随机偏移重新定位变元栈,重新定位溢出的 寄存器栈,重新定位中央处理单元(CPU)寄存器,或重新定位局部变量。
[0038]上面的示例方法可单独或结合上面的另外配置进一步包括:将所述被保护的功能 设置成不可执行;以及当尝试执行所述被保护的功能时生成所述指示。
[0039]上面的示例方法可单独或结合上面的另外配置进一步包括:确定当尝试执行程序 中的第一指令时是否接收到指示。在此配置中,示例方法可进一步包括:如果确定当尝试执 行所述程序中的第一指令时接收到所述指示,则将移动命令插入到所述程序中。在此配置 中,示例方法可被进一步配置,其中插入的移动命令将引起在所述存储器模块中重新定位 所述程序状态信息的至少一个元素。在此配置中,示例方法可被进一步配置,其中插入的移 动命令将进一步传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程序。在此 配置中,示例方法可被进一步配置,其中所述插入的移动命令将进一步检索重新定位的程 序状态信息以用于执行所述程序。
[0040] 在另一示例中,提供了布置成执行上面示例方法中的任一项的系统。
[0041] 在另一示例中,提供了布置成执行上面示例方法中的任一项的芯片集。
[0042] 在另一示例中,提供了包括多个指令的至少一个机器可读介质,所述指令响应于 在计算装置上被执行而使计算装置执行上面示例方法中的任一项。
[0043] 在另一示例中,提供了一种装置,其配置有布置成执行上面示例方法中的任一项 的平台引导固件的信任的连续。
[0044] 在另一示例中,提供了具有用于执行上面示例方法中的任一项的设备的装置。
[0045] 在另一示例中,提供了一种装置。所述装置可包含:存储器模块,用于保持对应于 程序的程序状态信息;二进制转换器模块,用于接收所述程序执行被保护的功能的尝试的 指示,引起在所述存储器模块中重新定位所述程序状态信息的至少一个元素,并基于所述 程序状态信息的重新定位的至少一个元素将所述程序中的指令转换成可执行二进制代码; 以及处理模块,用于执行所述可执行二进制代码。
[0046] 上面的示例装置可被进一步配置,其中所述二进制转换器模块可进一步引起以下 中的至少一项:基于随机偏移重新定位变元栈,重新定位溢出的寄存器栈,重新定位中央处 理单元(CPU)寄存器,或者重新定位局部变量。
[0047] 上面的示例装置可单独或结合上面的另外配置被进一步配置,其中二进制转换器 模块将进一步:确定当尝试执行程序中的第一指令时是否接收到指示,并且如果确定当尝 试执行程序中的第一指令时接收到指示,则将移动命令插入到程序中。在此配置中,示例装 置可被进一步配置,其中插入的移动命令将引起在存储器模块中重新定位程序状态信息的 至少一个元素。在此配置中,示例装置可被进一步配置,其中所述插入的移动命令将进一步 传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程序。在此配置中,示例装 置可被进一步配置,其中所述插入的移动命令将进一步检索重新定位的程序状态信息以用 于执行所述程序。
[0048]在另一示例中,提供了一种方法。所述方法可包含:接收程序已经尝试执行被保护 的功能的指示;标识引起所述指示的程序;引起重新定位对应于所述程序的程序状态信息 的至少一个元素;基于所述程序状态信息的所述重新定位的至少一个元素将所述程序中的 指令转换成可执行二进制代码;以及执行所述可执行二进制代码。
[0049]上面的示例方法可被进一步配置,其中引起重新定位对应于所述程序的程序状态 信息的至少一个元素包括如下至少一项:基于随机偏移重新定位变元栈,重新定位溢出的 寄存器栈,重新定位中央处理单元(CPU)寄存器,或重新定位局部变量。
[0050] 上面的示例方法可单独或结合上面的另外配置进一步包括:确定当尝试执行程序 中的第一指令时是否接收到指示,并且如果确定当尝试执行所述程序中的第一指令时接收 到所述指示,则将移动命令插入到所述程序中。在此配置中,示例方法可被进一步配置,其 中插入的移动命令将引起在所述存储器模块中重新定位所述程序状态信息的至少一个元 素。在此配置中,示例方法可被进一步配置,其中所述插入的移动命令将进一步传递所需的 至少一个变元以在不同于栈寄存器的寄存器中执行程序。在此配置中,示例方法可被进一 步配置,其中所述插入的移动命令将进一步检索重新定位的程序状态信息以用于执行所述 程序。
[0051] 在另一示例中,提供了布置成执行上面示例方法中的任一项的系统。
[0052] 在另一示例中,提供了布置成执行上面示例方法中的任一项的芯片集。
[0053] 在另一示例中,提供了包括多个指令的至少一个机器可读介质,所述指令响应于 在计算装置上被执行而使计算装置执行上面示例方法中的任一项。
[0054] 在一个示例中,提供了一种装置。所述装置可包含:存储器模块,用于保持对应于 程序的程序状态信息;二进制转换器模块,用于接收所述程序执行被保护的功能的尝试的 指示,引起在所述存储器模块中重新定位所述程序状态信息的至少一个元素,并基于所述 程序状态信息的重新定位的至少一个元素将所述程序中的指令转换成可执行二进制代码; 以及处理模块,用于执行所述可执行二进制代码。
[0055] 上面的示例装置可被进一步配置,其中二进制转换器模块引起重新定位所述程序 状态信息的至少一个元素包括:二进制转换器模块引起以下中的至少一项:基于随机偏移 重新定位变元栈,重新定位溢出的寄存器栈,重新定位中央处理单元(CPU)寄存器,或者重 新定位局部变量。
[0056] 上面的示例装置可单独或结合上面的另外配置被进一步配置,其中所述处理模块 将进一步将被保护的功能设置成不可执行,并且当尝试所述被保护的功能的执行时生成所 述指示。
[0057] 上面的示例装置可单独或结合上面的另外配置被进一步配置,其中二进制转换器 模块将进一步确定当尝试执行程序中第一指令时是否接收到所述指示。在此配置中,示例 装置可被进一步配置,其中所述二进制转换器模块将进一步:如果确定当尝试执行所述程 序中的第一指令时接收到所述指示则将移动命令插入到所述程序中。在此配置中,示例装 置可被进一步配置,其中插入的移动命令将引起在存储器模块中重新定位程序状态信息的 至少一个元素。在此配置中,示例装置可被进一步配置,其中所述插入的移动命令将进一步 传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程序。在此配置中,示例装 置可被进一步配置,其中所述插入的移动
命令将进一步检索重新定位的程序状态信息以用 于执行所述程序。
[0058] 在另一示例中,提供了一种方法。所述方法可包含:接收程序已经尝试执行被保护 的功能的指示;标识引起所述指示的所述程序;引起重新定位对应于所述程序的程序状态 信息的至少一个元素;基于所述程序状态信息的所述重新定位的至少一个元素将所述程序 中的指令转换成可执行二进制代码;以及执行所述可执行二进制代码。
[0059] 上面的示例方法可被进一步配置,其中引起重新定位对应于所述程序的程序状态 信息的至少一个元素包括如下至少一项:基于随机偏移重新定位变元栈,重新定位溢出的 寄存器栈,重新定位中央处理单元(CPU)寄存器,或重新定位局部变量。
[0060] 上面的示例方法可单独或结合上面的另外配置进一步包括:将所述被保护的功能 设置成不可执行;以及当尝试执行所述被保护的功能时生成所述指示。
[0061] 上面的示例方法可单独或结合上面的另外配置进一步包括:确定当尝试执行程序 中第一指令时是否接收到所述指示。在此配置中,示例方法可进一步包括:如果确定当尝试 执行所述程序中的第一指令时接收到所述指示则将移动命令插入到所述程序中。在此配置 中,示例方法可被进一步配置,其中插入的移动命令将引起在所述存储器模块中重新定位 所述程序状态信息的至少一个元素。在此配置中,示例方法可被进一步配置,其中所述插入 的移动命令将进一步传递所需的至少一个变元以在不同于栈寄存器的寄存器中执行程序。 在此配置中,示例方法可被进一步配置,其中所述插入的移动命令将进一步检索重新定位 的程序状态信息以用于执行所述程序。
[0062] 在另一示例中,提供了一种系统。系统可包含:用于接收程序已经尝试执行被保护 的功能的指示的设备;用于标识引起所述指示的所述程序的设备;用于引起重新定位对应 于所述程序的程序状态信息的至少一个元素的设备;用于基于所述程序状态信息的所述重 新定位的至少一个元素将所述程序中的指令转换成可执行二进制代码的设备;以及用于执 行所述可执行二进制代码的设备。
[0063] 上面示例系统可被进一步配置,其中引起重新定位对应于所述程序的程序状态信 息的至少一个元素包括如下至少一项:基于随机偏移重新定位变元栈,重新定位溢出的寄 存器栈,重新定位中央处理单元(CPU)寄存器,或重新定位局部变量。
[0064] 上面的示例系统可单独或结合上面的另外配置进一步包括:用于将所述被保护的 功能设置成不可执行的设备;以及用于当尝试执行所述被保护的功能时生成所述指示的设 备。
[0065]上面的示例系统可单独或结合上面的另外配置进一步包括:用于确定当尝试执行 所述程序中的第一指令时是否接收到所述指示的设备。在此配置中,示例系统可进一步包 括:用于如果确定当尝试执行所述程序中的第一指令时接收到所述指示则将移动命令插入 到所述程序中的设备。在此配置中,示例系统可被进一步配置,其中插入的移动命令将引起 在所述存储器模块中重新定位所述程序状态信息的至少一个元素。在此配置中,示例系统 可被进一步配置,其中所述插入的移动命令将进一步传递所需的至少一个变元以在不同于 栈寄存器的寄存器中执行程序。在此配置中,示例系统可被进一步配置,其中所述插入的移 动命令将进一步检索重新定位的程序状态信息以用于执行所述程序。
[0066] 本文已经采用的术语和表述被用作描述而非限制的术语,并且在使用此类术语和 表述时没有意图排除所示出和描述的特征的任何等同物(或其部分),并且要认识到,各种 修改在权利要求的范围内是可能的。因此,权利要求意图覆盖所有此类等同物。
【主权项】
1. 一种装置,包括: 存储器模块,用于保持对应于程序的程序状态信息; 二进制转换器模块,用于接收所述程序执行被保护的功能的尝试的指示,引起在所述 存储器模块中重新定位所述程序状态信息的至少一个元素,并基于所述程序状态信息的所 述重新定位的至少一个元素将所述程序中的指令转换成可执行二进制代码;以及 处理模块,用于执行所述可执行二进制代码。2. 如权利要求1所述的装置,其中所述二进制转换器模块将进一步引起以下中的至 少一项:基于随机偏移重新定位变元栈,重新定位溢出的寄存器栈,重新定位中央处理单元 (CPU)寄存器,或者重新定位局部变量。3. 如权利要求1所述的装置,其中所述处理模块将进一步将所述被保护的功能设置 成不可执行,并且当尝试所述被保护的功能的执行时生成所述指示。4. 如权利要求1所述的装置,其中所述二进制转换器模块将进一步确定当尝试执行 所述程序中的第一指令时是否接收到所述指示。5. 如权利要求4所述的装置,其中所述二进制转换器模块将进一步:如果确定当尝试 执行所述程序中的所述第一指令时接收到所述指示,则将移动命令插入到所述程序中。6. 如权利要求5所述的装置,其中所述插入的移动命令将引起在所述存储器模块中 重新定位所述程序状态信息的所述至少一个元素。7. 如权利要求5所述的装置,其中所述插入的移动命令将进一步传递所需的至少一 个变元以在不同于栈寄存器的寄存器中执行所述程序。8. 如权利要求5所述的装置,其中所述插入的移动命令将进一步检索重新定位的程 序状态信息以用于执行所述程序。9. 一种方法,包括: 接收程序已经尝试执行被保护的功能的指示; 标识引起所述指示的所述程序; 引起重新定位对应于所述程序的程序状态信息的至少一个元素; 基于所述程序状态信息的所述重新定位的至少一个元素将所述程序中的指令转换成 可执行二进制代码;以及 执行所述可执行二进制代码。10. 如权利要求9所述的方法,其中引起重新定位对应于所述程序的所述程序状态信 息的所述至少一个元素包括如下至少一项:基于随机偏移重新定位变元栈,重新定位溢出 的寄存器栈,重新定位中央处理单元(CPU)寄存器,或重新定位局部变量。11. 如权利要求9所述的方法,进一步包括: 将所述被保护的功能设置成不可执行;以及 当尝试执行所述被保护的功能时生成所述指示。12. 如权利要求9所述的方法,进一步包括: 确定当尝试执行所述程序中的第一指令时是否接收到所述指示。13. 如权利要求12所述的方法,进一步包括: 如果确定当尝试执行所述程序中的所述第一指令时接收到所述指示,则将移动命令插 入到所述程序中。14. 如权利要求13所述的方法,其中所述插入的移动命令将引起在所述存储器模块 中重新定位所述程序状态信息的所述至少一个元素。15. 如权利要求13所述的方法,其中所述插入的移动命令将进一步传递所需的至少 一个变元以在不同于栈寄存器的寄存器中执行所述程序。16. 如权利要求13所述的方法,其中所述插入的移动命令将进一步检索重新定位的 程序状态信息以用于执行所述程序。17. -种系统,布置成执行如权利要求9至16中任一项所述的方法。18. -种芯片集,布置成执行如权利要求9至16中任一项所述的方法。19. 至少一个机器可读介质,包括多个指令,所述指令响应于在计算装置上执行而使 所述计算装置执行如权利要求9至16中任一项所述的方法。20. -种装置,配置有布置成执行如权利要求9至16中任一项所述的方法的二进制转 换驱动程序状态重新定位。21. -种装置,具有执行如权利要求9至16中任一项所述的方法的设备。
【专利摘要】此公开指向二进制转换器驱动的程序状态重新定位。一般而言,装置可通过将脆弱的程序功能设置为不可执行来保护它们。如果尝试执行被保护的程序功能,则程序可设陷(trap)到可配置成将程序状态从(例如在栈寄存器上)已经建立的进行重新定位的装置中的二进制转换器。程序状态可包含程序在执行过程期间使用的资源(例如存储器位置)。二进制转换器然后可基于重新定位的程序状态将程序转换成可执行形式,并且因此可以被执行。尝试克服正常程序执行并实现恶意操作(例如基于在栈寄存器中反映的程序状态)的入侵代码将不按意图运作,因为重新定位的程序状态将引起未预料到的结果。
【IPC分类】G06F21/55, G06F21/56
【公开号】CN104903906
【申请号】CN201480004650
【发明人】A.文卡特, A.克里斯纳斯瓦米, K.亚马达, P.R.桑穆加维拉尤塔姆
【申请人】英特尔公司
【公开日】2015年9月9日
【申请日】2014年2月5日
【公告号】EP2956885A1, US9135435, US20140229717, WO2014126762A1