通过层级内隔离提升软件的安全性|龙蜥大讲堂第112期

简介: 本次分享的主题是通过层级内隔离提升软件的安全性,由中科院计算所的武成岗分享。主要分为以下两个部分:1. 计算系统的安全关乎着整个“数字化”世界的安全2. 目标:同时获取微内核的安全性和宏内核的高性能3. 层级内隔离手段4. 总结

通过层级内隔离提升软件的安全性|龙蜥大讲堂第112期


内容分析

1. 计算系统的安全关乎着整个“数字化”世界的安全

2. 目标:同时获取微内核的安全性和宏内核的高性能

3. 层级内隔离手段

4. 总结

 

image.png

各位朋友,大家好,我是中科院计算所的武成岗,来自中科院计算所的处理器芯片全国重点实验室。今天很高兴有机会受邀来龙晰社区介绍团队在计算机系统安全方面所做的研究工作。先简单自我介绍。我是中科院计算所的研究员,中科院关键技术人才,CCF 专委工委的主任和CCF理事会理事,研究方向是安全操作系统、漏洞挖掘和利用、编译和虚拟化技术。团队在安全的四大顶会,例如 S&P、USENIX Security、 CCS、 OSDI、 ATC、TDSC、 TSE、TPDS等期刊和会议上发表论文30余篇。很荣幸连续两年在安全四大顶会 CCS 2022 年和 CCS 2023 年分别获得了最佳论文提名奖和杰出论文奖,另外团队还获得了北京市科技成果二等奖,军队科技进步二等奖,一些专利和软件制作权。最重要的成果是有一些实际的系统正在政府和军队和一些重要的企业中的使用。

 

01.计算系统的安全关乎着整个“数字化”世界的安全 

image.png

接下来介绍一下在安全操作系统方面所开展的引流工作。操作系统关系着整个数字化世界安全的基础设施。基于 Linux 国产操作系统现在面临着严重的安全威胁。左边的图上给出操作系统近些年来的部分重大的安全事件。首先是 2010 年的震网病毒,是美国利用windows 系统来传播震网病毒致使伊朗的核实施中的离心机大批量遭受损坏,涉及到的漏洞信息有4个微软的系统中的漏洞。2017 年永恒之蓝病毒的传播也是因为微软操作系统中的 MS17-010 漏洞所引起的。

在 Linux 方面,2017 年的 Phoenix Talent 漏洞的攻击能导致远程的 Dos 在一定条件下可导致远程代码执行,影响几乎所有的 Linux kernel 2.5~4.11 的内核版本。涉及到漏洞有4个。2021年的红杉漏洞,攻击者可以通过漏洞在 Ubuntu 20.04、Ubuntu 20.10、Ubuntu 21.04、Debian 11和Fedora 34 Workstation 等主机上获得root的权限。

这些漏洞成为操作系统安全所面临的重大威胁。国产操作系统很多都是基于 Linux 开发的,例如银河麒麟、中标麒麟、统信 UOS 和一些开源的系统,例如openEuler、openKYLin 等。所以 Linux 系统上面出现的漏洞会对国产操作系统造成严重安全威胁。

1.1计算系统中的安全漏洞不可避免

image.png

能不能把这些漏洞彻底消除掉?实际上是不可能的。以 Linux 操作系统为例,它的代码量非常大,现在内核的代码量已经超过了 3000 万行。模块之间的交互关系非常复杂,这些复杂的交互加上巨大代码量难免使得这些代码中出现安全漏洞。另外还大量使用了第三方代码,如驱动。第三方代码在系统中运行,它们的开发和测试就没有内核严格的测试,所以存在漏洞的可能性会更大。以上原因导致了系统中的安全漏洞不可避免。

1.2操作系统的安全性  宏内核VS微内核

image.png

提升操作系统的安全性有种主体架构,一种是宏内核架构,一种是微内核架构。左边是微内核架构,以 L4 为代表,它是把操作系统中一些重要的模块全部都移到了用户台下。通过进程间隔离使得模块之间有良好的隔离,这就是微内核架构。

