• 1. Android常见缺陷
  • 2. 前言Android作为最流行的移动平台 安全性非常重要,带来的影响不必多说 主要关注以下几个方面 1. Android本身的安全性 2. Linux内核 3. 设备制造商引入的问题
  • 3. 从init说起init是第一个启动的程序 root权限运行 执行init.rc脚本 提供property服务 其中的存在的利用点 init.rc中存在的逻辑缺陷 根据property不同,某些服务的行为
  • 4. init.rc中的逻辑缺陷两个概念 1. 符号链接 ln -s source target 2. uevent 当发生硬件变化时,内核将产生uevent,默认配置编译的 内核,将以root权限,运行/sys/kernel/uevent_helper中设 置的程序
  • 5. init.rc中的逻辑缺陷4.1之前的init会follow符号链接 例子: 如果存在这样的东西 ls -l /data srwxrwxrwx ... abc -> /some/where/xyz 恰好init.rc中有这样的语句 chmod 644 /data/abc shell shell 后果会怎么样?
  • 6. init.rc中的逻辑缺陷bingo!有段时间确实有这样的好事。 mkdir /data/local/tmp shell shell chmod 771 /data/local/tmp 如果这么做: adb shell $ rm -r /data/local/tmp $ ln -s /sys/kernel/uevent_helper /data/local/tmp
  • 7. init.rc中的逻辑缺陷某厂商H的例子 mkdir /data/drm 0775 system sdcard_rw chown system sdcard_rw /data/drm chmod 0775 /data/drm mkdir /data/drm/rights 0775 system sdcard_rw chown system sdcard_rw /data/drm/rights chmod 0775 /data/drm/rights
  • 8. init.rc中的逻辑缺陷某厂商H的例子 如何利用?
  • 9. init.rc中的逻辑缺陷某厂商H的例子 如何利用? 普通app声明WRITE_EXTERNAL_STORAGE权限 那么app就会被加入sdcard_rw组 结合上面的符号链接......
  • 10. init.rc中的逻辑缺陷persist类型的property的利用 property service是运行在init进程中的 在某个版本之前 setprop persist.sys.timezone Asia/Shanghai 的逻辑是这样的 write "Asian/Shanghai" /data/property/.temp mv /data/property/.temp /data/property/persist.sys.timezone 局限在于/data/property只有root才可读写
  • 11. init.rc中的逻辑缺陷persist类型的property的利用 如果从一开始就出现了 ls -l /data/property srwxrwxrwx ... .temp /sys/kernel/uevent_helper 然后 $ setprop persist.guheihei /data/local/tmp/mybackdoor 这并非不可能,如果哪天挂载在/data的设备是可拔插的 制造出这种场景是可能的
  • 12. Linux内核缺陷特点 影响范围广 后果一般都非常严重 不容易通用 最近多年才能得到一见
  • 13. Linux内核缺陷性能计数器数组下标越界 2013.04初公布 几乎所有市面上在此时间之前的未升级的手机收到影响 任何app都能利用这个缺陷获得root权限 利用起来不太方便
  • 14. Linux内核缺陷性能计数器数组下标越界 修复极其简单:
  • 15. Linux内核缺陷性能计数器数组下标越界 几个关键点
  • 16. Linux内核缺陷性能计数器数组下标越界 漏洞的效果和局限性 可以控制一个内核数组的下标 令其内容+1 每利用一次,消耗掉一个文件描述符 速度慢 受限于内核资源限制
  • 17. Linux内核缺陷性能计数器数组下标越界 利用的思路 找到一个普通应用能访问的设备 其file_operation结构非const修饰从而可写 填写其中未实现的一个函数指针,由我们自己实现 然后触发它 符合条件的最好的设备:/dev/ptmx
  • 18. Linux内核缺陷性能计数器数组下标越界 资料收集 /proc/kallsyms获得一些函数的地址 /dev/ptmx的file_operation结构地址
  • 19. Linux内核缺陷性能计数器数组下标越界 利用步骤 把/dev/ptmx的fsync函数指针填写成我们自己的提权代码 的函数地址,然后触发即可。
  • 20. Linux内核缺陷性能计数器数组下标越界 能做的事情很多 例如这里并不是简单提权,而是mmap呢? 获得修改任意物理内存的机会。
  • 21. 设备制造商带来更多Linux内核缺陷Android本身修复缺陷的速度很快 Linux内核出问题的频率并不高 但是 一台Android设备在生命周期中,能获得几次更新? 其中又有多少是在修复安全问题? 设备制造商的代码质量通常更加令人担心。
  • 22. 设备制造商带来更多Linux内核缺陷某方案商Q的例子
  • 23. 设备制造商带来更多Linux内核缺陷CVE-2012-4220 修复时间2012.11 在此之前未更新的使用方案商Q设备的机器受到影响 导致可写入任意数据到任意内存
  • 24. 设备制造商带来更多Linux内核缺陷CVE-2012-4220 修复时间2012.11 在此之前未更新的使用方案商Q设备的机器受到影响 导致可写入任意数据到任意内存 像之前修改函数指针或者直接修改uevent_helper即可 提升权限。
  • 25. 设备制造商带来更多Linux内核缺陷CVE-2013-2595
  • 26. 设备制造商带来更多Linux内核缺陷CVE-2013-2595 任何声明了CAMERA权限的应用可以利用该缺陷 能够mmap包括内核在内的任意内存 直接修改内核逻辑或者数据提升权限 目前在不少使用Q社8960芯片的旗舰机型测试通过
  • 27. 设备制造商带来更多Linux内核缺陷设备制造商M,H,S都存在类似问题 现时间点 M社看起来一直存在,从未修复 H社则是修复了旧的,引入了新的 S社大概已经修好了 毫不夸张的说,上千万的用户处于危险当中
  • 28. 制造商其他值得研究的问题bootloader HTC的SOFF工具 SHARP的从SD卡加载代码执行 ... 说明了什么?
  • 29. 制造商其他值得研究的问题radio 使用Q社硬件的制造商,有时候会为了一些功能加入自己 的和radio通信的模块,ONCRPC或者QMI。 已经在某些设备上发现了radio部分厂商自己加入的功能 的堆溢出 有什么利用价值?
  • 30. 制造商其他值得研究的问题framework和HAL 厂商几乎必然会修改framework,意外在S社的framework 修改中发现了一处堆溢出。 如果认真的去找,应该能找到什么吧......
  • 31. Thank You huming@ijinshan.com 某因幡