Android 8.0系统学习(7)---内核加固

转载 2018年04月16日 17:12:19

内核加固

Android 8.0 增添了内核加固功能,以帮助减少内核漏洞并发现内核驱动程序中的错误。这些功能位于分支 android-3.18、android-4.4 和 android-4.9 的 kernel/common 中。

实现

要获得这些功能,设备制造商和 SOC 应该将来自 kernel/common 的所有加固补丁程序合并到其内核树并启用以下内核配置选项:

  • 加固后的用户复制功能:CONFIG_HARDENED_USERCOPY=y
  • PAN 模拟 - arm64:CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN 模拟 - arm:CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 及更高版本的内核:CONFIG_RANDOMIZE_BASE=y

KASLR 还需要引导加载程序支持以通过设备树节点 /chosen/kaslr-seed 或通过实现 EFI_RNG_PROTOCOL 来传递硬件熵。

此外,还要确保启用现有的加固功能:

  • 堆栈缓冲区溢出缓解:CONFIG_CC_STACKPROTECTOR_STRONG=y
  • 内存储器保护:CONFIG_DEBUG_RODATA=y 或 CONFIG_STRICT_KERNEL_RWX=y
  • 限制内核对用户空间的访问 - x86(默认已启用):CONFIG_X86_SMAP=y

测试

要测试您的实现,请将 CONFIG_LKDTM=y 添加到内核配置,并确认以下每个命令都会导致内核崩溃:

echo ACCESS_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT echo EXEC_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT echo WRITE_RO > /sys/kernel/debug/provoke-crash/DIRECT echo WRITE_RO_AFTER_INIT > /sys/kernel/debug/provoke-crash/DIRECT echo WRITE_KERN > /sys/kernel/debug/provoke-crash/DIRECT echo EXEC_STACK > /sys/kernel/debug/provoke-crash/DIRECT echo EXEC_RODATA > /sys/kernel/debug/provoke-crash/DIRECT echo EXEC_KMALLOC > /sys/kernel/debug/provoke-crash/DIRECT echo EXEC_VMALLOC > /sys/kernel/debug/provoke-crash/DIRECT echo CORRUPT_STACK > /sys/kernel/debug/provoke-crash/DIRECT

对于 android-4.9:

echo USERCOPY_HEAP_SIZE_TO > /sys/kernel/debug/provoke-crash/DIRECT echo USERCOPY_HEAP_SIZE_FROM > /sys/kernel/debug/provoke-crash/DIRECT

常见问题

这些更改可能会暴露内核驱动程序中的错误,这些错误则需要由设备制造商或内核驱动程序所有者修复。

  • 将数据复制到用户空间/从用户空间复制数据时,加固用户复制功能会发生错误的边界检查。应该像修复任何其他存储器损坏错误一样,对这些错误进行修复。
  • PAN 模拟会导致内核直接访问用户空间,而这是不允许的。相反,尝试访问用户空间存储器的驱动程序需要改为使用标准的 copy_to_user()/copy_from_user() 函数。

明盒开发

明盒开发未经允许,严禁转载本栏目内容本文经许可转载自软件工程专家网www.21cmm.com,未经CSDN许可,请勿随便转载,谢谢合作(一) 明盒结构  明盒定义了实现转换状态盒功能的过程。明盒和相应...
  • gigix
  • gigix
  • 2002-03-14 10:15:00
  • 1677

Linux 加固(centos7)

(1)寻找空密码的用户: 首先root账户建立一个用户: useradd user (这样建立的用户的是不能直接用空密码登陆的) 然后root账户用passwd -d user 清除user的密码(这...
  • niexinming
  • niexinming
  • 2016-08-20 16:19:47
  • 4874

Android加固与脱壳学习之加固初步总结(1)

加固思想类比PE的加壳的加固思想,通过一段引导代码,即通过壳代码来解密,而源dex被加密后存储在一起的做法来进行加壳。加固方案1加固 http://blog.csdn.net/androidsecu...
  • qq_29343201
  • qq_29343201
  • 2016-11-13 20:36:13
  • 347

【爱加密】Android App应用安全加固详细步骤

随着各种牌子手机的不断推出,各种Android手机应用,即Android App也是满天飞。但是,在这个山寨、黑客遍布的世界,如何保证Android App的安全是广大Android App应用开发者...
  • lyj1005353553
  • lyj1005353553
  • 2017-02-21 14:43:26
  • 775

论Android代码加固的意义和hook

加固的意义从安卓2.x版本起,加固技术就逐渐火了起来。最初,只有一些创业型公司涉及加固领域;随着安卓应用的逐渐升温,诸如阿里、腾讯、百度等大型互联网公司逐渐涉及该领域。那么为什么要对APP进行加固呢?...
  • xiangzhihong8
  • xiangzhihong8
  • 2016-12-05 23:38:26
  • 2195

Android So简单加固

Android下的dex加固技术从最初爱加密实现的dex整体内存加载,到目前各大厂商都在研究的代码虚拟化技术,整体技术已经很成熟了。但是因为Android系统开源的特性,这种加固方法的安全性并不高,只...
  • omnispace
  • omnispace
  • 2016-10-05 15:33:58
  • 2316

Android App应用安全加固详细步骤

  • 2014年11月12日 16:31
  • 342KB
  • 下载
收藏助手
不良信息举报
您举报文章:Android 8.0系统学习(7)---内核加固
举报原因:
原因补充:

(最多只允许输入30个字)