之所以叫微内核是因为在内核中放了一个小调度器,调度器的代码链很小,所以能够保证调度器的安全性更高。因为有进程间的隔离,模块之间的交互、数据传播都受到严格保护,所以安全性会更好。右边是典型的 Linux 结构,宏内核架构。Linux 会把调度器以及其他模块,像文件系统、网络、进程管理、内存管理和一系列驱动和 EVPF 扩展也都放到了内核中。

优点是模块之间交互比较方便,但是缺点也很明显,当某一个地方有漏洞就会导致整个系统被攻克。左边示意一下,假如在磁盘驱动中有一个Bug ,攻击者利用 Bug 发起攻击,因为它和其他的模块之间是进程间隔离的,所以要想攻击就要对调度器攻击。调度器和磁盘驱动之间又有隔离,所以攻击者想发起攻击非常困难。

对于宏内核,假如网络模块存在漏洞,攻击者可以通过应用程序操作网络模块的漏洞篡改核心的代码和数据,将操作系统内核进行打穿,打完以后通过篡改重要的数据,然后获得集权。两个结构的操作系统内核进行对比,微内核的优点是模块间的隔离提升了系统的安全性,但是由于模块之间导致模块之间的通信开销非常大。宏内核的架构的优点正好是微内核的缺点。宏内核的优点是模块间交互的效率更高,但是缺点是所有的模块内核代码处于同一地质空间,单点曲线能够导致整个系统破防。

 

02.目标:同时获得微内核的安全性和宏内核的高性能

image.png

左边的图显示了微内核架构在安全性方面更好,在性能方面存在一定问题。宏内核架构的安全性相对较差,所以加了点状防护,性能方面更好一些。目标就是右边的图,希望我们能够获取微内核的安全性,获取宏内核的性能,希望做到复式内核架构的系统内核。

2.1技术离线——复式内核

image.png

具体的做法是对宏内核进行特权级内分层解耦和隔离保护,形成核内再度分层的新型架构。左边图是 Linux 的宏内核架构,右边是对左边进行了核内分割。首先把一系列重要的数据结构,如页表、权限管理的数据结构,取出来,把它放到中枢核心,通过隔离的方式隔离开。外部任何一个 Bug 想直接访问它是不可能的。

另外一个是把高风险的模块,如各种驱动、在Linux增加的EBPF等分离出来,再次隔离,在内核的内部形成了三层隔离。第一层内层称为中枢核心层。这里放系统内核的最重要的关键数据结构和操纵数据结构的关键代码。外面一层称为普通模块层,包括调度器、文件管理器等等重要模块。再往外是高风险模块层,这里是各种驱动和 EBPF 。这样就形成了一个三层的内部架构。将敏感资源及其相关的代码保护起来,形成中枢核心。将不可靠的设备驱动和内核扩展锁到“牢笼”中。通过这种方式形成相应隔离。

2.2最小特权原则

image.png

这个做法实际上遵循一种最小特权原则。所谓最小特权原则是做系统安全的一个重要原则,它的基本思想是将系统划分为相互依赖性小的组件,并且限定每个组件到最小的权限。这里有一个形象图,各种物件放在一起,当一个物件出现问题就会对其他物件产生影响。现在做法是对其进行划分,放到不同的盒子中,盒子之间进行相应隔离。为什么叫复式内核架构?就像有一些住宅,其中某一层的一户,内部又分了若干层。这种复式结构称为复式内核。

2.3采用复式内核架构的内核抗攻击效果示意

image.png

