单体内核的有限执行环境

文档序号:1836236 发布日期:2021-11-12 浏览:19次 >En<

阅读说明:本技术 单体内核的有限执行环境 (Monolithic kernel limited execution environment ) 是由 J·K·尼德尔 M·拉波波特 J·巴特利 于 2020-05-15 设计创作,主要内容包括:本系统和方法的实施例可以通过隔离内核的部分以保护它们免受攻击来在操作系统内核本身内部提供附加的安全机制。例如,在实施例中,一种在计算机中实现的计算机实现的方法,计算机包括处理器、可由处理器访问的存储器、以及存储在存储器中且可由处理器执行的计算机程序指令,该方法可以包括:在计算机的存储器中的操作系统内核空间中创建命名空间,创建用于命名空间的地址空间,该地址空间仅映射命名空间所拥有的内核对象,以及使用组合页表仅向至少一个用户进程提供对命名空间所拥有的内核对象的访问。(Embodiments of the present system and method may provide additional security mechanisms within the operating system kernel itself by isolating portions of the kernel to protect them from attacks. For example, in an embodiment, a computer-implemented method implemented in a computer, the computer including a processor, a memory accessible by the processor, and computer program instructions stored in the memory and executable by the processor, the method may include: the method includes creating a namespace in an operating system kernel space in a memory of the computer, creating an address space for the namespace that maps only kernel objects owned by the namespace, and providing access to only the kernel objects owned by the namespace to at least one user process using a combined page table.)

单体内核的有限执行环境

背景技术

本发明涉及通过隔离内核的部分以保护它们免受攻击来在操作系统内核本身内部提供附加安全机制的技术。

Linux操作系统内核是单体的(monolithic),意味着所有代码和数据被链接在一起并且在代码或数据的不同部分之间不存在强制分离。这意味着接口中的可利用的缺陷可允许攻击者获得对内核资源的不受限制的访问。由于像这样的缺陷经常出现,因此需要一种机制来限制可能由这种利用所造成的损坏。例如,假设在文件系统中存在可利用的缺陷。如果攻击者利用该缺陷,则他可以获得对其他子系统(诸如存储器分配器、联网栈、调度器等)的访问,即使那些子系统不包含可利用缺陷。这是由于内核本身内部缺乏安全机制,因为内核被构建为单个代码块。

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

发明内容

本系统和方法的实施例可以通过隔离内核的部分以保护它们免受攻击来在操作系统内核本身内部提供附加的安全机制。

例如,在实施例中,一种在计算机中实现的计算机实现的方法,计算机包括处理器、可由处理器访问的存储器、以及存储在存储器中且可由处理器执行的计算机程序指令,该方法可以包括:在计算机的存储器中的操作系统内核空间中创建命名空间,创建用于命名空间的地址空间,该地址空间仅映射命名空间所拥有的内核对象,以及使用组合页表仅向至少一个用户进程提供对命名空间所拥有的内核对象的访问。

在实施例中,创建用于命名空间的地址空间可以包括:生成包括用于命名空间所拥有的内核对象的内核空间映射的命名空间页表,以及构建组合页表,该组合页表可由至少一个用户进程访问,该组合页表包括用户进程的用户空间页表和命名空间页表。操作系统为Linux操作系统。命名空间是从安装(Mount)命名空间、进程ID命名空间、网络命名空间、进程间通信命名空间、UTS命名空间、用户ID命名空间和控制组命名空间中选择的命名空间类型。所述方法可进一步包括通过破坏组合页表、命名空间页表和命名空间所拥有的内核对象来破坏命名空间。

在实施例中,系统可包括处理器、可由处理器访问的存储器、以及存储在存储器中并且可由处理器执行以执行以下操作的计算机程序指令:在计算机的存储器中的操作系统内核空间中创建命名空间,创建用于命名空间的地址空间,该地址空间仅映射由命名空间拥有的内核对象,以及使用组合页表仅向至少一个用户进程提供对命名空间所拥有的内核对象的访问。

在实施例中,一种计算机程序产品可以包括非瞬态计算机可读存储装置,该非瞬态计算机可读存储装置具有随其体现的程序指令,所述程序指令可由计算机执行以使所述计算机执行一种方法,所述方法包括:在计算机的存储器中的操作系统内核空间中创建命名空间,创建用于命名空间的地址空间,该地址空间仅映射由命名空间拥有的内核对象,以及使用组合页表仅向至少一个用户进程提供对命名空间所拥有的内核对象的访问。

附图说明

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

图1是操作系统内核(例如Linux内核)中的关键对象的示范性框图。

图2是根据本系统和方法的实施例的内核结构的示范性框图。

图3是可由本系统和方法的实施例使用的页表实现的示范性框图。

图4是本系统和方法的实施例的测试实现的示范性框图。

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

具体实施方式

本系统和方法的实施例可以通过隔离内核的部分以保护它们免受攻击来在操作系统内核本身内部提供附加的安全机制。

