保护Android系统,还得靠Linux内核防护功能

 内存保护
内核提供的重要安全功能之一是以地址空间分离的形式为用户空间进程提供内存保护。不同于用户空间进程,内核中的各项任务都在同一个地址空间内运行,内核中任意位置上的漏洞都可能会影响系统内存中与其无关的部分。内核的内存保护机制设计用于在存在漏洞的情况下仍能保持内核的完整性。 
1. 将内存标记为只读/不可执行

该功能将内核内存划分为多个逻辑区段,并限定每个区段的页访问权限。将代码标记为只读可执行。将数据区段标记为不可执行,并进一步将其细分为只读区段和读写区段。该功能通过配置选项 CONFIG_DEBUG_RODATA 启用。
该功能是由 Kees Cook 汇集 Grsecurity 中的 KERNEXEC 部分功能(由 Brad Spengler 实现)和 Qualcomm 的 CONFIG_STRICT_MEMORY_RWX 部分功能(由 Larry Bassel 和 Laura Abbott 合作实现)而实现的。位于 arm/arm64 上游内核的 CONFIG_DEBUG_RODATA 已向后移植到 Android 的 3.18+ arm/arm64 通用内核。

2. 限制内核对用户空间的访问

该功能通过阻止内核直接访问用户空间内存来增强对内核的保护。这样可以增大许多攻击的难度,这是因为攻击者对于可执行的内核内存(特别是启用 CONFIG_DEBUG_RODATA 的内存)的控制力要弱得多。
类似的功能已经存在,Grsecurity 的 UDEREF 最早提供了此项功能。该功能通过配置选项 CONFIG_CPU_SW_DOMAIN_PAN 启用,由 Russell King 完成了该功能的 ARMv7 实现,并由 Russell King 向后移植到 Android 4.1 内核。

3. 增强对堆叠缓冲区的溢出保护

与其前身 stack-protector 非常类似,stack-protector-strong 不但可以防止系统出现堆叠缓冲区溢出,还额外提供对更多数组类型的保护,而其前身仅保护字符型数组。Stack-protector-strong 由 Han Shan 实现并添加到 gcc 4.9 编译器。

 减少攻击面
减少攻击面试图在不破坏合法功能的情况下尽量减少暴露内核的入口点。减少攻击面可以包括删除代码、取消对入口点的访问权或者选择性地曝光功能。 
1. 取消对调试功能的默认访问权

内核的 Perf 系统提供了性能测量基础架构,可用于分析内核和用户空间的应用。虽然 Perf 对开发者而言是个非常有用的工具,但对绝大多数的 Android 用户而言,它会增大不必要的攻击面。在 Android Nougat 中,默认情况下将会阻止访问 Perf。开发者仍可以通过启用开发者设置,然后使用 adb 设置“adb shell setprop security.perf_harden 0”属性来访问 Perf。

用于阻止访问 Perf 的补丁集可分解为内核和用户空间两部分。内核补丁由 Ben Hutchings 实现,派生自 Grsecurity 的 CONFIG_GRKERNSEC_PERF_HARDEN(由 Brad Spengler 实现)。对于用户空间的更改则来自 Daniel Micay 的贡献。在此感谢 Wish Wu 以及其他负责发现 Perf 安全漏洞的人士。
2. 限制应用访问 ioctl 命令

很多 Android 安全模型都是由 SELinux 进行说明和强制执行的。系统调用 ioctl() 表示 SELinux 粒度执行中的重大缺陷。现已新增 SELinux 的 Ioctl 命令白名单,作为对 SELinux 系统调用 ioctl 进行逐条命令控制的手段。
报告的有关 Android 的大多数内核漏洞都出现在驱动程序中,使用 ioctl 系统调用均可找到,例如 CVE-2016-0820。第三方应用可能需要用到某些 ioctl 命令,但大多数 ioctl 命令都不会用到,因此,可以限制访问这些命令,而不会破坏合法功能。在 Android Nougat 中,只有少数被列入 ioctl 套接字命令白名单中的命令可供应用使用。对于部分设备,应用对 GPU ioctl 命令的访问也具有类似限制。

3. 要求支持 seccomp-bpf

Seccomp 提供了额外的沙盒机制,允许进程使用可配置的过滤器来限制系统调用和系统调用参数。限制系统调用的可用性可以显著减小内核暴露的攻击面。seccomp 最初是在运行 Lollipop 的 Nexus 设备上引入的,自那以后,我们始终在稳步提升其在整个 Android 生态系统中的可用性。
在 Android Nougat 中,所有设备都要求支持 seccomp。在 Android Nougat 中,我们将 seccomp 引入 mediaextractor 和 mediacodec 进程,这也是媒体加固项目的一部分。

 不懈努力
我们还在开展其他保护内核的项目: 
  • 内核自我保护项目旨在开发针对上游内核的运行时和编译器防护功能。
  • 而在 AOSP 中,我们正在进一步收紧沙箱和减少 SELinux 攻击面。
  • Minijail 提供了一种便利机制,用于应用内核提供的多个遏制和沙盒功能,包括 seccomp 过滤器和命名空间。
  • kasan 和 kcov 之类的项目则会帮助模糊器发现引起崩溃的根本原因,并智能地构建能够增大代码覆盖范围的测试用例,最终实现更高效的缺陷跟踪过程。
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=89,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?