接下来介绍一下复式内核架构抗攻击的效果,左边是一个宏内核架构,右边是复式内核架构。假定内核中会存在安全漏洞,内核里面安全漏洞无非是在两个方面,一个是在普通模块层中,另外一个是在高风险模块层中。假如漏洞在普通模块层中,攻击者会利用这个漏洞攻击,但想实现攻击,期权必须篡改最重要的数据结构。由于最重要的数据结构放在中枢核心层中,有隔离想通过篡改中枢核心层是做不到的,所以攻击无法达到期权的效果。另一类攻击实际上是通过硬件发起的攻击,项目通过硬件向驱动发起攻击负载,。想对内层攻击,突破隔离,如果突破不了,就无法对内层造成任何影响。

2.4与DARPA不谋而合

image.png

思想和 DARPA 的思想不谋而合,这个工作是三年前开启的。 DARPA 去年推出了一个项目 CPM ,这个项目的思想就是分割,进行特权局的管理。在国际上发表论文以后,受到了同行的高度认可。

2.5复式内核——功防效果视频展示(IEE+PTP选项)

image.png

下面介绍复式内核架构的攻防效果,把页表挪到了中枢核心,把一些其他的重要的数据结构也挪到了中枢核心层。它利用了一个漏洞来发起攻击,右边的视频中是在 Open Eulor 上做的攻击效果。

视频演示中,首先先登录到 Open Eulor 系统中,使用一个普通的用户test用户攻击进去。接下来 C 文件是用于攻击内核的攻击程序,攻击到EXP ,包含 8 个步骤。

第一个步骤是做对风水;

第二个步骤是利用漏洞进行攻击,把每一个步骤运行攻击程序,然后看每个步骤的攻击过程。

现在先对攻击程序进行编译,编译完又开始运行。先进行对风水,处罚UAF漏洞,获得一个悬挂指针,将悬挂指针指向页表项,再利用悬挂指针的篡改页表的 PTE ,在用户态下篡改 Kernel 函数,再调用 Setuid ,从而获取 Root 权限,获取完以后提示符已经变成一个#,现在 Who m 给出的结果是 Root 。

接下来演示的是在系统中进行的安全加固,构造了复试内核,通过攻击Poker进行攻击。前面的步骤如以往过程。现在获得一个悬挂指针,再将悬挂指针指向页表中的页表项,利用悬挂指针篡改 PTE ,因为篡改 PTE 中加有隔离,阻止了篡改,这时候系统给出报错,所以攻击不能进行下去。这是复式内核的效果,在复式内核中把一些重要的数据结构都加进去了,所以起到了相应保护。

2.6现有处理器的层内隔离机制的效率总览

image.png

接下来看隔离方面。上面提到做内核的分层隔离需要有一个很好的隔离机制。如果隔离机制的开销很大或者隔离效果很差,起不到保护效果。在系统中或者在处理器中有存在的隔离机制。现在可用的层内隔离机制如下图。左边图给出的是 X86 中的层内隔离机制,从下到上是从慢到快,像 SGX 是 Intel 推出来的用于TE保护的机制,也可以用它来保护中枢核心的代码,但是它的问题是切换一次需要4000个时钟周期,还可以使用 M Pro 的 Cs Com 进行保护,它需要2000个使用周期啊,还可以通过切换页表需要300个使用周期。可以使用这个放卡来切换一批,扩展列表啊,切换需要1140个时钟周期。如果使用Intel的机制需要50个时钟周期,Im也有相应的机制需要3000个使用周期, Mprotect Syscall 需要2000个,Switching Page Table 需要200个,还要通过TxSZ、Watchpoint需要100个时钟周期,通过 DA CR 需要40个时钟周期。最快也需要 40~50 个使用周期,这个速度还是有一定的局限性。

 

03.层级内隔离手段

image.png

提升层级内隔离机制方面的研究工作有三个方向。第一个方向是设计新的硬件支持,第二个方向是挖掘现有的硬件潜力,第三个是通过随机来实现基于随机的伪隔离。

3.1方向1:设计专用的硬件支持——Intel MPK应用在进程内隔离

image.png

