首页
社区
课程
招聘
[翻译]安卓O内核的加固
发表于: 2017-9-6 21:14 7738

[翻译]安卓O内核的加固

2017-9-6 21:14
7738

本文由安卓安全团队的高级软件工程师Sami Tolvanen发表

安卓用户空间的加固使得越来越多攻击者开始研究linux内核,这使得去年发现的安卓安全的漏洞,1/3都在内核上。在安卓8.0(Oreo)中,程序员们做出了巨大的努力来加固内核,以减少安全漏洞。

Android Nougat通过把内核和用户进程隔离开来,使用SELinux ioctl进行过滤,并请求seccomp-bpf的支持(能够在处理不受信任的输入时,过滤对系统调用的访问),以保护内核。安卓8.0重点关注内核上的保护,其中主要有4个安全加固特征,并在第一个发行版发布时,将之以补丁的形式发布所有支持的设备上。

用户的复制功能原理是将用户空间的数据传输到内核中,然后再返回到用户空间中。从2014年开始,缺少或是不合理的边界检查已经导致了45%的安卓内核漏洞。加固的用户复制功能添加了边界检查,它可以帮助开发者定位误用并修复他们代码中的bug。当然,如果出现隐蔽的驱动bug,这些功能的加固使得这样的bug难以被利用。

这些特征在linux内核4.8版本中有介绍,我们将这些补丁打到了安卓的linux 3.18版本的内核上了。

上述是加固后的用户复制功能预防漏洞的一个例子。

加固的用户复制功能能够帮助我们找到并防御安全问题,也能在开发者使用它们的时候起到作用。目前,所有的内核代码,包括驱动,都能直接访问用户空间的内存,这会导致各种各样的安全问题。
为了防御这个瓿,CPU供应商介绍了一些诸如
x86平台上的Supervisor Mode Access Prevention (SMAP),ARM v8.1上的Privileged Access Never (PAN)。这些特征可以预防内核直接访问用户空间,并确保开发者访问它通过用户复制功能。不幸的是,这些特征还并没有在设备上得到广泛应用。

Linux的Upstream介绍一种使用软件模拟PAN在ARM版的4.3内核和ARM64版的4.10内核上的应用的方法。
使用加固的用户空间,PAN模拟能帮助我们在Pixel手机上的4个内核驱动上,找到并修复漏洞。

以上是PAN模拟防御安全漏洞的一个例子。

安卓使用了内核地址空间布局随机化这个技术已经好几年了。随机化的内存布局使得代码重用攻击不再一定起作用,也就使得攻击者尤其是远程攻击者更难进行利用。安卓8.0把这个特征带到了内核。Linux从3.14版本开始已经支持x86平台上的KASLR,ARM64平台上的KASLR也已经从4.6版本开始支持。安卓8.0使得KASLR在安卓内核4.4上和更新的版本开始受到支持。
KASLR通过在每次启动时随机化内核代码的地址来防御内核漏洞。例如,在ARM64平台上,它根据设备的内存配置,添加了13-25位的熵,这会使得代码重用攻击更加困难。

最终的加固特征继承了内核已有的内存保护,这种保护机制通过在内核初始化后,创建标记为只读的内存区域。这使得开发者在初始化阶段,当数据需要可写权限时有可能改善保护机制,但在那之后不能再进行修改。使得可写的内存变得更少可以减少来自内核的攻击,使得漏洞利用更加困难。

在初始化时确定的只读内存在内核4.6中有介绍,我们把它移植到了安卓3.18内核以及更新的版本上。当我们应用这些保护机制到内核的一些数据结构上时,这一特征对于那些工作在内核驱动的开发岗位上的开发者非常有用。

安卓O包含了防御内核上的大多数的安全漏洞机制。这非常重要,因为安卓上85%的内核安全漏洞来自于驱动供应商,并且缺少详细的代码审查。这些更新使得驱动开发者在开发时更容易发现公共的漏洞,并在它们到达用户设备之前阻止它。

本文由 看雪翻译小组 梦野间编译
原文链接(需翻墙):https://android-developers.googleblog.com/2017/08/hardening-kernel-in-android-oreo.html

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
2
Android  Oreo  新  Bug:开  Wi-Fi  仍使用移动数据 

据 Reddit 网友 Unusual_Sauce 爆料,Android Oreo 新发现了一个 Bug,可能导致用户在开启了 Wi-Fi 之后仍被吞噬宝贵的移动数据。不过 Google 方面已经知晓了此事,现正在抓紧制作修复补丁。Unusual_Sauce 表示,他在前一晚升级 Android Oreo 后发现 —— 如果同时开启了 Wi-Fi 和移动数据,系统可能会无视已经连上的无线热点,而是继续只使用移动数据。

“在联系支持人员后,我被告知他们已经获悉此事,且正在制作一个修复。与此同时,我必须到家就手动关闭移动数据开关,以确保仅使用 Wi-Fi 网络”。

当然,该问题的起因是开发人员选项中的某个设置。为了方面测试,Android Oreo 最终编译版本中默认启用了“始终开启移动数据”这个功能。如果你想要预防这个 bug,也只需手动关闭此选项。


来源:cnbeta
2017-9-7 14:43
0
雪    币: 0
活跃值: (878)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
内核漏洞更难挖了
2017-9-9 22:45
0
雪    币: 4366
活跃值: (353)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
4
安卓使用了内核地址空间布局随机化这个技术已经好几年了。随机化的内存布局使得代码重用攻击不再一定起作用,也就使得攻击者尤其是远程攻击者更难进行利用。安卓8.0把这个特征带到了内核。Linux从3.14版本开始已经支持x86平台上的KASLR,ARM64平台上的KASLR也已经从4.6版本开始支持。安卓8.0使得KASLR在安卓内核4.4上和更新的版本开始受到支持。
KASLR通过在每次启动时随机化内核代码的地址来防御内核漏洞。例如,在ARM64平台上,它根据设备的内存配置,添加了13-25位的熵,这会使得代码重用攻击更加困难。
2018-4-18 09:00
0
雪    币: 47
活跃值: (418)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
心许雪 安卓使用了内核地址空间布局随机化这个技术已经好几年了。随机化的内存布局使得代码重用攻击不再一定起作用,也就使得攻击者尤其是远程攻击者更难进行利用。安卓8.0把这个特征带到了内核。Linux从3.14版 ...
利用的确要复杂一些,主要是要找泄露计算随机化的  slide。几年前,三星在3.18的内核上就在使用内核随机化了。
2018-4-18 10:18
0
游客
登录 | 注册 方可回帖
返回
//