基于执行上下文管理可执行代码对数据内存的访问的装置和方法与流程

未命名 08-27 阅读:130 评论:0


1.本发明大体上涉及计算系统;更具体地,本发明涉及一种用于管理对计算系统的数据内存的访问,以防止不必要的可执行代码访问的装置和方法。本发明还涉及一种用于执行上述方法的非瞬时性计算机可读介质。


背景技术:

2.包括微处理器系统或微控制器系统的计算装置通过将其大部分瞬态状态保留到内存中来操作。此外,计算机应用通常需要在托管它们的计算装置中分配内存和存储数据。用户应用通常由操作系统(operating system,os)支持,需要请求os代表这些用户应用分配各种类型的内存。存储在给定系统的某些类型内存中的数据通常在很长一段时间内保持不变,并且对给定系统的安全性可能非常重要。这些数据可能会成为黑客和计算机恶意软件优先攻击的目标。未经授权的修改可能导致系统停机或货币价值损失。
3.例如,参考arm64架构(但这也可以以类似的方式适用于英特尔x86_64和其它架构),内核通常在el1异常级别运行。在此el1异常级别中,理论上任何函数都可以访问所有数据,无论函数是否有合法的理由访问数据。某些数据具有特定的相关性,无论是在保护系统本身方面,还是纯粹作为可能对攻击者泄露有价值的信息。因此,非常需要将对数据的访问专门限制在假定或需要访问数据的代码片段上。
4.现有技术中已知的针对对存储在内存中的数据的这种恶意攻击的防御机制是部署一个或多个内存管理单元(memory management unit,mmu)。给定的mmu可以限制对某些内存区域的访问,从而尝试防止攻击(如上所述)。当程序(例如操作系统或虚拟机管理程序)在中央处理单元(central processing unit,cpu)上执行时,cpu可以配置mmu以限制在cpu上运行的程序可访问的地址集合。但是,mmu可以被重新编程,因为已经获得访问(例如写入)内存的能力的攻击者可以使用相同的能力,重新编程或禁用mmu建立的已建立的壁垒。
5.另一种已知的方法是通过实现用于管理一些秘密数据的可信执行环境(trusted execution environment,tee)来保持此类数据的“秘密”,以便此类秘密数据一旦加载就永远不会离开tee。tee公开一组应用编程接口(application programming interface,api),内核可以通过这些api在需要时与此类秘密数据交互(例如,用于签名和验证数据缓冲器的签名)。但是,上述方法有两个主要缺点。首先,tee可能需要一些功能的单独实现,这些功能可能已经在内核中可用。由于许可的原因,例如当tee是完全专有的,或者具有与内核不兼容的许可证时,通常会出现这种情况。其次,在同一内核上下文中使用位于tee中的此类秘密数据时,多个操作可能需要专门的tee序列化api(通常情况并非如此),或多个tee调用,这可能会因为不同异常级别之间的重复转换而导致额外的开销。
6.此外,在现代基于多核cpu的计算系统中,还有另一个可能的漏洞可能会受到攻击。当执行合法代码的cpu核访问特定数据上下文时,另一个受损的cpu核可能访问相同的
数据。这是有可能的,因为通常在内核数据或执行上下文中,所有数据都可以被多核cpu中的任何核中执行的每个代码访问。
7.因此,根据上述讨论,需要克服与用于保护计算系统的数据内存的装置和方法相关的上述缺点,而不会有过大的开销使方案不适合现实生活中的情况。


技术实现要素:

