天天速看:浙江大学百人计划研究员申文博:容器场景下的内核安全

嘉宾 | 申文博 整理 | 哪吒


(资料图)

出品 | CSDN云原生

2022年6月7日,在CSDN云原生系列在线峰会第7期“安全技术峰会”上,浙江大学百人计划研究员、博士生导师申文博以内核传统攻击和防护演化为切入,分享了容器给内核安全带来的新挑战——抽象资源攻击和内存计数问题。

据统计,2008-2019年,Linux内核代码量急剧增长,到2019年已超过2300万行,而最新统计数据显示,Linux内核代码量更是将近2800万行。

与此同时,Linux只是Android生态的一部分,在Linux内核之上,还有HAL、Runtime、Framework、Applications等多层。

我们知道,代码量跟Bug数量或者跟漏洞数量成正比,也就是说,代码量越多,Bug数量、漏洞数量也会越大。这些漏洞往往会被攻击者利用,产生新型的攻击。

同时,新型的攻击又催生了新型的防护,所以对操作系统内核的攻防是在不断的对抗中演化升级的,可谓没有绝对安全的系统,也没有绝对强的攻击手段。

内核传统攻击和防护演化

攻防一般围绕着代码注入、代码重用、数据攻击进行对抗。下图展示的是内核攻击和防护的演化历程。

代码注入攻防

通过内核漏洞

篡改已有代码text section

注入新的代码

或者跳到用户代码,比如jump-to-user

系统控制能力大

可执行新代码

危害大

多见于早期Linux

比如Kernel Text RWX(Android 2013)

内核代码注入防护

保护已有代码W^X

硬件支持,杜绝注入

数据不可执行(2001 XN ARM; NX AMD)

特权不可执行(2011 SMEP Intel; PXN ARM)

通过内核页表来实现

在内核页表设置相应的保护位,实现保护

多数Android设备, 包含Google Pixel

防御性弱,内核页表被改掉即失效

对内核页表没有保护

攻击者可篡改页表,去掉保护

进而篡改代码   

通过隔离环境保护内核页表

通过隔离环境,避免内核漏洞影响

实现了纵深防御defense-in-depth

内核代码重用攻击

内核代码重用攻击也被称为控制流劫持攻击,该攻击无法注入新代码,而是重用已有代码。一般通过篡改控制流,拼接已有函数片段,实现攻击函数。

攻击方式有两种:

Return-oriented programming (ROP) :通过注入恶意返回地址,构造攻击函数

Jump-oriented programming (JOP):通过篡改函数指针,构造攻击函数

内核数据攻击

控制数据被保护后,攻击者提出非控制数据攻击

返回地址和函数指针以外的数据

Data-oriented programming

影响关键的安全特性:仅利用非控制数据攻击做到内核提权

非控制数据防护 

种类繁杂,难以实行统一有效保护

主流操作系统均缺乏对数据攻击的有效防护

总体来说,攻击演化呈现出

攻击难度指数级增加

复杂性指数级增加

隐蔽性在增加

控制能力减弱

数据攻击依然能root内核

防护演化呈现出

软件到硬件

学术界原型到产业界实用方案

有滞后性

内核在容器场景下的安全问题

容器是操作系统级虚拟化,它是由同一个内核虚拟出来多个用户空间的实例,每个用户空间的实例,不需要维护单纯的内核。用户空间的实例,也叫容器实例,它不用单独维护内核,所以效率高、启动快,并且配置比较灵活,会被广泛应用于代码。

在容器场景下,安全主要体现在抽象资源攻击、内存计数问题。

抽象资源攻击

容器本质是基于进程的资源隔离,由namespaces负责隔离,当前内核支持8种namespaces,包含UTS、IPC、mount、PID、network、user、time、cgroup;由control groups进行限制,当前内核支持13种cgroups,主要用于限制CPU、内存和设备资源。

容器注重限制物理资源,忽略抽象资源,如内核变量。我们发现,这些抽象资源同样可以被DoS攻击,例如打开大量文件,耗尽nr_files;所有新打开文件操作均会失败,导致无法运行新程序。同时发现,大的云厂商均可受到抽象资源攻击。

因此,内核数据同样决定操作系统功能的可用性,容易导致DoS攻击;内核data dependency复杂,难以彻底解决DoS问题;高安全性要求场景建议使用虚拟机隔离。

内存计数问题

内核依赖memcg对内存进行计数,而memcg未经系统性安全分析,存在安全隐患。因此,针对内存计数问题,我们做了大量的工作。

形式化定义了内存计数的步骤

分析了policy design的问题

设计自动化工具分析implementation问题

发现了policy design中导致的计数缺失的问题

设计了基于编译器的自动化分析工具,对policy implementation进行系统性分析

截至目前,我们发现了53个计数Bug,已确认其中的34个并提交patch。

总结来说,内核安全性在对抗中大幅提升,但对数据攻击防护依然不足。而容器场景给内核带来了新的机遇,也带来了新的安全挑战,包括抽象资源攻击和内存计数问题。


聚焦云原生新技术、新实践,帮助开发者群体赢在开发范式转移的新时代。欢迎关注CSDN云原生微信公众号~

推荐DIY文章
焦点讯息:iPhone苹果手机如何清理缓存文件?
环球看热讯:iPhone6相册怎么加密?苹果iPhone6相册加密方法图文汇总介绍
今日播报!iPad越狱后怎么升级?
全球要闻:中国移动和包是什么?移动和包功能使用详解
全球消息!oppo reno能支持多少倍数码变焦?
每日头条!iphone6垃圾短信屏蔽教程 iphone6短信黑名单设置步骤
精彩新闻

超前放送