第一类方法是通过设计专用的硬件支持,最典型的是 ntel MPK 机制。MPK机制是在页表项中扩展出来4位,用来存储,可以存储16个编码。另外它又增加了一个硬件 PK 寄存器,寄存器总共32位,其中每两位分割开来,这两位中可以标志读写执行权限。通过这种方式,每一个页给出一个编码。比如编码是0,硬件对一个月记录访问时就会查 PKEY0 中给的权限,限定每页的访问权限。上面是实现了硬件中怎么利用 PK 和 PKRU 实现权限检查。在 Security 2019 和 ATC 2019 中分别有两项工作值得一提。他们发现 Intel 提供的机制有一个大问题,任何一个应用程序都可以使用指令修改 PKRU 寄存器,如果 把寄存器改了,隔离无法得以实现。所以这两项工作都在考虑如何做检查,防止对 PKRU 寄存的篡改,即防止 滥用 WR PKRU 指令。通过以上方式来组织攻击者篡改。

3.2方向1:设计专用的硬件支持——Donky

image.png

另一项专用指令在发表的 Security 2020 上的一个工作,在 RISC-V处理器上支持 MPK 机制。相对于 MPK 增加了 Domain Monitor ,它的作用是只有在 Domain Monitor 中的代码才有权利修改 PKRU 寄存器,其他的没有权限修改。 在其他代码中工作的时候,即使有 Bug 也没有权利修改寄存器。另一方面它做了相应隔离,当存在恶意软件时,想篡改其他的代码也没有机会篡改,因为没有对代码直接的访问权限。这就起到了对代码的有效保护,以上就是Security 2020 方面的工作。

3.3方向1:设计专用的硬件支持——IMIX

image.png

另外一项工作称作 IMIX 。以上思路是通过划分区域,IMIX 是提供一种特定的 SMOV 指令,这种访存指令是一个访存指令和 MOV 指令相对应。SMOV 和 MOV 指令的区别是 MOV 指令只能访问普通的内存,Normal Memory。SMOV可以访问一种特殊的内存区域,Protected Memory 。应用程序申请内存时可以申请是普通内存和受保护的内存。如果申请受保护的内存,普通的缓存指令没有访问权限,只有特定的 SMOV 指令才有权利访问。通过划分不同内存,利用特定的指令访问对数据隔离。这是 Security 2018 的工作 

3.4方向1:设计专用的硬件支持——HFI

image.png

在 ASPLOS 2023 支持高效的访存检查,设计了两类内存区,显示内存区和隐视内存区。显示内存区类似于 IMIX 机制,它限定了在显示内存区中只能通过 HMOV 指令访问,并且附带月季检查操作。隐视内存区是通过 Max 限定对普通 MOV 指令的访问,通过以上方式实现实现相应隔离。

3.5方向1:设计专用的硬件支持——SecureCells

image.png

SecureCells 机制是通过扩展指令实现层级内的划分。这个思想是以VMA为力度来将内存划分为不同的区域。程序的不同模块被划分为不同的 Security Division ,把程序的进行划分,对数据进行划分,限定不同的 Security Division 对不同的 Cell 具有独立的访问权限,通过MMU进行权限检查。通过这种方式限定一个 Security Division 只能对给定的几个区域进行访问,这样限定 Security Division 对数据的访问权限。

  image.png

以上介绍了设计新的硬件机制,硬件机制的好处是能力特别强,但是缺点也很明显,处理器厂家每次在处理器中增加一个硬件 Feature 时,特别是对于大型的老牌处理器厂家会非常谨慎,很多硬件支持很难被应用到处理器中。

3.6方向2:挖掘现有硬件潜力

image.png

第二个研究方向就是去挖掘现有的硬件潜力。现在主要的工作 X86和 ARM 两类处理器上。图中标志标记成蓝色的工作是团队开展的工作,做一些简单介绍。接下来先介绍一下 X86 方面做的硬件潜力的挖掘。

3.7方向2:挖掘现有硬件潜力——Intel MPK应用在内核内隔离

image.png

