在操作系统内核的隔离地址空间中执行系统调用

文档序号:1895043 发布日期:2021-11-26 浏览:7次 >En<

阅读说明:本技术 在操作系统内核的隔离地址空间中执行系统调用 (Performing system calls in isolated address space of operating system kernel ) 是由 M·拉波波特 J·K·尼德尔 J·巴特利 于 2020-05-15 设计创作,主要内容包括:本系统和方法的实施例可以通过在专用地址空间中执行系统调用以减少对恶意应用可见并因此可由恶意应用利用的共享资源的量来在操作系统内核本身内部提供附加的安全机制。例如,在实施例中,一种在计算机中实现的方法,该计算机可包括处理器、可由处理器访问的存储器以及存储在存储器中且可由处理器执行的计算机程序指令,该方法可以包括:当用户进程进行系统调用时,切换到内核模式,并使用用于用户进程的系统调用页表以执行系统调用处理程序,当系统调用处理程序尝试访问未映射的内核空间存储器时,生成页错误,以及通过确定是否允许对未映射内核空间存储器的尝试访问来处理页错误。(Embodiments of the present systems and methods may provide additional security mechanisms within the operating system kernel itself by performing system calls in a private address space to reduce the amount of shared resources that are visible to and therefore exploitable by malicious applications. For example, in an embodiment, a method implemented in a computer that may include a processor, a memory accessible by the processor, and computer program instructions stored in the memory and executable by the processor may include: the method includes switching to kernel mode when a user process makes a system call and using a system call page table for the user process to execute a system call handler, generating a page fault when the system call handler attempts to access an unmapped kernel space memory, and handling the page fault by determining whether the attempted access to the unmapped kernel space memory is allowed.)

在操作系统内核的隔离地址空间中执行系统调用

背景技术

本发明涉及通过在专用地址空间中执行系统调用以减少对恶意应用可见并因此可由恶意应用利用的共享资源的量来在操作系统内核本身内部提供附加安全机制的技术。

系统调用是暴露于用户空间应用的操作系统(诸如Linux)的内核应用二进制接口(ABI)的重要部分。当执行系统调用时,从无特权模式(例如,x86上的环-3)到超级用户模式(例如,x86上的环-0)的CPU转换以及在系统调用执行期间调用的例程具有最高特权级别,因此具有访问和修改系统资源的能力。恶意用户空间应用可利用系统调用实现中的漏洞来获得对这些系统资源的访问并导致系统崩溃、读取敏感信息或获得超级用户特权。

微内核通过最小化在超级用户模式中运行的代码的量并且在隔离的地址空间中以用户特权执行大多数操作系统服务来避免特权状态的广泛暴露。微内核方法的主要缺点是与进程间通信相关联的性能成本以及系统的不同组件之间的接口的复杂性。

作为Meltdown漏洞的缓解,完全隔离用户和内核地址空间的页表隔离(PTI)机制被添加到Linux内核。然而,即使对于PTI,整个内核代码也共享相同的地址空间,并且任何系统调用处理程序中的开发使得整个系统易受攻击。

因而,出现了对在操作系统内核本身内部提供附加安全机制的技术的需要。

发明内容

本系统和方法的实施例可以通过在专用地址空间中执行系统调用来减少对恶意应用可见并因此可由恶意应用利用的共享资源的量来在操作系统内核本身内部提供附加的安全机制。

在实施例中,当用户空间应用执行系统调用时,内核条目代码可以选择适合于该特定系统调用的执行的地址空间。如果系统调用的执行尝试访问该地址空间之外的存储器,则发生页错误。页错误处理程序可以验证所请求的存储器范围是否被允许由系统调用处理程序例程访问,并且如果是,则可以将这个范围添加到专用地址空间。在系统调用完成时,可以将地址空间定义恢复到初始。

