计算机系统中基于处理器跟踪实施的控制流完整性的制作方法

文档序号:18744759发布日期:2019-09-21 02:12阅读:281来源:国知局
本发明要求2017年2月6日递交的第62/455,523号美国临时专利申请案和2018年2月2日递交的第15/887,468号美国专利申请案的在先申请优先权,这两个在先申请的全部内容以及其引用的任何内容以引用的方式并入本文本中。专利申请的
技术领域
:本专利申请大体上涉及计算机系统中的实时/在线网络防御系统领域。更具体地,本专利申请涉及一种包括控制流完整性(controlflowintegrity,CFI)监控能力的计算机系统,该CFI监控能力基于对通过硬件实现的处理器跟踪功能(例如英特尔处理器跟踪)提供的处理器跟踪输出的在线分析。
背景技术
::已经实施了各种网络防御方法来对抗网络攻击。为了应对针对防止代码注入的网络防御,网络攻击者调整了他们的方法来利用/重用现有程序代码。攻击者通过复杂的调用序列以意想不到的方式利用现有代码,而非向程序添加新代码。例如,返回导向编程及其变体通过任意执行现有代码来利用现有程序代码中的弱点。控制流完整性(controlflowintegrity,CFI)作为执行如下操作的一种工具/属性已进入大众视野:利用计算机代码模块之间已知/已建立的控制流调用模式,通过识别/拒绝在计算机代码模块间执行不规范控制流的尝试来识别和对抗基于代码重用的网络攻击。控制流完整性对于网络防御开发者而言并非新概念。然而,通常与执行基于CFI的网络防御相关联的高计算资源开销阻碍了基于CFI的网络防御的使用。高开销和相关联的性能退化导致这种方法对在线/实时处理环境而言不实用。为了在实时处理环境中提供高效的基于CFI的网络防御能力,人们认为必须在以下项之间达成平衡:精确性(即,实施的粒度必须足够精细以尽可能多地消除攻击面);效率(即,必需的运行时开销应很小);以及透明性(即,该方法应该对应用透明,易于在现有OS和硬件上部署,并且与现有安全机制大体兼容)。通过基于硬件的处理器跟踪执行CFI被认为前景广阔。当前,硬件中存在若干控制流跟踪机制。每种形式的基于硬件的CFI实现方式表示精确性、跟踪开销、解码开销和可用过滤机制之间的一组不同权衡结果。分支跟踪存储(BranchTraceStore,BTS)CFI实现方式将每个控制传输事件(例如调用、返回和所有类型的跳转)捕获为存储器驻留BTS缓冲区中的单独记录实例。每个所得记录包含分支指令的源和目标的地址。因此,无需对记录进行解码。然而,BTS在跟踪期间引入了非常高的处理开销,并且由于缺少事件过滤机制而缺乏灵活性。最后分支记录(LastBranchRecord,LBR)CFI实现方式支持事件过滤(例如过滤掉条件分支)。然而,LBR仅将16或32个最近分支对(源和目标)记录到寄存器堆栈中。虽然LBR的跟踪开销非常低,但由于在任何时间点可用于分析的分支对的历史有限,因此它很难提供精确的保护。BTS和LBR可能能防御与返回导向编程类似的攻击,因为它们能够动态跟踪控制流。然而,BTS和LBR需要在产生高开销(例如BTS)和由于不精确跟踪而降低最终安全级别(例如LBR)之间进行权衡。英特尔在英特尔的酷睿M和第五代英特尔酷睿处理器中引入了处理器跟踪功能。这些处理器中都包括具有其自己的IPT硬件的CPU核,IPT硬件会为运行程序生成数据包形式的跟踪信息。处理器跟踪配置操作仅限于使用某些特殊模块寄存器(model-specificregister,MSR)的特权代理(例如操作系统)。跟踪的数据包以压缩形式写入预配置的内存缓冲区中,以最小化输出带宽并减少跟踪开销。软件解码器基于预定义格式对处理器跟踪数据包进行解码。控制代理提供额外的信息,包括程序二进制文件和一些运行时数据,以精确地重构程序流。对踪迹的激进压缩有助于收集更多控制流跟踪信息,包括控制流、执行模式和时序——而所有这些都比BTS产生的跟踪开销少得多。然而,高度编码会导致解码速度比跟踪慢几个数量级。参考下文中的表1,提供了包含9个执行控制流(执行流)的集合和对应的IPT跟踪数据包(若有记录)的示例。表1在上述基于IPT的处理器踪迹生成示例中,仅在非静态已知(例如条件)控制流发生改变时才记录处理器跟踪数据包。当处理器执行无条件直接分支时,不会记录处理器跟踪数据包。参见表1,执行控制流3和8。在记录了条件跟踪数据包的情况下,分支被压缩为一个比特,该比特标识是否满足致使条件分支流被采用的条件。参见表1,执行控制流1(采用了分支)和7(未采用分支)。其它控制流将生成间接分支的目标地址、异常和中断。参见表1,执行控制流2和9(TIP数据包)。在其它控制流示例中,记录包含异步事件执行控制流的源地址的处理器跟踪数据包(例如FUP跟踪数据包)。下文提供的表2列出了流改变指令(changeofflowinstruction,CoFI)类型和IPT提供的对应处理器跟踪输出。表2通过使用基于IPT的处理器跟踪数据包生成规则,针对每个退役指令记录的信息的平均大小小于1比特。此外,IPT输出日志生成配置方案支持基于当前特权级别(currentprivilegelevel,CPL)的事件过滤。例如,可以使用CR3值来配置日志生成,CR3值表示页面目录基址寄存器或某些指令指针(instructionpointer,IP)范围,这两者都可以用于预过滤(和丢弃)处理器跟踪数据包。在IPT提供的相对快速的处理器踪迹生成机制中,与解码记录的处理器跟踪数据包相关联的成本更高。IPT提供的高度编码(但紧凑)的处理器跟踪数据包不完整。因此,当期望/需要重构导致(有问题的)处理器跟踪数据包的程序流时,处理器跟踪数据包的解码器在解码期间将记录的处理器数据包与对应的二进制文件相关联。例如,在从处理器跟踪数据包重构执行控制流期间,IPT解码器库的实现方式使用抽象层指令流,抽象层指令流逐指令解析程序二进制文件,并将跟踪的数据包与解析的二进制指令组合,以进行整体解码。英特尔处理器跟踪数据包生成机制具有若干有益特征,包括:精确跟踪、低跟踪开销和事件过滤。然而,IPT还具有非期望的特征,包括生成的处理器跟踪数据包不完整和随之的解码速度慢。因此,IPT输出本身对性能分析、调谐和软件调试等离线分析很有用。处理器跟踪的IPT方法折衷了不利的慢速解码和期望的处理器跟踪数据包快速生成。IPT在其当前的监控/分析执行控制流的实现方式中依赖于离线重构来获取来自已执行码块的完整控制流信息。专利申请的技术实现要素:本专利申请实施例提供了一种方法和计算机系统,所述计算机系统包括硬件处理器(例如,包含IPT功能硬件的英特尔处理器)和包含帮助执行所述方法的指令的非瞬时性计算机可读介质。实施例提供了一种技术方案,该技术方案降低了在计算机系统的运行时环境中执行的受保护进程上执行控制流完整性(controlflowintegrity,CFI)实施对内核资源的需求程度。根据第一方面,一实施例提供了一种CFI实施方法,所述方法在计算机系统的运行时环境中执行的受保护进程上执行,所述方法包括:拦截源于在所述运行时环境中执行的所述受保护进程的执行的系统调用;所述计算机系统的内核内的快速路径从内核存储器中访问与所述系统调用相对应的处理器跟踪数据包;所述快速路径将所述处理器跟踪数据包匹配到已标记信用的控制流图(controlflowgraph,CFG)定义内的程序控制流(边)条目,所述条目具有表示程序控制流的可信度的关联信用值;以及在所述匹配之后,如果所述关联信用值不满足指定阈值,则有条件地调用慢速路径用于进一步处理所述处理器跟踪数据包,否则,提供允许执行所述系统调用的指示。在所述第一方面的第一种实现方式中,通过在绘制CFG的配置过程期间对所述受保护进程执行的模糊测试操作来确定所述关联信用值。根据所述第一方面的所述第一种实现方式的特定实施例,通过使用随机数据输入执行所述模糊测试操作。在所述第一方面的第二种实现方式中,将所述允许执行的指示提供给所述系统调用的对应处理程序。在所述第一方面的第三种实现方式中,所述处理器跟踪数据包为英特尔处理器跟踪数据包。在所述第一方面的第四种实现方式中,所述程序流条目对应于所述受保护进程的第一码块与第二码块之间的执行流。根据所述第一方面的所述第四种实现方式的特定实施例,所述已标记信用的CFG定义内的所述程序流条目对应于条件控制流。在所述第一方面的第五种实现方式中,所述已标记信用的CFG定义从包含下述项的保守CFG中获得:表示条件控制流的条目,以及表示非条件控制流的条目。根据第二方面,一实施例提供了一种用于执行控制流完整性(controlflowintegrity,CFI)方法的计算机处理节点,所述计算机处理节点包括:处理硬件;以及包括计算机可执行指令的非瞬时性计算机可读介质,所述计算机可执行指令在由所述处理硬件执行时帮助所述计算机处理节点执行包括以下操作的所述CFI方法:拦截源于在运行时环境中执行的受保护进程的执行的系统调用;计算机系统的内核内的快速路径从内核存储器中访问与所述系统调用相对应的处理器跟踪数据包;所述快速路径将所述处理器跟踪数据包匹配到已标记信用的控制流图(controlflowgraph,CFG)定义内的程序控制流(边)条目,所述条目具有表示程序控制流的可信度的关联信用值;以及在所述匹配之后,如果所述关联信用值不满足指定阈值,则有条件地调用慢速路径用于进一步处理所述处理器跟踪数据包,否则,提供允许执行所述系统调用的指示。在所述第二方面的第一种实现方式中,通过在绘制CFG的配置过程期间对所述受保护进程执行的模糊测试操作来确定所述关联信用值。根据所述第二方面的所述第一种实现方式的特定实施例,通过使用随机数据输入执行所述模糊测试操作。在所述第二方面的第二种实现方式中,将所述允许执行的指示提供给所述系统调用的对应处理程序。在所述第二方面的第三种实现方式中,所述处理器跟踪数据包为英特尔处理器跟踪数据包。在所述第二方面的第四种实现方式中,所述程序流条目对应于所述受保护进程的第一码块与第二码块之间的执行流。根据所述第二方面的所述第四种实现方式的特定实施例,所述已标记信用的CFG定义内的所述程序流条目对应于条件控制流。在所述第二方面的第五种实现方式中,所述已标记信用的CFG定义从包含下述项的保守CFG中获得:表示条件控制流的条目,以及表示非条件控制流的条目。附图说明尽管所附权利要求具体阐述了本专利申请的特征,但是本专利申请及其优点最好通过下文结合附图进行的详细描述来理解,其中:图1说明性地描绘了包含说明性CFI实施机制的整个计算机处理架构的结构/功能组件的组合。图2为概述用于在特定可执行计算机程序的CFI实施机制的在线操作之前生成控制流图(controlflowgraph,CFG)定义的说明性方法的操作的流程图。图3A、3B和3C说明性地描绘了与图2中概述的方法的三个阶段/操作分别提供的输出相关联的示例CFG定义状态。图4为保守CFG到ITCCFG重构的说明性示例。图5为概述根据结合图2、图3A、3B和3C中概述的方法提供的CFG定义执行的示例性混合控制流完整性实施机制的操作的流程图。附图说明英特尔处理器硬件的英特尔处理器跟踪(INTELProcessorTrace,IPT)特征提供具有最小资源消耗和/或处理器降速的详细处理器跟踪记录。然而,在将IPT用作在线检测机制方面,IPT提出了重大挑战,因为IPT提供的运行时处理器踪迹进行了高度压缩。对压缩的跟踪记录进行解码通常比生成处理器跟踪记录慢几个数量级。例如,本文描述的CFI实施机制合并了离线控制流图(controlflowgraph,CFG)的构建和处理器跟踪数据包(例如IPT数据包)流的在线控制流监控,以便在在线计算环境中实施CFI。在本说明性示例中,CFG记录格式符合处理器硬件提供的处理器跟踪数据包格式(例如IPT数据包格式),从而能够直接比较各个处理器跟踪数据包和CFG记录。因此,通过本文示例描述的所述CFI实施机制与计算系统的处理硬件和操作系统架构紧密集成。由此产生的CFI实施机制同时满足在线CFI实施当前对高度精确、高效率和高度透明的要求。本文描述的CFI实施机制检索并使用处理器硬件生成的处理器硬件生成的处理器跟踪数据包(例如英特尔处理器跟踪(INTELProcessorTrace,IPT)数据包)。在在线处理环境中,检索处理器跟踪数据包,并将它们与包含程序码块之间预配置的相关允许/预期调用集合的控制流图(controlflowgraph,CFG)进行比较,以检测异常/非预期控制流。基于静态(离线)分析来离线生成CFG,该静态(离线)分析通过所涉程序代码的动态分析(例如模糊测试)来完善。此后,在在线环境中,采取补救措施以防止下述情况带来的伤害:基于处理器跟踪数据包和预配置CFG的比较结果(在下文中详细描述)检测到程序计算块之间存在异常/非预期控制流。本文描述的CFI实施机制的精确性源于监控处理器提供的每个处理器跟踪数据包。由于处理器踪迹生成功能是在处理器硬件中实现,所以处理器跟踪记录的提供非常高效,因为在所涉程序的运行时期间增加的开销非常低。本文描述的CFI实施系统还具有透明性,因为无需二进制插桩,并且系统可以很容易地部署在能够在程序的运行时提供处理器跟踪记录的商用硬件处理器上。另外,通过至少先避免对处理器踪迹动态解码,本文描述的CFI实施机制解决了高解码开销的问题。而可与已压缩IPT输出直接进行比较的控制流图(controlflowgraph,CFG)定义是离线配置的。CFG定义包含连接码块的一组边。CFG定义边包含与特定程序或相关程序的码块之间的预期控制流(直观地描绘为CFG的图形表示/描绘中的边,即,连接码块的线)相对应的控制流描述。预配置的CFG定义中表示的每个边定义包括针对每个对应控制流的“信用”指示,该“信用”表示在IPT提供的在线处理器跟踪记录中遇到的流的可信度。因此,可以以能够在运行时与处理器硬件生成的已压缩处理器跟踪记录(例如IPT跟踪记录)直接比较的形式来提供和存储所配置的CFG定义的有效边的可管理集合。首先请关注图1,图1说明性地描绘了用于在示例性计算机处理架构中执行说明性CFI实施机制的硬件和操作系统功能组件(处理器核、内核操作、用户操作)的组合。在配置期间,静态二进制文件分析106阶段分析受保护进程100以生成ITCCFG定义,其中受保护进程100包括受保护可执行二进制文件102和共享库集合104。参见下文中描述的图3B。ITCCFG定义指定表示受保护进程100的可执行块之间的所有间接(条件)流的一组边。继续参考图1,模糊测试训练模块108(根据模糊测试训练目标)对受保护可执行二进制文件102和共享库集合104应用所生成的一组输入值,以便为静态二进制文件分析106提供的ITCCFG中定义的一组控制流(边)提供信用(可信度等级)标签。例如,将训练的(高可信度)边标记高信用(可信度)值,并与已采用或未采用(TakenorNon-Taken,TNT)信息相关联。将在模糊测试训练期间很少或从未执行过的控制流标记低信用(可信度)值。在CFG定义配置完成后,将ITCCFG的已标记信用的边存储为已标记信用的ITCCFG定义110。所得已标记信用的ITCCFG定义110的紧凑性便于与内核中运行的一组处理核112生成的处理器跟踪数据包流进行运行时比较。例如,内核模块112基于已标记信用的ITCCFG定义110执行CFI实施。更具体而言,例如,内核模块112配置一组CPU核114来基于以下项生成处理器跟踪数据包流:在受保护进程100的操作期间生成且被拦截的一组程序块调用。例如,根据在系统初始化期间提供给该组处理器核114的CR3值来选择性地启动内核模块112的操作,从而执行进程调用过滤,以在受保护进程100的执行期间执行CFI实施。将该组处理器核114在运行时提供的所得处理器跟踪数据包发送给存储器116中的预配置(FIFO)缓冲区,以供内核模块112进行CFI实施处理。在受保护进程100的运行时期间,根据上述预配置的调用过滤标准,该组处理器核114开始生成处理器跟踪数据包,这些处理器跟踪数据包随后存储在存储器116的配置缓冲区空间中。在一说明性示例中,触发系统调用(syscall)拦截器115以开始对所得/缓冲的处理器跟踪数据包进行流检查,这些处理器跟踪数据包对应于安全敏感系统调用,并由该组处理器核114存储在存储器116的预配置缓冲区空间中。在内核模块112的流检查器117对先前存储在存储器116中的处理器跟踪数据包记录进行控制流完整性检查期间,快速路径模块118对从存储器116检索到的处理器跟踪数据包记录的处理操作优先于慢速路径模块119。通常,快速路径模块118会与已标记信用的ICT-CFG定义110中的可信(已标记高信用值的)边进行快速比较,以尽可能排除检索到的处理器踪迹与恶意(已标记信用的ITCCFG定义110中不存在的)或可疑(信用值低的)踪迹相关联的可能性。在一说明性示例中,可疑处理器踪迹/代码会触发进一步处理,即,由慢速路径模块119执行速度较慢的检查。内核模块112的操作在下文中结合图4进一步描述。转到图2,概述了CFG定义的离线配置的示例。在离线预配置CFG定义以在线实施CFI的特定示例中,在200中,生成/获取包含程序码块(块)之间的所有可能边的保守CFG定义。图3A说明性地描绘了200中提供的保守CFG的简单说明性示例。随后,在210中,保守CFG配置被转换为包含一组间接(条件)边记录且由间接目标连接(indirecttargetsconnected,ITC)的CFG定义,其中,这些间接(条件)边记录符合英特尔处理器的IPT特征提供的处理器跟踪数据包的格式。接着,在220中,对程序代码执行覆盖型模糊测试操作(应用一组随机输入并观察所得的调用流),以建立信用(可信度)值和分支信息并将这些信息分配给在210中提供的ITCCFG定义的边。本文在下文结合图2、图3A、3B和3C进一步描述上述每个CFC定义配置操作。继续参考图2,在200中,对受保护进程100执行静态二进制文件分析以提供保守CFG定义。在一示例性实施例中,在保守CFG定义生成期间,使用现有的基于二进制文件的方法来拆解和分析受保护可执行二进制文件102和共享库集合104。保守CFG中的“保守”是指不能确定的间接分支的所有可能传出边可能会多于必要边,从而导致过多的误报,在IPT处理器跟踪数据包的运行时检查期间,这些误报会将合法控制流识别为潜在的恶意控制流,导致在运行时检查期间不会执行这些合法控制流。在200中,对受保护可执行二进制文件和共享库集合104的模块进行独立分析,以构建模块内CFG边。此后,通过使用动态链接机制暴露的过程链接表(procedurelinkagetable,PLT)来构建模块间CFG边。不同模块只能通过PLT中的间接跳转以及从被调用者到调用者的对应返回指令来连接。另外,在200中,将特定基本块之间的边相应地添加到保守CFG定义中。要处理全局符号插入问题,即一个符号可能存在于不同模块中,则使用二进制文件中的信息(例如DTNEEDED)字段来查找先前库并将符号绑定到特定地址。另一种类型的模块间分支是因为虚拟动态链接共享对象(virtualdynamically-linkedsharedobject,VDSO)机制,该机制用于加快syscall调用。例如,gettimeofday()通常会引起VDSO函数调用而不是库调用。VDSO段中的函数的优先级高于库。在200中,当生成模块内CFG边时,每个直接调用/跳转指令具有一个准确的传出目标,并且每个条件分支具有两个可能目标。对于间接调用,使用TYPEARMOR的use-def和活跃度分析的目标会受到限制,并且将返回指令以调用/返回匹配等方式连接到调用站点之后的有效返回地址。如果上述方法不能成功定义CFG边,则依赖对底层二进制框架的分析来保守地解决间接跳转。生成受保护进程100的保守CFG定义所产生的另一个问题是处理尾调用优化。通常在函数(例如fun_b)的最后部分中会发出尾调用。尾调用重用当前堆栈帧并使用“跳转”命令,而不会调用目标函数(fun_c)并假设其被当前函数(fun_b)的调用者(fun_a)调用。在这种情况下,即使没有从fun_a到fun_c的调用,fun_c的返回指令也应该回到fun_a。生成保守CFG定义中的对应边的过程通过模拟目标函数的执行来检测和处理尾调用。在模拟期间,按顺序执行分支指令,并且收集针对函数条目的任何过程间跳转指令。此外,将这些函数的返回指令连接到最初调用站点之后的返回地址。继续按顺序执行并记录跳转,直到遇到特定的停止条件。图3A示出了保守CFG的一示例,目的是与下文详细描述的在210中提供的对应ITCCFG定义的块和边的简化集合进行比较。如图3A中提供的说明性示例所示,基本块通过作为边的直接或间接分支彼此连接。在该说明性示例中,每个定义的边与源块(例如BB-4)的出口地址和目标块(例如BB-7)的入口地址相关联。继续参考图2,在210中,对保守CFG定义的解析提供了包含一组记录的ITCCFG定义,这些记录的格式与该组处理器核114提供的处理器跟踪数据包兼容(例如,便于直接比较处理器跟踪数据包中的字段)。在200中生成的保守CFG定义为英特尔的IPT处理器嵌入功能生成的不兼容已编码(压缩)处理器踪迹。在210中,进一步处理200中提供的保守CFG定义输出以生成一组定义的边,这些边与英特尔的IPT功能的输出兼容,英特尔的IPT功能仅为间接分支提供处理器跟踪数据包。英特尔的当前IPT实现方式为特定的流改变指令(changeofflowinstruction,CoFI)类型生成相应的数据包。IPT生成的处理器跟踪数据包中只有两种支持基于CFI实施的检查:(1)指示是否采用了条件分支的TNT处理器跟踪数据包,以及(2)记录间接分支的目标地址的TIP数据包。在一说明性示例中,在生成ITCCFG期间,仅支持TIP处理器跟踪数据包,以便:(1)避免路径爆炸,以及(2)支持快速地在线搜索一组相对较小/易于扫描的ITCCFG边定义记录。折叠所有具有直接类型的边,使得间接分支的目标基本块彼此连接,每个边将一个间接目标基本块的入口地址与另一个间接目标基本块的入口地址相关联。现请关注图3B,图3B表示210中通过处理输入保守CFG定义(图3A)而提供的ITCCFG定义。为简单起见,将受保护进程100内的块标识为“BB-n”,其中“n”对应于图3A、3B和3C中提及的第n个基本块。在该说明性示例中,图3A包括直接边和间接边。在210中处理保守CFG以提供IPT兼容边定义(在图3B中描绘)仅涉及考虑为至少一个间接边的目标的基本块。例如,参见BB-2(从BB-1传入的间接边的目标基本块)。而BB-4不是任何间接边的目标。因此,图3B的ITCCFG定义中存在图3A中编号为2、3、5、7、9、10的基本块(basicblock,BB)。这些块在本文中称为间接目标基本块(indirecttargetbasicblock,IT-BB)。在源/目标基本块之间的边重连接期间,如果O-CFG中的路径中存在一个间接边,则每个边从一个IT-BB重新关联到最近的IT-BB。例如,在从BB-3到BB-9的O-CFG中,从BB-6到BB-9存在一个间接边,因此,在图3B的ITCCFG定义示例中,存在连接BB-3到BB-9的一个边。而在OCFG中从BB-3到BB-10的路径中没有间接边,所以在ITCCFG中BB-3未连接到BB-10。因此,如果从一个IT-BB到另一个IT-BB没有间接分支,则在运行时期间IPT将不会生成TIP数据包,并且即使两个IT-BB都是IT-BB并由直接边连接,这两个IT-BB之间也应该无连接。此外,由于TIP数据包揭露了间接分支的目标存储器地址,因此(在210中处理210的保守CFG输出时提供的)ITCCFG定义的边将IT-BB的入口地址相互连接,而不是如图3A所示,将一个IT-BB的出口与另一个IT-BB的入口连接起来。例如,图3B中的ITCCFG定义中剩下(保守CFG的最初10个基本块中的)6个IT-BB。重要的是,重新连接图3B中的ITCCFG定义的边,以便在210中提供的ITCCFG定义中定义的边上可以直接搜索IPT在运行时生成的TIP数据包流。针对210中生成的ITCCFG定义的准确性,假设在随机选择的时间记录BB-x的入口地址,则BB-x必须是IT-BB之一,否则没有针对它的间接分支,从而不会根据IPT的跟踪方案来跟踪TIP数据包。现假设在紧接着的下一个时间记录另一个BB-y的入口地址,则应证明ITCCFG中存在一条连接BB-x和BB-y的边。通过简化,如果ITCCFG中不存在从BB-x到BB-y的边,这意味着O-CFG中从BB-x到BB-y的路径中没有间接分支的边,则不应执行或跟踪BB-y。因此,对于IPT跟踪的任何两个连续的TIP数据包,ITCCFG中必须有一个边来表示此控制流,否则会发生一些异常。在220中,使用动态模糊测试训练(例如,将随机调用数据提供给函数调用并观察得到的调用模式)结果,通过为ITCCFG定义内的每个ITCCFG边分配信用(可信度)值和TNT信息,来标记210中提供的ITCCFG定义的边。虽然ITCCFG允许直接搜索IPT踪迹,这解决了执行在线CFI实施所需的处理速度的问题,但是210中提供的ITCCFG仍然存在两个安全问题:粗粒度CFI和精度损失。关于粗粒度CFI,运行时流检查期间仍然存在由粗粒度CFI实施引起的大量漏报(未能识别恶意代码的执行)。此外,由保守CFG定义引起的粗粒度CFI实施会导致每个分支的合法目标过多,从而导致旁通保护以及检测不到恶意攻击。关于精度损失,由于CFG粗化,210中提供的ITCCFG定义可能会削弱保守CFG提供的安全性。这个问题可以使用下述等式(1)中总结的称为平均允许间接目标(AverageIndirecttargetsAllowed,AIA)的度量来说明:其中n是间接分支指令的数量,Ti是第i个间接分支指令的允许目标的集合。直观而言,AIA越小表示CFG定义越精确。因此,AIA可能是衡量CFI实施力度的最合适度量之一,尤其是当受保护软件涉及大量代码库时。考虑图4中示出的保守至ITCCFG重构示例。在保守CFG中,AIA为2。在ITCCFG中,AIA为3,这意味着ITCCFG定义不如原始定义精确。在本示例中,在重构保守CFG来绘制ITCCFG之后,BB-2和BB-3的允许目标的数量从2变为3。这种精度减损是由于缺少可能使控制流分叉的直接分支信息。能够使执行流分叉的唯一可能直接分支是条件分支,在本具体示例中为从BB-1到BB-2或BB-3的采用或未采用(TakenorNon-Taken,TNT)分支。ITCCFG定义会删除这些边以避免路径爆炸。在220中,ITCCFG配置的这一缺点通过对210中提供的ITCCFG进行模糊测试分析来弥补。幸运的是,该TNT信息由IPT跟踪,IPT可用于在训练阶段加强ITCCFG。在220中,执行(模糊测试)训练阶段以生成一组信用(可信度)标签值和更多TNT信息,将这些标签值和TNT信息添加到210中在ITCCFG中定义的边记录中。是否为某个边标记高信用(可信度)值的决定取决于在模糊测试训练中是否遇到对应于该边的处理器跟踪数据包。考虑到实现高覆盖率以最小化上下文敏感度高的分析的要求,在220中,生成覆盖型的类似模糊测试的一组输入以用于动态训练。模糊测试训练是识别实景受保护进程中的漏洞的高效方法。模糊测试涉及尽可能多地生成随机选择的数据。然后将随机选择的数据用作训练受保护进程的输入——这是一种用于识别基本块之间可能的过程流路径以及触发潜在安全问题的暴力破解方法。在说明性示例中使用模糊测试而非其它动态技术(例如,符号执行)是因为模糊测试易于部署且实用。不过替代性实施例中考虑了将信用(可信度)值分配给ITCCFG的边记录的其它形式的动态训练。例如,模糊测试训练包括以下三个步骤:步骤1:在QEMU中运行被训练应用,QEMU是执行硬件虚拟化的开源托管虚拟机监视器,在用户仿真模式下在QEMU之上实现插桩逻辑。插桩负责发现由输入引起的任何新状态转变。步骤2:提供一些初始测试用例并将其存储到一个队列中。逐个获取队列中的测试用例,并对其进行变异以使用均衡的各种模糊测试策略生成新的测试用例。将所得的测试用例依次馈送到在QEMU中运行的受保护进程软件。如果任何变异的测试用例导致了QEMU观察到的新状态转变,则将其添加到队列中以用于后续变异。此阶段将生成可能会触发不同路径探索的测试用例。步骤3:收集步骤2中生成的测试用例,并将其用作输入,以馈送到在真实硬件上运行的被训练应用,利用IPT跟踪其执行流,以及基于模糊测试分析中提供的处理器跟踪数据为220中提供的ITCCFG定义中的边标记高信用值(指示可信边)。在220中为边标记信用值可以针对不同需求而变化。例如,可以使用不止两个级别的信用值,通过基于在训练阶段中遇到特定边的次数来分配各个值的方式来标记边。在最简单的情况下,当每个边被分配一个高信用值或低信用值时,使用基于二进制的标签方案。图3C说明性地描绘了220中(模糊测试)训练产生的标记后ITCCFG定义边。在特定说明性示例中,除ITCCFG定义中从BB-2到BB-7的边之外的所有边都被标记高信用值,并且将在训练阶段中获得的TNT数据包的序列与对应的边相关联。该TNT信息很重要,因为通过直接分叉信息,本文描述的CFI实施操作能够防止攻击者减少AIA。分配训练受保护进程所产生的信用(可信度)值以识别和移除210中的处理所产生的未使用间接边,这克服了因重构图4中所示的保守CFG而导致AIA增加这一潜在问题。重要的是,模糊测试训练只是可用于为210中提供的ITCCFG定义的各个边分配信用值的各种潜在操作之一。所有这些替代方案会根据本文所述的CFI实施机制和方法的各种实现方式来考虑。描述完CFI实施机制和方法的示例性架构和配置,现请关注图5,图5概括了本文描述的所配置的CFI实施机制(内核模块112)的运行时操作。通常,在执行受保护进程100所涉代码的计算机系统的在线操作期间执行的CFI实施方法包括混合CFI检查机制,该机制包含经过快速路径模块118的相对快速(主要)路径,该路径尝试将每个收到的从存储器116(缓冲器)检索到的处理器跟踪(例如IPT)数据包记录匹配到在已标记信用的ITCCFG定义110中表示的对应可信边。如果在IPT跟踪记录与ITCCFG定义110中的可信边记录之间达成了匹配,则放行处理器踪迹(即,不是安全威胁)。但是,如果在IPT处理器跟踪数据包与可信的ITCCFG边记录之间未达成匹配,则遇到了可疑/异常处理器踪迹(两个块之间的程序流)。若在快速路径模块118的操作期间未达成匹配,则将CFI执行的操作转移到相对较慢的(辅助)路径,此时,信用值低的对应ITCCFG记录与运行时处理器踪迹相匹配。考虑到绝大多数运行时处理器跟踪数据包最初都被快速路径模块118的操作“拒绝”或“放行”。如果处理器跟踪数据包与已标记信用的ITCCFG定义中的任何边都不匹配,则拒绝该处理器跟踪数据包。然而,如果跟踪数据包与已标记信用的ITCCFG定义110中包含的可信边匹配,则快速路径模块118“放行”该处理器跟踪数据包。仅仅与已标记信用的ITCCGF定义110中的不可信(低信用值)边记录匹配的处理器跟踪数据包会由慢速路径模块119进行开销很大的精确/彻底处理器跟踪处理。如果经过适当的训练,则基于已标记信用的ITCCFG的处理会将针对极小部分提供的处理器跟踪记录的处理器跟踪数据包处理转移到慢速路径模块119。慢速CFI实施机制的这种条件执行仅限于对在快速路径处理期间与已标记信用的ITCCFG定义110中的低可信度边匹配的处理器跟踪数据包执行,并提供了一种高效且精确的CFI实施机制,以检测对使用受保护进程100的计算机系统的代码重用攻击。结合先前讨论的图1,下面结合图5的概括步骤描述流检查器117对从存储器116检索到的处理器跟踪数据包执行的混合处理。在说明性示例中,在受保护进程100的操作期间,CFI实施依赖于内核模块112来保护计算机系统。如图1所示,内核模块112通常执行以下操作:(1)配置一组处理器核114(例如IPT)以在受保护进程100的执行流中生成处理器跟踪数据包,(2)拦截特定安全敏感系统调用以触发后续处理器跟踪数据包处理操作,以及(3)在快速和/或慢速路径中检查跟踪的执行流。图5中概述的操作通过与图1中描绘的系统的其它识别的组件交互来与内核模块112的操作联系起来。在操作图5中概述的步骤之前,根据内核模块112的配置命令操作的该组处理器核114启动并保持对受保护进程110的控制流的跟踪。针对处理器跟踪数据包的生成,该组处理器核114的操作包括以下两个基本步骤:步骤1:启动对数据包生成的控制操作。有多种控制操作用于确定是否可以生成分支数据包。控制操作由一组IA32_RTIT_*系列的特殊模块寄存器(model-specificregister,MSR)等来启动和配置。在说明性示例中,最重要的是IA32_RTIT_CTLMSR寄存器,其是用于跟踪数据包生成的主要启动和控制MSR。内核模块112设置TraceEn和BranchEn比特以启动该组处理器核114生成基于CoFI的处理器跟踪数据包。该寄存器还清除OS比特并设置用户比特以便专门跟踪用户级控制流。同时,寄存器还设置CR3Filter比特以启动CR3过滤机制,并将IA32_RTIT_CR3_MATCHMSR配置给受保护进程的CR3。最后,该寄存器清除FabricEn比特以直接将跟踪输出发送到存储器116,并设置ToPA比特以启动物理地址表(TableofPhysicalAddresses,ToPA)输出方案。IA32_RTIT_CTLMSR的其它比特保留为默认值。步骤2:配置用于跟踪输出的存储区域。在该说明性示例中,英特尔的IPT的跟踪输出可以用于根据两种输出方案之一进行操作:(1)物理地址空间的单个连续区域,或(2)物理存储器的一组大小可变的区域,这些区域通过指针表连接在一起。在特定示例中,内核模块112使用上文称为物理地址表(TableofPhysicalAddresse,ToPA)的后一种方案,并将跟踪输出存储到具有两个区域的一个ToPA中。选择流检查的适当触发点会确定内核模块112的操作提供的保护的及时性和性能。一种直观的方法是触发性能监控中断(PerformanceMonitoringInterrupt,PMI)并检查中断区域中的所有数据包。该方法确保会检查受保护进程110的所有执行流。但是,它可能会带来很大的开销。因此,在说明性示例中,内核模块112在指定的安全敏感端点处执行流检查。虽然这些端点是可配置的,但是内核模块112预定义了一些默认端点以提供合理的安全保证。例如,预定义端点主要包括指定的安全敏感syscall,例如execve、mmap、mprotect。例如,在图5中概括的内核模块112的运行时操作的步骤500中,内核模块112的系统调用拦截器115通过临时修改syscall表并为每个拦截的syscall安装备用syscall处理程序来拦截安全敏感系统调用(syscall)。每当调用这种syscall时,新安装的处理程序首先通过CR3、进程名称或进程ID等信息来检查受保护进程100是否调用了该syscall。如果是,则开始检查;否则,新安装的处理程序只是将系统调用的执行转发(传递)到对应的原始syscall处理程序以进行常规处理。拦截的安全敏感syscall可以来自受保护可执行二进制文件102或共享库集合104。因此,系统调用拦截器115负责检查可执行和共享的库的执行流。如果流检查失败,则内核模块向进程发送SIGKILL信号,并向管理员或用户报告检测到控制流违规行为。在510中,调用快速路径模块118以通过如下操作处理拦截的系统调用:在从存储器116检索到的对应处理器跟踪数据包与已标记信用的ITCCFG定义110的已标记信用的边之间进行匹配操作。快速路径模块118基于以下项验证与拦截的系统调用对应的处理器跟踪数据包:处理器跟踪数据包与已标记信用的ITCCFG定义110的已标记信用的边记录的比较结果。快速路径模块118先对存储在存储器116的ToPA区域中的跟踪数据包进行快速解码。在该阶段,快速路径模块118仅解析处理器跟踪数据包(基于IPT格式)并提取TIP和TNT数据包,而不参考指令流抽象层的二进制文件。借助于用作解码器的同步点的数据包流边界(packetstreamboundary,PSB)数据包,该过程可以并行执行以进一步加快解码。另一方面,无需对整个ToPA缓冲区进行解码。相反,快速路径模块118仅检查指定数量的TIP数据包。另外,考虑到应对在一个模块中进行非法入侵并在另一模块中调用系统调用的攻击,会确保内核模块112对跨越多个模块的存储区域的TIP数据包进行解码,并且其中至少一个存储区域在受保护的进程100内。在获取在运行时收集的与拦截的系统调用对应的间接目标地址之后,快速路径模块118尝试将这些地址与已标记信用的ITCCFG定义110中的边记录的地址进行匹配。具体而言,内核模块112维护已标记信用的ITCCFG110中表示的边中的源节点的数据结构阵列。每个边的源节点具有相关联的计数字段,该计数字段指示其传出边的数量和指向其目标地址阵列的开始处的指针。例如,根据地址对所有阵列进行排序,使得在匹配期间快速路径模块118可使用二进制搜索以减少时长。为进一步加快匹配过程,内核模块112预留单独的存储器,专门用于存储源节点及其通过高信用边连接的目标和TNT信息,并且在510中将该存储器用作快速路径模块118进行快速匹配的高速缓存。在快速路径检查中,对于记录在TIP数据包中的每个地址,快速路径模块118首先通过搜索源节点的阵列来检查该地址,然后检查其后继地址是否可以在其目标地址的阵列中找到。在快速路径模块118完成(无论成功与否)510中的匹配尝试后,控制操作转到520。在520中,如果两个地址检查中的任一个未能在处理器跟踪数据包地址与已标记信用的ITCCFG110中的边的地址之间提供匹配,则快速路径模块118的匹配尝试失败,检测到了代码重用攻击,并且控制操作转到530:发出警报以调用对应的系统调用处理程序来调用对被拒绝的已拦截系统调用的进一步处理,以防止执行恶意的系统调用。然而,如果在已标记信用的ITCCFG110中找到了匹配的边条目,则控制操作转到540。在540中,快速路径模块118访问与匹配的边条目相关联的信用值。如果该信用值满足用于指示处理器跟踪数据包与可信边之间的匹配的阈值,则控制操作转到550:快速路径模块118向对应的系统调用处理程序发出响应,以指示系统调用可以执行。否则,如果在540中处理器跟踪数据包匹配到信用值不满足可信度阈值的边,则控制操作转到560。在560中,将慢速路径模块119的操作调用给匹配到下述项的系统调用:在与已标记信用的ITCCFG定义110中的且在540中确定具有低信用值的边记录。将流检查转发到慢速路径引擎。例如,除了快速路径模块118在快速匹配中使用的TIP和TNT数据包之外,慢速路径模块119的输入还包括受保护进程100的二进制文件。例如,由慢速路径模块119执行的分析是英特尔对IPT解码器库的参考实现,其使用指令流抽象层,逐指令解析二进制文件,并且合并跟踪的数据包以进行完全解码。在说明性示例中,每当慢速路径检查被触发时,内核模块112就向等待的用户级进程发出回调以结束该任务。会基于特定系统所需的各种策略和保护级别而考虑针对540中指示的可疑恶意系统调用的各种慢速路径处理操作。在慢速路径模块119中实施的策略可以非常精确,因为内核模块112能够捕获整个执行流并进一步执行上下文敏感分析。在非常基础的层面上,内核模块112确保拦截的系统调用的处理跟踪数据包符合具有细粒度前向边分析的CFI实施的保守CFG实现方式。此外,对于后向边分析,影子堆栈通过指令流抽象层来维护,并与跟踪的数据包进行比较以针对返回分支执行单目标策略。虽然所提供的说明性示例是结合包括英特尔Skylake处理器的特定处理器环境而描述,而Skylake处理器又包括内置IPT功能,但所描述的混合处理也适用于各种各样的处理器跟踪提供器。在IPT处理环境中,与关键系统调用相关联的处理器跟踪记录会在CFI检查期间进行分析/比较。本文描述的CFI实施机制显然可用于防御类似ROP的控制流劫持攻击。重要的是,混合方法与精心制定的ITCCFG定义预配置相结合能使CFI实施的性能仅小幅下滑。此外,混合CFI实施可以通过增加硬件辅助快速解码器等硬件扩展来进一步减少开销。总之,混合CFI实施机制,包括用于处理器踪迹和可信CFG边的快速路径匹配的预配置ITCCFG定义,为CFI实施提供了一种完全透明的机制,包括在程序的在线操作期间检测CFI违规行为,其中该程序包括码块之间的有限可管理数量的可信调用。首先通过将完整的CFG定义适配于处理器跟踪生成器(例如ITC)提供的输出的形式来绘制ITCCFG。通过在ITCCFG的模糊测试训练期间使用随机数据输入来动态训练最初绘制的ITCCFG,准确性和效率进一步增强,该模糊测试训练能够(使用信用和分支获取信息)识别和标记预配置的ITCCFG定义中表示的可信边(一个或多个程序的码块之间的程序控制流)。本领域技术人员应理解,本发明实施例可以作为方法、系统或计算机程序产品来提供。因此,本发明可以使用仅硬件实施例、仅软件实施例或具有软件和硬件的组合的实施例的形式。此外,本发明可以使用在包括计算机可用程序代码的一个或多个计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实现的计算机程序产品的形式。结合根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述了示例。应理解,计算机程序指令可用于实现流程图和/或框图中的每个过程和/或每个框以及流程图和/或框图中的过程和/或框的组合。这些计算机程序指令可以提供给通用计算机、专用计算机、嵌入式处理器或任何其它可编程数据处理设备的处理器以生成机器,使得任何其它可编程数据处理设备的计算机或处理器执行的指令生成一种装置,该装置用于实现流程图中的一个或多个过程中的和/或框图中的一个或多个框中的特定功能。这些计算机程序指令还可以存储在计算机可读存储器中,该计算机可读存储器能指示计算机或任何其它可编程数据处理设备以特定方式工作,使得存储在计算机可读存储器中的指令生成包括指令装置的制品。指令装置实现流程图中的一个或多个过程中的和/或框图中的一个或多个框中的特定功能。这些计算机程序指令也可以加载到计算机或其它可编程数据处理设备上,以便在计算机或其它可编程设备上执行一系列操作和步骤,从而产生计算机实现的处理。因此,在计算机或其它可编程设备上执行的指令提供用于实现流程图中的一个或多个过程中的和/或框图中的一个或多个框中的特定功能的步骤。本文引用的所有参考文献,包括出版物、专利申请和专利,均以引用的方式并入本文本中,犹如每个参考文献都被单独具体地指出被引用且进行了完整的阐述。描述本专利申请的上下文中(尤其是所附权利要求的上下文中)使用的术语“一”、“一个”和“所述”以及类似的指代词应被解释为涵盖单数和复数两者,除非另有说明或与上下文明显矛盾。术语“包含”、“具有”、“包括”和“含有”应被解释为开放式术语(即,是指“包括但不限于”),除非另有说明。本文引用的数值范围仅旨在用作单独提及属于所述范围内的每个单独数值的速记方法,除非在此另有说明,并且每个单独的数值并入到本说明书中如同它被单独地在此引证一样。本文所述的所有方法可以以任何适当的顺序来执行,除非本文中另有说明或或与上下文明显矛盾。使用本文提供的任何及所有示例或示例性语言(例如“例如”)仅是为了更好地说明本专利申请,并不对本专利申请的范围产生限制,除非另有说明。本说明书中的任何语言都不应理解为指示任何非说明元素为实践本专利申请所必需的要素。本文描述了发明人已知的用于执行本专利申请的示例性实施例。对于本领域普通技术人员而言,在阅读先前的描述后,这些实施例的变体将变得显而易见。本发明人期望熟练的业内人士适时采用此类变体,并且本发明人打算以不同于本文中具体描述方式的其它方式来实践本专利申请。因此,本专利申请包括随附权利要求书中阐述的主题在附属权利要求中叙述的主题的所有变化和等效物。此外,本专利申请涵盖上述要素以及其所有可能变体的任何组合,除非本文另有指示或与上下文明显矛盾。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1