8.本发明寻求提供一种用于基于执行上下文管理可执行代码对数据内存的访问的装置和方法。本发明的目的是提供一种至少部分克服现有技术中遇到的问题的方案,并提供一种装置,该装置能够增强内核,利用高权限执行环境(例如可信执行环境(trusted execution environment,tee)或虚拟机管理程序(arm术语中的el2))来授权内核访问数据上下文的内存页或移除内核访问数据上下文的内存页的权限,并对支持核与线程(例如使用x86_64架构可用)之间的用户空间内存映射的隔离加以利用。本发明还寻求提供一种方案,以解决高执行开销和需要在tee中复制内核的现有缺点,如在已知技术中一样。
9.本发明的目的是通过所附独立权利要求中提供的方案实现的。本发明的有利实现方式在从属权利要求中进一步定义。
10.在一方面,本发明提供了一种装置,包括耦合到数据内存的处理器,其中,所述处理器和所述数据内存用于实现执行操作系统的内核。所述内核用于执行内存管理器,所述内存管理器确定所述内核对所述数据内存的访问。此外,所述处理器用于提供由所述内存管理器管理的高权限执行环境,所述内存管理器控制一个或多个可执行代码对所述数据内存的一个或多个部分的访问。此外,所述内核用于支持所述一个或多个可执行代码可访问的多个数据上下文,同时拒绝所述一个或多个可执行代码访问与所述一个或多个可执行代码无关的数据上下文。
11.在一方面,本发明提供了一种用于操作包括耦合到数据内存的处理器的装置的方法,其中,所述处理器和所述数据内存用于实现执行操作系统的内核。所述方法包括:
12.(i)配置所述内核以执行内存管理器,所述内存管理器确定一个或多个可执行代码对所述数据内存的访问;
13.(ii)配置所述处理器以提供由所述内存管理器管理的高权限执行环境,用于所述一个或多个可执行代码访问所述数据内存的一个或多个部分;
14.(iii)布置所述内核以支持所述一个或多个可执行代码可访问的多个数据上下文,同时拒绝所述一个或多个可执行代码访问与所述一个或多个可执行代码无关的数据上下文。
15.在又一方面,本发明提供了一种非瞬时性计算机可读介质,存储有程序指令,当处理器执行所述程序指令时,所述程序指令使所述处理器执行所述方法。
16.本发明的装置和方法通过如下方式提供代码可重用性:在内核内以安全的方式执行保护数据所需的操作,而不是在可信执行环境(trusted execution environment,tee)等高权限执行环境中执行,从而不需要在tee内复制内核的所需功能。此外,本发明的装置和方法通过向内核授权或撤销对数据内存的秘密数据的访问来减少执行开销。在此,每当内核进入或退出一个或多个关键部分时,只有在这些阶段,内核才被允许访问数据,使得开销与进入或退出一个或多个关键部分关联,而不是与一个或多个关键部分内对数据的操作
数量成正比。
17.在一种实现方式中,所述内存管理器访问内核内内存管理库,用于实现存储在所述数据内存中的数据的数据隔离,其中,属于给定数据上下文的存储在所述数据内存中的数据置于专门为所述给定数据上下文保留的对应数据内存页中,且其它数据上下文具有与所述给定数据上下文的数据页不重叠的其它对应数据页。
18.隔离存储在数据内存中的数据有助于在不修改甚至访问其它数据上下文的情况下修改数据上下文。通过利用重叠效应,可以有多个数据上下文,这些数据上下文仅可由用于分别处理这些数据上下文中的每一个数据上下文的代码访问,同时防止访问不相关的代码,即使上述数据上下文正在由其合法用户访问。此外,所有这些都可以主要在内核异常级别内完成,将高权限执行环境的参与保持在最低限度。
19.在一种实现方式中,所述内存管理器将所述数据内存中的数据隔离为可选择性写保护数据和可选择性读保护数据中的至少一种。
20.这种选择性隔离可以例如根据数据的敏感性等为不同数据提供不同的访问级别(即类型)。
21.在一种实现方式中,所述高权限执行环境在运行时暂时动态地改变所述装置提供的多个数据上下文之间某些数据内存页的可用性,以根据所述装置中给定可执行代码在给定时间是否处于激活状态,选择性地允许或拒绝所述内核对某些数据内存页集合的访问。
22.通过隔离,高权限执行环境可以基于页面与当前激活的内核上下文关联,选择性地允许或拒绝对该页面集合的访问。如果某个可执行代码不需要读取或写入某些数据,则可以使此类可执行代码无法访问此类数据。
23.在一种实现方式中,所述装置用于使用单独的内存映射来隔离每个对应的数据上下文。
24.这支持将特定的数据上下文关联到其合法用户(执行上下文),而可执行代码不会引起任何问题/惩罚。
25.在一种实现方式中,所述内核具有主内存映射,其中,所有可读数据和可执行代码都记录在所述主内存映射中。
26.在此,主内存映射在内核级别运行,映射到主内存映射中的数据可以只需要写保护,因此主内存映射中的数据不受高权限执行环境的影响。
27.在一种实现方式中,所述装置用于提供所述处理器的cpu核与其关联的硬件线程之间的用户空间内存映射的隔离,以帮助所述内存管理器管理所述可执行代码对数据上下文的访问。
28.用户空间内存映射是需要访问数据的处理器的cpu核的本地映射。这可以防止在处理器的其它cpu核(可能是受损核)中执行的可执行代码访问数据。
29.在一种实现方式中,所述高权限执行环境包括一个或多个可执行工具,所述一个或多个可执行工具可用于验证所述内核的状态,并在所述内核的安全性受到损害时拒绝来自所述内核的请求。
30.在此,高权限执行环境(例如tee)可以确定内核是否受损,并可以拒绝这种受损内核对数据的访问,因此高权限执行环境(例如tee)可以防止受损内核利用数据。
31.在一种实现方式中,所述装置用于计算所述内核的关键数据的哈希,其中,当所述
关键数据的哈希相互不一致时,所述装置确定所述内核的所述安全性已经受到损害。
32.在此,可以以事件驱动的方式定期或即时计算哈希。这种定期和/或事件驱动的检查确定内核是否受到损害,从而在早期阶段防止受损内核可能的数据利用。
33.在一种实现方式中,所述装置使用虚拟机管理程序来管理所述高权限执行环境。
34.虚拟机管理程序创建和管理多个进程空间,因此可以在单独的进程空间中隔离进程(例如与操作系统关联的进程),以使高权限执行环境(例如tee)能够为各种可执行代码提供对数据内存的一个或多个部分的不同访问级别。因此,虚拟机管理程序可以通过进一步防止内核不必要地访问tee来进一步提高安全性。
35.在一种实现方式中,所述内核基于
36.应当理解,本技术中描述的所有设备、元件、电路、单元和模块可以在任何类型的硬件元件中实现。本技术中描述的各种实体所执行的所有步骤以及所描述的各种实体要执行的功能均意在指各个实体适于或用于执行相应的步骤和功能。虽然在以下具体实施例的描述中,由外部实体执行的特定功能或步骤没有在执行该特定步骤或功能的该实体的具体详述元件的描述中反映,但是技术人员应该清楚,这些方法和功能可以在相应的硬件元件中实现。应当理解,本发明的特征易于以各种组合进行组合,而不偏离由所附权利要求书定义的本发明的范围。
37.本发明的附加方面、优点、特征和目的从附图和结合以下所附权利要求书解释的说明性实现方式的详细描述中变得显而易见。
附图说明
38.当结合附图阅读时,可以更好地理解以上发明内容以及说明性示例的以下详细描述。为了说明本发明,本发明的示例性结构在附图中示出。但是,本发明不限于本文公开的具体方法和工具。此外,本领域技术人员应理解,附图不是按比例绘制的。在可能的情况下,相同的元件用相同的数字表示。
39.现在参考下图仅作为示例来描述本发明的示例,其中:
40.图1是本发明的实现方式提供的用于管理对数据内存的访问的装置的示意图;
41.图2是本发明的实现方式提供的利用隔离数据上下文的可信执行环境的示意图;
42.图3是本发明的实现方式提供的提供内核数据的映射方案的内存映射的示意图;
43.图4是本发明的实现方式提供的用于管理对数据内存的访问的方法所涉及的步骤的流程图。
44.在附图中,带下划线的数字用于表示带下划线的数字所在的项目或与带下划线的数字相邻的项目。不带下划线的数字与由将不带下划线的数字与项目关联的线标识的项目相关。当一个数字不带下划线并具有关联的箭头时,不带下划线的数字用于标识箭头指向的一般项目。
具体实施方式
45.以下详细描述说明了本发明的实现方式以及可以实现这些实现方式的方式。虽然已经公开了实施本发明的一些模式,但本领域技术人员应认识到,也可以存在用于实施或实践本发明的其它实现方式。
46.在本说明书中引用“一个实施例”或“实施例”意味着结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。短语“在一个实施例中”在说明书中的不同地方出现不一定都是指同一实施例,也不一定是与其它实施例相互排斥的单独或替代的实施例。此外,此处的术语“一”和“一个”并不表示数量的限制,而是表示存在至少一个引用项目。此外,描述了可以由一些实施例而不是由其它实施例展示的各种特征。类似地,描述了各种要求,这些要求可以是一些实施例的要求,但不是其它实施例的要求。
47.在某些情况下,所公开的实现方式可以在硬件、固件、软件或其任何组合中实现。所公开的实现方式还可以实现为由一个或多个瞬时性或非瞬时性机器可读(例如,计算机可读)存储介质携带或存储在一个或多个瞬时性或非瞬时性机器可读(例如,计算机可读)存储介质上的指令,该指令可以由一个或多个处理器读取和执行。机器可读存储介质可以实现为用于以机器(例如,易失性或非易失性内存、媒体光盘或其它媒体设备)可读的形式存储或传输信息的任何存储设备、机制或其它物理结构。
48.在附图中,一些结构或方法特征可以以特定的布置和/或顺序示出。但是,应当理解,可能不需要这种具体布置和/或命令。而是在一些实现方式中,这些特征可以以与说明性附图中所示的不同的方式和/或顺序布置。另外,在特定附图中包括结构或方法特征并不意味着在所有实现方式中都需要这种特征,并且在某些实现方式中,可以不包括这种特征或这种特征可以与其它特征组合。
49.图1是本发明的实施例提供的用于保护其中的数据内存102的装置100的示意图。本文公开的装置100可用于各种计算设备,例如笔记本电脑、计算机、智能手机、掌上电脑、平板电脑等。装置100还可以实现为工业传感器、致动器、物联网(internet of things,iot)设备、网络装置、可穿戴终端设备、无人机、集成在汽车中的设备、电视、嵌入式终端设备和云设备等。本文中以下术语“装置”、“计算设备”和“计算系统”可互换使用,没有任何限制。
50.如图1所示,装置100包括处理器104,也称为中央处理单元(central processing unit,cpu)。装置100还包括操作系统106、内存管理器108和虚拟机管理程序110。在装置100中,处理器104提供由内存管理器108管理的高权限执行环境112。本文所使用的术语“管理”可以解释为意味着高权限执行环境112可以被内存管理器108“引导”或“影响”,使得高权限执行环境112保持一定程度的独立性,以审查并可能拒绝不一致/不正确的请求。此外,装置100中的数据内存102提供用户空间内存映射114(以下有时称为内存映射114)。处理器104可以具有多个cpu核(以下有时称为“核”)。例如,在图1的所示示例中,处理器104被示出包括四个cpu核,即第一核116、第二核118、第三核120和第四核122。可以理解的是,所示的核数量仅是示例性的,不应解释为以任何方式限制本发明。如图所示,处理器104通过第一通信链路124和第二通信链路126与装置100中包括数据内存102的各种元件通信。
51.本文所使用的术语“数据内存”是指能够存储和检索计算机程序指令或数据的任何合适类型的计算机内存。数据内存102可以是各种类型的易失性和非易失性计算机内存中的一种或其组合,例如只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、缓存内存、磁盘或光盘,或能够保留计算机程序指令和数据的其它类型的计算机可操作内存。数据内存102用于存储软件程序指令或软件程序以及可能对装置100有用的任何关联数据。存储在数据内存102中的软件程序可以被组织成各种软件模块或
组件,这些软件模块或组件可以使用基于每个软件组件提供的类型或功能的术语来指代。例如,软件组件可以包括操作系统(operating system,os)、虚拟机管理程序、设备或其它硬件驱动程序和/或各种类型的用户应用,例如媒体播放器、电子邮件应用、银行应用等。
52.此外,术语“处理器”可以指任何类型的计算元件,例如但不限于微处理器、微控制器、复杂指令集计算(complex instruction set computing,cisc)微处理器、精简指令集(reduced instruction set,risc)微处理器、超长指令字(very long instruction word,vliw)微处理器或任何其它类型的处理器或处理电路,并且指处理电子数据(例如,来自寄存器和/或内存)以将该电子数据转换为例如可以存储在寄存器和/或内存中的其它电子数据的任何设备或设备的部分。术语“处理器”旨在包括多核处理器,所述多核处理器可以包括可以同时执行指令的两个或更多个独立的处理器(称为“核”)。虽然图1示出了具有多个核116、118、120、122的处理器104,但处理器104可以是具有单个核的单个处理器、具有多个核的单个处理器(例如,多核处理器)、具有单个核的多个处理器、具有多个核的多个处理器或其任何组合。
53.此外,如图1所示,处理器104与数据内存102进行数据通信。在本发明的实施例(例如,实现方式)中,处理器104用于从数据内存102读取非瞬时性程序指令,并执行本文公开的方法和过程的示例。来自数据内存102的软件组件可以由处理器104在称为进程(或用户空间)的计算资源集合中单独或组合执行。本文所使用的术语“进程”是指一个或多个执行其中代码的软件程序可访问的计算资源集合。通常,“进程”是由操作系统管理的执行上下文。操作系统除其它外控制各种进程的执行。每个进程或用户空间由处理器104单独维护,并包括计算资源集合。与进程相关联的计算资源集合可以由在进程内执行的软件程序访问,并且可以包括如虚拟内存空间和/或一个或多个硬件组件等资源。处理器104用于分离,并在需要时将每个进程与其它进程隔离,使得可以防止在一个进程中执行的代码访问或修改与不同进程相关联的计算资源。
54.此处,处理器104和数据内存102用于实现执行操作系统106的一个或多个进程的内核。本文所使用的术语“操作系统”是指在用户与硬件之间提供接口的系统软件。操作系统(operating system,os)是一种类型或类别的软件程序,旨在抽象底层计算机资源并提供服务,以确保应用正常运行。任何合适的软件程序,例如linux
tm
os、windows
tm
os、android
tm
、ios或其它操作系统或应用框架,都适合用作内核或os内核。os可以作为单个软件程序实现,也可以通过中央应用实现,以处理基本抽象和服务,并通过一系列附加实用程序和扩展提供更大的功能集合。在此,术语“内核”涉及操作系统的中央应用部分。内核适于在中间权限级别执行,并管理用户空间/进程的生命周期,并为用户空间/进程分配资源。
55.在本发明的一个或多个实施例中,内核基于可以理解的是,在本发明中使用的术语“linux”旨在指,除非上下文另有指示,使用linux或unix或类似unix的内核的任何基于linux的操作系统。可以理解的是,这种内核也涵盖基于android
tm
的手机,只要android
tm os使用linux内核。
56.内核用于执行内存管理器108,该内存管理器108确定内核对数据内存102的访问。在一个实施例中,内存管理器108是用于保护数据内存102的内存管理单元(memory management unit,mmu)。内存管理器108的主要功能是作为转换元件,将运行软件使用的一个或多个虚拟地址空间的内存地址转换为一个或多个物理地址空间,表示数据内存102中
数据的实际布置。在此,虚拟地址空间是可用于可执行代码的虚拟地址集合,映射到具有对应的虚拟地址集合的物理地址空间。内存管理器108的转换功能主要通过使用地址转换表集合来执行。地址转换表可以包括多个数据内存页(以下,有时称为“内存页”或简称为“页面”,并在下文参考图2详细描述)。
57.这种内存页可以是虚拟内存中的连续块,并且可以在页转换表中表示为单个单元。内存页的大小取决于处理器104的架构。传统上,内存页的最小粒度为4096字节,即4kb。对于给定的虚拟内存地址,地址转换表可以帮助定位在物理内存中支持该虚拟内存地址的对应物理页帧。此外,地址转换表还可以确定页帧是否不可用,如通过按需分页。除了提供转换之外,内存管理器108还可以用于在内存页上强制某些属性。这些属性是“只读”、“只写”或“可执行但不可修改”等。
58.地址转换表的内容由操作系统106控制。由于虚拟地址空间可能相当大,并且可能有大量的虚拟地址空间(尽管,对于某个硬件线程,在任何时候都可能只有一个虚拟地址处于激活状态),因此页表可能仅部分填充,仅足以为实际使用的位置提供转换支持。为了加快转换,在一些实现方式中,内存管理器108可以具有称为转换后备缓冲器(translation look-aside buffer,tlb)(未示出)的内部缓存,其将最近转换的结果存储在更快、更低延迟的内存上。当虚拟地址要映射到数据内存102中的物理地址时,可以首先搜索tlb。如果找到匹配项,则返回对应的物理地址。但是,如果没有找到匹配,则可以搜索地址转换表,并且然后可以可选地将从中找到的物理地址的对应映射存储在tlb中。
59.处理器104用于提供由内存管理器108管理的高权限执行环境112,所述内存管理器108控制一个或多个可执行代码对数据内存102的一个或多个部分的访问。在本实现方式中,高权限执行环境112可以是如本领域已知的可信执行环境(trusted execution environment,tee)或虚拟机管理程序(arm术语中的el2)。由于从调节内核对被保护数据的访问的角度来看这些高权限执行环境大多是等效的,以下公开内容将集中在tee上,并应当理解,当使用虚拟机管理程序(或任何其它高权限上下文)代替tee时,也可以使用类似的方法。在下文中,术语“高权限执行环境”和“可信执行环境”可互换使用,通常是指包括与位于可信执行环境之外的其它代码隔离的可信程序代码的环境,并且安全策略被应用于该环境以提供程序代码的安全执行。tee 112可以表示用于执行用户应用的安全和隔离环境。微处理器系统(例如装置100)中的tee 112是其中的处理器104提供额外的、加固的执行上下文的一种方式,该上下文与主环境隔离,并且预计即使在主环境受到损害之后也不容易被攻击。tee 112的一个这种示例是arm trustzone
tm
,它是用于基于arm cortex的处理器系统的嵌入式安全选项的系统范围方法。
60.通常,tee 112通过创建两个环境来工作,以同时在处理器104的单个核上运行。在这两个环境中,一个可能是“非安全”环境,另一个可能是“安全”环境。tee 112可以提供切换机制以在两个环境之间切换。所有需要保护的代码、数据和用户应用可以在上述安全环境下操作,而上述非安全环境可以是主环境(main/primary environment),并可以包括所有可能不需要或不承受如此高保护的代码、数据和用户应用。这通常依赖于直接在tee 112而不是主环境控制下的某个特定硬件特征。tee 112还可以具有从主环境传输(“窃取”)内存页的能力,使得这些内存页既不能被读取也不能被写入。在本实现方式中,tee 112通过从数据内存102传输内存页,支持在安全环境与非安全环境之间交换数据,而不必复制数
据,即所谓的“零复制”方法。
61.内核还用于支持一个或多个可执行代码可访问的多个数据上下文,同时拒绝一个或多个可执行代码访问与一个或多个可执行代码无关的数据上下文。如上所述,可执行代码可能需要访问某些数据,并且数据可能具有某些实体。在此,关于特定可执行代码,具有相似属性或实体的所有数据可以被分组在一起,并可以称为数据上下文。图2是本发明的实施例提供的用于隔离数据的tee 112的示意图。在此,tee 112包括多个数据上下文,每个数据上下文包括多个内存页。在图2的示例性说明中,示出tee 112包括两个示例性数据上下文,即第一数据上下文204和第二数据上下文206,其中,为第一数据上下文204分配数据内存102的两个示例性内存页208和210,为第二数据上下文206分配数据内存102的两个示例性内存页212和214。可以理解的是,tee 112中给定数量的数据上下文和每个数据上下文中给定数量的内存页仅用于说明目的,实际数量可以更多,没有任何限制。内核可以提供对可执行代码所需的一个或多个特定数据上下文的访问,而其它数据上下文将被隐藏。例如,可执行代码可能需要访问第一数据上下文204。因此,内核可以提供可执行代码对第一数据上下文204的访问。但是,可以向可执行代码隐藏第二数据上下文206。因此,可以保护第二数据上下文206不被可执行代码访问。
62.回到图1,示出数据内存102包括

