利用影子堆栈的已验证堆栈跟踪生成和加速的基于堆栈的分析的制作方法
未命名
08-14
阅读:71
评论:0
利用影子堆栈的已验证堆栈跟踪生成和加速的基于堆栈的分析
背景技术:
1.计算机可执行指令的执行可能产生意外的后果,例如由于由程序员在编程中生成的故障或错误,异常或其他类似硬件失灵,或其组合。这种意想不到的后果被通俗地称为“漏洞”。类似地,为了标识这种意外的后果的原因,并对其进行补救以避免这些意外的后果未来再次发生,对漏洞的分析通俗地称为“调试”。调试通常需要以一个或多个数据结构的形式从执行堆栈中获得信息,这些执行堆栈表示由微处理器(例如中央处理单元(cpu))执行单个指令所保留的信息。从堆栈中获得的数据通常被称为“堆栈跟踪”,并提供有价值的信息来帮助调试。一条这样的数据是通过执行指令(如调用指令)而放置在堆栈上的返回地址,其导致执行跳转到下一个后续指令以外的指令。
2.漏洞通常会导致或与数据损坏相关联,数据损坏可能包括堆栈数据的损坏。当相关数据(如堆栈上的返回地址)损坏甚至完全丢失时,调试非常困难。此外,尤其是在对大量数据执行时,调试是低效的。更具体地说,作为调试的一部分,利用称为“展开”的反向工程过程,从堆栈跟踪中包含的信息生成一个或多个返回地址。尤其是在重复执行时,展开会消耗处理器周期并导致低效。
3.在某些情况下,例如在云计算环境中,漏洞发生时无法执行调试。相反,大量数据的集合将被执行,希望这些数据包含与执行调试相关的信息,并且将来对这些数据的分析将能够成功地调试漏洞。这样的数据集合通常被称为数据的“转储”,并且利用自动化机制来分类这样的转储,以便集中精力,从而提供更有效的后续人类分析。例如,对一个或多个数据转储的分析可能会揭示与特定漏洞相关联的一组特定特性。其他数据转储可以被对是否存在这些特性评估,从而使数据转储能够在显示已知漏洞特性的数据转储和表示先前未标识或未查看的错误(例如,先前未知的漏洞)的数据转储之间进行分类。然后,人类的努力可以集中在未知的漏洞上。如所示出的,为检测特性而对数据转储进行的评估包括堆栈跟踪的展开是低效的。因此,对大量数据转储(如在云计算环境中将被生成的数据转储)的评估和分类会消耗大量的处理资源,包括cpu周期、存储器和其他类似的计算资源。
技术实现要素:
4.通过利用影子堆栈(诸如为防止恶意软件和计算机安全而实现的硬件保护副本堆栈)中包含的信息,可以生成已验证堆栈跟踪。影子堆栈包含返回地址,这些地址无需展开传统调用堆栈即可获得。这样,基于返回地址信息的分类可以更快速和更有效地执行,并且减少了处理资源的利用。此外,可以执行已验证堆栈跟踪的生成,这样的已验证堆栈跟踪包含已知正确且未损坏的返回地址。返回地址能够从传统调用堆栈中读取,或者从中导出,然后通过与来自影子堆栈的对应的返回地址相比较被验证,或者可以直接从影子堆栈中被读取。
5.提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不
旨在用于限制所要求保护主题的范围。
6.参考附图进行的以下详细描述将使附加特征和优点变得明显。
附图说明
7.结合附图,以下详细描述可以最好地被理解,其中:
8.图1a-图1b是示例性的实现影子堆栈的系统的系统图;
9.图2是示例性的利用影子堆栈数据生成已验证堆栈跟踪的系统图;
10.图3是示例性的基于其中包含的影子堆栈信息的数据的转储的分类的系统图;
11.图4是示例性的利用影子堆栈数据生成已验证堆栈跟踪的流程图;
12.图5是示例性的基于其中包含的影子堆栈信息的数据转储的分类的流程图;以及
13.图6是示例性的计算设备的框图。
具体实施方式
14.以下描述涉及将影子堆栈数据用于除计算设备的保护和安全之外的目的,即是,更有效和更准确地分析在执行计算机可执行指令期间发生的意外的后果。通过利用包含在影子堆栈中的信息,已验证堆栈跟踪能够被生成。影子堆栈包含返回地址,这些地址无需展开传统调用堆栈即可获得。这样,基于返回地址信息的分类能够更快速和更有效地被执行,并且减少了处理资源的利用。此外,能够执行已验证堆栈跟踪的生成,这样的已验证堆栈跟踪包含已知正确且未损坏的返回地址。返回地址可以从传统调用堆栈中读取,或者从中导出,然后通过与来自影子堆栈的对应的返回地址进行比较来验证,或者可以直接从影子堆栈中被读取。
15.虽然不是必需的,但下面的描述将在由计算设备执行的诸如程序模块之类的计算机可执行指令的一般环境中。更具体地,除非另有指示,否则描述将参考由一个或多个计算设备或外围设备执行的操作的动作和符号表示。因此,可以理解,这种有时被称为计算机执行的动作和操作,包括由处理单元对以结构化形式表示数据的电信号的操作。这种操作转换数据或将其维护在存储器中的位置,从而重新配置或以其他方式改变计算设备或外围设备的操作,这种方式很容易被本领域技术人员所理解。维护数据的数据结构是具有由数据的格式定义的特定属性的物理位置。
16.通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。此外,本领域技术人员将理解,计算设备不必局限于传统的个人计算机,而是包括其他计算配置,包括服务器、手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、网络pc、小型计算机、大型计算机等。类似地,计算设备不必限于独立的计算设备,因为这些机制也可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
17.参考图1a和图1b,其示出了示例性的系统101和102,为以下描述提供了环境。更具体地,示例性的系统101和102示出了影子堆栈(例如示例性的影子堆栈170)的预期操作,即防止恶意计算机可执行指令的执行,并以其他方式保护计算设备。
18.首先转到图1a中所示的示例性的系统101,示例性的系统101被示出为包括计算设备,例如示例性的计算设备110。示例性的计算设备包括一个或多个基于微处理器的处理单
元,例如普遍存在的中央处理单元(cpu)。一个或多个cpu由图1a所示的示例性的cpu 120表示。在现代计算设备上,在多个执行线程(例如示例性的线程140)的环境中执行计算机可执行指令。当诸如示例性的线程141的线程将由cpu 120执行时,将该线程从诸如示例性的存储器130的计算机可读存储介质加载到cpu 120上。在示例性的系统101中,由动作145示出了将示例性的线程141加载到cpu 120上。
19.由cpu 120执行线程需要执行各个计算机可执行指令,例如示例性的计算机可执行指令150。cpu 120的指令指针(例如示例性的指令指针121)标识要被执行的指令。在示例性的系统101中,由指令指针121标识的示例性的指令151可以是调用指令,或导致计算机可执行指令150执行从指令151跳转156到不同的、非连续的指令(例如示例性的指令157)的其他类似指令。作为调用指令151的一部分,诸如示例性的返回地址161的返回地址被写入到诸如示例性的调用堆栈160的调用堆栈上,该诸如示例性的调用堆栈160的调用堆栈与在执行线程141的环境中计算机可执行指令150的执行相关联。如本文所用,术语“堆栈”本身是指以先入后出格式临时存储数据的任何硬件或软件实现的结构。在诸如cpu 120之类的处理单元的环境中,本文使用的术语“堆栈”是指支持用于临时接收、存储和后续提供返回地址、函数本地数据、函数参数和其他类似信息的硬件处理单元。本文使用的术语“调用堆栈”是指包括至少一个或多个返回地址的数据结构。“调用堆栈”还可以可选地包括附加参数、函数本地数据和其他类似信息。本文使用的术语“堆栈跟踪”是指通过发现放置在调用堆栈上的返回地址的值来重建执行流。“堆栈跟踪”还可以包括通过发现放置在调用堆栈上的其他值(如附加参数、函数本地数据和其他类似信息)来重建执行流。术语“堆栈跟踪”和“回溯”均具有与本文所用含义相同的含义,并且动词“堆栈跟踪”、“回溯”和“堆栈展开”均具有与本文所用含义相同的含义,即生成前述的“堆栈跟踪”。将返回地址161写入调用堆栈160由动作155示出,动作155作为执行指令151的一部分由cpu 120执行。在示例性的系统101内,返回地址161被示出为标识指令152的地址。一旦计算机可执行指令的执行(在指令151的执行之后跳转到该指令)完成,该执行将返回到由返回地址161指定的地址,并从该地址继续指令。因此,在示例性的系统101中,执行将返回到计算机可执行指令152,如返回地址161所标识的,由cpu 120对计算机可执行指令150的执行将从那里继续。
20.因为诸如示例性的调用堆栈160的堆栈是在读取/写入存储器中维护的数据结构,所以存储在其中的数据会被重写。在某些情况下,这种重写是恶意执行的。例如,如果修改返回地址(例如示例性的返回地址161)以标识不同的计算机可执行指令(例如恶意计算机可执行指令),则用于防止执行此类恶意指令的许多已知机制将被绕过,尽管这些机制努力阻止其执行,但恶意指令仍将被执行。
21.一种修改堆栈部分(包括存储在堆栈上的返回地址)的机制,利用了设计糟糕的计算机可执行指令,这些计算机可执行指令允许修改数据,而无需验证大小或边界。更具体地,恶意计算机可执行指令试图利用允许的命令来存储值,试图存储的值的大小大幅度大于由现有机制所期望或允许的大小。在这种情况下,如果实际上将如此大的值写入存储器,它将超过为其留出的存储器的部分,并将“超出”该部分,从而导致对后续存储器的部分的修改。如果一个这样的后续部分包括堆栈的返回地址,则返回地址将被修改,包括被修改以标识存储器中的新位置。
22.为了防止这种超出机制被用来绕过其他保护并触发恶意计算机可执行指令的执
行,现代cpu和其他类似的微处理器已经被修改,以包括保护写入堆栈的返回地址的机制,包括通过基于硬件的保护。这样的保护机制包括利用第二堆栈数据结构,其内容被保护以免被通过基于硬件的保护不当覆盖。这种第二堆栈数据结构被称为“影子堆栈”。
23.回到图1a,示例性的cpu 120包括所谓的“控制流强制技术”或“cet”(也称为“硬件强制堆栈保护”或“hsp”),并且,因此,包括利用影子堆栈的硬件机制,例如示例性的影子堆栈170。此外,如通过保护125所示出,存储在影子堆栈170中的数据是硬件保护的。当具有控制流强制技术的cpu执行将返回地址放置在调用堆栈上的指令(例如执行示例性的调用(call)指令151),导致将返回地址161放置在示例性的调用堆栈160上时,cpu 120进一步将该返回地址161复制到影子堆栈170。如示例性的系统101中所示,这样的副本175导致返回地址161的副本,以返回地址171形式被存储为影子堆栈170的一部分。尽管被示出为从调用堆栈160复制,但通过由cpu 120执行调用指令151,在将返回地址161写入调用堆栈160的同时,返回地址171能够近似或准确地被写入影子堆栈170。
24.转到图2b所示的示例性的系统102,示出了利用影子堆栈170及其上存储的数据来防止执行恶意计算机可执行指令的执行,并进一步保护计算机系统。更具体地,在示例性的系统102中,通过调用指令151的执行而放置在调用堆栈160上的返回地址161(如示例性的系统101所示),已经被指向或以其他方式标识恶意计算机可执行指令(例如示例性的恶意计算机可执行指令180)的恶意地址182替换。
25.如前所述,这种恶意地址182可能是故意(例如,代码混淆技术)或由于漏洞(例如,数据写入另一目的地的超出不是正确的范围界定、释放后使用漏洞或类型混淆漏洞)或其他类似机制,而已经被写入到调用堆栈160上的。在一些情况下,当调用堆栈160作为执行线程141的一部分被存储在存储器130中时(例如当在由cpu 120正在执行不同的执行线程的同时,执行线程141被临时存储在存储器130中时),将发生对调用堆栈160的修改。
26.执行线程141后续恢复到cpu 120,如动作146所示出,动作146能够导致使用计算机可执行指令(例如示例性的计算机可执行指令159)恢复执行。示例性的计算机可执行指令159可以是ret指令,它从调用堆栈160中“弹出”返回地址,并继续使用由返回地址标识的计算机可执行指令来执行。在系统101和102中所示出的特定示例中,如果在ret指令159执行时,返回地址161仍然存储在调用堆栈160上,则从调用堆栈160弹出返回地址161将导致计算机可执行指令150继续执行指令152,因为该指令是由示例系统101所示的返回地址161标识的。然而,在示例性的系统102中,示例性的恶意地址182不标识示例性的指令152,而是标识示例性的恶意计算机可执行指令180。因此,当执行ret指令159,并且从调用堆栈160中读取恶意地址182时,如动作185所示,过程将继续执行恶意计算机可执行指令180。
27.为了防止上述攻击矢量,示例性的cpu 120以影子堆栈170的形式实现上述cet(或hsp)。更具体地说,如通过示例性的系统101所示,将返回地址161写入调用堆栈160导致将相同的返回地址(在图1a和图1b中分配数字171,以表示它是不同的副本)写入影子堆栈170。后续,当指令(例如示例性的ret指令159)被执行时,在执行开始于调用堆栈160上标识的地址的计算机可执行指令之前,cpu 120将存储在调用堆栈160上的地址与存储在影子堆栈170上的对应地址进行比较。在示例性的系统102中,这样的比较190将恶意地址182与返回地址171(如所指示的,其是返回地址161的副本)进行比较,该恶意地址182被恶意插入到调用堆栈160中以代替先前存储的返回地址161。这样的确定揭示了恶意地址182不同于返
回地址171。然后可以例如通过生成错误来停止进一步的执行,并且可以执行中断,或可以执行其他类似的阻止进一步通过恶意地址182识别的指令。示例性的ret指令159从调用堆栈160接收地址182,并从由此标识的地址继续执行的这种阻止,在图1b中由箭头191以图形方式表示。
28.可以看出,影子堆栈是上述cet(或hsp)的一部分,其实现为防止恶意计算机可执行指令的执行的唯一目的,并保护计算机系统。然而,本文描述的机制将影子堆栈用于完全不同的目的。特别地,本文描述的机制利用影子堆栈来改进调试。如上所述,术语“漏洞”是指由程序员无意中执行计算机可执行指令所生成的后果,包括由于错误编程、不同计算机可执行指令集之间的意外交互、硬件故障以及在计算机可执行指令的执行中生成意外的后果的其他类似原因。
29.在执行“调试”时,标识漏洞原因的尝试通常包括重建调用堆栈和分析调用堆栈中的数据,因为这些数据可以指示在意外的结果发生时正在执行的计算机可执行指令、子例程、过程或其他类似构造。在没有调试符号的情况下,很难重建,因为必须猜测堆栈中的哪些值是返回地址。然而,即使使用调试符号,如果存在堆栈损坏,也可能无法重建,因为堆栈值(包括调用堆栈)可能与原始调用堆栈值无关。即使堆栈上只有一个调用堆栈值被覆盖,这也是可能的,因为可能很难或不可能准确地重建调用堆栈。并且不幸的是,意外的后果通常包括数据的损坏。因此,从调用堆栈获得的信息可能不准确,因为它可能已损坏、丢失或不准确,并且调用堆栈的重建可能是不可能的。
30.转到图2,其中所示的示例性的系统200示出了已验证堆栈跟踪生成组件,诸如示例性的已验证堆栈跟踪生成组件210,其生成已验证堆栈跟踪,诸如示例已验证堆栈跟踪220。具体地,已验证堆栈跟踪生成组件210利用来自影子堆栈170的数据,来验证由此生成的已验证堆栈跟踪220中呈现的至少一些数据(即返回地址)的正确性和准确性。
31.通过获得调用堆栈160上的数据来生成传统堆栈跟踪,诸如当在计算机可执行指令的执行期间发生意外的结果、异常或故障时。如示例性的系统200中所示,在计算机可执行指令的执行期间,对应的调用堆栈可以包括如上文所描述的返回地址。在图2的示例性的系统200中,示例性的调用堆栈160被示出为包括两个返回地址,即示例性的返回地址261和262。除了返回地址之外,诸如示例性的调用堆栈160的调用堆栈还可以包含诸如示例性的其他堆栈数据269的其他堆栈数据,其可以是通过执行其他计算机可执行指令而放置到调用堆栈160上的数据,包括分配给一个或多个变量、计数器或其他类似数据结构的值。如上所述,这样的其他堆栈数据269可能没有已经被复制到影子堆栈170的构造上,并在影子堆栈170内受到保护。然而,返回地址(例如示例性的返回地址261和262)将在影子堆栈170中具有对应的副本,即分别为示例性的返回地址271和272。
32.当生成已验证堆栈跟踪220时,已验证堆栈跟踪生成组件210通过比较从调用堆栈160获得的信息与影子堆栈170中的对应信息来验证该信息的正确性。更具体地,在返回地址(例如,示例性的返回地址261和262)的情况下,已验证堆栈跟踪生成组件210将这些返回地址与来自影子堆栈170的对应示例返回地址271和272进行比较。这种比较在图2中用图形表示出为比较211和212。根据一个方面,诸如在上述示例性的系统101的环境中,由cpu实现的硬件机制将被利用于以与当从调用堆栈读取返回地址时执行这种比较相同的方式,执行比较211和212。然而,根据另一个方面,比较211和212是经由软件执行的,例如通过现有的
软件可调用接口,通过该接口数据能够被从影子堆栈170获得。
33.如果比较(诸如示例性的比较211和212)揭示来自调用堆栈160的返回地址261和262与来自影子堆栈170的对应的返回地址271和272相同,则这些返回地址被包括在已验证堆栈跟踪220中。例如,比较211被示出为确定来自调用堆栈160的返回地址261与来自影子堆栈170的对应的返回地址271相同。这样的确定将从调用堆栈160返回地址261的供应221通知到由已验证堆栈跟踪生成组件210生成的已验证堆栈跟踪220。
34.相比之下,如果从调用堆栈160获得的返回地址的比较显示从调用堆栈获得的返回地址不同于来自影子堆栈的对应的返回地址,则可以将来自影子堆栈正确的返回地址作为已验证堆栈跟踪220的一部分提供。因此,例如,比较212被示出为确定来自调用堆栈160的返回地址262与来自影子堆栈170的对应的返回地址272不相同。例如,作为正在调查的漏洞的结果,返回地址262可能已经从最初放置在调用堆栈160上的返回地址变得损坏、修改、删除或以其他方式改变。然而,如上所述,因为影子堆栈170是硬件保护的,所以其上存储的数据(诸如返回地址272)没有改变。因此,返回地址272表示应该为调试目的而提供的正确返回地址。因此,揭示返回地址262不正确的比较212,通知从影子堆栈170返回地址272的提供222作为已验证堆栈跟踪220的一部分。因此,如图所示,已验证堆栈跟踪220包括来自调用堆栈160的数据,包括表示作为调用堆栈160一部分,但未由上述硬件实现机制在影子堆栈170中复制的数据的其他堆栈数据169。此外,已验证堆栈跟踪220还包括来自影子堆栈170的数据,包括例如返回地址272,从而纠正错误信息,例如作为调用堆栈160的一部分的示例性的损坏的返回地址262。
35.虽然在图2的示例性的系统200中示出为用已知的正确地址替换错误地址,但是在诸如示例性的比较212的比较揭示返回地址数据在调用堆栈160和影子堆栈170之间不同的情况下,已验证堆栈跟踪生成组件210能够实现替代机制。例如,了解差异是什么可能是有益的,因为由返回地址262经历的特定损坏、修改或其他类似的改变在调试中可能是有用的。在这种情况下,已验证堆栈跟踪生成组件210可以被设置为在已验证堆栈跟踪220中提供返回地址262和返回地址272两者。根据一个方面,返回地址272被明确地指示出为已知的正确地址,而返回地址262被另外提供用于进一步的调试信息。
36.在某些情况下,为了从存储调用堆栈160的值的位置获得返回地址,堆栈跟踪,也称为“堆栈展开”或“堆栈回溯”,可能必须被执行。基于通过在获得堆栈数据之前正在执行的计算机可执行指令所执行的处理,堆栈展开需要当前可从堆栈获得的信息的利用来解密特定信息,例如返回地址。这样的堆栈展开操作在计算上是昂贵的,因为它们消耗额外的处理器周期、存储器需求和其他类似的计算资源。
37.因此,根据一个方面,已验证堆栈跟踪生成组件210能够通过跳过调用堆栈160上的返回地址与影子堆栈170上的对应的返回地址之间的比较(例如示例性的比较211和212)来避免或最小化这种堆栈展开。相反,已验证堆栈跟踪生成组件210可以简单地直接从影子堆栈170获得诸如例如示例性的返回地址271和272的返回地址,而无需展开、参考或比较来自调用堆栈160的返回地址。已验证堆栈跟踪生成组件210简单地利用从已验证堆栈跟踪220中的影子堆栈170获得的返回地址。由于上述原因,已知从影子堆栈170获得的返回地址是正确的和未修改的,因此是未损坏的。
38.在生成已验证堆栈跟踪220时,已验证堆栈跟踪生成组件210可以可选地生成指示
230,该指示230指示已验证堆栈跟踪220包括其正确性已经通过参考影子堆栈170来验证的返回地址。图2中的动作231以图形方式示出了这种指示230的生成。指示230可以是文本指示的形式,其被呈现给使用已验证堆栈跟踪220执行调试的用户。备选地或附加地,指示230伴随着基于密码的指示符,该指示符通过参考影子堆栈170来证明已验证堆栈跟踪220中存在的返回地址的验证的真实性。
39.在一些情况下,可能希望最小化对从调用堆栈160获得的数据的处理,例如前面描述的用已知正确的来自影子堆栈170的对应的返回地址替换被确定为不正确的来自调用堆栈160的返回地址。在这种情况下,只有在达到数据损坏或不正确的阈值水平时,才能执行这种处理。例如,作为执行例如用返回地址272替换返回地址262的前兆,如动作222所示,已验证堆栈跟踪生成组件210首先确定来自调用堆栈160的返回地址(例如,示例性的返回地址261和262)有多少,不同于它们的在影子堆栈170中的对应的返回地址,诸如分别为示例性的返回地址271和272。仅当从调用堆栈160获得的返回地址中大于阈值数量或大于阈值百分比的返回地址与从影子堆栈170获得的相应返回地址不同时,才执行用来自影子堆栈170的返回地址替换来自调用堆栈160的返回地址的后续替换(例如,示例性的替换222)。
40.除了通过提供已知的正确数据和标识和/或校正已知的不正确数据来提供已验证堆栈跟踪生成以帮助调试之外,本文所描述的机制还以在后续时间执行的针对调试的分类效率的形式,提供了进一步的调试优势。更具体地,在个人计算设备上,软件开发人员通常执行计算机可执行指令,然后在确定发生了意外的后果后,立即执行调试。在这种情况下,出于调试目的,立即评估和分析诸如来自调用堆栈160的堆栈跟踪,识别漏洞的潜在原因,进行潜在的改进性纠正,并且再次执行现在已纠正的计算机可执行指令。这样的过程可以重复进行,直到漏洞得到解决,并且意外的后果不再发生。
41.然而,在云计算环境、服务器计算环境或其他类似的远程执行计算环境中,在发生意外的后果时执行调试可能不切实际或不可取。相反,在这种情况下,在发生意外的后果时执行数据收集,并且后续对数据进行评估以用于调试。由于尚未进行调试,因此没有已知或甚至怀疑的导致漏洞的原因。因此,很难提前知道哪些数据将与解决漏洞相关。此外,未能保留相关数据进一步阻碍了调试工作。事实上,如果保留的数据不包括相关数据,则保留的数据可能毫无价值。因此,当为后续的调试目的收集数据时,收集大量的、可能过度的数据集被收集,其包括例如来自调用堆栈160和影子堆栈170的数据,以及来自存储器130、cpu 120和其他类似数据的信息。此类数据的收集被称为数据“转储”。在某些计算环境(如云计算环境)中,数据转储的大小可能为数千gb。因此,期望至少立即执行数据转储的初始分析,并且如果可能的话,基于这种初始分析执行分类。通常由于生成的数据量和生成的频率,这种初始分析是自动化的。
42.特别地,可以对已知问题或漏洞进行编目,以便后续解决。为了便于调试此类漏洞,可以对与单个编目漏洞相关联的多个数据转储进行分析。作为一个简单的示例,如果在云托管的文字处理器上呈现下拉字体菜单导致显示碎片,那么这种意外的结果的标识可以是与意外的结果描述相关联的编目漏洞的形式,并且还可以与多个数据转储相关联,这些数据转储后续可以被分析以执行调试并解决漏洞。在许多情况下,标识漏洞的特性更容易(例如在存储器中的特定位置存在特定的数据结构),然后标识漏洞的原因。因此,可以利用已知的编目漏洞的特性来标识与该已知漏洞相关联的数据转储。随着获得与已知的编目漏
洞相关联的更多数据转储,调试可以变得更容易,例如通过标识常见因素,或消除作为漏洞潜在原因的各种因素。
43.转到图3,其中所示的示例性的系统300示出了上述机制的示例性的利用和扩展,以更快速、更有效地执行分类,并且减少了计算资源的消耗。更具体地,图3中所示的示例性的系统300包括一个或多个计算设备(诸如示例性的计算设备310、320和330),这些设备例如通过示例性的网络390通信耦合。虽然示例性的计算设备310、320和330被示出为单独的物理设备,但是可以是执行多个虚拟计算设备的单个物理设备,或者可以是单个物理设备或单个虚拟设备,其上执行并存储转储文件、分类组件和堆栈生成组件的实例。
44.在示例性的系统300内,例如根据上面提供的描述,一个或多个转储文件存储在一个或多个计算设备中。例如,示例性的系统300将示例性的转储文件331、332和333示出为正在生成并存储在作为示例性的转储生成计算设备的计算设备330上。此外,在示例性的系统300内,一个或多个计算设备正在执行自动分类组件,例如由作为示例性的转储分类计算设备的计算设备310执行的示例性的自动分类组件320。如上所述,自动分类组件320参考先前标识的特性来执行分类。例如,自动分类组件320能够将来自转储文件331、332和333的信息与确定为指示已知的编目漏洞的特性321进行比较。如果发现转储文件331、332和333中的一个或多个转储文件具有特性321,则自动分类组件320确定该转储文件与具有特性321的漏洞相关联,并且因此能够将该转储文件和已知的编目漏洞相关联。这种关联可以存储在一个或多个漏洞数据库中。图3的示例性的系统300示出了一个或多个数据库,该数据库可以将转储文件与已知的编目漏洞相关联,包括包含与一个已知漏洞相关联的转储文件的数据库信息342和包含与不同已知漏洞相关联的转储文件的数据库信息343。后续针对漏洞的调试,漏洞的信息与数据库信息343进行了编目,能够参考该信息并利用其链接的转储文件进行调试。
45.根据一个方面,并且由于上面详细描述的原因,如果可以跳过并且以其他方式不执行用于从中获得返回地址的堆栈展开,则能够以显著更少的计算资源的利用率更快地执行分类。因此,例如,自动分类组件320最初仅将其转储文件的评估集中在那些漏洞特性上,那些漏洞特性被将被存储在影子堆栈中的信息揭示,例如上述返回地址。以这种方式,自动分类组件320直接从包含影子堆栈数据的转储文件中读取这样的信息,并将这样的信息与那些漏洞特性进行比较,从而减少了在自动分类上的计算资源的消耗,并且相应地,更快速、更廉价地执行自动分类。
46.例如,示例性的自动分类组件320解析转储文件331,并从中获得影子堆栈信息。然后,示例性的自动分类组件320将该影子堆栈信息与已知的编目漏洞的对应特性(例如示例性的特性321和322)进行比较。如果存在匹配,则自动分类组件320例如通过数据库或其他类似的数据关联结构和/或机制,在已知的编目漏洞之间生成关联,该编目漏洞的特性与来自作为转储文件331的一部分保存的影子堆栈的数据相匹配。在图3所示的示例性的系统300中,动作351是由自动分类组件320确定转储文件331在其影子堆栈中包括与已知的编目漏洞的影子堆栈数据特性322相匹配的特性的图形表示,以及转储文件331与该漏洞的进一步关联,诸如经由通过自动分类组件320在转储文件331和数据库342之间生成标识或链接信息。类似地,动作352是由自动分类组件320确定转储文件332的影子堆栈数据匹配已知的编目漏洞的影子堆栈特性321,以及转储文件332与该漏洞进一步关联的图形表示,例如经
由通过自动分类组件320在转储文件332和数据库343之间生成标识或链接信息。
47.在某些情况下,转储文件中的影子堆栈数据可能与任何作为已知的编目漏洞特性的一部分的任何影子堆栈数据都不匹配。根据一个方面,在这种情况下,然后利用转储文件中的其他信息执行较慢的自动分类,并将该其他信息与已知的编目漏洞的特性进行比较。在这种情况下,基于影子堆栈数据的比较是一种可以快速有效地执行的初始的自动分类,详细的,而传统的基于更广泛特性的自动分类被降级为后续的自动分类,仅对那些通过初始的、更有效的自动分类尚未与已知的编目漏洞相关联的转储文件执行。示例性的自动分类组件320可以包括能够执行初始的、更有效的基于影子堆栈数据的自动分类的能力,以及后续的、更慢的、传统的、基于更广泛特性的自动分类的能力。备选地,示例性的自动分类组件320可以仅包括能够执行初始的、更有效的、基于影子堆栈数据的自动分类的能力,以及另一不同的组件,该组件在相同的计算设备310上执行,或在不同的计算设备上执行,该组件包括执行后续的、更慢的、传统的、基于更广泛特性的自动分类的能力。
48.如果自动分类没有将转储文件标识为与已知的编目漏洞相关联,则转储文件可以被归类为与诸如通过转储文件333与数据库341的链接以图形方式表示的一个或多个未知漏洞相关联。这样归类的转储文件可以接受另外的检查,例如由已验证堆栈跟踪生成组件210进行检查,其操作已经在上面详细描述,并且其可以在堆栈跟踪生成计算设备(诸如示例性的堆栈跟踪生成计算设备320)上执行。根据一个方面,仅在确定转储文件与先前未编目的意外的结果相关联之后,才执行诸如由已验证堆栈跟踪生成组件210进行的评估361。
49.尽管图3中所示的系统300未具体示出,但根据一个方面,转储文件本身(诸如转储文件331、332和333)的生成可以取决于对影子堆栈的分析。特别地,如上所描述,能够从影子堆栈获得返回地址,而不存在处理效率低下的展开调用堆栈以获得返回地址的情况。因此,在当前描述的方面中,能够有效地获得来自影子堆栈的返回地址,并将其与已知的编目漏洞的特性进行比较。如果这样的比较揭示特定的意外的结果(例如异常的特定发生)与已知漏洞相关联,那么可以为转储文件收集更少的信息。例如,对于已知的编目漏洞,特定信息可能被认为对调试漏洞有用,并且这些信息能够被列举,从而如果基于影子堆栈的预检查确定特定的意外的结果与该漏洞相关联,则生成的转储文件可以仅包含具体列举的信息,这排除了通常包含在转储文件中的其他信息。这能够更有效地捕获生成的转储文件,并且能够消耗更少的存储器存储资源。
50.转到图4,其中所示的示例性的流程图400示出了由已验证堆栈跟踪生成组件220执行的一系列示例性的步骤。最初,在步骤410,已验证堆栈跟踪的生成被触发,例如通过意外的后果的发生、通过期望评估与任何当前已知漏洞不相关的转储文件或通过另一个触发。后续,在步骤420,比较调用堆栈中的返回地址与影子堆栈中的对应的返回地址。在某些情况下,因为加载可执行文件的基地址会发生改变,例如使用地址空间布局随机化(“aslr”)时,返回地址将会发生变化。因此,步骤420的比较可以直接使用返回地址进行,或者可以基于导出正确返回地址所需的附加信息。例如,如果已知系统为aslr随机分配前n个地址位,则分析可仅考虑最后的m个位,其中n和m的总和小于或等于地址中的总位数。类似地,如果每一个模块对于其前n个地址位都具有唯一值,则可以知道具有相同前n个地址位的所有返回地址都来自同一模块。因此,比较可能不仅需要单个匹配,还需要发生一些序列。如上所述,在备选方面,为了效率目的,为从调用堆栈获得返回地址的部分的堆栈展开
的执行可以被避免,并且已验证堆栈跟踪的生成可以简单地利用来自影子堆栈的返回地址,而不执行步骤420和后续步骤的比较。
51.在步骤430,确定步骤420的比较是否检测到差异。根据一个方面,如果没有检测到差异,则处理进行到步骤480,并且从调用堆栈生成已验证堆栈跟踪,或者可选地,出于效率目的,简单地从已经指示的影子堆栈的返回地址生成已验证堆栈跟踪。然后,在步骤490,生成利用影子堆栈数据生成已验证堆栈跟踪的指示。如前所述,这种指示是文本的,并且可以可选地包括证书或其他类似的密码印章、签名或可靠性指示符。然后,相关处理在步骤499结束。
52.相反,如果在步骤430确定存在差异,则调用堆栈中的至少一些返回地址可能被损坏或以其他方式被改变,并且处理进行到步骤450。作为可选步骤,步骤440能够根据调用堆栈和影子堆栈之间不同的返回地址的量是否大于阈值来调节后续步骤的性能。如果执行了步骤440,并且确定在调用堆栈和影子堆栈之间不同的返回地址的量不大于阈值,则处理可以跳过剩余的步骤,而是进行到如上所述的步骤480和490。为了建立阈值的目的,以便于在步骤440比较调用堆栈和影子堆栈之间不同的返回地址的量,可以利用百分比、绝对量或其组合。
53.在步骤450,确定被做出,例如通过参考用户建立的设置,确定返回地址的调用堆栈版本和返回地址的影子堆栈版本是否都将作为已验证堆栈跟踪的一部分呈现。如果在步骤450确定两者都应该被呈现,则处理进行到步骤470,并且已验证堆栈跟踪的生成包括来自影子堆栈的返回地址(其可以进一步可选地被指示出为正确)以及来自调用堆栈的返回地址(其可以进一步可选地被指示出为不正确),或者,至少与来自影子堆栈的对应的返回地址不同。相反,如果在步骤450确定两者都不需要被呈现,则处理进行到步骤460,将来自调用堆栈的返回地址替换为来自影子堆栈的已知的正确返回地址。如上所述,在步骤460或步骤470之后,处理进行到步骤490,并最终在步骤499结束。
54.转到图5,其中所示的示例性的流程图500说明了作为更快和更有效的自动转储分类的一部分而执行的一系列示例性的步骤。如上所述,这种更快和更有效的自动转储分类可以作为初始分类步骤来执行,后续的分类步骤利用转储文件的更完整,但更慢的基于特性的分类。最初,在步骤510,启动更快和更有效的自动转储分类。后续在步骤515,已知的编目漏洞的特性被生成或预先生成,然后在步骤515获得。例如,仅集中于影子堆栈数据,机器学习算法可以被用于解析现有转储文件并生成新的特性,无论是针对先前未知的漏洞,还是针对当前已知的漏洞,从而补充或验证当前特性或其组合。
55.后续,在步骤520,选择要分类的转储文件,并且在步骤525,选择漏洞的特性。在步骤530,集中于影子堆栈数据,即返回地址,来自在步骤520获得的转储文件的影子堆栈数据与来自在步骤525获得的特性的对应的数据被比较。这种比较可以是一对一的比较,或者它可以只集中于所获得的返回地址的特定位或部分,或者它可以在多个返回地址中查找预先确定的模式或序列。如果存在匹配,如在步骤535确定的,则将在步骤520获得的转储文件与在步骤525选择的漏洞相关联,如步骤540所示。相反,如果不存在匹配,如在步骤535确定的,则处理进行到步骤545,步骤545循环返回到步骤525,并选择新的漏洞及其对应的特性,只要知道具有已知特性的编目漏洞,仍然要通过利用包括步骤525和545的循环来迭代。如果处理通过这样的循环进行,并且在步骤535没有检测到匹配,那么在步骤520获得的转储
文件在步骤550与未知漏洞相关联。如前所述,在步骤550将步骤520的所选转储文件与未知漏洞相关联之前,可以利用并比较来自步骤520获得的转储文件的数据来执行后续的自动转储分类,该数据不仅超出了影子堆栈数据,而且需要更大的处理资源来执行,因此速度较慢。此外,如上所描述,可以执行诸如步骤525到550的影子堆栈评估,作为可以首先通知转储文件的生成的初步决定因素。在这种情况下,相关步骤将排除510到520,并且将作为替代,在出现意外的结果时以从影子堆栈读取返回地址为开始,并执行步骤525到550的比较循环。此外,步骤540的执行将进一步地触发更集中的转储收集,其仅收集指定为与步骤535匹配的漏洞相关的数据。相反,步骤550的执行将导致诸如将通常被执行的综合转储数据收集。在步骤550之后,返回到已经存在的转储文件的自动分类,步骤555循环回到步骤520并选择新的转储文件,只要转储文件仍然要通过利用包括步骤520和555的循环来迭代。如果处理通过这样的循环进行,并且没有其他转储文件需要自动分类,则相关处理在步骤560结束。
56.转到图6,示出了示例性的计算设备600,其可以执行上面描述的一些或所有机制和动作。示例性的计算设备600可以包括但不限于一个或多个中央处理单元(cpu)620、系统存储器630和将包括系统存储器的各种系统组件耦合到处理单元620的系统总线621。系统总线621可以是几种类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线和使用各种总线架构中的任何总线的本地总线。计算设备600可以可选地包括图形硬件,其包括但不限于图形硬件接口660和显示设备661,其可以包括能够接收基于触摸的用户输入的显示设备,诸如触敏或多点触摸的显示设备。取决于具体的物理实现,cpu 620、系统存储器630和计算设备600的其他组件中的一个或多个可以物理地位于同一位置,例如在单个芯片上。在这种情况下,系统总线621中的一些或全部可以仅仅是单个芯片结构内的硅通路,并且其被图6中所示出的,对于示出的目的来说,仅是为了方便说明而做出的标记。
57.计算设备600通常还包括计算机可读介质,其可以包括可由计算设备600访问的任何可用介质,并且包括易失性和非易失性介质以及可移动和不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的内容的任何方法或技术实现的介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、盒式磁带、磁带、磁盘存储或其他磁存储设备,或可用于存储所需内容并可由计算设备600访问的任何其他介质。然而,计算机存储介质不包括通信介质。通信介质在诸如载波或其他传输机制的调制数据信号中体现计算机可读指令、数据结构、程序模块或其他数据。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、rf、红外和其他无线介质的无线介质。上述任何组合也应包括在计算机可读介质的范围内。
58.系统存储器630包括易失性和/或非易失性存储器(诸如只读存储器(rom)631和随机存取存储器(ram)632)形式的计算机存储介质。基本输入/输出系统633(bios)通常存储在rom 631中,该系统包含有助于例如在启动期间在计算设备600内的元件之间传送内容的基本例程。ram 632通常包含处理单元620可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图6示出了操作系统634、其他程序模块635和程序数据636。
59.计算设备600还可以包括其他可移动/不可移动、易失性/非易失性计算机存储介
质。仅作为示例,图6说明了硬盘驱动器641,它从不可移动的非易失性磁介质读取数据或向其写入数据。可以与示例性的计算设备一起使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于磁带盒、闪存卡、数字多功能盘、数字视频磁带、固态ram、固态rom和上述定义和描绘的其他计算机存储介质。硬盘驱动器641通常通过诸如接口640的非易失性存储器接口连接到系统总线621。
60.上面讨论并在图6中示出的驱动器及其相关联的计算机存储介质为计算设备600提供计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图6中,硬盘驱动器641被示出为存储操作系统644、其他程序模块645和程序数据646。注意,这些组件可以与操作系统634、其他程序模块635和程序数据636相同或不同。操作系统644、其他程序模块645和程序数据646在此被赋予不同的数字,说明它们至少是不同的副本。
61.计算设备600可以使用到一个或多个远程计算机的逻辑连接在联网环境中操作。计算设备600被示出为通过网络接口或适配器650连接到通用网络连接651(到网络390),网络接口或网络适配器650又连接到系统总线621。在联网环境中,相对于计算设备600或其部分或外围设备描绘的程序模块可以存储在通过通用网络连接661通信地耦合到计算设备600的一个或多个其他计算设备的存储器中。应当理解,所示的网络连接是示例性的,并且可以使用在计算设备之间建立通信链路的其他方式。
62.尽管被描述为单个物理设备,但是示例性的计算设备600可以是虚拟计算设备,在这种情况下,可以通过计算机可执行指令来提供上述物理组件(例如cpu 620、系统存储器630、网络接口640和其他类似组件)的功能。这样的计算机可执行指令可以在单个物理计算设备上执行,或者可以分布在多个物理计算设备上,包括以动态方式分布在多个物理计算设备上,以便于托管这种计算机可执行指令的物理计算设备可以根据需要和可用性随时间动态变化。在示例性的计算设备600是虚拟化设备的情况下,托管这种虚拟化计算设备的底层物理计算设备本身可以包括类似于上面描述的那些并且以类似方式操作的物理组件。此外,可以在多个层中利用虚拟计算设备,其中一个虚拟计算设备在另一虚拟计算设备的构造内执行。因此,如本文所使用的,术语“计算设备”是指物理计算设备或虚拟化计算环境,包括虚拟计算设备,在该虚拟计算设备中,计算机可执行指令可以以与物理计算设备执行指令一致的方式执行。类似地,如本文所使用的,指代计算设备的物理组件的术语意味着执行相同或等效功能的那些物理组件或其虚拟化。
63.上述描述包括,作为第一示例,计算设备包括:一个或多个中央处理单元,其将返回地址推送到调用堆栈和影子堆栈两者上;以及一个或多个计算机可读存储介质,其包括计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:比较从调用堆栈获得的第一返回地址与从影子堆栈获得的对应第一返回地址;并且当比较揭示从调用堆栈获得的第一返回地址不同于从影子堆栈获得的对应第一返回地址时,生成已验证堆栈跟踪,已验证堆栈跟踪包括从影子堆栈获得的第一返回地址和从调用堆栈获得的第一返回地址两者。
64.第二示例是第一示例的计算设备,其中被定向为生成已验证堆栈跟踪的计算机可执行指令包括计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:在已验证堆栈跟踪中还包括:当比较揭示从调用堆栈获得的第一返回地址与从影子堆栈获得的对应第一返回地址不同时,从调用堆栈获得的第一返回地址以及
从调用堆栈获得的包括的第一返回地址的指示是不正确的。
65.第三示例是第一示例的计算设备,包括另外的计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时使计算设备:生成所生成的已验证堆栈跟踪包括返回地址已经使用影子堆栈被验证的指示。
66.第四示例是第一示例的计算设备,其中如果与来自影子堆栈的对应的返回地址不同的来自调用堆栈的返回地址的数量大于阈值,则只有从影子栈获得的第一返回地址被包括在所生成的已验证堆栈跟踪中。
67.第五示例是第一示例的计算设备,包括另外的计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:比较从影子堆栈获得的返回地址与第一漏洞的预定特性,从影子堆栈获得的地址包括从影子堆栈获得的第一返回地址;基于比较,确定从影子堆栈获得的返回地址匹配第一漏洞的预定特性;以及基于确定,将一个或多个转储文件与第一漏洞相关联,该一个或多个转储文件包括从影子堆栈获得的返回地址。
68.第六示例是第一示例的计算设备,包括另外的计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:比较从影子堆栈获得的返回地址与编目漏洞的预定特性,从影子堆栈获得的地址包括从影子堆栈获得的第一返回地址;基于比较,确定从影子堆栈获得的返回地址不匹配编目漏洞的预定特性;以及基于确定,生成一个或多个转储文件需要另外的审查的指示,该一个或多个转储文件包括从影子堆栈获得的返回地址。
69.第七示例是第六示例的计算设备,其中被定向为生成已验证堆栈跟踪的计算机可执行指令根据一个或多个转储文件需要另外的审查的指示被执行,该一个或多个转储文件包括从影子堆栈获得的返回地址。
70.第八示例是一种计算设备,包括:一个或多个中央处理单元,其将返回地址推送到调用堆栈和影子堆栈两者上;以及一个或多个计算机可读存储介质,其包括计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:生成已验证堆栈跟踪,已验证堆栈跟踪包括从影子堆栈获得的第一返回地址和从调用堆栈获得的对应的第一返回地址两者,从影子堆栈获得的第一返回地址不同于从调用堆栈获得的对应的第一返回地址。
71.第九示例是第八示例的计算设备,包括另外的计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:比较从影子堆栈获得的返回地址与第一漏洞的预定特性;基于比较,确定从影子堆栈获得的返回地址匹配第一漏洞的预定特性;以及基于确定,将一个或多个转储文件与第一漏洞相关联,该一个或多个转储文件包括从影子堆栈获得的返回地址。
72.第十示例是第八示例的计算设备,包括另外的计算机可执行指令,当计算机可执行指令由处理单元中的至少一些处理单元执行时,使计算设备:比较从影子堆栈获得的返回地址与编目漏洞的预定特性;基于比较,确定从影子堆栈获得的返回地址不匹配编目漏洞的预定特性;以及基于确定,生成一个或多个转储文件需要另外的审查的指示,该一个或多个转储文件包括从影子堆栈获得的返回地址。
73.第十一示例是第十示例的计算设备,其中被定向为生成已验证堆栈跟踪的计算机
可执行指令,根据一个或多个转储文件需要另外的审查的指示被执行,该一个或多个转储文件包括从影子堆栈获得的返回地址。
74.第十二示例是第八示例的计算设备,包括另外的计算机可执行指令,当其在由处理单元中的至少一些处理单元执行时,使计算设备:生成所生成的已验证堆栈跟踪包括返回地址已经使用影子堆栈被验证的指示。
75.第十三示例是一种系统,包括:转储生成计算设备,包括:一个或多个转储生成计算设备处理单元,其将返回地址推送到调用堆栈和影子堆栈上;以及一个或多个转储生成计算设备存储介质,其包括计算机可执行指令,当计算机可执行指令由转储生成计算设备处理单元中的至少一些转储生成计算设备处理单元执行时,使转储生成计算设备在与转储生成计算设备通信耦合的存储设备上存储一个或多个转储文件;以及转储分类计算设备,其包括:一个或多个转储分类计算设备处理单元;以及一个或多个转储分类计算设备存储介质,其包括计算机可执行指令,当计算机可执行指令由转储分类计算机设备处理单元中的至少一些转储分类计算机设备处理单元执行时,使转储分类计算设备:获得一个或多个转储文件;针对来自影子堆栈的返回地址解析一个或多个转储文件;比较来自影子堆栈的返回地址与编目漏洞的预定返回地址特性;以及基于比较,将一个或多个转储文件与编目漏洞中的一个或多个编目漏洞相关联。
76.第十四示例是第十三示例的系统,其中比较确定来自影子堆栈的返回地址相匹配编目漏洞中的第一漏洞的预定返回地址特性;并且其中一个或多个转储分类计算设备存储介质还包括另外的计算机可执行指令,当计算机可执行指令由转储分类计算设备处理单元中的至少一些转储分类计算设备处理单元执行时,使转储分类计算设备:基于确定,将一个或多个转储文件与第一漏洞相关联。
77.第十五示例是第十三示例的系统,其中比较确定来自影子堆栈的返回地址不匹配编目漏洞的预定的返回地址特性;并且其中一个或多个转储分类计算设备存储介质还包括另外的计算机可执行指令,当计算机可执行指令由转储分类计算设备处理单元中的至少一些转储分类计算设备处理单元执行时,使转储分类计算设备:基于比较确定生成一个或多个转储文件需要另外的审查的指示。
78.第十六示例是第十三示例的系统,其中比较确定来自影子堆栈的返回地址不匹配编目漏洞的预定的返回地址特性;并且其中一个或多个转储分类计算设备存储介质还包括另外的计算机可执行指令,当计算机可执行指令由转储分类计算设备处理单元中的至少一些转储分类计算设备处理单元执行时,使转储分类计算设备:附加地比较来自一个或多个转储文件的其他数据与编目漏洞的对应的预定特性;以及基于附加地比较,将一个或多个转储文件与编目漏洞中的一个或多个编目漏洞相关联;并且其中仅当比较确定来自影子堆栈的返回地址不匹配编目漏洞的预定返回地址特性时,执行附加地比较和基于附加地比较的关联的计算机可执行指令才被执行。
79.第十七示例是第十三示例的系统,还包括堆栈跟踪生成计算设备,堆栈跟踪生成计算设备包括:一个或多个堆栈跟踪生成计算设备处理单元;以及一个或多个堆栈跟踪生成计算设备存储介质,其包括计算机可执行指令,当计算机可执行指令由堆栈跟踪生成计算机设备处理单元中的至少一些堆栈跟踪生成计算机设备处理单元执行时,使堆栈跟踪生成计算设备:生成已验证堆栈跟踪,已验证堆栈跟踪包括从影子堆栈获得的第一返回地址
和从调用堆栈获得的对应第一返回地址两者,从影子堆栈获得的第一返回地址不同于从调用堆栈获得的对应第一返回地址。
80.第十八示例是第十七示例的系统,其中被定向为生成已验证堆栈跟踪的计算机可执行指令根据一个或多个转储文件需要另外的审查的指示被执行,该一个或多个转储文件需要另外的审查的指示是基于来自影子堆栈的返回地址不匹配编目漏洞的预定返回地址特性的比较确定。
81.第十九示例是第十三示例的系统,其中一个或多个转储生成计算设备存储介质包括另外的计算机可执行指令,当计算机可执行指令由至少一些转储生成计算设备处理单元执行时,使转储生成计算设备:在存储一个或多个转储文件之前,比较来自影子堆栈的返回地址与一个或多个编目漏洞的预定返回地址特性;并且基于预转储生成比较,从转储生成计算设备选择将被存储在一个或多个转储文件中的信息。
82.第二十示例是第十九示例的系统,其中被定向为从转储生成计算设备选择将被存储在一个或多个转储文件中的信息的计算机可执行指令包括计算机可执行指令,当计算机可执行指令由转储生成计算设备处理单元中的至少一些转储生成计算设备处理单元执行时,使转储生成计算设备:基于预转储生成比较确定来自影子堆栈的返回地址匹配第一编目漏洞的预定一个或多个返回地址特性,仅从转储生成计算设备选择由与第一编目漏洞相关联的漏洞目录条目指定的信息。
83.从以上描述可以看出,已经提出了用于提供已验证堆栈跟踪生成和加速基于堆栈的分析的机制。鉴于本文所描述的主题的许多可能的变化,我们要求所有这些实施例作为我们的发明,这些实施例可能在以下权利要求及其等同物的范围内。
技术特征:
1.一种计算设备,包括:一个或多个中央处理单元,所述一个或多个中央处理单元将返回地址推送到调用堆栈和影子堆栈两者上;以及一个或多个计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令当由所述处理单元中的至少一些处理单元执行时使所述计算设备:比较从所述调用堆栈获得的第一返回地址与从所述影子堆栈获得的对应的第一返回地址;以及当所述比较揭示从所述调用堆栈获得的所述第一返回地址不同于从所述影子堆栈获得的所述对应的第一返回地址时,生成已验证堆栈跟踪,所述已验证堆栈跟踪包括从所述影子堆栈获得的所述第一返回地址和从所述调用堆栈获得的所述第一返回地址两者。2.根据权利要求1所述的计算设备,包括另外的计算机可执行指令,当其由所述处理单元中的至少一些处理单元执行时使所述计算设备:比较从所述影子堆栈获得的返回地址与第一漏洞的预定特性,从所述影子堆栈获得的所述地址包括从所述影子堆栈获得的所述第一返回地址;基于所述比较,确定所述从所述影子堆栈获得的所述返回地址匹配第一漏洞的所述预定特性;以及基于所述确定,将一个或多个转储文件与所述第一漏洞相关联,所述一个或多个转储文件包括所述从所述影子堆栈获得的所述返回地址。3.根据权利要求1所述的计算设备,包括另外的计算机可执行指令,当其由所述处理单元中的至少一些处理单元执行时使所述计算设备:比较从所述影子堆栈获得的返回地址与编目漏洞的预定特性,从所述影子堆栈获得的所述地址包括从所述影子堆栈获得的所述第一返回地址;基于所述比较,确定从所述影子堆栈获得的所述返回地址不匹配所述编目漏洞的所述预定特性;以及基于所述确定,生成一个或多个转储文件需要另外的审查的指示,所述一个或多个转储文件包括从所述影子堆栈获得的所述返回地址。4.根据权利要求3所述的计算设备,其中被定向为生成所述已验证堆栈跟踪的所述计算机可执行指令根据所述一个或多个转储文件需要另外的审查的所述指示而被执行,所述一个或多个转储文件包括从所述影子堆栈获得的所述返回地址。5.一种计算设备,包括:一个或多个中央处理单元,所述一个或多个中央处理单元将返回地址推送到调用堆栈和影子堆栈两者上;以及一个或多个计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令当由所述处理单元中的至少一些处理单元执行时使所述计算设备:生成已验证堆栈跟踪,所述已验证堆栈跟踪包括从所述影子堆栈获得的第一返回地址和从所述调用堆栈获得的对应的第一返回地址两者,从所述影子堆栈获得的所述第一返回地址不同于从所述调用堆栈获得的所述对应的第一返回地址。6.根据权利要求5所述的计算设备,包括另外的计算机可执行指令,当其由所述处理单元中的至少一些处理单元执行时使所述计算设备:
比较从所述影子堆栈获得的所述返回地址与编目漏洞的预定特性;基于所述比较,确定从所述影子堆栈获得的所述返回地址不匹配所述编目漏洞的所述预定特性;以及基于所述确定,生成一个或多个转储文件需要另外的审查的指示,所述一个或多个转储文件包括从所述影子堆栈获得的所述返回地址。7.根据权利要求6所述的计算设备,其中被定向为生成所述已验证堆栈跟踪的所述计算机可执行指令根据所述一个或多个转储文件需要另外的审查的所述指示而被执行,所述一个或多个转储文件包括从所述影子堆栈获得的所述返回地址。8.一种系统,包括:转储生成计算设备,包括:一个或多个转储生成计算设备处理单元,其将返回地址推送到调用堆栈和影子堆栈两者上;以及一个或多个转储生成计算设备存储介质,包括计算机可执行指令,所述计算机可执行指令当由所述转储生成计算设备处理单元中的至少一些转储生成计算设备处理单元执行时,使所述转储生成计算计算设备在与所述转储生成计算设备通信耦合的存储设备上存储一个或多个转储文件;以及转储分类计算设备,包括:一个或多个转储分类计算设备处理单元;以及一个或多个转储分类计算设备存储介质,包括计算机可执行指令,所述计算机可执行指令当由所述转储分类计算机设备处理单元中的至少一些转储分类计算机设备处理单元执行时,使所述转储分类计算设备:获得所述一个或多个转储文件;针对来自所述影子堆栈的返回地址解析所述一个或多个转储文件;比较来自所述影子堆栈的所述返回地址与编目漏洞的预定一个或多个返回地址特性;以及基于所述比较,将所述一个或多个转储文件与所述编目漏洞中的一个或多个编目漏洞相关联。9.根据权利要求8所述的系统,其中所述比较确定来自所述影子堆栈的所述返回地址不匹配所述编目漏洞的所述预定返回地址特性;其中所述一个或多个转储分类计算设备存储介质还包括另外的计算机可执行指令,当其由所述转储分类计算设备处理单元中的至少一些转储分类计算设备处理单元执行时,使所述转储分类计算设备:将来自所述一个或多个转储文件的其他数据与所述编目漏洞的对应的预定特性附加地比较;以及基于所述附加地比较,将所述一个或多个转储文件与所述编目漏洞中的没有或多个编目漏洞相关联;并且其中仅当所述比较确定来自所述影子堆栈的所述返回地址不匹配所述编目漏洞的所述预定返回地址特性时,执行所述附加地比较和基于所述附加比较的所述关联的所述另外的计算机可执行指令才被执行。
10.根据权利要求8所述的系统,还包括堆栈跟踪生成计算设备,所述堆栈跟踪生成计算设备包括:一个或多个堆栈跟踪生成计算设备处理单元;以及一个或多个堆栈跟踪生成计算设备存储介质,包括计算机可执行指令,所述计算机可执行指令当由所述堆栈跟踪生成计算机设备处理单元中的至少一些堆栈跟踪生成计算机设备处理单元执行时,使所述堆栈跟踪生成计算设备:生成已验证堆栈跟踪,所述已验证堆栈跟踪包括从所述影子堆栈获得的第一返回地址和从所述调用堆栈获得的对应的第一返回地址两者,从所述影子堆栈获得的所述第一返回地址不同于从所述调用堆栈获得的所述对应的第一返回地址。11.根据权利要求1所述的计算设备,包括另外的计算机可执行指令,当其由所述处理单元中的至少一些处理单元执行时,使所述计算设备:生成所生成的所述已验证堆栈跟踪包括返回地址的指示,所述返回地址已经使用所述影子堆栈被验证。12.根据权利要求1所述的计算设备,其中如果与来自所述影子堆栈的对应的返回地址不同的来自所述调用堆栈的返回地址的数量大于阈值,则仅从所述影子堆栈获得的所述第一返回地址被包括在所生成的所述已验证堆栈跟踪中。13.根据权利要求5所述的计算设备,包括另外的计算机可执行指令,当其由所述处理单元中的至少一些处理单元执行时,使所述计算设备:比较从所述影子堆栈获得的所述返回地址与第一漏洞的预定特性;基于所述比较,确定从所述影子堆栈获得的所述返回地址匹配第一漏洞的所述预定特性;以及基于所述确定,将一个或多个转储文件与所述第一漏洞相关联,所述一个或多个转储文件包括从所述影子堆栈获得的所述返回地址。14.根据权利要求10所述的系统,其中被定向为生成所述已验证堆栈跟踪的所述计算机可执行指令根据所述一个或多个转储文件需要另外的审查的指示而被执行,所述一个或多个转储文件需要另外的审查的所述指示是基于来自所述影子堆栈的所述返回地址不匹配所述编目漏洞的所述预定返回地址特性的所述比较确定。15.根据权利要求8所述的系统,其中所述一个或多个转储生成计算设备存储介质包括另外的计算机可执行指令,当其由所述转储生成计算设备处理单元中的至少一些转储生成计算设备处理单元执行时,使所述转储生成计算设备:在存储所述一个或多个转储文件之前,比较来自所述影子堆栈的所述返回地址与编目漏洞的所述预定一个或多个返回地址特性;以及基于所述预转储生成比较,从所述转储生成计算设备选择将被存储在所述一个或多个转储文件中的信息。
技术总结
能够通过利用包含在影子堆栈,诸如为防止恶意软件和计算机安全而实现的硬件保护的副本堆栈,中的信息来生成已验证堆栈跟踪。影子堆栈包含返回地址,其无需展开传统调用堆栈即可获得。这样,基于返回地址信息的分类能够更快速和更有效地执行,并且伴随地减少了处理资源的利用。此外,可以执行已验证堆栈跟踪的生成,这样的已验证堆栈跟踪包含已知正确且未损坏的返回地址。返回地址可以从传统调用堆栈中读取,或者从中导出,然后通过与来自影子堆栈的对应的返回地址相比较被验证,或者可以直接从影子堆栈中读取。从影子堆栈中读取。从影子堆栈中读取。
技术研发人员:J
受保护的技术使用者:微软技术许可有限责任公司
技术研发日:2021.06.14
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