一个机制 Intel MPK 在微内核中的应用,微内核的优点很明显,把模块放到用户态下利用进程间的隔离进行隔离,起到防护恶意代码或者缺陷出现以后,攻击者可进行攻击的能力。但是进程间的隔离会带来很大的性能开销。为了解决以上问题,ATC 2020 上面一项工作是将原本运行在内核态的微内核组件运行在内核中。微内核会把这些组件放到用户台下,现在又重新把它拉回到内核态中,提升进程间通信的速度。将 Core Kernel 和其他组件所在的页面设计成 User-mode Page ,设置完后通过 MPK 隔离。因为MPK只能做 U-Page 介绍的隔离,它利用 MPK 机制把微内核一些模块挪到核心态下,再利用 MPK 隔离的机制。这种方式提升了微内核隔离效率。

3.8方向2:挖掘现有硬件潜力——Intel VMFunc应用在进程/内核内隔离

image.png

发表了 CCS 2015 和 SP 2020 上的工作,基于虚拟化平台,利用用户态指令 VMFunc 来切换隔离域。将关键的代码和数据隔离在单独的区域中,利用EPT限制不可信代码可以访问的地址空间,实现隔离。EPT 是Intel 处理器中提供的扩展页表,利用扩展页表限制不可信代码对内存的地址空间的访问,实现强隔离。需要切换时,通过 VMFunc 进行切换。

3.9方向2:挖掘现有硬件潜力——Intel WP应用在内核内隔离

image.png

还有一项工作是发表 ASPLOS 2015 上的工作 Nested Kernel 。这项工作利用了 Intel 的机制,Intel 处理器中有一个写保护机制。写保护机制的 CRo. 中有一个 WP 位。当 WP 位通过设置,将一个月设置成只读页,如果把写保护打开只读页起到防止写的作用,把写保护关闭以后只读页的代码就能写。通过以上方式对关键数据保护。Kernel 划分成两类, Nested Kernel 和 Outer Kernel。Outer Kernel 执行时被保护区域会被保护。到 Nested Kernel 的时候,Nested Kernel 会把 WP 位改变,释放内存区域的权限。

3.10方向2:挖掘现有硬件潜力——Intel SMAP应用在进程内隔离

image.png

接下来介绍团队做的工作。团队利用 Intel SMAP 机制实现了进程内的隔离。主体思想是利用了 Intel SMAP 机制,Intel SMAP 机制本质上是限制内核态的代码对用户数据的访问。图中的上面是内核态空间,下面是用户态空间,内核态空间中如果有恶意的代码指针篡改来访问用户数据,这种情况会进行限制。

SMAP 机制开关一次的时间需要8.6个时钟周期,比 Intel MPK 要快,Intel MPK 需要50个时钟周期。这个机制会让进程直接运行的内核态,关键的数据所在的页面会设计成 User-mode Page 的配置,即设计成用户态的数据,把其他页面的设置成 Supervisor -Model Page 配置。应用程序的代码在特权态的页面态中,普通的应用数据也在特权态页面中,这样应用代码访问普通的应用数据是能够访问的,但要直接去访问关键数据时,如果开启 MSAP,访问不能成功。当应用程序需要访问关键数据时,把 SMAP 关掉,就能访问。

如果应用程序不打算访问关键数据时,SMAP 就会打开,这样就限定这些代码对关键数据的访问。由于限制,攻击者假如利用漏洞去访问关键数据,MSAP 是打开状态,就访问不了,能够起到对关键数据保护。这项工作发表在安全四大顶会Supervisor-mode 2020 上。

具体做法是在操作系统内核中,首先是开启了Intel的VTX机制,把 Intel 的虚拟化的硬件支持打开,打开后处理器有两种工作状态,Non-Root  工作模式和 Root 工作模式。在 Non-Root 工作模式和 Root 工作模式之间有隔离。

Non-Root 的工作模式中会把应用程序挪到Ring 0状态下,其他进程放到 Ring 3 的状态下。在Root模式下增加了 Kernel Module,Kernel Module 作为目标进程的接口。当目标进程出现 时候会进入到 Kernel Module 中。