命名空间是在逻辑上分组在一起以服务一组进程的内核对象的域。命名空间的主要目的是允许相同的对象名称在命名空间中被重用,同时寻址不同的内核对象。即,命名空间是内核内的构造(construct),其可用于避免用户空间中的名称冲突。例如,在特定”用户”命名空间中,用户名必须是唯一的。然而,相同的用户名可以跨不同的用户命名空间重新使用。对于pid命名空间(由过程ID分隔)、网络命名空间(由网络设备名称分隔)等,这是相同的概念。当前,属于所有命名空间的所有数据对象被映射在存储器中,而不管正在使用的当前命名空间。这潜在地允许通过利用接口中的缺陷来访问错误的对象。

本系统和方法的实施例可提供安全机制,该安全机制可隔离内核的某些部分,并保护它们免受尝试访问来自不同命名空间的对象的攻击。实施例可以在内核内部提供多个地址空间,并且可以在命名空间的级别上隔离内核对象。每个命名空间可以具有其自己的地址空间并且将仅映射该命名空间所拥有的内核对象。

在实施例中,当需要驻留在当前命名空间外部的对象时(例如,当在网络栈内部执行存储器分配时),可以使用IPC(进程间通信)机制。

图1中示出了操作系统内核100(诸如Linux内核)中的关键对象的示范性框图。在该示例中,内核100可以包括进程ID 102、任务结构104、nsproxy 106、网络命名空间108、套(sock)层110、网络设备(net_device)112和套接字(socket)层114。进程ID 102可为数值,由数据类型pid_t表示,其可唯一地识别用于系统的每一进程。任务结构104可以是task_struct类型的进程描述符(在<linux/sched.h>中定义)并且可以是任务列表中的元素。每个任务结构104可以包含关于正在运行的特定进程或线程的信息,例如由进程ID 102标识的进程。任务结构104指向相关联的网络命名空间,诸如网络命名空间108。

套接字114是指向用于进程间通信的网络连接的文件描述符,该进程间通信可以是内核内、用户进程之间、不同机器之间等的任何类型的通信。不同种类的套接字有多种,不同类型的套接字可以使用不同的通信协议。在该示例中,套接字114是不同类型的套接字的通用表示,并且可以直接通过系统接口与用户空间进行交互。套接字114可以指向中间接口的类型,套110,并且套110指向网络命名空间108的实例。网络命名空间108可将其他内核对象(诸如任务结构104、套接字层114、套层110和网络设备112)分成逻辑组。在内核代码都与特定套接字(诸如套接字114)交互的任何时候,该内核代码必须在相关联的网络命名空间(诸如网络命名空间108)中或在默认命名空间中。

网络设备112表示任何特定的网络硬件或接口。例如,用户空间代码可以使用设备名称(如“eth0”)访问网络设备112。在内核空间中,eth0将指向也属于特定网络命名空间108的网络设备112。该机制提供了隔离哪些用户进程能够访问哪些设备的能力。同样,代表与任务结构104相关联的进程运行的任何代码指向相关联的网络命名空间,诸如网络命名空间108,并且该代码然后代表该网络命名空间运行。

在实施例中,当代表与任务结构104相关联、与网络命名空间108相关联的进程运行的任何代码尝试访问对象时,实施例可以确保该对象也属于相同的网络命名空间108。这提供了对象与用户进程的隔离,因为网络命名空间108的地址空间是分开的。应当注意,本系统和方法的实施例的描述是参考网络命名空间来提供的。然而,这仅是示例。操作系统内核(例如Linux内核)可以利用许多不同类型的命名空间,并且本系统和方法的实施例同样适用于那些其他类型的命名空间。本系统和方法可适用的命名空间的类型的示例包括:安装(mnt)命名空间-安装命名空间控制安装点;进程ID(pid)命名空间-PID命名空间为进程提供独立于其他命名空间的进程ID(PID)集合;网络(net)命名空间-网络命名空间虚拟化网络堆栈;进程间通信(ipc)命名空间-IPC命名空间使进程与SysV式进程间通信隔离;UTS命名空间-UTS命名空间允许单个系统看起来对于不同的进程具有不同的主机和域名;用户ID(user)命名空间-用户命名空间提供跨多个进程集合的权限隔离和用户标识隔离两者;控制组(cgroup)命名空间-cgroup命名空间类型隐藏其进程是成员的控制组的身份等。

图2中示出了根据本系统和方法的实施例的内核结构200的示范性框图。在该示例中,结构200可以包括内核空间202和用户空间204。内核空间202可以包括驻留在提升的系统状态中的代码和数据,并且其可以包括受保护的存储器空间和对硬件的完全访问。用户空间204可以包括用户应用,所述用户应用可以用降低的特权来执行,其中所述用户应用仅可以访问硬件和软件的可用资源的子集中的一个子集。用户空间204中的应用不能直接执行某些系统功能、直接访问硬件、访问由内核分配给它们的存储器之外的存储器等。为了使用户空间204中的应用程序访问其他系统资源,应用程序可进行系统调用206,以便请求内核执行应用程序的某些功能。

