近期,浙江大学网络空间安全学院在云原生系统安全方向取得新成果。浙大网安联合美国明尼苏达大学和蚂蚁集团研究团队,对操作系统内存配额统计机制展开全面分析研究,可显著提升云原生系统/容器技术对内存资源的管理能力,发表最新研究成果“Making Memory Account Accountable: Analyzing and Detecting Memory Missing-account bugs for Container Platforms”,获得计算机安全旗舰会议ACSAC 2022杰出论文奖(Distinguished Paper Award)。
浙大网安在云原生系统安全已有多年积累,研究成果包含对容器共享内核的攻击面分析(发表于安全顶会ACM CCS21),容器云技术栈安全(发表于IEEE TPS21),对Docker组件间通信的安全分析,对基于虚拟机隔离的容器和Kubernetes编排器的安全性分析等。研究成果覆盖云原生系统技术栈全部层级(包含内核层、容器层和编排层),可有效提升云原生系统的安全性。
Annual Computer Security Applications Conference (ACSAC)是由Applied Computer Security Associates发起的计算机安全领域旗舰性会议,是中国计算机学会推荐的B类国际会议。
一、论文题目
Making Memory Account Accountable: Analyzing and Detecting Memory Missing-account bugs for Container Platforms
二、论文作者
Yutian Yang, Wenbo Shen, Xun Xie, Kangjie Lu, Mingsen Wang, Tianyu Zhou, Chenggang Qin, Wang Yu, Kui Ren
三、论文内容
内存是计算机系统最重要的资源之一,因此内存记账和内存使用限制是所有操作系统内核的基本功能。Linux内核使用内存控制组(memory control groups, 简称memcg)实现了内存记账。内存控制组被广泛使用在几乎所有容器和云原生系统中,比如Docker和Kata Containers等容器引擎、容器即服务平台(Container-as-a-Service, CaaS)和函数即服务平台(Function-as-a-Service, FaaS)等。
尽管memcg 被广泛使用,但它的内部实现非常复杂而易错。其一,Linux内核通过在内存分配/释放路径中插入内存记账接口来实现记账,但因为内存分配/释放接口具有使用量大、用法多样等特点,所以memcg在插入内存记账接口调用时难以覆盖到所有的执行路径,从而出现内存记账缺失漏洞(即内存分配但并未记账)。其二,即使接口处于正确的位置,内存记账行为是否确实发生也进一步取决于记账标志是否置位,然而论文的分析发现这些标志经常没有置位,也会导致内存记账缺失。因此,内存记账缺失是内核中很常见的问题。
图1 本论文发现的CVE-2022-0480漏洞,攻击者可利用该漏洞在容器内部重复申请文件锁,虚拟机将请求直接转发给宿主机内核,触发宿主机内核的记账缺失漏洞。
然而memcg内存记账缺失漏洞却从未被系统地分析,使得人们对两个问题认识不足。首先,人们不清楚内存记账缺失漏洞会造成什么样的安全问题,以及这些漏洞可否被利用发起攻击,导致内核开发人员往往忽视修复内存记账缺失漏洞的重要性。其次,当前缺少自动检测内存记账缺失漏洞的工具。如前所述,内存记账的设计和实现很复杂,即使是有经验的用户也很难正确理解内存记账的设计和实现。如果没有自动检测,开发人员几乎不可能人工验证内存记账的正确性。因此,如何检测内存记账缺失漏洞是一个亟待解决的问题。
图2 论文分析工具框架
本论文是首个系统性研究Linux内核内存记账缺失漏洞的研究工作。针对上述的两个问题,本论文首先系统调研了内存记账缺失漏洞的可利用性,同时给出了详细的攻击案例,包括在多种底层运行时(runC和Kata Containers)和多种平台(如Docker,OpenShift和OpenWhisk)上进行攻击实验,证明了内存记账漏洞可用于发起对整个操作系统的拒绝服务攻击(DoS);在此基础上,本论文提出了基于页计数器的接口识别、内存申请-记账映射分析以及记账标志位分析等技术,成功解决了内存记账系统使用量大、用法多样等难点。本论文向Linux内核社区提交了53个漏洞补丁;其中37个已经被接收,并获得了两个CVE编号CVE-2021-3759和CVE-2022-0480,提升了Linux内核对内存资源的管理能力,显著增强了云原生系统/容器技术在内存分配方面的安全性。