当出现中断时,Kernel Module 会处理相应中断。团队做了一项核心技术,阻止目标进程访问内核空间。目标进程运行在 Non-Root 模式下,它能访问数据,它有它的页表。如果页表中有映射可以通过页表映射访问操作系统的内核。

团队把页表进行相应处理,把一部分页表拷贝到 Non-Root 模式下,只开启应用程序所访问的页表映射,其他的不允许访问。在 Non-Root 模式下只能访问自己的数据,不能访问内存数据。当把应用程序放到内核态运行时,团队要阻止应用程序,通过滥用内核中的特权态下的指令实现恶意行为。对指定分类,分类完以后做了相应的保护。这是团队当时做的工作。通过机制能够进行关键数据的保护。

在性能方面,它相比于 机制有更好的性能。SEIMI 平均性能开销对于MPX的机制性能开销降低了33.97% 。Intel 还推出了 MPK 机制,SEIMI 和它相比平均降低了42.3%。

用这个机制对一系列的实际应用,比如4个Wab Server , 4个Database , 4个 JS 引擎进行保护,开销明显低于 MPX 和 MPK 。以上是团队的第一项工作。后来团队又做了一项工作,这项工作发表在2022年的 CCS 上,获得了 CCS 最佳论文的提名奖。这个 Intel 的 CET 机制实现硬件隔离保护,CET 是 Intel 第11代处理器,为了阻止攻击者进行ROP攻击新增的一种硬件支持。

CET 提供了一块区域 Shadow Stack Page,用来实现硬件影子栈。影子栈所在的页面是影子栈页,普通的写指令不能对其内容修改,只有一些特定的指令才有权利修改,如 WRSSQ/WRSSD 这两个特定指令才能修改。这些指令还有一个限制,WRSSQ 只能写8个字节数据,而且要求对齐,WRSSD 每次只能写4个字节数据。这是 Intel CET 机制。团队的做法比较简单,Shadow Stack Page 这个区域限定了普通的缓存指令的访问,能不能把一些关键的数据和敏感的数据放在 CET 的 Shadow Stack 页面中。如果能把关键数据放到页面中,一般的写操作没有能力写,只有关键的 WRSS 指令才能写,这个区域起到了对关键数据的写保护。

团队面临的一些问题是 WRSS 指令有地址对对齐和写入数据量的固定限制,WRSSQ 有8个字节对齐要求, WRSSD 有4个字节对齐要求,一次要写8字节或者4字节,给写操作带来很大影响。先考虑,怎么样方便地进行操作?两条 WRSS 指令需要18.6个时钟周期,写一个需要9.3个时钟周期,怎么减少 WRSS 指令的写操作?团队设计了一个 CETIS 架构,提供了内存隔离的抽象,支持防疫机制中原数据和应用中的敏感数据,代码完整性性的保护,对操作系统内核进行了修改,对编译器也进行了修改,可以用它保护安全的源数据,对一些应用中的敏感数据代码保护。右边是团队提供了相应的内存抽象。

CETIS 是将敏感区域抽象为CETIS的内存文件,提供了一系列API屏蔽用户使用WSS指令所受到的限制。团队提供了初始化随机写模式和缓存写模式供用户使用。实验效果 CETIS 对网络服务器 Nginx 的性能开销不到2%。SPEC CPU 2017性能开销低于5.5%。这是团队的测试,在 SPEC2006 中相比于 MPK 性能开销由27%到3.97%。对于2017保护时,相对于MPK 性能也提升了很多,由原来的开销7.61%降低到5.28%。Nginx 保护时,性能开销是1.56。Nginx 代码的保护,性能开销相比于MPK 降低了一个百分点。以上团队在 X86 上所做的工作。

3.11方向2:挖掘现有硬件潜力——ARM Memory Domain应用在进程内隔离

image.png