例如,在实施例中,一种在计算机中实现的方法,该计算机可包括处理器、可由处理器访问的存储器以及存储在存储器中且可由处理器执行的计算机程序指令,该方法可以包括:当用户进程进行系统调用时,切换到内核模式,并使用用于用户进程的系统调用页表以执行系统调用处理程序,当系统调用处理程序尝试访问未映射的内核空间存储器时,生成页错误,以及通过确定是否允许对未映射内核空间存储器的尝试访问来处理页错误。

在实施例中,计算机系统操作系统可以是Linux操作系统。系统调用页表可以包括允许内核代码的执行和对内核数据的访问的多个内核空间地址范围。系统调用页表可以通过以下方式来创建:创建模板系统调用页表,模板系统调用页表包括在执行系统调用时执行到内核模式的条目所需的内核代码和数据的映射、具有到系统调用处理程序的指针的表、以及每个系统调用处理程序的条目代码,当创建用户进程时,在进程状态表示中为用户进程创建模板系统调用页表的副本,并且用用户空间映射连同原始模板一起填充每进程条目页表,以及当确定允许页错误时,添加允许尝试访问内核空间存储器的系统调用处理程序的执行的内核空间地址范围的映射。所述方法可以进一步包括:当确定不允许页错误时,终止对做出尝试访问内核空间存储器的系统调用的用户进程的执行。所述方法可以进一步包括:当系统调用处理程序的执行结束时,移除在系统调用处理程序的执行期间添加的内核空间地址范围的映射。

在实施例中,系统可以包括处理器、可由处理器访问的存储器、以及存储在存储器中并且可由处理器执行以执行以下操作的计算机程序指令:当用户进程进行系统调用时,切换到内核模式,并且使用用于用户进程的系统调用页表来执行系统调用处理程序,当系统调用处理程序尝试访问未映射的内核空间存储器时,生成页错误,以及通过确定是否允许对未映射内核空间存储器的尝试访问来处理页错误。

在实施例中,计算机程序产品可以包括具有随其体现的程序指令的非瞬态计算机可读存储介质,所述程序指令可由计算机执行以使所述计算机执行一种方法,所述方法可包括:当用户进程进行系统调用时,切换到内核模式,并且使用用于用户进程的系统调用页表来执行系统调用处理程序,当系统调用处理程序尝试访问未映射的内核空间存储器时,生成页错误,以及通过确定是否允许对未映射内核空间存储器的尝试访问来处理页错误。

附图说明

通过参考附图,可以最好地理解本发明的细节(关于其结构和操作两者),在附图中相同的参考标号和标识指代相同的元件。

图1是根据本系统和方法的实施例的系统存储器空间的示范性示意图。

图2是本系统和方法的实施例的操作的过程的示范性流程图。

图3是其中可以实现本文所述实施例中涉及的过程的计算机系统的示范性框图。

具体实施方式

本系统和方法的实施例可以通过在专用地址空间中执行系统调用来减少对恶意应用可见并因此可由恶意应用利用的共享资源的量来在操作系统内核本身内部提供附加的安全机制。可以修改仅在单个地址空间中运行代码的常规单体操作系统内核(诸如Linux内核)以在多个地址空间中运行代码,以增加安全性。附加属性可用于增强安全性。例如,在系统调用环境中,多个地址空间中的代码可以在内核(特权)模式下运行,这可以用于确保如果执行系统调用的实体尝试在其所允许的地址空间之外的访问,则可以安全地检测和处理所尝试的访问。地址空间可以按每用户进程创建,并且可以用于对用户进程实施安全属性。

在实施例中,当用户空间应用执行系统调用时,内核条目代码可以选择适合于该特定系统调用的执行的地址空间。如果系统调用的执行尝试访问该地址空间之外的存储器,则发生页错误。页错误处理程序可以验证所请求的存储器范围是否被允许由系统调用处理程序例程访问,并且如果是,则可以将这个范围添加到专用地址空间。在系统调用完成时,可以将地址空间定义恢复到初始。

图1中示出了系统存储器空间100的示范性示意图。该示例示出了内核页表102、系统调用页表104和用户页表106。此外,可以存在下面描述的模板系统调用页表126。在该示例中,内核页表102可以与特定用户进程相关联,并且可以包括用户空间条目108、内核条目页表110和内核空间条目112。用户空间条目108可包括当系统在内核(特权)模式下运行时使用的用户空间地址映射。内核空间条目112可包括当系统在内核(特权)模式下运行时使用的内核空间地址映射。内核条目页表110可以包括映射执行从无特权到内核(特权)模式的切换所必需的结构的CPU条目区域。用户页面表106可与特定用户空间进程相关联,且用户空间条目114可仅包括由用户空间进程使用的用户空间映射。内核条目页表116可以包括映射执行从无特权到内核(特权)模式的切换所必需的结构的CPU条目区域。包括内核条目页表110、116和120的页表的这种分离可以减轻安全漏洞。

用户进程通常在无特权模式下运行,并且可访问仅包括用户空间条目114和内核条目页表116的用户页表106。以前,当用户进程进行系统调用时,系统将从无特权模式切换到内核(特权)模式,并且该进程将具有对包括用户空间条目108、内核条目页表110和内核空间条目112的整个内核页表的访问。然而,在本系统和方法的实施例中,当用户进程进行系统调用时,系统可以从无特权模式切换到内核(特权)模式,并且该进程可以访问系统调用页表104。系统调用页表104可以利用附加的系统调用(syscall)条目页表122来扩展用户进程可见映射。Syscall条目页表122可以允许用户进程访问有限的内核空间地址范围,以在从无特权模式切换到内核(特权)模式之后执行代码的有限的附加部分或对数据的访问。Syscall条目页表122可提供对代码的一部分的访问,所述代码部分被限制为足以防止对内核代码和数据的恶意访问,但提供对比可从用户空间条目118访问的代码多的代码的访问。当通过syscall条目页表122访问代码时,安全代码块124可验证所进行的任何访问是安全的。在实施例中,可以由安全代码块124执行各种验证中的任何验证。例如,在实施例中,安全代码块124可以验证仅对已知符号进行访问。

图2中示出了本系统和方法的实施例的操作的过程200的示范性流程图。这最好结合图1来看。过程200从202开始,其中,在Linux内核初始化期间,可以创建图3所示的附加模板系统调用页表126。模板系统调用页表126可以用于创建功能系统调用页表104,用于在隔离的地址空间中执行系统调用处理程序。模板系统调用页表126可以具有在执行系统调用时执行到内核(特权)模式的条目所需的内核代码和数据的映射128、具有指向系统调用处理程序的指针的表、以及syscall条目页表122中的每个系统调用处理程序的条目代码。此外,模板系统调用页表126可以具有填充的内核条目页表120和空的用户空间页表118。

在204处,当创建进程时,模板系统调用页表126可以被复制到进程状态表示以形成操作系统调用页表104。除了包括已填充内核条目页表120和syscall条目页表122的原始模板之外,每进程系统调用页表104的空用户空间页表118可以与正常进程页表相同的方式填充有用户空间映射。

在206处,用户空间进程可以执行系统调用。CPU可转变到内核(特权)模式且可调用通用系统调用条目例程。该路由可以切换CPU页表指针寄存器以将系统调用页表104用于该进程,并且可以跳到特定的系统调用处理程序。

在208处,在系统调用处理程序的执行期间,对内核空间内核代码和/或数据的任何访问可以引起页错误。安全块124的页错误处理程序可以验证所请求的存储器访问是否是安全的或允许的。如果发现访问是安全的或允许的,则可以将所请求的存储器范围的映射添加到每进程系统调用页表104。如果访问被认为不安全或不被允许,则用户空间进程可被终止和/或可采取其他安全动作。