n’个数据上下文,即第一数据上下文128、第二数据上下文130和第n数据上下文132,其中,n可以是任何正整数。在图1的所示示例中,第一数据上下文128和第二数据上下文130由tee 112管理,而第n数据上下文132不由tee 112管理。因此,可以理解的是,第一数据上下文128和第二数据上下文130可以在安全环境中工作,第n数据上下文132可以在非安全环境中工作。即,除了可以由tee 112提供特定访问的可执行代码之外,可以保护和隐藏第一数据上下文128和第二数据上下文130不被用户应用访问。在可执行代码需要访问第一数据上下文128和/或第二数据上下文130的情况下,可执行代码可以向tee 112发出请求,并且tee 112然后可以选择性地允许或拒绝访问。
63.再次参考图1,内存管理器108访问内核内内存管理库134,用于实现存储在数据内存102中的数据的数据隔离,其中,属于给定数据上下文的存储在数据内存102中的数据置于专门为给定数据上下文保留的对应数据内存页中,且其它数据上下文具有与给定数据上下文的数据页不重叠的其它对应数据页。内核内内存管理库134可以存储关于如何根据数据上下文隔离数据的信息。在一个实施例中,内核内内存管理库134是“prmem”。内核内内存管理库134允许通过亲和性(即,通过用例和各种其它低级属性)将内核数据组织到页面中,使得属于同一用例的数据不会与属于其它用例的数据混合。这种布置支持改变与特定用例关联的数据的属性,而不干扰其它用例。在此,属于给定上下文的数据可以置于某些内存页中,这些内存页可以专门为这种上下文保留。作为具有不同上下文的数据的其它数据上下文可以具有其它非重叠的页面集合。因此,内核内内存管理库134通过确保每个上下文在页面级彼此正交,确保具有页面级粒度的与特定上下文相关联的内存属性不会干扰另一个上下文的属性。因此,内核内内存管理库134既为恒定数据提供完全写保护,也为改变可能成为攻击目标的数据提供受控手段,并且应保持普通内存写操作不可写入。
64.可选地,内存管理器108将数据内存102中的数据隔离为可选择性写保护数据和可选择性读保护数据中的至少一种。如所描述的,内核内内存管理库134可以隔离数据内存102中的数据。在本实施例中,这种隔离的数据还可以由内存管理器108组织成可写保护和
可读保护。在此,可写保护数据可以是未经允许不得修改或覆盖但可以由具有访问权限的可执行代码读取的数据;可读保护数据可以是只有在其关联的用例激活时才能由具有访问权限的可执行代码读取的数据。内存管理器108确保可写保护的数据可以分组在一起,可读保护的数据可以分组在一起,使得它们不重叠。这使得可以在需要提供对其它数据上下文的访问的情况下提供对一个数据上下文的内存页的选择性访问。
65.可选地,可信执行环境112在运行时暂时动态地改变装置100提供的多个数据上下文之间某些数据内存页的可用性,以根据装置100中给定可执行代码在给定时间是否处于激活状态,选择性地允许或拒绝内核对某些数据内存页集合的访问。即,在完成隔离之后,tee 112可以在不同的异常级别(即内核级别与tee本身的级别)之间切换特定数据内存页(集合)的可用性,以便选择性地允许/拒绝对某个数据内存页组合的访问。通常,对于arm架构,在os中,可能有四个异常级别(也称为权限级别):异常级别0(el0)、异常级别1(el1)、异常级别2(el2)和异常级别3(el3),其中,el0是权限最低的异常级别。通常,所有用户应用都具有el0访问权限。内核可以在el1运行,虚拟机管理程序110可以在el2运行,固件可以在el3运行。在一个异常级别执行的可执行代码可能不能访问正在由在相同异常级别或在更高异常级别执行的其它可执行代码访问的数据(在数据内存102中)。但是,如果可执行代码在较高的异常级别执行,则这类可执行代码可以访问较低的异常级别正在访问的数据。例如,内核在el1执行,tee 112在el3执行。因此,在tee 112的级别受到保护的所有数据可能无法被内核访问。为了访问tee 112级别的数据上下文,内核可以请求tee 112将该特定数据上下文的可访问性更改为内核级别。可以理解的是,尽管在本发明中,术语“异常级别”已用于描述权限级别,并且通常用于本领域的arm架构的上下文,但上述术语通常可以指“执行上下文”,其通常包含处理器定义执行其中指令的环境所需的任何内容。此外,可以设想其它处理器架构可能可以实现不同数量的权限级别,而没有任何限制。
66.如所描述的,tee 112可以在两个异常级别之间切换数据上下文。两个异常级别之间的切换基于哪个与内核上下文相关联的可执行代码当前处于激活状态。如果某个可执行代码不需要读取/写入某些数据,则可以保持上述数据对这种可执行代码不可访问,而可执行代码不会引起任何问题/惩罚。例如,参考图2,如果第一数据上下文204需要由可执行代码访问,则tee 112可以将第一数据上下文204分配到el1,而第二数据上下文206可以保持在tee级别(el3)。此外,如果需要,可以仅分配数据上下文的选择性内存页,而不是完全提供对数据上下文的访问。例如,可以向内核授权对第一数据上下文204的内存页208和第二数据上下文206的内存页214的访问权限,而第一数据上下文204的内存页210和第二数据上下文206的内存页212可以对内核隐藏。
67.如参考图1所描述的,处理器104可以具有多个核116、118、120、122,其中,每个核适合于在任何给定时刻在一个硬件线程上工作。本领域技术人员可以理解,尽管动态改变某些数据内存页的可用性,但数据内存102可能仍然容易受到攻击。例如,当执行合法代码的一个核(例如,第一核116)正在访问某个数据上下文时,另一个非法核(例如,第三核120)可能访问完全相同的数据。这可能发生,因为通常,在内核中,所有数据都可以被每个代码和核访问。
68.可选地,装置100用于使用单独的内存映射来隔离每个对应的数据上下文。即,为了增强对数据内存102的保护,可以使用每个数据上下文的单独内存映射。图3是根据本发
明的实施例,实现内核数据的不同映射的内存映射300的示例性示意图。用于实现内核数据的不同映射的内存映射300可以包括存储在数据内存302中的多个物理页、主内存映射304、用户空间内存映射306(也称为“辅助内存映射306”)和tee(例如tee 112)提供的屏障308。此处,仅需要写保护的数据映射在主内存映射304中。这种数据不受tee提供的屏障308的影响。此外,需要读保护的数据映射在用户空间内存映射306中。映射仅在核-本地映射中,仅创建该映射的核可访问。这类数据的可访问性由tee按时间控制,因此只有在该数据关联的用例处于激活状态时,才能读取该数据。
69.在本实施例中,可执行代码的所有数据的映射从存储在数据内存302中的多个物理页记录在主内存映射304中。数据可以在与特定数据上下文相关联的上下文特定副本中复制。复制的数据还可以包括关联数据的映射。此处也可以利用允许将多个用户空间进程映射到多个核上的相同地址空间值,而不会使这类映射重叠的映射机制。这种机制确保用户空间映射仅可由其本地核访问,因此它还可以防止受损核未经授权访问受保护的数据上下文。可以理解的是,可读数据和可执行代码可以是仅需要写保护的数据,并因此映射到主内存映射304中。因此,当可执行代码请求访问可写保护数据的内存映射300时,数据被映射到主内存映射304中。此处,主映射在el1处,因此映射到主内存映射304中的数据可以被所有核访问,但被写保护,因此不能被篡改。
70.可选地,装置100用于提供处理器104的cpu核116、118、120、122与其关联的硬件线程之间的用户空间内存映射的隔离,以帮助内存管理器108管理可执行代码对数据上下文的访问。此处,硬件线程可以是要执行的单行指令,每个用户应用通常具有多个线程。回到图3,如图所示,数据内存302包括多个数据上下文。如图所示,可写保护数据可以从数据内存302映射到主内存映射304中。例如,存储在页面310中的数据可以映射到主内存映射304的页面314(如连接312所表示的)。此外,可读保护数据可以从数据内存302映射到辅助内存映射306(如果tee提供对可执行代码的访问)。例如,存储在页面316中的数据映射到辅助内存映射306的页面320(如连接318所表示的)。在此,辅助内存映射306在需要访问数据的核的本地。由tee(例如,tee 112)提供的屏障308隔离主内存映射304和辅助内存映射306中的数据。
71.可选地,可信执行环境112包括一个或多个可执行工具,所述一个或多个可执行工具可用于验证内核的状态,并在内核的安全性受到损害时拒绝来自内核的请求。如上文所述,内核是操作系统106的核。但是,由于内核较大且复杂,它暴露了更大的攻击面,因此比其它软件组件面临更大的安全风险。一旦受到损害,由操作系统106保护的数据也面临风险,即,数据内存102中的任何数据被内核访问时都可能被恶意程序利用。通过验证内核的状态,即检查内核是否受到损害,如果确定受到损害,tee 112可以阻止来自内核的请求,从而防止数据内存102中的数据被利用。在一个或多个示例中,上述可用于验证内核状态的可执行工具可以是哈希函数,如本领域中已知的。
72.可选地,装置100用于计算内核的关键数据的哈希,其中,当关键数据的哈希相互不一致时,装置100确定内核的安全性已经受到损害。此处,内核的关键数据可以是恶意程序不得修改的数据。此外,要保护的数据可以解释为包括例如与装置中的瞬态状态有关的数据(例如随机存取存储器(random access memory,ram)、交叉点或闪存等中的一些重要数据)。对于微处理器系统,要保护的数据可以是系统级数据,例如与操作系统有关的数据。
对于微控制器,要保护的数据可以是关于操作系统和应用软件的应用数据。
73.如上所述,用于检查内核完整性的技术可以使用哈希。通常,哈希可以是数字字符串形式的代码。关键数据的哈希对于内核而言可以是一致的。但是,如果内核受到损害,即,如果内核受到恶意程序的攻击,关键数据的哈希可能会被更改。为了检查内核是否受到损害,可以将关键数据的哈希与相同数据的已知哈希值进行比较。如果匹配,则这类数据可以视为安全;否则,这类数据可以视为受到损害。在示例性实现方式中,哈希可以定期计算。在另一个示例性实现方式中,哈希可以以事件驱动的方式即时计算。这种定期和/或事件驱动的检查确保更快地检测到受损内核,然后tee 112可以在早期阶段阻止来自这种受损内核的请求,并防止受损内核可能的数据利用(如上所述)。
74.可选地,装置100使用虚拟机管理程序110管理可信执行环境112。虚拟机管理程序110通常可以创建和管理称为虚拟机的特殊类型的进程空间,该进程空间是适于模拟物理计算机的进程空间类型,并且虚拟机管理程序110通常用于在单个计算设备(例如装置100)上执行多个虚拟机。虚拟机管理程序110通常是一小段代码,因此可以作为固件存储在非易失性内存中。如上所述,通常在arm64架构中,虚拟机管理程序110的异常级别是el2,它大于内核的异常级别。因此,虚拟机管理程序110可以对内核和用户空间完全隐藏。即,内核和用户甚至可能不知道虚拟机管理程序110的存在。因此,虚拟机管理程序110可以通过进一步防止内核不必要地访问tee 112来进一步提高数据内存102的安全性。
75.本发明的装置为装置100中的数据内存102提供保护。这是通过管理对数据内存102的访问,以防止未授权可执行代码访问来实现的。本发明改进了内核内内存管理库134(例如,prmem),以引入“读保护”属性,利用可信执行环境(trusted execution environment,tee)112来授权/移除内核对全部内存页集合的访问,并利用对处理器104的cpu核116、118、120、122与硬件线程之间的用户空间内存映射114隔离的支持。通过利用它们的重叠效应,可以有多个数据上下文,这些数据上下文仅可由用于分别处理这些数据上下文中的每一个数据上下文的可执行代码访问,同时防止访问不相关的可执行代码,即使所述数据上下文正在由其合法用户访问。所有这些都可以主要从内核异常级别内完成,将tee 112的参与保持在最小,从而减少开销。
76.如所描述的,通过内核内内存管理库134,实现了数据隔离概念,使得属于特定上下文的数据置于特定内存页中,这些内存页将专门为这种上下文保留;不同的上下文将具有其它非重叠的页面集合。内核内内存管理库134的目的是通过确保每个上下文在页面级彼此正交,确保具有页面级粒度的与特定上下文相关联的内存属性不会干扰另一个上下文的属性。
77.此外,由于tee 112可以在不同的异常级别(即内核级别和tee本身的级别)之间切换特定页面(集合)的可用性,因此现在可以使用tee 112,通过内核内内存管理库134执行隔离,以基于页面与当前激活的内核上下文相关联,选择性地允许/拒绝对特定页面集合的访问。如果特定代码不需要读取/写入特定数据,则假设代码没有被劫持,而且行为异常,在这种情况下,需要干扰异常行为,则可以保持上述数据对这类代码不可访问,而代码不会引起任何问题/惩罚。
78.此外,通过对每个数据上下文使用单独的内存映射,可以将多个用户空间进程映射到多个核上的相同地址空间值,而不会使这类映射重叠。这种机制确保用户空间映射仅
供其本地核访问,因此它还可以防止受损核未经授权访问受保护的数据上下文。
79.在本发明中,由于附加映射是在为用户空间进程执行的映射之后建模的,因此可以根据需要具有尽可能多的附加映射。每个辅助映射可以只包括与其关联的用例相关的页面。这将使得如果一个用例以某种方式受到损害,其它用例仍然可用。此外,由于tee通过使用页面粒度影响内核异常级别的内存可用性,基于tee的保护还可以支持具有多个正交辅助映射。类似的机制也可以被变换,以将用户空间进程的部分数据与不应该访问这部分数据的用户空间代码隔离开。在此示例中,内核将提供驻留在权限更高的异常级别中的强制后端,同时需要将“prmem”迁移到用户空间,以便可以使用“prmem”,而不是传统的“vmalloc”。
80.图4是用于操作包括耦合到数据内存的处理器的装置(例如装置100)的方法的流程图400,其中,处理器和数据内存用于实现执行操作系统的内核。上文公开的各种实施例和变型经修改后适用于本方法。在步骤402中,该方法包括配置内核以执行内存管理器,该内存管理器确定一个或多个可执行代码对数据内存的访问。在步骤404中,该方法包括配置处理器以提供由内存管理器管理的可信执行环境,用于一个或多个可执行代码访问数据内存的一个或多个部分。在步骤406中,该方法包括布置内核以支持一个或多个可执行代码可访问的多个数据上下文,同时拒绝一个或多个可执行代码访问与一个或多个可执行代码无关的数据上下文。
81.本发明还提供了一种非瞬时性计算机可读介质,存储有程序指令,当处理器执行所述程序指令时,所述程序指令使处理器执行所述方法。上面公开的各种实施例和变型经修改后应用于本发明的非瞬时性计算机可读介质。
82.本发明的装置和方法可以在许多应用中实现用于对选定数据进行读保护。该装置和方法以两种方式保护数据:首先,可以通告可能被攻击者利用的秘密泄露,其次,通过隐藏内存内容为写保护数据提供额外的加固。因此,试图修改内核数据的攻击变得更加困难,因为它可能不容易定位。本发明的装置和方法可以适合于保护加密密钥、媒体访问控制(media access control,mac)地址、用于类似但正交用例的单独钱包等。在此,加密密钥是随机的、不可预测的和唯一的字符串的集合,以便加密信息,媒体访问控制(media access control,mac)地址是分配给网络接口控制器(network interface controller,nic)的唯一字符串。
83.需要说明的是,本发明的装置和方法可以应用于任何具有基于(甚至松散地基于)本发明中描述的架构的内存管理器的设备。这表示本发明中列出的概念的应用并不特定于任何特定类型的处理器。例如,它可以应用于x86/x86_64、arm/arm64、risc-v等。唯一的要求是必须有某种额外的模式,例如tee或具有高权限的虚拟机管理程序。
84.用于保护数据内存的本发明的装置和方法在性能和代码维护方面都是有利的。与在tee中处理秘密的标准实现方式相比,本发明提供了一个改进,该改进可基于被个体上下文切换取代的个体tee调用的数量量化。从加固现有内核代码的角度来看,需要将所需更改的范围降至最低;如同升级基线一样,必须迁移的更改量很小。其次,与必须将机密的整个处理从内核移动到tee的情况相比,没有必要重新制作正在复制的代码,使其与可能会有所不同的tee环境兼容。在很可能的情况下,tee代码具有与内核许可不兼容的许可;在这种情况下,没有必要创建处理机密的“洁净室”重新实现,这可能会引入一组新的缺陷。相同的代
码可以跨平台使用,这些平台可能具有处理机密的能力,也可能没有处理机密的能力,从而简化了发布管理。
85.在不脱离所附权利要求书所定义的本发明范围的情况下,可以对上文描述的本发明实施例进行修改。如“包括”、“结合”、“具有”、“是/为”等用于描述和要求保护本发明的表述旨在以非排他性的方式解释,即允许未明确描述的项目、组件或元件也存在。对单数的引用也应解释为与复数有关。本文使用的词语“示例性”表示“作为一个示例、实例或说明”。任何描述为“示例性的”实施例并不一定解释为相比其它实施例是优选或有利的,和/或并不排除结合其它实施例的特征。本文使用的词语“可选地”表示“在一些实施例中提供且在其它实施例中没有提供”。应当理解,为了清楚起见而在单独实施例的上下文中描述的本发明的某些特征还可以通过组合提供在单个实施例中。相反地,为了简洁起见在单个实施例的上下文中描述的本发明的各个特征也可以单独地或以任何合适的组合或作为本发明的任何其它描述的实施例提供。