接下来给大家介绍团队在 ARM 上面做的工作以及其他团队在 ARM 上做的工作。ARM 是一款非常主流的处理器。ARM提供一系列的硬件支持,利用 ARM 硬件支持进行相应保护也是一种很重要的安全机制。在SP 2016上有一篇文章是利用 ARM 推出的 ARMv8 的 DACR 寄存器,和 MPK 类似,也对内存划分和相应保护。这项工作是利用 DACR 对关键数据的保护。

3.12方向2:挖掘现有硬件潜力——ARM Watch Point应用在进程内隔离

image.png

ARM还有其他硬件机制也能起到相应保护作用。Watch Point 本来是用于 调试,在 X86 中只能 Watch 8 字节的空间,如果对8字节修改或者读写8字节,就会捕获读写操作。在ARM中的Watch Point能力更强,能 Watch 2的n次方,最大能 Watch 到2个G内存空间。可以利用 Watch Point 对这一块区域保护。当某一块区域需要读写时就把 Watch Point 打开,如果要限制读写,对它进行 Watch,对这块区域的读写可能就会被硬件捕获

3.13方向2:挖掘现有硬件潜力——ARM TxSZ应用在进程内隔离

image.png

ARM 还有一类机制,TxSZ 机制能对内存区域检查。通过设置 TxSZ的大小,设置完后有两种增长方向,一种是向内核中从低地址空间向高地址空间增长,内核在用户态下从高地址向低地址增长。区域覆盖掉后,中间的区域不能被访问。通过这种方式对某一块区域保护,当需要把写权限或者读写限制,可以调整 TxSZ 将一块区域盖起来,想把访问权限打开,再调整 TxSZ 。 

3.14方向2:挖掘现有硬件潜力——ARM TTBx应用在进程内隔离 

image.png

ARM 还有一项工作发表到 NDSS 2016 上,在内核创建一个安全的可持续环境 SKEE ,配置了两张页表,一张页表映射到 SKEE 环境的内存,另一张不映射,通过切换列表实现相应的保护。 

3.15方向2:挖掘现有硬件潜力——ARM PAN应用在进程内隔离

image.png

接下来汇报团队在这方面开展的工作,利用 ARM PAN 机制实现了进程类的隔离。PAN 全名是 Privileged Access Never ,此机制限制内核对用户态下数据的访问。如果把 PAN 机制打开,普通的访存指令不能对用户态数据进行访问。内核ARM提供了一种新的访存指令 load/store unprivileged(LSU) 。

LSU 指令有2个,一个是读指令 LDTR ,一个是写指令 STDR 。特定的 LDTR 和 STDR 指令在PAN 打开的情况下,能对用户态的数据访问,可以利用 LDTR 和STDR 指令对不同内存区域进行相应访问。另外,硬件中开启 关闭UAO 可以控制特定区域的访问。在内核中,把应用程序放到内核态,普通的可信代码放到 Privileged 页面中,堆和栈数据也放到Privileged 空间中。不可信的代码也放到 Privileged 区域。关键的数据放到 Unprivileged 区域,也就是隔离区域。

这个不可信的代码要访问普通的数据是能访问的。如果要访问区域的数据会受到 PAN机制的限制,它就访问不了。

对于 Privileged 的代码中,使用特定的访存指令对这个区域访问。它对特定区域有访问权限,它对特定区域呢没有访问权限,这样就实现了相应的隔离操作。这项工作的思路比较简单,思路中面临的问题是需要把应用程序从用户态挪到内核态下执行,应用程序和内核在同一地址空间中,首先要阻止应用程序对原先内核区域的访问。这里使用了一套机制,在 ARM 中有两个页表机制寄存器 TTBR0 和 TTBR1 ,这两个页表机制的寄存器分别管理Kernel Space 页表和 User Space 页表。

代码如果运行在 User 空间时,把列表关闭掉就可以,代码由于没有页表进行地址翻译,所以它就无法访问数据。如果希望限制这块区域的访问,可以把这个区域页表关闭,这样就实现对 Kernel Space 和 User Space 访问。这就是团队的做法,具体细节有一系列比较重要的工作。