在210,当系统调用处理程序的执行结束时,控制可以被转移回通用系统调用条目例程。该例程可以清理每进程系统调用页表104并且可以移除在系统调用处理程序的执行期间添加的映射。

图3中示出了计算机系统300的示例性框图,其中可以实现本文所述实施例中涉及的过程。计算机系统300可使用一个或多个编程的通用计算机系统(例如,嵌入式处理器、芯片上系统、个人计算机、工作站、服务器系统和小型计算机或大型计算机)或在分布式联网计算环境中实施。计算机系统300可以包括一个或多个处理器(CPU)302A-302N、输入/输出电路304、网络适配器306和存储器308。CPU 302A-302N执行程序指令以便执行本通信系统和方法的功能。通常,CPU 302A-302N是一个或多个微处理器,诸如INTEL 处理器。图3示出计算机系统300被实现为单个多处理器计算机系统的实施例,其中多个处理器302A-302N共享系统资源,诸如存储器308、输入/输出电路304和网络适配器306。然而,本通信系统和方法还包括其中计算机系统300被实现为多个联网的计算机系统的实施例,所述多个联网的计算机系统可以是单处理器计算机系统、多处理器计算机系统或者它们的混合。

输入/输出电路304提供向计算机系统300输入数据或从计算机系统300输出数据的能力。例如,输入/输出电路可包括输入设备(诸如键盘、鼠标、触摸板、跟踪球、扫描仪、模数转换器等)、输出设备(诸如视频适配器、监视器、打印机等)和输入/输出设备(诸如调制解调器等)。网络适配器306将设备300与网络310对接。网络310可以是任何公共或专有LAN或WAN,包括但不限于互联网。

存储器308存储由CPU 302执行的程序指令以及由CPU 302使用和处理的数据以执行计算机系统300的功能。存储器308可包含(例如)电子存储器装置,例如随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、闪存等,以及诸如磁盘驱动器、磁带驱动器、光盘驱动器的机电存储器,其可使用集成驱动电子装置(IDE)接口或其变型或增强,诸如增强型IDE(EIDE)或超直接存储器访问(UDMA),或基于小型计算机系统接口(SCSI)的接口或其变形或增强,诸如快速SCSI、宽SCSI、快速和宽SCSI,串行高级技术附件(SATA)或其变形或增强,或光纤通道仲裁环路(FC-AL)接口。

存储器308的内容可根据计算机系统300被编程以执行的功能而变化。在图3所示的示例中,示出了表示用于上述过程的实施例的例程和数据的示范性存储器内容。然而,本领域技术人员将认识到,基于公知的工程考虑,这些例程以及与这些例程相关的存储器内容可以不包括在一个系统或设备上,而是可以分布在多个系统或设备中。本通信系统和方法可以包括任何和所有这样的布置。

在图3所示的示例中,存储器308可包括内核空间312、用户空间314、安全块例程324和其他操作系统例程322。内核空间312可以包括驻留在提升的系统状态中的代码和数据,并且其可以包括受保护的存储器空间和对硬件的完全访问。内核空间312可以包括内核页表316、系统调用(syscall)页表318和模板系统调用页表320。内核页表316可以与特定用户进程相关联,并且可以包括用户空间页表108、内核条目页表110和内核空间页表112,如图1中所示和上文所描述的。系统调用页表318可用附加的syscall条目页表122来扩展用户进程可见映射,如图1中所示并且如上所述。模板系统调用页表320可以用于创建用于在隔离的地址空间中执行系统调用处理程序的功能系统调用页表104,如上所述。用户空间314可包含用户应用、程序、任务、进程等,其可用减小的特权执行,其中其可仅访问硬件和软件的可用资源的子集。用户空间314可包括可映射到用户空间无特权访问的用户页表322。安全块例程324可以验证使用系统调用页表318进行的任何访问是安全的或被允许的。其他操作系统例程322可以提供附加的系统功能。

