CN111868695A - 通过在用户模式下执行计算机代码来测试内核模式计算机代码 - Google Patents
通过在用户模式下执行计算机代码来测试内核模式计算机代码 Download PDFInfo
- Publication number
- CN111868695A CN111868695A CN201980020369.XA CN201980020369A CN111868695A CN 111868695 A CN111868695 A CN 111868695A CN 201980020369 A CN201980020369 A CN 201980020369A CN 111868695 A CN111868695 A CN 111868695A
- Authority
- CN
- China
- Prior art keywords
- computer code
- operating system
- kernel
- memory
- mode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012360 testing method Methods 0.000 title claims description 84
- 238000000034 method Methods 0.000 claims abstract description 85
- 230000006870 function Effects 0.000 claims description 46
- 230000004044 response Effects 0.000 claims description 27
- 230000001960 triggered effect Effects 0.000 claims description 23
- 238000004458 analytical method Methods 0.000 claims description 5
- 230000000977 initiatory effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 40
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 1
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 1
- 241000699666 Mus <mouse, genus> Species 0.000 description 1
- 241000699670 Mus sp. Species 0.000 description 1
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 1
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000003278 mimic effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004224 protection Effects 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本文描述了与针对漏洞而被测试的计算机代码有关的技术,其中计算机代码将在操作系统的内核模式下运行。在第一操作系统的内核模式下执行计算机代码,并且存储器中被映射到第一操作系统的内核模式地址空间的内容被转换到被映射到第二操作系统的用户模式地址空间的用户模式存储器。该计算机代码在用户模式下被执行,并且在用户模式下被执行时被测试。
Description
背景技术
在计算设备上运行的现代操作系统创建两个分隔的虚拟地址空间:用户模式地址空间和内核模式地址空间,来存储指令和数据。当存储在用户模式地址空间中的代码被处理器执行时,处理器和代码被视为在用户模式下运行,而当存储在内核模式地址空间中的代码被处理器执行时,进程和代码被视为在内核模式下运行。通常,处理器在用户模式下执行应用(诸如web浏览器、文字处理应用、电子邮件应用等),而处理器在内核模式下执行核心操作系统组件(包括操作系统内核和至少一些驱动程序)。当发起用户模式应用时,操作系统为这种应用创建进程,其中进程向应用提供私有虚拟地址空间。因为虚拟地址空间是私有的,所以属于该应用的数据不能被处理器执行的另一应用更改。换句话说,在用户模式下执行的每个应用都是隔离运行的,并且当一个应用崩溃时,该崩溃不会影响在用户模式下运行的另一应用。
相反,在内核模式下运行的所有代码共享单个虚拟地址空间。因此,在内核模式下运行的驱动程序不会与在内核模式下运行的其他驱动程序隔离,并且更不会与操作系统内核本身隔离。因此,如果在内核模式下运行的驱动程序(或在内核模式下运行的其他计算机可执行的代码)对内核模式地址空间中的不当虚拟地址进行写入,则可能会损害属于操作系统或其他驱动程序的数据。如果内核模式驱动程序崩溃,则这种崩溃可能导致整个操作系统崩溃。
已经开发了动态分析工具,用于在广泛发布基于计算机代码构建的应用之前,对计算机代码进行漏洞(bug)和/或安全性故障的测试。例如,已经开发了对计算机代码执行模糊测试的工具。模糊测试工具是一种自动化的软件测试工具,这种工具提供无效、意外或随机的数据以作为计算机程序的输入。在用上面提到的输入发起计算机程序之后,模糊测试工具创建计算机程序的执行轨迹,并在该轨迹中搜索是否有崩溃、失败的内置代码断言、潜在的存储器泄漏等。
传统上,模糊测试工具仅限于测试在用户模式下运行的计算机代码。这至少部分是由于运行用户模式应用的隔离环境所致。相反,由于内核模式下发生的资源共享常常是性质复杂的,因此现有的模糊测试工具不是很适合测试在内核模式下运行的计算机代码。更具体地讲,常规的模糊测试工具目前不具备捕获和分析在内核模式下运行的计算机代码的执行轨迹的能力。现有的在内核模式下运行的模糊测试代码的方法计算成本昂贵且缓慢——这些现有的方法模拟了整个计算环境,然后在模拟内部执行了整个操作系统(内核和驱动程序)以及用户模式应用。此外,必须对虚拟机进行检测以从操作系统中收集执行轨迹,这件事很慢而且很杂乱,因为执行轨迹将包含许多与被测试的计算机代码无关的功能,诸如计时器中断、后台线程等。
发明内容
以下是在本文中更详细描述的主题的简要概述。此概述并非旨在限制权利要求的范围。
本文描述的是与对将在内核模式下执行的计算机代码进行模糊测试有关的各种技术。可以在执行M位操作系统(第一操作系统)的计算系统上发起调试工具,其中M例如可以是32。将在第一操作系统的内核模式下执行的计算机代码被加载到调试器中,并且开发者可以在开发者选择的位置针对计算机代码设置断点。例如,当计算机代码是函数或驱动程序时,断点可以设置在调用该函数或驱动程序之处。然后,将计算机代码加载到第一操作系统的内核模式地址空间中,并且当处理器执行内核模式地址空间中的指令时,开发者声明使得断点被触发的输入。响应于断点被触发,生成文件,该文件指示被映射到内核模式地址空间的存储器的内容。例如,该文件可以是通常在操作系统崩溃时生成的转储文件。转储文件通常被用于离线调试。然而,在本文描述的技术中,转储文件被用来重建在内核模式地址空间中的存储器的内容,并且所重建的内容被用于在线调试。
然后,执行N位操作系统(第二操作系统)的第二计算系统接收转储文件,其中N大于M。例如,第二操作系统可以是64位操作系统。由于可以使用N位来分派的更大的地址空间,因此与由第一操作系统分派的虚拟地址空间相比,第二操作系统可以为用户模式和内核模式进程分派可能更多的虚拟地址空间。如上所指,第二计算系统接收转储文件,转储文件表示在触发计算机代码中的断点时被映射到第一操作系统的内核模式地址空间的存储器的内容。响应于第二计算系统接收到转储文件,第二操作系统创建新的用户模式进程,其中为新的用户模式进程分派相对较大的地址空间(例如,4GB)。在分配给新的用户模式进程的该用户模式地址空间内,第二操作系统分配被映射到第一操作系统的内核模式地址空间的地址空间。在示例中,第二操作系统可以在新的用户模式进程内分配2GB到4GB的用户模式地址空间。
然后,第二计算系统可以对从第一计算系统接收到的文件进行反序列化,从而重建在断点被触发时在第一操作系统的内核模式地址空间中的存储器的内容。第二计算系统用重建的内容来填充被映射到第二操作系统的上述用户模式地址空间的第二计算系统的存储器。换句话说,第一操作系统的内核处于第二操作系统的用户模式。另外,第二计算系统像在第一计算系统的内核模式地址空间中一样设置页保护,并且还修改新的用户模式进程的主线程的寄存器文件,以使第二计算系统的处理器的寄存器模仿断点被触发时的第一计算系统的处理器的寄存器。第二计算系统还可以修改在用户模式地址空间中填充的内容的某些部分,以确保计算机代码在第二操作系统的用户模式下运行。例如,可以在内容中搜索对存储器分配的函数的调用(这些调用仅在内核模式下使用),并且将这种调用替换为对可以在用户模式下使用的存储器分配函数的调用。最后,第二计算系统可以在新的用户模式进程的程序栈的顶部插入调用,其中该调用指向在计算机代码完成其执行(例如,计算机代码没有崩溃)时报告成功的函数。
然后,有效地,将M位操作系统的内核模式地址空间的内容置于N位操作系统的用户模式地址空间中,并进行一些修补以防止计算机代码因计算机调用内核模式专用的函数而崩溃。然后,通知模糊测试工具要其对新的用户模式进程进行模糊测试,并且向其提供已知的有效输入(例如,该输入不会导致计算机代码崩溃)的输入数据(例如,由开发者生成)。当模糊测试工具正在对用户模式进程进行模糊测试时,模糊测试工具可以以常规方式起作用;因此,模糊测试工具可以扰乱已知的有效输入,并且模糊测试工具可以监视新的用户模式进程的执行轨迹。因此,从模糊测试工具的角度来看,模糊测试工具正在对新的用户模式进程进行模糊测试,并且通过扰乱新的用户模式进程使用的数据文件来这样做(其中该数据文件是由开发者在捕捉到对磁盘的已知有效输入数据时生成的)。那么,新的用户模式进程实际上是运行M位操作系统的内核模式地址空间的内容的副本的虚拟机,但是是在N位操作系统的用户模式下运行,其中模糊测试工具可以跟踪并扰乱其存储器。因此,可以使用常规的模糊测试工具对内核代码和操作系统的驱动程序进行模糊测试。另外,模糊测试工具可以相对较快地监视新的用户模式进程的执行并获得感兴趣的计算机代码,而无需跟踪无关的代码。更进一步,计算机代码可以全硬件速度在用户模式地址空间中运行而没有虚拟化开销,从而结果是计算机代码的模糊测试相对较快。最后,模糊测试工具能够输出强的成功和失败的指示符——被测试的计算机代码返回,然后模糊测试工具没有发现漏洞。然而,当发生崩溃时,会发生失败并且用户模式进程会崩溃。
上面的概述提出了简化的概述,以便提供对本文讨论的系统和/或方法的一些方面的基本理解。此概述不是本文讨论的系统和/或方法的广泛概述。并非旨在标识该系统和/或方法的关键/重要元素或描绘它们的范围。唯一目的是以简化的形式提出一些概念,以作为稍后提出的更详细的描述的前奏。
附图说明
图1是被配置为测试计算机代码的漏洞的示例性计算系统的功能框图,其中计算机代码将在内核模式下运行。
图2是图示出了M位操作系统的内核模式地址空间的内容到N位操作系统的用户模式地址空间的转换的示意图,其中N大于M。
图3是示例性加载器组件的功能框图,该加载器组件被配置为修补(patch)将在内核模式下执行的计算机代码,以允许该计算机代码在用户模式下执行。
图4是图示出了由执行M位操作系统的计算系统执行的示例性方法的流程图,其中该方法促使在关于计算机代码的断点被触发时生成转储文件(dump file),转储文件表示M位操作系统的内核模式地址空间的内容。
图5是图示出了由执行N位操作系统的计算系统执行的示例性方法的流程图,其中该方法通过将要在内核模式地址空间中执行的计算机代码置于用户模式地址空间中来促进对该计算机代码进行模糊测试。
图6是示例性的计算系统。
具体实施方式
现在,参考附图来描述与测试将要在内核模式下运行的计算机代码有关的各种技术,其中贯穿全文,相同的附图标记用于指代相同的元素。在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对一个或多个方面的透彻理解。然而,显而易见的是,可以在没有这些具体细节的情况下实践(一个或多个)这些方面。在其他实例中,以框图形式示出了熟知的结构和设备,以便于促使描述一个或多个方面。进一步,应当理解,被描述为由某些系统组件执行的功能性可以由多个组件执行。类似地,例如,组件可以被配置为执行被描述为由多个组件执行的功能性。
此外,术语“或”旨在意味着包含性的“或”而不是排他性的“或”。也就是说,除非另有说明或从上下文中清楚得知,否则短语“X采用A或B”旨在表示任何自然的包含性排列。也就是说,以下任何一种实例都满足短语“X采用A或B”:X采用A;X采用B;或者X同时采用A和B。此外,除非另外指定或从上下文中清楚得知其针对单数形式,否则本申请和所附权利要求书中使用的冠词“一”和“一个”通常应被解释为意味着“一个或多个”。
此外,如本文中所使用的,术语“组件”和“系统”旨在涵盖配置有计算机可执行指令的计算机可读数据存储,计算机可执行指令在由处理器执行时使得某些功能性被执行。计算机可执行指令可以包括例程、功能等。还应理解,组件或系统可以位于单个设备上或分布在几个设备上。此外,如本文中所使用的,术语“示例性”旨在意味着用作某些事物的图示或示例,而非旨在指示偏好。
本文描述了促进测试计算机代码的漏洞的各种技术,其中计算机代码将由处理器在内核模式下执行。如下面将更详细描述的,计算机代码被加载到第一操作系统的内核模式地址空间中,并且内核模式地址空间的内容的副本被生成,其中(例如)该副本表示当计算机代码准备好被调用时被映射到内核模式地址空间的存储器的内容。然后,此内容被置于第二操作系统的用户模式地址空间中,并且作为用户模式进程的一部分运行。在作为用户模式进程运行时,针对漏洞测试计算机代码,例如,这允许常规的模糊测试工具向计算机代码提供与识别计算机代码的成功执行和计算机代码的崩溃有关的各种输入。这些技术将在本文中更详细地描述。
现在参考图1,图示出了促进针对漏洞测试计算机代码(计算机可执行指令)的示例性系统100,其中计算机代码将在计算系统的内核模式下运行。系统100包括由计算机代码的开发者104操作的客户端计算设备102。另外,系统100包括与客户端计算设备102进行网络通信的第一服务器计算设备106,以及与客户端计算设备102和第一计算设备106进行网络通信的第二服务器计算设备108。第一服务器计算设备106包括第一处理器110和第一存储器112。第一服务器计算设备106执行第一操作系统,其中第一操作系统是M位操作系统。在示例中,第一操作系统可以是32位操作系统。第一存储器112包括被映射到32位内核模式地址空间的32位内核模式部分(在本文中被称为第一内核模式部分114)。第一存储器112还包括被映射到32位用户模式地址空间116的32位用户模式部分(在本文中被称为第一用户模式部分116)。因此,第一用户模式部分114包括第一(32位)操作系统内核117、第一驱动程序118(由处理器110在内核模式下执行)、第一内核和驱动程序数据120(例如,由第一内核117和/或第一驱动程序118生成和/或使用的数据)。第一存储器112的第一内核模式部分114还包括要针对漏洞而被测试的计算机代码122。计算机代码122可以是驱动程序、内核的一部分等。
计算机代码122具有针对其设置的断点124。尽管断点124被示为包含在计算机代码122中,但是应该理解,断点124通常将由开发者104在第一处理器110即将执行计算机代码122之前的时候进行设置。可选地,第一用户模式部分116可以具有存储在其中的用户模式应用126,或者可以是空的但保留给用户模式应用。存储器112还可以具有加载在其中的内核模式调试器128,其中内核模式调试器128被配置为在触发断点124时(例如,当第一处理器110在执行第一存储器112的第一内核模式部分114中的指令时到达断点124时)生成转储文件。第一服务器计算设备106还包括数据存储库130,其中数据存储库130存储由内核模式调试器128生成的转储文件132。
第二服务器计算设备108包括第二处理器134和第二存储器136。第二服务器计算设备108运行N位操作系统,其中N大于M。因此,在图1所示的示例中,第二服务器计算设备108可以运行64位操作系统。
第二存储器136包括由第二操作系统映射到64位内核模式地址空间的64位内核模式部分(被称为第二内核模式部分138)。第二存储器136还包括由第二操作系统映射到64位用户模式地址空间的64位用户模式部分140(被称为第二用户模式部分140)。第二存储器136的第二内核模式部分138包括第二(64位)操作系统内核142、第二驱动程序144、以及由第二操作系统内核142和/或第二驱动程序144生成和/或使用的第二内核和驱动程序数据146。
第二存储器136的第二用户模式部分140包括加载器组件148,加载器组件148被配置为用第一存储器112的第一内核模式部分114的内容填充第二存储器136的第二用户模式部分140。更具体地,加载器组件148构建将在第二服务器计算设备108处在用户模式下运行的新的用户模式进程,其中该新的用户模式进程被称为内核执行器应用150。在64位用户模式地址空间的范围为0GB-4GB并且32位内核模式地址空间的范围为2GB-4GB的示例中,加载器组件148可以创建内核执行器应用150,以使第二存储器136的第二用户模式部分140中的0-4GB地址空间被分配给内核执行器应用150。然后,加载器组件148可以对转储文件132进行反序列化以重建第一存储器112的第一内核模式部分114中的内容,然后将64位用户模式地址空间中的2GB到4GB地址空间分配给内核执行器应用150。响应于对转储文件132进行反序列化,加载器组件148因此可以使得第一操作系统内核117、第一驱动程序118、第一内核和驱动程序数据120以及计算代码122被置于第二存储器136的第二用户模式部分140中。因为内核执行器应用150已经被分配了0GB-4GB地址空间,所以第一存储器112的第一内核模式部分114的内容(在2GB-4GB地址空间中)可以被直接映射到第二服务器计算设备108上的用户模式地址空间的2GB-4GB地址空间。
如在下面将更详细描述的,一旦创建了内核执行器应用150并且加载器组件148已经将第一内核操作系统117、第一驱动程序118、第一内核和驱动程序数据120以及计算机代码122加载到第二存储器136的第二用户模式部分140中,内核执行器应用150就可以对第二存储器136的第二用户模式部分140的内容进行一些修补,以允许计算机代码122在用户模式下运行。例如,计算机代码122可以包括对专用于操作系统的内核模式的函数的调用(例如,诸如对在内核模式下分配存储器的调用)。内核执行器应用150可以在计算机代码122(响应于计算机代码122被置于第二存储器136的第二用户模式部分140中)中搜索对该函数的调用,并且可以将该调用替换为对第二函数的第二调用,第二函数被配置为供用户模式应用使用(例如,其中该第二函数是该函数的在用户模式下的等效函数)。另外,内核执行器应用150可以修改内核执行器应用150的主线程的寄存器文件,以使在第一处理器110到达断点124时,第二处理器134的寄存器模拟第一处理器110的寄存器。更进一步,内核执行器应用150可以将内核执行器应用150的调用栈修改为包括指向报告成功的报告函数的指针,其中每当第二处理器134成功执行计算机代码122时调用该报告函数。
第二存储器136的第二用户模式部分140还包括模糊测试(fuzzer)组件152,模糊测试组件152被配置为测试计算机代码122的漏洞(例如,通过对计算机代码122进行模糊测试)。例如,模糊测试组件152可以是传统的模糊测试工具,其扰乱对内核执行器应用150的输入,并因此扰乱对计算机代码122的输入。在示例性实施例中,响应于模糊测试组件152向内核执行程序150提供输入以及内核执行器应用150被执行(或崩溃),加载器组件148、内核执行器应用150和模糊测试组件152可以如上所述地进行动作。更具体地,加载器组件148可以创建新的用户模式进程(内核执行器应用150)(将充足的用户模式地址空间分配给内核执行器应用150),对转储文件132进行反序列化,并且在第二存储器136的第二用户模式部分140中填充适当的用户模式地址空间。然后,内核执行器应用150在执行上述进程,并且模糊测试组件152声明对内核执行器应用150的扰乱输入,用于针对漏洞测试计算机代码122。
虽然将计算系统100图示为包括两个服务器计算设备106和108,但是可以构想其他架构。例如,单个计算设备可以执行两个虚拟机,其中第一虚拟机运行第一操作系统,而第二虚拟机运行第二操作系统。在另一示例中,单个计算设备可以包括多个处理器核,其中第一处理器核被分配第一存储器并执行第一操作系统,而第二处理器核被分配第二存储器并执行第二操作系统。可以想到,系统100可以作为测试服务被提供给端用户,其中开发者将要经受测试的计算机代码上载到一个或多个计算设备。可以想到支持将计算机代码从内核模式转换到用户模式的任何合适的计算架构。另外,尽管第二服务器计算设备108被描绘为包括模糊测试组件150,但是除了模糊测试组件150之外或替代模糊测试组件150,还可以想到并且由第二服务器计算设备108来执行其他类型的测试工具。例如,第二服务器计算设备108可以执行堆检查器、类型检查器、边界检查器、分析工具(profiler)或可用于测试软件的其他工具。
现在阐述系统100的示例性操作。开发者104访问客户端计算设备102,并且发起例如其上有类似调试器的图形用户界面的应用。例如,应用可以是调试器。开发者104检查计算机代码122,并识别关于测试代码124点,将在该点处放置断点124。例如,断点124可以放置在紧接着计算机代码124被调用后的位置处。在客户端计算设备102上执行的应用还从开发者104接收一个或多个输入值,其中开发者104知道这些值将造成触发计算机代码122的断点124。更进一步,应用可以从开发者104接收可以在断点124已经被触发之后被提供给计算机代码122的一个或多个输入值。这一个或多个值可以被已知为有效;开发者104已经知道提供该一个或多个值作为对计算机代码122的输入将造成计算机代码122成功执行。响应于开发者104放置关于计算机代码122的断点124以及应用接收到将使得断点124被触发的值和计算机代码122的已知有效值,客户端计算设备102使得用第一服务器计算设备106上的计算机代码122来更新第一操作系统,以使将计算代码122置于第一存储器112的第一内核模式部分114中。
然后,第一处理器110开始执行第一存储器112的第一内核模式部分114中的指令(例如,第一操作系统的内核模式地址空间中的指令)。内核模式调试器128在第一处理器110执行这些指令的同时监视第一处理器110,并识别第一处理器110何时到达断点124(例如,内核模式调试器128识别何时触发断点24)。响应于内核模式调试器128识别出断点124已经被触发,内核模式调试器128对第一存储器112的第一内核模式部分114中的内容进行序列化,并创建转储文件132。因此,转储文件132表示在断点124被触发时第一存储器112的第一内核模式部分114的内容。
然后,第一服务器计算设备106将转储文件132发送到第二服务器计算设备108,随后可以将转储文件132存储在第二服务器计算设备108的数据存储库(未示出)中。响应于第二服务器计算设备108已经接收到转储文件132的指示,加载器组件148创建内核执行器应用150以作为新的大型地址感知用户模式进程。因此,加载器组件148使得用户模式地址空间0GB-4GB被分配给内核执行器应用150。然后,加载器组件148对转储文件132进行反序列化,并将反序列化的内容写入被分配给内核执行器应用150的用户模式地址空间。更具体地讲,加载器组件148可以执行一对一转换,因此不需要对反序列化内容中的地址进行更新。更具体地讲,被映射到第一存储器112的第一内核模式部分114的内核模式地址空间可以是2GB-4GB,并且因此,由于加载器组件148已经向内核执行器应用150分配了(第二服务器计算设备108的)用户模式地址空间中的0GB-4GB地址,加载器组件148可以用反序列化的内容来填充第二用户模式存储器部分140中被映射到用户模式地址2GB-4GB的部分。
另外,加载器组件148可以向内核执行器应用150发送信息,该信息通知内核执行器应用150如何设置第二处理器134的寄存器,其中可以从转储文件132中取回该信息。在适当地设置了第二处理器134的寄存器之后,第二处理器134能够从第一处理器110停止执行指令的点(例如,在断点124处)恢复执行指令。
响应于内核执行器应用150已经在其适当的用户模式地址空间处加载第一内核117、第一驱动程序118、第一内核和驱动程序数据120以及计算机代码122,内核执行器应用150执行一些相对小的修补,以将计算机代码122中的某些内核模式函数换出,代之以它们的用户模式等效函数。基于加载器组件148提供的信息,内核执行器应用150更新第二处理器134的寄存器。此外,内核执行器应用150可以修补用于内核执行器应用150的调用栈上的返回地址,以使该返回地址指向报告成功指示符的新函数。因此,当第二处理器134成功执行计算机代码122时,输出计算机代码122成功运行(且没有崩溃)的指示。
响应于内核执行器应用150更新第二处理器134的适当寄存器,修补计算机代码122以及修改调用栈,模糊测试组件152使得第二处理器134使用开发者104提供的有效指令来执行内核执行器应用150。模糊测试组件152监视用户模式内核执行器应用150的执行,并作为常规的模糊测试工具运行。也就是说,模糊测试组件152被提供了已知的有效输入,监视内核执行器应用150运行并生成执行轨迹,并且在内核执行器应用150成功完成时,模糊测试组件150对输入值进行扰乱。此后,使得加载器组件148:1)重新生成内核执行器应用150;2)对转储文件132进行反序列化;以及3)用转储文件132中表示的内容重新填充第二用户模式部分140。进一步,内核执行器应用150执行上述相对小的修补,并重置第二处理器134的寄存器(如上所述)。然后,模糊测试组件150将扰乱的输入值提供给内核执行器应用150,并使得第二处理器134重新运行内核执行器应用150。当内核执行器应用150崩溃时(例如,模糊测试组件152提供了导致计算机代码122崩溃的输入数据),生成供开发者104检查的输出。例如,当调试计算机代码122时,开发者104可以使用时间旅行(time-travel)调试器。
总而言之,这里让一个操作系统的内核进入第二操作系统的用户模式。这种方法有很多优点。首先,常规的模糊测试工具可以对内核代码和将要在内核中运行的驱动程序进行模糊测试。常规的模糊测试工具不需要计算系统的完整虚拟化即可查看执行轨迹,另外,无需跟踪任何无关的代码。此外,加载器组件148、内核执行器应用150和模糊测试组件152的组合的性能非常好,因为加载器组件148仅需要几秒即可在内核执行器应用150崩溃时重新创建其实例,并且内核执行器应用150(包括计算机代码122)以全硬件速度运行而不存在虚拟化开销。最后,由于由内核执行器应用150执行的修补,因此存在强的成功和失败指示符。当计算机代码122返回时,模糊测试组件152不使用其提供的输入来发现漏洞。相反,当内核执行器应用150崩溃时,模糊测试组件152可以输出在计算机代码122中存在漏洞的指示,并且开发者104可以使用时间旅行调试器来更好地理解和解决该漏洞。
现在参考图2,示例性的示意图200图示出了将32位操作系统的内核模式地址空间中的内容转换到64位操作系统中的用户模式地址空间(分派给内核执行器应用150)中。示意图200图示出了在32位操作系统的内核与用户模式地址空间之间分配的虚拟地址空间202。在示例中,32位操作系统将0GB-2GB的虚拟地址分配给用户模式进程,并且将2GB-4GB的虚拟地址分配给操作系统的内核(包括第一操作系统内核117、第一驱动程序118、第一内核和驱动程序数据120以及计算机代码122)。在32位地址空间202中图示了断点124的位置。
如先前所描述的,第二操作系统支持64位地址空间204,其中第二操作系统将0GB-4GB的地址分配给用户模式应用,并且将4GB-8TB的地址分配给64位操作系统的内核。因此,为了允许一对一转换,以使不需要在32位地址空间202和64位地址空间204之间转换指令的地址,加载器组件148可以创建内核执行器应用150,以作为将被分配0GB-4GB(其中包括2GB-4GB)的虚拟地址的用户模式应用。加载器组件148对转储文件132进行反序列化,并且用32位地址空间202中的2GB-4GB的内容来填充虚拟地址空间204中的2GB-4GB。在内核执行器应用150更新了第二处理器134的寄存器后,在断点124处开始执行计算机代码122。因此,第二处理器134正在有效地执行第一操作系统内核的实例(没有意识到它正在这样做)。
现在参考图3,描绘了一示意性功能框图,其描绘了内核执行器应用150的操作。可以确定,在2GB-4GB的虚拟地址空间中的内容包括对第一函数的调用。在示例中,第一函数可以是用于将存储器分配给内核进程的内核专用函数。如果用户模式进程将要调用此函数,则用户模式进程会崩溃。因此,内核执行器应用150可以搜索对第一函数的调用,并且用对其用户模式等效函数的调用(例如,对在用户模式下分配存储器的函数的调用)来代替对第一函数的调用。可以针对多个已知的内核模式专用函数来执行此操作。
图4和图5图示出了与测试将要在操作系统的内核模式下运行的计算机代码有关的示例性方法。虽然将该方法示出并描述为是按一种顺序执行的一系列动作,但是应当理解和赞赏的是,该方法不受这一顺序的次序限制。例如,一些动作可以以与本文所述不同的次序发生。另外,一个动作可以与另一动作同时发生。此外,在一些实例中,实现本文描述的方法可以不需要所有的动作。
此外,本文描述的动作可以是计算机可执行指令,其可以由一个或多个处理器来实现和/或被存储在一个或多个计算机可读介质上。计算机可执行指令可以包括例程、子例程、程序、执行线程等。更进一步,该方法的动作的结果可以被存储在计算机可读介质中,显示在显示设备上,等等。
现在参考图4,其图示出了一个流程图,图示出可以由运行第一操作系统的计算系统(例如,第一服务器计算设备106)执行的示例性方法400。方法400在402处开始,并且在404处接收待测试的计算机代码,其中计算机代码将在操作系统的内核模式下运行,并且进一步其中计算机代码具有位于其中的断点。如前所述,计算机代码可以是驱动程序、操作系统内核的某些部分等。在406处,接收将使得计算机代码被调用并且因此触发断点的输入。在408处,操作系统运行直到触发断点为止。在410处,响应于触发断点而生成转储文件,其中转储文件表示被映射到操作系统的内核模式地址空间的存储器的一部分的内容。进一步,转储文件包括如下内容,该内容表示执行操作系统内核的计算机处理器的寄存器的值。方法400在412处完成。
现在转到图5,图示出了流程图500,流程图500图示出可以由运行第二操作系统的计算系统(诸如第二服务器计算设备108)执行的示例性方法500。方法500在502处开始,并且在504处接收转储文件(例如,在方法400的410处生成的转储文件)。在506处,响应于接收转储文件,创建新的用户模式进程。
在508处,将用户模式地址空间分配给用户模式进程,其中用户模式地址空间基于其中存储了由转储文件表示的内容的内核模式地址空间。在510处,当断点被触发时,对转储文件进行反序列化以重建内核模式地址空间的内容。
在512处,用在510处重建的内容来填充所分配的用户模式地址空间。在514处,修改新创建的用户模式进程的寄存器文件以表示触发断点时的处理器(例如,第一处理器110)的处理器寄存器。在516处,通过将用户模式地址空间中对内核模式函数的调用替换为对其等效的用户模式函数的调用,对用户模式地址空间中的内容进行修补。在518处,对用户模式进程的调用栈的返回地址进行修补,以使其包括指向向模糊测试工具报告成功的函数的指针,并且在520处,对用户模式进程进行模糊测试,其中对用户模式进程进行模糊测试包括,在向用户模式进程提供模糊测试工具产生的输入时,监视用户模式进程的执行轨迹。方法500可以返回到506,在506处创建用户模式进程。动作506-520可以重复阈值数量的次数,或者直到模糊测试工具(或其他漏洞测试工具)已经按设计被执行为止。在另一示例性实施例中,用户模式进程可以迭代地复制其自身的副本,以使可以迭代执行动作514和516,并且模糊测试工具可以对用户模式进程的副本进行模糊测试。方法500在522处完成。
现在阐述与本文描述的方面有关的示例。
示例1:一种计算系统,包括:处理器;存储指令的存储器,该指令当由处理器执行时使得处理器执行动作,该动作包括:接收由计算设备生成的文件,该文件表示在该计算设备上执行的操作系统的内核模式地址空间的内容,其中由该文件表示的内容包括针对漏洞而被测试的计算机代码;基于该文件,用由该文件表示的内容来填充存储器的一部分,其中存储器的该一部分被映射到由处理器执行的第二操作系统的用户模式地址空间;以及响应于用由该文件表示的内容来填充存储器的该一部分,针对漏洞来测试计算机代码,其中针对漏洞来测试计算机可执行指令包括:基于被提供给计算机代码的输入在用户模式地址空间中执行该计算机代码;以及生成指示计算机代码在用该输入被执行时是否崩溃的输出。
示例2:根据示例1的计算系统,其中该计算机代码包括将要在操作系统的内核空间中执行的驱动程序。
示例3:根据示例1-2中的任一项所述的计算系统,其中该文件是由操作系统响应于在操作系统的内核模式下执行计算机代码时触发断点而创建的转储文件,其中断点由开发者置于计算机代码中。
示例4:根据示例4所述的计算系统,该动作还包括:对转储文件进行反序列化,以重新创建在触发断点时的操作系统的内核模式地址空间的内容;以及响应于对转储文件进行反序列化,用该内容来填充存储器的该一部分。
示例5:根据示例1-4中的任一项所述的计算系统,该动作还包括:在用该内容填充存储器的该一部分之后,并且在针对漏洞测试计算机代码之前:在计算机代码中搜索对请求在操作系统的内核模式地址空间中分配存储器的函数的调用;将对该函数的调用替换为对第二函数的第二调用,其中第二函数请求在第二操作系统的用户模式地址空间中进行存储器分配。
示例6:根据示例1-5中的任一项所述的计算系统,其中该操作系统和第二操作系统是不同的操作系统。
示例7:根据示例6所述的计算系统,其中该操作系统是M位操作系统,并且进一步地其中第二操作系统是N位操作系统,其中N大于M。
示例8:根据示例7所述的计算系统,其中用由文件表示的内容来填充存储器的该一部分包括将存储器的该一部分分配给被配置为在N位操作系统的用户模式下执行的计算机可执行应用,其中响应于将存储器的该一部分分配给该计算机可执行应用,该内容被置于存储器的该一部分中。
示例9:根据示例8所述的计算系统,其中针对漏洞测试计算机代码包括检测到该计算机可执行应用已成功执行。
示例10:根据示例1-9中任一项所述的计算系统,其中该计算机代码包含内核代码的一部分,内核代码的该一部分将在该操作系统的内核空间或第二操作系统的内核空间中执行。
示例11:根据示例1-10中任一项所述的计算系统,其中针对漏洞测试计算机可执行指令包括:执行以下与计算机代码有关的工具中的至少一个:模糊测试工具、堆检查器、类型检查器、边界检查器或分析工具。
示例12:一种由包括至少一个处理器的计算系统执行的方法,该方法包括:执行待针对漏洞而被测试的计算机代码,该计算机代码在第一操作系统的内核模式下被执行;响应于在执行该计算机代码时检测到在该计算机代码中触发了断点,生成表示在触发断点时被映射到第一操作系统的内核模式地址空间的内核模式存储器的内容的文件,其中断点已经由检查计算机代码的开发者设置;基于该文件,用由该文件表示的内容来填充用户模式存储器,其中用户模式存储器被映射到不同于第一操作系统的第二操作系统的用户模式地址空间,其中用户模式存储器中的内容包括计算机代码;在该计算机代码处于用户模式存储器中时,执行该计算机代码;以及响应于执行用户模式存储器中的计算机代码,标识该计算机代码中的漏洞。
示例13:根据示例12所述的方法,其中执行该计算机代码包括:生成输入以提供给计算机代码;以及用该输入发起计算机代码的执行,其中标识计算机代码中的漏洞包括标识计算机代码在用该输入被发起时崩溃的情况。
示例14:根据示例12-13中任一项所述的方法,其中第一操作系统是M位操作系统,第二操作系统是N位操作系统,并且进一步地其中N大于M。
示例15:根据示例14所述的方法,其中第一操作系统是32位操作系统,并且第二操作系统是64位操作系统。
示例16:根据示例12-15中任一项所述的方法,进一步包括执行与计算机代码有关的以下工具中的至少一个工具:模糊测试工具;堆检查器;类型检查器;边界检查器;或分析工具,其中基于该至少一个工具的输出在计算机代码中标识漏洞。
示例17:根据示例12-16中的任一项所述的方法,其中该文件是转储文件,并且进一步地其中用由该文件表示的内容来填充用户模式存储器包括:对文件进行反序列化,以重建在触发断点时的内核模式存储器的内容。
示例18:根据示例12-17中任一项所述的方法,还包括:当计算机代码在用户模式存储器中时,在用由文件表示的内容来填充用户模式存储器之后并且在执行计算机代码之前:确定该内容包括对函数的调用;并响应于确定该内容包括对函数的调用,用对第二函数的第二调用来替换该内容中的对函数的调用。
示例19:根据示例12-18中任一项所述的方法,其中用由文件表示的内容来填充用户模式存储器包括:将用户模式存储器分配给计算机可执行应用,该计算机可执行应用被配置为在第二操作系统的用户模式下执行,其中响应于将用户模式存储器分配给计算机可执行应用,将该内容置于用户模式存储器中。
示例20:一种包括指令的计算机可读存储介质,该指令在由处理器执行时使得处理器执行以下动作:接收由计算设备生成的文件,该文件表示内核模式存储器中被映射到在该计算设备上执行的操作系统的内核模式地址空间的内容,其中由该文件表示的内容包括要针对漏洞而被测试的计算机代码;基于该文件,用由该文件表示的内容来填充用户模式存储器,其中用户模式存储器被映射到处理器执行的第二操作系统的用户模式地址空间;以及响应于用由该文件表示的内容来填充用户模式存储器,针对漏洞测试计算机可执行指令,其中针对漏洞测试计算机可执行指令包括:基于被提供给计算机可执行指令的输入在用户模式地址空间中执行该计算机可执行指令;以及生成该计算机可执行指令在用该输入被执行时是否崩溃的输出。
现在参考图6,其示出了可以根据本文公开的系统和方法来使用的示例性计算设备600的高层图示。例如,计算设备600可以用在支持生成转储文件的系统中。作为另一示例,计算设备600可以用在支持对将在内核模式下执行的计算机代码进行模糊测试的系统中。计算设备600包括至少一个处理器602,处理器602执行存储在存储器604中的指令。例如,该指令可以是用于实现被描述为由上述一个或多个组件执行的功能性的指令,或用于实现上述上述方法中的一个或多个的指令。处理器602可以通过系统总线606访问存储器604。除了存储可执行指令之外,存储器604还可以存储内核数据、驱动程序数据、注册表信息等。
计算设备600还包括数据存储库608,处理器602可以通过系统总线606访问数据存储库608。数据存储库608可以包括可执行指令、转储文件等。计算设备600还包括输入接口610,输入接口610允许外部设备与计算设备600进行通信。例如,输入接口610可以被用来从外部计算机设备、用户等接收指令。计算设备600还包括输出接口612,输出接口612将计算设备600与一个或多个外部设备对接。例如,计算设备600可以通过输出接口612来显示文本、图像等。
可以想到,经由输入接口610和输出接口612与计算设备600进行通信的外部设备可以被包括在这样一种环境中,该环境提供了用户可以与之交互的基本上任何类型的用户界面。用户界面类型的示例包括图形用户界面、自然用户界面等。例如,图形用户界面可以接受来自用户采用诸如键盘、鼠标、遥控器等之类的(一个或多个)输入设备的输入,并且在诸如显示器之类的输出设备上提供输出。进一步,自然用户界面可以使用户能够以不受诸如键盘、鼠标、遥控器等输入设备所施加的约束的方式与计算设备600交互。相反,自然用户界面可以依赖语音识别、触摸和手写笔识别、屏幕上以及与屏幕相邻的手势识别、空中手势、头部和眼睛跟踪、声音和语音、视觉、触摸、手势、机器智能等等。
另外,尽管图示为单个系统,但是应当理解,计算设备600可以是分布式系统。因此,例如,几个设备可以通过网络连接进行通信,并且可以共同执行被描述为由计算设备600执行的任务。
本文描述的各种功能可以以硬件、软件或其任何组合来实现。如果以软件实现,则功能可以作为一个或多个指令或代码存储在计算机可读介质上或在计算机可读介质上传输。计算机可读介质包括计算机可读存储介质。计算机可读存储介质可以是计算机可以访问的任何可用存储介质。作为示例而非限制,这种计算机可读存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁性存储设备,或可以被用来携带或存储以可以由计算机访问的指令或数据结构的形式的期望程序代码的任何其他介质。本文所使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘(BD)、其中磁盘通常以磁性方式复制数据,而光盘通常以光学方式用激光来复制数据。进一步,传播的信号不包括在计算机可读存储介质的范围内。计算机可读介质还包括通信介质,通信介质包括促进将计算机程序从一处转移到另一处的任何介质。例如,连接可以是通信介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或无线技术(诸如红外、无线电和微波)从网站、服务器或其他远程源传输软件,则通信介质的定义中包括了同轴电缆、光纤电缆、双绞线、DSL或诸如红外、无线电和微波之类的无线技术。上述的组合也应该被包括在计算机可读介质的范围内。
替代地或另外,本文中描述的功能性可以至少部分地由一个或多个硬件逻辑组件执行。例如但不限于,可以使用的硬件逻辑组件的说明性的类型包括现场可编程门阵列(FPGA)、程序专用集成电路(ASIC)、程序专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等。
上面已经描述的内容包括一个或多个实施例的示例。当然,为了描述前述各方面,不可能描述上述设备或方法的每一个可想到的修改和变更,但是本领域的普通技术人员可以认识到,各方面的许多进一步的修改和置换是可能的。因此,所描述的各方面旨在涵盖落入所附权利要求的精神和范围内的所有这种改变、修改和变化。此外,就在具体的说明书或权利要求中使用术语“包括”的程度而言,该术语旨在涵盖了与术语“包含”当在权利要求中作为过渡词时使用被解释的相似的方式。
Claims (15)
1.一种计算系统,包括:
处理器;以及
存储指令的存储器,所述指令当由所述处理器执行时,使得所述处理器执行动作,所述动作包括:
接收由计算设备生成的文件,所述文件表示在所述计算设备上执行的操作系统的内核模式地址空间的内容,其中由所述文件表示的所述内容包括要针对漏洞而被测试的计算机代码;
基于所述文件,用由所述文件表示的所述内容来填充所述存储器的一部分,其中所述存储器的所述一部分被映射到由所述处理器执行的第二操作系统的用户模式地址空间;以及
响应于用由所述文件表示的所述内容来填充所述存储器的所述一部分,针对所述漏洞来测试所述计算机代码,其中针对所述漏洞来测试所述计算机代码包括:
基于被提供给所述计算机代码的输入,在所述用户模式地址空间中执行所述计算机代码;以及
生成指示所述计算机代码在用所述输入被执行时是否崩溃的输出。
2.根据权利要求1所述的计算系统,其中所述计算机代码包括将要在所述操作系统的内核空间中执行的驱动程序。
3.根据权利要求1-2中的任一项所述的计算系统,其中所述文件是由所述操作系统响应于在所述操作系统的内核模式下执行所述计算机代码时触发断点而创建的转储文件,其中所述断点由开发者置于所述计算机代码中。
4.根据权利要求3所述的计算系统,所述动作还包括:
对所述转储文件进行反序列化,以重新创建在触发所述断点时所述操作系统的所述内核模式地址空间的所述内容;以及
响应于对所述转储文件进行反序列化,用所述内容来填充所述存储器的所述一部分。
5.根据权利要求1-4中的任一项所述的计算系统,所述动作还包括:
在用所述内容填充所述存储器的所述一部分之后,并且在针对所述漏洞测试所述计算机代码之前:
在所述计算机代码中搜索对请求在所述操作系统的所述内核模式地址空间中进行存储器分配的函数的调用;以及
将对所述函数的所述调用替换为对第二函数的第二调用,其中所述第二函数请求在所述第二操作系统的所述用户模式地址空间中进行存储器分配。
6.根据权利要求1-5中的任一项所述的计算系统,其中所述操作系统和所述第二操作系统是不同的操作系统。
7.根据权利要求6所述的计算系统,其中所述操作系统是M位操作系统,并且进一步地其中所述第二操作系统是N位操作系统,其中N大于M。
8.根据权利要求7所述的计算系统,其中用由所述文件表示的所述内容来填充所述存储器的所述一部分包括将存储器的所述一部分分配给被配置为在所述N位操作系统的用户模式下执行的计算机可执行应用,其中响应于将存储器的所述一部分分配给所述计算机可执行应用,所述内容被置于存储器的所述一部分中。
9.根据权利要求1-8中的任一项所述的计算系统,其中所述计算机代码包括内核代码的一部分,所述内核代码的所述一部分将在所述操作系统的内核空间或所述第二操作系统的内核空间中执行。
10.一种由包括至少一个处理器的计算系统执行的方法,所述方法包括:
执行待针对漏洞而被测试的计算机代码,所述计算机代码在第一操作系统的内核模式下被执行;
响应于在执行所述计算机代码时检测到在所述计算机代码中已经触发断点,生成表示在触发所述断点时被映射到所述第一操作系统的内核模式地址空间的内核模式存储器的内容的文件,其中所述断点已经由检查所述计算机代码的开发者设置;
基于所述文件,用由所述文件表示的所述内容来填充用户模式存储器,其中所述用户模式存储器被映射到不同于所述第一操作系统的第二操作系统的用户模式地址空间,其中所述用户模式存储器中的所述内容包括所述计算机代码;
在所述计算机代码处于所述用户模式存储器中时,执行所述计算机代码;以及
响应于执行所述用户模式存储器中的所述计算机代码,标识所述计算机代码中的漏洞。
11.根据权利要求10所述的方法,其中执行所述计算机代码包括:
生成输入以提供给所述计算机代码;以及
用所述输入发起所述计算机代码的执行,其中标识所述计算机代码中的所述漏洞包括标识所述计算机代码在用所述输入被发起时崩溃。
12.根据权利要求10-11中的任一项所述的方法,其中所述第一操作系统是M位操作系统,所述第二操作系统是N位操作系统,并且进一步地其中N大于M。
13.根据权利要求10-12中的任一项所述的方法,还包括执行与所述计算机代码有关的以下工具中的至少一个工具:
模糊测试工具;
堆检查器;
类型检查器;
边界检查器;或
分析工具,其中基于所述至少一个工具的输出在所述计算机代码中标识所述漏洞。
14.根据权利要求10-13中的任一项所述的方法,其中所述文件是转储文件,并且进一步地其中用由所述文件表示的所述内容来填充所述用户模式存储器包括:对所述文件进行反序列化,以重建在触发所述断点时的所述内核模式存储器的所述内容。
15.一种包括指令的计算机可读存储介质,所述指令在由处理器执行时,使得所述处理器执行动作,所述动作包括:
接收由计算设备生成的文件,所述文件表示被映射到在所述计算设备上执行的操作系统的内核模式地址空间的内核模式存储器的内容,其中由所述文件表示的所述内容包括要针对漏洞而被测试的计算机可执行指令;
基于所述文件,用由所述文件表示的所述内容来填充用户模式存储器,其中所述用户模式存储器被映射到由所述处理器执行的第二操作系统的用户模式地址空间;以及
响应于用由所述文件表示的所述内容来填充所述用户模式存储器,针对所述漏洞测试所述计算机可执行指令,其中针对所述漏洞测试所述计算机可执行指令包括:
基于被提供给所述计算机可执行指令的输入,执行所述用户模式存储器中的所述计算机可执行指令;以及
生成指示所述计算机可执行指令在用所述输入被执行时是否崩溃的输出。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/927,726 US10846211B2 (en) | 2018-03-21 | 2018-03-21 | Testing kernel mode computer code by executing the computer code in user mode |
US15/927,726 | 2018-03-21 | ||
PCT/US2019/021729 WO2019182803A1 (en) | 2018-03-21 | 2019-03-12 | Testing kernel mode computer code by executing the computer code in user mode |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111868695A true CN111868695A (zh) | 2020-10-30 |
Family
ID=65911276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980020369.XA Pending CN111868695A (zh) | 2018-03-21 | 2019-03-12 | 通过在用户模式下执行计算机代码来测试内核模式计算机代码 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10846211B2 (zh) |
EP (1) | EP3769222B1 (zh) |
CN (1) | CN111868695A (zh) |
WO (1) | WO2019182803A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10599558B1 (en) * | 2019-11-05 | 2020-03-24 | CYBERTOKA Ltd. | System and method for identifying inputs to trigger software bugs |
CN111857993B (zh) * | 2020-06-24 | 2022-07-08 | 烽火通信科技股份有限公司 | 一种内核态调用用户态函数的方法 |
KR102578430B1 (ko) * | 2021-08-13 | 2023-09-15 | 한국과학기술원 | 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080127142A1 (en) * | 2006-11-28 | 2008-05-29 | Microsoft Corporation | Compiling executable code into a less-trusted address space |
CN104254840A (zh) * | 2012-04-27 | 2014-12-31 | 马维尔国际贸易有限公司 | 在计算机系统中的存储器转储和分析 |
CN105683924A (zh) * | 2013-06-06 | 2016-06-15 | 微软技术许可有限责任公司 | 通过从在本机模式中执行转变为在经解释的模式中执行来调试本机代码 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5245274A (en) * | 1991-05-31 | 1993-09-14 | Youngquist John S | Storm monitor |
US5450586A (en) * | 1991-08-14 | 1995-09-12 | Hewlett-Packard Company | System for analyzing and debugging embedded software through dynamic and interactive use of code markers |
US6738928B1 (en) * | 2000-06-19 | 2004-05-18 | Hewlett-Packard Development Company, L.P. | Method and expert system for analysis of crash dumps |
US20040111707A1 (en) * | 2000-12-15 | 2004-06-10 | Bliss Andrew L. | Debugger for multiple processors and multiple debugging types |
US20020169738A1 (en) * | 2001-05-10 | 2002-11-14 | Giel Peter Van | Method and system for auditing an enterprise configuration |
US20040025093A1 (en) * | 2002-07-31 | 2004-02-05 | Jeff Willy | System and method for collecting code coverage information on fatal error path code |
EP1654656A4 (en) * | 2003-07-25 | 2010-08-04 | Arthur R Zingher | DEVICE AND METHOD FOR SOFTWARE DEBUGGING |
US7321957B2 (en) * | 2003-10-24 | 2008-01-22 | Intel Corporation | Debugging a trusted component in a system |
US7302613B2 (en) * | 2003-11-12 | 2007-11-27 | Microsoft Corporation | System and method for capturing kernel-resident information |
GB0327571D0 (en) * | 2003-11-27 | 2003-12-31 | Ibm | A memory dump of a computer system |
US7653899B1 (en) | 2004-07-23 | 2010-01-26 | Green Hills Software, Inc. | Post-execution software debugger with performance display |
US7437612B1 (en) * | 2004-09-21 | 2008-10-14 | Sun Microsystems, Inc. | Postmortem detection of owned mutual exclusion locks |
US7818623B2 (en) * | 2005-10-25 | 2010-10-19 | Hewlett-Packard Development Company, L.P. | Kernel debugging in a cluster computing system |
US20080126879A1 (en) * | 2006-09-27 | 2008-05-29 | Rajeev Tiwari | Method and system for a reliable kernel core dump on multiple partitioned platform |
US8381192B1 (en) | 2007-08-03 | 2013-02-19 | Google Inc. | Software testing using taint analysis and execution path alteration |
US8239167B2 (en) * | 2007-10-19 | 2012-08-07 | Oracle International Corporation | Gathering context information used for activation of contextual dumping |
WO2009104268A1 (ja) * | 2008-02-21 | 2009-08-27 | 富士通株式会社 | パッチ候補選択装置、パッチ候補選択プログラムおよびパッチ候補選択方法 |
US8528039B2 (en) * | 2009-11-04 | 2013-09-03 | Verizon Patent And Licensing Inc. | System for and method of set-top box memory monitoring |
CN102346708B (zh) | 2010-08-03 | 2014-07-16 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
US9727441B2 (en) * | 2011-08-12 | 2017-08-08 | Microsoft Technology Licensing, Llc | Generating dependency graphs for analyzing program behavior |
US9378368B2 (en) * | 2014-04-30 | 2016-06-28 | Parsons Corporation | System for automatically collecting and analyzing crash dumps |
US9652328B2 (en) | 2014-05-12 | 2017-05-16 | International Business Machines Corporation | Restoring an application from a system dump file |
US9612939B2 (en) * | 2014-10-29 | 2017-04-04 | Microsoft Technology Licensing, Llc. | Diagnostic workflow for production debugging |
US10268563B2 (en) * | 2016-06-23 | 2019-04-23 | Vmware, Inc. | Monitoring of an automated end-to-end crash analysis system |
US20180225063A1 (en) * | 2017-02-08 | 2018-08-09 | Intel IP Corporation | Device, system and method to provide categorized trace information |
-
2018
- 2018-03-21 US US15/927,726 patent/US10846211B2/en active Active
-
2019
- 2019-03-12 CN CN201980020369.XA patent/CN111868695A/zh active Pending
- 2019-03-12 WO PCT/US2019/021729 patent/WO2019182803A1/en unknown
- 2019-03-12 EP EP19713631.0A patent/EP3769222B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080127142A1 (en) * | 2006-11-28 | 2008-05-29 | Microsoft Corporation | Compiling executable code into a less-trusted address space |
CN104254840A (zh) * | 2012-04-27 | 2014-12-31 | 马维尔国际贸易有限公司 | 在计算机系统中的存储器转储和分析 |
CN105683924A (zh) * | 2013-06-06 | 2016-06-15 | 微软技术许可有限责任公司 | 通过从在本机模式中执行转变为在经解释的模式中执行来调试本机代码 |
Also Published As
Publication number | Publication date |
---|---|
WO2019182803A1 (en) | 2019-09-26 |
US10846211B2 (en) | 2020-11-24 |
US20190294537A1 (en) | 2019-09-26 |
EP3769222A1 (en) | 2021-01-27 |
EP3769222B1 (en) | 2021-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6539501B1 (en) | Method, system, and program for logging statements to monitor execution of a program | |
US7594143B2 (en) | Analysis engine for analyzing a computer system condition | |
US10289411B2 (en) | Diagnosing production applications | |
KR101519845B1 (ko) | 안티디버깅 방법 | |
US9170904B1 (en) | I/O fault injection using simulated computing environments | |
US9678816B2 (en) | System and method for injecting faults into code for testing thereof | |
US10409632B2 (en) | Emulation of hardware components based on interrupt design | |
US7962832B2 (en) | Method for detecting memory error | |
US7783865B2 (en) | Conditional data watchpoint management | |
US20100153693A1 (en) | Code execution with automated domain switching | |
CN111868695A (zh) | 通过在用户模式下执行计算机代码来测试内核模式计算机代码 | |
CN112035299A (zh) | 用基于存储器的通信协议进行仿真设备测试的系统和方法 | |
US9176821B2 (en) | Watchpoint support system for functional simulator | |
US9501591B2 (en) | Dynamically modifiable component model | |
CN108073451B (zh) | 一种多核cpu上异构操作系统间中断处理方法及装置 | |
US9092567B2 (en) | Systems and methods for analyzing transactions in a computer system | |
US20210157924A1 (en) | Coverage of web appliction analysis | |
US20240095174A1 (en) | Method for detecting error of operating system kernel memory in real time | |
Ge et al. | HYPERFUZZER: An efficient hybrid fuzzer for virtual cpus | |
US10901827B2 (en) | Failover of a hardware accelerator to software | |
US10593010B2 (en) | Techniques for capturing and executing graphics processing operations | |
KR102098905B1 (ko) | 호스트의 테스트 시나리오로 제어장치의 복수의 파티션간 영향도를 측정하기 위한 방법, 동일 방법을 구현하기 위한 호스트 및 시스템, 그리고 동일 방법을 기록하기 위한 매체 | |
US9841960B2 (en) | Dynamic provision of debuggable program code | |
CN106203091A (zh) | 一种虚拟机逃逸检测方法及装置 | |
US20220335135A1 (en) | Vulnerability analysis and reporting for embedded systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |