看雪论坛 android,[分享] KSMA -- Android 通用 Root 技术

2018 马上过去,给大家拜个早年啦。祝大家新的一年里事事顺心,早日成为技术大咖。这一年里,陆续看到一些朋友不再从事 Android 漏洞方面的工作,笔者也已在年初弃坑,不禁感慨 Android 平台的漏洞研究可能只属于那些 geeker 了。

正文

2018 年 blackhat asia 会议上,阿里巴巴的安全研究员 ThomasKing 做了 Android Root 方面的主题演讲,题为《KSMA-Breaking-Android-kernel-isolation-and-Rooting-with-ARM-MMU-features》。笔者对这样的通用 Root 方式是比较感兴趣的,便着手复现了一下。

ThomasKing 为这种通用 root 方式起了个不错的名字 KSMA(Kernel Space Mirroring Attack),意为内核空间镜像攻击。简单的说,在内核的一级页表中伪造一个 d_block 类型的 descriptor (内存描述符),将内核镜像所在的 PA (物理地址) 映射到 descriptor 所对应的 VA (虚拟地址) 处。通过修改 d_block 中的一些内存属性,就可以做到对 VA 处映射的内核镜像做读写操作,从而可以任意修改内核代码。

linux 页表介绍

linux 内核采用分页机制管理 VA,并使用 MMU(内存管理单元) 完成 VA 到 PA 的转换。page (内存页) 大小一般为 4KB 16KB 或者 64 KB,为了更有效率的管理 page,内核使用 page table(页表)来组织所有page。页表是分级的,pc 系统一般使用4级页表,现阶段 android 系统采用3级页表,页大小 4KB。以下均以 4KB 3级页表作为讨论基础。

下面图表搭配着看比较好理解一些,下图位于 armv8 手册 D4-1744 处,下表位于内核 Documentation/arm64/memory.txt 处。

f7b2d9f75b90f39f00cb2581fb8c3b0b.png

AArch64 Linux memory layout with 4KB pages:

Start End Size Use

-----------------------------------------------------------------------

0000000000000000 0000007fffffffff 512GB user

ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc

ffffffbbffff0000 ffffffbbffffffff 64KB [guard page]

ffffffbc00000000 ffffffbdffffffff 8GB vmemmap

ffffffbe00000000 ffffffbffbbfffff ~8GB [guard, future vmmemap]

ffffffbffa000000 ffffffbffaffffff 16MB PCI I/O space

ffffffbffb000000 ffffffbffbbfffff 12MB [guard]

ffffffbffbc00000 ffffffbffbdfffff 2MB fixed mappings

ffffffbffbe00000 ffffffbffbffffff 2MB [guard]

ffffffbffc000000 ffffffbfffffffff 64MB modules

ffffffc000000000 ffffffffffffffff 256GB kernel logical memory mapTranslation table lookup with 4KB pages:

+--------+--------+--------+--------+--------+--------+--------+--------+

|63 56|55 48|47 40|39 32|31 24|23 16|15 8|7 0|

+--------+--------+--------&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值