应用控制流模型的制作方法_3

文档序号:9816357阅读:来源:国知局
向。作为具体示例, 应用监视系统能够基于应用的控制流模型来选择很可能频繁执行的可监视片段。
[0034] 在一些实现方式中,如图1中所图示,在框140处被选择的应用的(或应用的机器代 码表示的)可监视片段在框150处被装备以对应用进行运行时监视。例如,应用的机器代码 表示的可监视片段能够在托管应用(即,作为该应用或将执行该应用)的计算系统的存储器 内被修改。更具体地,例如,处理1〇〇能够在计算系统的存储器内添加和/或修改在应用的机 器代码表示的所选择可监视片段处的指令,以引起应用使状态信息、信号或更新被提供至 应用监视系统。
[0035] 在其他实现方式中,应用监视系统能够通过观察在应用的机器代码表示的所选择 可监视片段内的指令的执行效果或结果,来监视应用的执行。例如,应用监视系统能够在计 算系统内(例如,基于处理器的寄存器值、处理器的状态变化、网络通信、或所执行的指令的 其他可观察效果)观察应用的机器代码表示的所选择可监视片段的指令的效果,以监视所 选可监视片段的执行。
[0036]传统应用监视系统多年来一直是专业系统管理工具包的有用部分,通常作为向应 用提供资源控制的运行时执行的一部分。这一般涉及:实时监视被消耗的操作系统资源、防 止应用访问未授权资源或超出资源限制。具体地,这样的操作系统监视依赖于常规的操作 系统界面,并且不需要修改,例如对应用本身的装备。
[0037]然而,检测并且反击现代恶意软件威胁往往要求更有侵入性的应用监视。例如,来 自现代恶意软件(例如,僵尸网络、隐身器、勒索软件、间谍、以及破坏)的攻击越来越倾向于 利用漏洞经由例如能够破坏或损坏系统操作以控制目标系统的处理代码插入、指针花招、 以及返回定向编程(例如,jump-to_libc(跳转至c函数库)攻击)的技术,来执行攻击。通常, 应用监视系统依赖于持续的侵入性应用管理,以确保各种完整性能在运行时被执行。这种 持续的侵入性应用监视通过实现期望等级的安全保护而使平衡有效应用监视和性能复杂 化。
[0038]例如处理100的应用监视处理能够提供更高的安全等级,同时性能劣化降低。作为 特定示例,处理100能够被用在用于应用监视的控制流完整性(CFI)方法。即,用于应用监视 的CFI方法能够使用被包括在包括应用的机器代码表示的文件内的控制流信息在框130、 140以及150处实现。
[0039] CFI涉及监视和/或检查应用的各种运行时完整性性能,在执行或运行时期间控制 流应当一直与应用对应。这种性能的具体示例在于每个程序(或功能)调用正确地返回到在 每个对应程序调用之后紧接的指令(即,每个程序调用的返回地址是调用之后的下一指 令)。
[0040] CFI的一个具体实现方式称为标识符检查(或ID检查)。在程序调用之前将特定标 识符(例如,32位值)存储在特定寄存器中,然后一旦从程序返回就检查该特定标识符。如果 比较失败,则很可能已检测到不正确的执行序列,并且然后应发出异常或故障条件(通常为 中止)。这种实现方式的有益特性在于涉及间接寻址(即,计算的返回或跳转地址)的程序调 用和跳转也能够被处理。另外,CFI检查所需的各种标识符值可能被逐一嵌入应用的只读代 码分段(例如,应用的机器代码表示的只读代码分段),这使直接修改标识符复杂化,从而避 免被恶意方、应用或执行代码检查到。
[0041] CFI请求应用的控制流的知识,以准确识别可监视片段并且放置足够准确的装备 (例如,代码)来检查控制转移(例如,程序调用和跳转)的目标和起源,从而确保应用中的控 制流的完整性。因为准确的控制流信息对于托管或执行应用的参与者通常不可访问,所以 往往需要依赖于解释每条和每个机器指令的动态运行时程序分析,并且因此能够确保CFI 识别检查被监视系统执行。CFI的此变体通过不可信的应用代码施加实际上与单步相关的 严重性能处罚。使用如图1中图示的处理100的处理,在包括应用的机器代码表示的文件内 所包括的控制流信息能够在框130处被解释,以识别应用的可监视片段并且在框140处选择 应用的一个或多个可监视片段用于在框150处的装备,如下所述。
[0042] 在此具体示例中,能够部署影子堆栈来记录每个程序调用的合适标识符值和相应 的返回地址。影子堆栈是之后能够用于扩展CFI检查以确保调用的序列被正确保持的数据 结构。另外,该方法的进一步优点在于动态分配结构(例如影子堆栈)的使用会扩展CFI检查 能做到的范围。通常,影子堆栈数据结构应被放入受保护的可写入存储器,因为能力够强的 攻击者会干预放在堆栈上的值,从而避免并且废除CFI检查。
[0043] 保护影子堆栈并且还保护动态运行时分析检查的一种方法依赖于受现代处理器 (例如,Intel和AMD x86系列处理器)支持的硬件虚拟化技术。然而,该方法能够造成明显的 性能劣化。例如,应用能够被托管在客户操作系统内,该客户操作系统经由管理程序系统 (例如由单独的主操作系统执行的QEMU)托管。由应用进行的程序调用能够被有效控制在客 户操作系统中。因此,该方法的安全性取决于被充分防护并且经历受控更新的主操作系统。 例如,此隔离策略将暗示主操作系统不应直接连接至外部网络,例如因特网,而客户操作系 统因为由主操作系统提供的保护而可以直接连接至外部网络。
[0044] 另一方法,在包括应用的机器代码表示的文件内所包括的控制流信息能够用于从 在客户操作系统内的应用的执行来提取间接调用信息。然后此信息被用在执行模式中,该 模式将之前不可见的间接转移作为错误或威胁来处理。例如,在图2所图示的实现方式中, 在客户操作系统230中运行(或被托管或被执行)的应用231的CFI检查利用修改的管理程序 系统220,管理程序系统220实现影子堆栈221并且被托管在主操作系统210中。具体地,修改 的管理程序220实现影子堆栈功能,并且执行影子堆栈的先进后出使用和CFI检查211,例如 返回至调用者检查(即,在程序执行之后返回至程序调用之后的指令)。另外,返回至调用者 功能被配置成处理信号、l〇ngjmp(长跳转)、以及其他程序调用和返回机制。
[0045] 因为详细的控制流信息被包括在包括应用的机器代码表示的文件内,所以程序调 用和跳转的源代码位置和目标代码位置(即,可监视片段)可被应用监视片段获得以实现 CFI装备(例如,实现要被放在线上的CFI检查代码)。影子堆栈能够在管理程序内实现以提 供访问限制。例如,应用能够被托管在经由主操作系统中的管理程序托管的客户操作系统 内。因此,在其他实现方式中使用的用于定位程序调用的单个步骤不需要被动态执行。因 此,CFI方法能够具有明显改善的性能。
[0046] 图4是根据实现方式的应用监视系统的示意性框图。应用监视系统400包括执行应 用监视系统400的各种功能的一组模块。如本文中所使用的,术语"模块"指硬件(例如,如集 成电路的处理器、或其他电路、或处理器可读介质)和软件(例如,机器或处理器可执行指 令、命令、或者如固件、程序或目标代码的代码)的组合。硬件和软件的组合包括仅硬件(即, 无软件元件的硬件元件,例如ASIC)、被托管在硬件中的软件(例如,被存储在例如RAM的存 储器中的软件、硬盘驱动或固态驱动、电阻式存储器、或如DVD和/或在处理器处执行或解释 的光介质)、或者硬件和被托管在硬件处的软件。
[0047]尽管关于在本文中具体讨论的应用监视系统400和本文中一般讨论的其他示例实 现方式图示和讨论了特定模块(即,硬件和软件的结合),但模块的其他组合或子组合能够 被包括在其他实现方式中。换言之,尽管在图4中图示的并且在其他示例实现方式中讨论的 模块执行在本文所讨论的示例中的功能,但这些功能和其他功能能够在不同模块处或在模 块的组合处被完成、执行或实现。
[0048]例如,分开图示和/或讨论的两个或更多个模块能够被组合成执行关于这两个模 块讨论的功能的一个模块。作为另一示例,如关于这些示例所讨论的在一个模块处执行的 功能能够在一个不同的模块处或在多个不同的模块处执行。此外,本文关于特定类型模块 所讨论的模块在其他实现方式中能够被实现为不同类型的模块
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1