技术特征:
1.一种装置(100),其特征在于,包括耦合到数据内存(102、302)的处理器(104),其中,所述处理器和所述数据内存用于实现执行操作系统(106)的内核;所述内核用于执行内存管理器(108),所述内存管理器(108)确定所述内核对所述数据内存的访问;所述处理器用于提供由所述内存管理器管理的高权限执行环境(112),所述内存管理器控制一个或多个可执行代码对所述数据内存的一个或多个部分的访问;所述内核用于支持所述一个或多个可执行代码可访问的多个数据上下文(128、130、132、204、206),同时拒绝所述一个或多个可执行代码访问与所述一个或多个可执行代码无关的数据上下文。2.根据权利要求1所述的装置(100),其特征在于,所述内存管理器(108)访问内核内内存管理库(134),用于实现存储在所述数据内存中的数据的数据隔离,其中,属于给定数据上下文的存储在所述数据内存中的数据置于专门为所述给定数据上下文保留的对应数据内存页中,且其它数据上下文具有与所述给定数据上下文的数据页不重叠的其它对应数据页。3.根据权利要求2所述的装置(100),其特征在于,所述内存管理器(108)将所述数据内存(102)中的数据隔离为可选择性写保护数据和可选择性读保护数据中的至少一种。4.根据权利要求2或3所述的装置(100),其特征在于,所述高权限执行环境(112)在运行时暂时动态地改变所述装置提供的多个数据上下文之间某些数据内存页的可用性,以根据所述装置中给定可执行代码在给定时间是否处于激活状态,选择性地允许或拒绝所述内核对某些数据内存页集合的访问。5.根据权利要求2至4中任一项所述的装置(100),其特征在于,所述装置用于使用单独的内存映射来隔离每个对应的数据上下文。6.根据权利要求2至5中任一项所述的装置(100),其特征在于,所述内核具有主内存映射(304),其中,所有可读数据和可执行代码都记录在所述主内存映射(304)中。7.根据上述权利要求中任一项所述的装置(100),其特征在于,所述装置(100)用于提供所述处理器(104)的cpu核(116、118、120、122)与其关联的硬件线程之间的用户空间内存映射的隔离,以帮助所述内存管理器(108)管理所述可执行代码对数据上下文(128、130、132、204、206)的访问。8.根据权利要求1所述的装置(100),其特征在于,所述高权限执行环境(112)包括一个或多个可执行工具,所述一个或多个可执行工具可用于验证所述内核的状态,并在所述内核的安全性受到损害时拒绝来自所述内核的请求。9.根据权利要求8所述的装置(100),其特征在于,所述装置用于计算所述内核的关键数据的哈希,其中,当所述关键数据的哈希相互不一致时,所述装置确定所述内核的所述安全性已经受到损害。10.根据权利要求10所述的装置(100),其特征在于,所述装置使用虚拟机管理程序(110)来管理所述高权限执行环境(112)。11.根据上述权利要求中任一项所述的装置(100),其特征在于,所述内核是12.一种用于操作包括耦合到数据内存的处理器的装置的方法(400),其特征在于,所述处理器和所述数据内存用于实现执行操作系统的内核;
所述方法包括:(i)配置所述内核以执行内存管理器,所述内存管理器确定一个或多个可执行代码对所述数据内存的访问;(ii)配置所述处理器以提供由所述内存管理器管理的高权限执行环境,用于所述一个或多个可执行代码访问所述数据内存的一个或多个部分;(iii)布置所述内核以支持所述一个或多个可执行代码可访问的多个数据上下文,同时拒绝所述一个或多个可执行代码访问与所述一个或多个可执行代码无关的数据上下文。13.一种非瞬时性计算机可读介质,其特征在于,存储有程序指令,当处理器执行所述程序指令时,所述程序指令使所述处理器执行根据权利要求12所述的方法。

技术总结
公开了一种用于保护数据内存的装置和方法。所述装置包括耦合到所述数据内存的处理器。所述处理器和所述数据内存用于实现执行操作系统的内核。所述内核用于执行内存管理器,所述内存管理器确定所述内核对所述数据内存的访问。所述处理器用于提供由所述内存管理器管理的高权限执行环境,所述内存管理器控制一个或多个可执行代码对所述数据内存的一个或多个部分的访问。所述内核还用于支持所述一个或多个可执行代码可访问的多个数据上下文,同时拒绝所述一个或多个可执行代码访问与所述一个或多个可执行代码无关的数据上下文。一个或多个可执行代码无关的数据上下文。一个或多个可执行代码无关的数据上下文。


技术研发人员:伊戈尔
受保护的技术使用者:华为技术有限公司
技术研发日:2020.12.20
技术公布日:2023/8/24
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