通过 PAN 机制做完以后,由于把应用程序也挪到内核态下,所以需要对特定的防止在应用程序出现的特权指令在这方面也做了相应工作。它的主体思想是扫描所有在应用程序中的指令,如果出现特权指令的编码就替换掉,让指令不能正常运行。这是相应的机制。在内核中做了一个 Kernel module ,支持对应用程序的保护。

这个方面的性能开销很低,在影子栈、OPPO SSL 的 Key 和 JITed Code 即时编译的代码保护上,PANIC所引入的开销对special 2017影子栈保护,引入开销只有1%。在 OPPO SSL 的 Key 的保护方面引入在128k传递文件中的开销是1%左右。及时编译代码的保护引入的开销是0.83%。

3.16方向3:基于持续随机的伪隔离

image.png

最后简单介绍基于随机的伪隔离。团队早期做了一系列工作,有一项工作发表的 v1 2017 上,有一项工作发表在 Security 2019 上。它的主体思想是对代码和数据进行持续随机化,持续改变代码的位置和改变关键数据区域的位置,实现关键数据或者关键代码的保护。好处是性能开销会比较低,但缺点也很明显,隔离实际上是伪隔离。攻击者不知道的关键数据的位置,但是攻击者持续试探,还是有机会找到关键数据。总结来说,通过挖掘硬件潜力来提升隔离效果,来支持对关键数据的保护,关键代码的保护是一个更好的思路。

 

04.总结

image.png

“数字化”世界对安全的需求越来越迫切。通过划分+隔离会成为未来计算系统的一个重要架构。不仅团队在做这个工作,而且美国 专门推出 CPM 的计划,探索低开销,高可靠的隔离对提升资源系统的安全性至关重要,工作汇报就到这里,谢谢大家。

相关文章
|
5天前
|
监控 安全 数据中心
基于Intel RDT平台技术的系统资源隔离能力提升|龙蜥大讲堂103期
龙蜥大讲堂103期探讨了基于Intel RDT平台技术在Koordinator项目NRI模式中提升系统资源隔离能力。课程分为三部分:1) NRI与Koordinator,介绍NRI框架及其应用;2) RDT与Koordinator,讲解RDT技术如何优化资源分配,提高集群效率;3) RDT技术发展,展望未来RDT技术的演进方向及在Koordinator中的集成进展。
|
8月前
|
虚拟化 Anolis
基于龙蜥衍生版 KeyarchOS 的 LVM 卷管理技术与实践 | 干货推荐
如果遇到磁盘空间不足的情况,如何对磁盘进行扩容?
|
5月前
|
Anolis 开发者
龙蜥操作系统产品问题之技术研发到产品落地的高效循环的促进如何解决
龙蜥操作系统产品问题之技术研发到产品落地的高效循环的促进如何解决
52 0
|
5月前
|
Linux 编译器 云计算
操作系统新浪潮问题之浪潮信息深入参与龙蜥社区并推出商业发行版操作系统的原因如何解决
操作系统新浪潮问题之浪潮信息深入参与龙蜥社区并推出商业发行版操作系统的原因如何解决
44 0
|
5月前
|
机器学习/深度学习 人工智能 Cloud Native
龙蜥操作系统产品问题之云原生技术的挑战如何解决
龙蜥操作系统产品问题之云原生技术的挑战如何解决
57 0
|
存储 测试技术 Linux
|
安全 Linux Anolis
带你读《2022龙蜥社区全景白皮书》——5.8.1 龙蜥操作系统漏洞管理
带你读《2022龙蜥社区全景白皮书》——5.8.1 龙蜥操作系统漏洞管理
329 13
|
算法 测试技术 Linux
龙蜥白皮书精选:Ancert——硬件兼容性验证与守护
Ancert 支持服务器整机和 NIC、HBA、FC、GPU、NVMe 等多种外设。