如图2所示,内核空间202可以包括通用地址空间208和受限地址空间210。通用地址空间208可以包括通用内核资源,诸如页表216、文件214等。受限地址空间210可以包括多个命名空间212A-N。每个命名空间212A-N是链接到特定命名空间的地址空间,并且每个命名空间保护诸如设备、网络套接字和相关联的缓冲器等内的多个子内核对象。在实施例中,为了向每个命名空间212A-N提供地址空间,内核中的每个命名空间的存储器可以被重新组织,使得由不同命名空间拥有的对象可以被映射在分开的存储器页/区域中。当诸如命名空间212A的命名空间被创建时,属于该特定命名空间的地址空间(存储器页目录)也可被创建。在命名空间212A的地址空间中映射的所有内核数据对象属于命名空间212A。每次调用作用于来自特定命名空间(诸如命名空间212A)的数据对象的系统调用206时,该命名空间的地址空间必须被激活。当命名空间被破坏时,地址空间连同所有映射的内核对象也被破坏。

作用于属于命名空间(诸如命名空间212A)的数据对象的内核代码必须全部被映射到命名空间212A的地址空间中。诸如不能从命名空间内部调用的函数之类的其他内核代码不应被映射,因为不可能访问未被映射的数据对象。

图3示出了可由本系统和方法的实施例使用的页表实现的示例。例如,Linux内核的当前版本包括被称为内核页表隔离(PTI)的特征,以便减轻某些安全漏洞并提高内核安全。PTI将用户空间和内核空间页表完全分开。例如,用户空间页表304N包含用户空间地址映射和最小内核空间映射集,以提供系统调用、中断和异常。内核空间页表302N包括内核空间306N和用户空间307N地址映射两者,但是其仅在系统以内核模式运行时被使用。用户空间页表304N和内核空间页表302N一起形成PTI对308N。如这个实例中所示,可以为用户空间204中的每个用户进程建立用户空间页表302A-N,并且可以为内核空间202中的每个用户进程建立内核空间页表304A-N。

在实施例中,可以通过使用每个命名空间的附加页表基于命名空间映射页表来隔离页表。例如,如图3所示,网络命名空间310可与被隔离到该命名空间的命名空间内核页表312相关联。可以在内核页表312中建立用于该命名空间的内核映射。例如,当任务在命名空间310内运行并尝试访问对象时,任务可以不将常规内核页表304A/302A用于进程,而是,可以使用从用户部分304A内核页表304A/302A和来自命名空间内核页表312的内核部分构造的新页表来形成隔离到命名空间310的内核空间页表316。然后,内核空间页表316可以提供对属于命名空间的所有对象和所有通用对象的访问,并且此外,可以提供对用于该特定任务的用户对象和用户代码的访问。

在实施例中,当命名空间310被初始创建时,可为命名空间310创建地址空间,诸如存储器页表312。当用户空间进程或任务(诸如用户进程/任务304A)请求对内核对象执行动作时,拥有那些对象的命名空间310的地址空间(页表312)可以被激活,并且可以确保只有命名空间310所拥有的那些内核对象被映射在用户空间进程/任务304可用的页表316中。当命名空间310被破坏时,页表316可以与所有映射的内核对象一起被破坏。

本系统和方法的实施例的示范性测试实现在图4中示出。在该示例中,srv 402(TCP/IP服务器程序)可在属于默认命名空间的特定TCP/IP端口(veth0 404)上监听。用户空间程序,progl 406和prog2 408,可以是连接到端口veth1 410的TCP客户端。用户空间程序progl 406和prog2 408可以在特定网络命名空间412内运行,这意味着progl 406和prog2 408与指向命名空间412的任务结构相关联。端口veth1 410可以是也属于命名空间412的网络设备的实例。因此,只有progl 406和prog2 408可以使用端口veth1 410。端口veth1 410可通过桥br0 414连接到属于默认命名空间且在命名空间412外部的veth0 404。因此,progl406可以打开TCP套接字以连接到在命名空间412之外的服务器srv 402。Prog2408可以传递该TCP套接字并且仍然可以使用它来连接到srv402,因为TCP套接字在命名空间412内。然而,如果TCP套接字被传递到例如在命名空间412之外的prog3 416,因为prog3416将不能访问该套接字和veth1 410两者,prog3 416将不能使用该套接字或veth1 410连接到srv 402。

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

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

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

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

在图5所示的示例中,存储器508可包括内核空间512、用户空间514和其他操作系统例程522。内核空间202可以包括驻留在提升的系统状态中的代码和数据,并且其可以包括受保护的存储器空间和对硬件的完全访问。内核空间202可以包括通用地址空间516和受限地址空间518。通用地址空间516可以包括通用内核资源,诸如页表、文件等。受限地址空间518可以包括多个命名空间520A-N。每个命名空间520A-N是链接到特定命名空间的地址空间,并且每个命名空间保护诸如设备、网络套接字和相关联的缓冲器等内的多个子内核对象。用户空间514可包括用户应用,该用户应用可用降低的特权来执行,其中他们可仅访问硬件和软件的可用资源的子集中的一个子集。其他操作系统例程522可以提供附加的系统功能。

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

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

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

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

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

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

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

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

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

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

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:shellcode的检测方法及装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类