如图3所示,本通信系统和方法可包括在提供多处理器、多任务、多进程和/或多线程计算的一个或多个系统上的实现方式,以及在仅提供单处理器、单线程计算的系统上的实现方式。多处理器计算涉及使用多于一个处理器来执行计算。多任务计算涉及使用多于一个操作系统任务来执行计算。任务是指正在执行的程序和操作系统使用的簿记信息的组合的操作系统概念。每当执行程序时,操作系统为其创建新任务。任务类似于程序的信封,因为其用任务号识别程序且将其他簿记信息附加到程序。许多操作系统(包括Linux、)能够同时运行许多任务并且被称为多任务操作系统。多任务是操作系统同时执行多于一个可执行文件的能力。每个可执行文件在其自己的地址空间中运行,这意味着可执行文件无法共享它们的存储器中的任何存储器。这具有优势,因为任何程序都不可能损坏在系统上运行的任何其他程序的执行。然而,程序除了通过操作系统(或通过读取存储在文件系统上的文件)以外没有办法交换任何信息。多进程计算类似于多任务计算,因为术语任务和进程常常可互换地使用,尽管一些操作系统在这两者之间进行区分。

本发明可以是任何可能的集成技术细节水平的系统、方法和/或计算机程序产品。所述计算机程序产品可包含上面具有计算机可读程序指令的计算机可读存储介质(或媒体),所述计算机可读程序指令用于致使处理器执行本发明的方面。计算机可读存储介质可以是可以保留和存储指令以供指令执行设备使用的有形设备。

计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储介质的更具体例子的非穷举列表包括以下:便携式计算机盘,硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存),静态随机存取存储器(SRAM)、便携式致密盘只读存储器(CD-ROM),数字通用盘(DVD)、记忆棒、软盘、机械编码设备(诸如穿孔卡片)或具有记录在其上的指令的凹槽中的凸起结构),以及上述的任意合适的组合。如本文中所使用的计算机可读存储介质不应被解释为瞬态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过导线传输的电信号。

本文所述的计算机可读程序指令可从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令并且转发这些计算机可读程序指令以便存储在对应的计算/处理设备内的计算机可读存储介质中。

用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据,或以一种或多种编程语言的任何组合编写的源代码或目标代码,包括面向对象的Smalltalk、C++等编程语言,以及过程式编程语言,如“C”编程语言或类似的编程语言。计算机可读程序指令可完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以连接到外部计算机(例如,通过使用互联网服务提供商的互联网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA))可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本发明的方面。

本文中参考根据本发明的实施例的方法、设备(系统)和计算机程序产品的流程图说明和/或框图描述本发明的方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令来实现。

这些计算机可读程序指令可以被提供给通用计算机的处理器、专用计算机或其他可编程数据处理装置,以产生机器,其通过计算机或其他可编程数据处理装置的处理器执行,创建用于实现在流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机可读程序指令还可存储在计算机可读存储介质中,可指导计算机、可编程数据处理装置、和/或其他设备以特定方式起作用,使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各方面的指令。

计算机可读程序指令还可以加载到计算机、其他可编程数据处理装置上或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图图示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。对此,流程图或框图中的每个方框可以代表模块、段或指令的一部分,其包括用于实现规定的逻辑功能的一个或多个可执行指令。在一些替代实施例中,框中所标注的功能可以不以图中所标注的次序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还将注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中的框的组合可以由基于专用硬件的系统来实现,所述基于专用硬件的系统执行指定的功能或动作或执行专用硬件与计算机指令的组合。

尽管已经描述了本发明的特定实施例,但是本领域的技术人员将理解,存在与所描述的实施例等同的其他实施例。因此,应当理解,本发明不受具体说明的实施例的限制,而仅受所附权利要求书的范围的限制。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于语义智能任务学习和自适应执行的方法和系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!