0x001 什么是root?
硬件root
刷有带su和superuser的rom
刷入定制内核/镜像等
软件root
利用漏洞提权
并将一个带有恰当set-uid权限的su文件移动到系统分区
两种都要突破NAND锁成为永久root
以下两个转自于知乎少仲哥 和flanker_hqd的回答:
0x02历史上已知的比较有代表提取漏洞
1.CVE-2009-2692(Wunderbar/asroot)
sock_sendpage()的空指针解引用.因为sock_sendpage 没有对 socket_file_ops 结构的 sendpage 字段做指针检查,有些模块不具备sendpage 功能,初始时赋为 NULL,这样,没有做检查的sock_sendpage 有可能直接调用空指针而导致出错并提升权限.
2.adbd setuid
ADB守护进程(adbd进程)以root权限开始启动,然后降权到shell用户.在Android2.2及以前的版本中,ADB守护进程在降权时不会检查setuid调用的返回值.在此之前,adb.c中的代码都是以root权限运行,以完成部分初始化工作.通过调用setuid()将用户从root切换回shell,但setuid()在shell用户进程数达到上限RLIMIT_NPROC时,会失败,因此adb.c继续以root身份运行,而没有报错.
3.CVE-2011-3874(zergRush)
漏洞的本质是”use after free”.具有root权限的vold进程使用了libsysutils.so,其中某个函数存在栈溢出的问题,因此可以控制root身份的vold执行system(),借以提权.
4.CVE-2012-0056(mempodroid)
Linux通过一个特殊字符设备/proc/$pid/mem把每个进程的虚拟内存暴露为一个文件.出于安全考虑,读写这个文件的权限被严格限制,拥有写入权限的只有内存的所属进程.但是攻击者可以打开目标进程的mem设备,把它复制到进程的stdout和stderr.当stdout重定向到与虚拟内存相关的字符设备时,攻击者可以写入其他程序内存,但是写入的地址是未知的.
5.CVE-2011-1823(GingerBreak)
在Android 3.0版本和2.3.4之前的2.x版本上的volume守护进程(vold)由于信任从PF_NETLINK套接字接收到的消息,因此允许以root权限执行任意代码,利用方法是通过一个负数索引绕过只针对最大值的有符号整数检测.
6.Exynos-abuse
早期的三星手机,经常是某些设备被chmod 755/666,造成了全局可读写,然后只要将这些设备mmap出来,就可以操作物理内存,之后可以通过patch相关参数或者构造payload函数达到提权的目的.
7.CVE-2012-4220(diag)
Android 2.3-4.2使用的QualcommInnovation Center (QuIC) Diagnostics内核模式驱动程序diagchar_core.c在实现上存在整数溢出漏洞,通过向diagchar_ioctl内传递特制的输入,远程攻击者可利用此漏洞执行任意代码或造成拒绝服务.
8.CVE-2013-6282
ARM v6/v7架构的Linux内核中的get_user/put_user接口没有验证目标地址,由于硬件架构的更迭,get_user/put_user最初用于实现和控制域切换的功能被弃用了,导致任何使用该API的内核代码都可能存在安全隐患.让任意应用来读写内核内存,造成权限泄漏.
9.CVE-2014-3153
漏洞利用了 futex_requeue,futex_lock_pi,futex_wait_requeue_pi三个函数存在的RELOCK漏洞和REQUEUE漏洞,造成了对内核栈上的数据修改,知名root工具towelroot就是利用了这个漏洞可以覆盖2014年6月以前的设备.
10.CVE-2015-3636
该漏洞是Linux kernel的ping套接字上存在的一个Use-After-Free漏洞.
Android 2.*时代,vold有多个溢出漏洞,都被用来exploit和poc.
Android 4.*时代,大部分的exploit都盯上了内核中的堆栈溢出和整数溢出等.
Android 5.*以后,更强悍的SELinux策略,想通过kernel漏洞提取更加困难.
0x03如何入门android内核挖掘?
Andriod平台漏洞也有很多种,分为不同的方向,比如内核漏洞挖掘/利用,用户态高权限进程漏洞挖掘/利用,浏览器漏洞挖掘/沙箱逃逸和针对Andriod自身结构的漏洞(权限泄漏、敏感信息泄漏等)。题主应该希望学习的是前两种。
Android是一个基于Linux的复杂系统,想要熟练挖掘Android漏洞必须要了解Linux系统本身(内核,驱动),以及Android在Linux架构上添加的各式各样的组件和功能(binder,media/graphics subsystem,zygote, chromium/skia和最上层的四大金刚等)。从问题中的角度来讲,对于不熟悉Windows平台的初学者,不建议将大量时间投入到Windows平台上的漏洞利用学习上,因为两个平台的漏洞虽然核心思想相通,但具体到利用的细节不太相同。这些精力时间投入到Linux平台和Android自身的研究学习上对于Android漏洞挖掘这个目的意义更大。并且从实际的角度出发,业界目前需要更多的也是Mobile系统方向上的人才。
基础的漏洞类型例如栈溢出、堆溢出、未初始化、OOB、UAF、条件竞争/TOCTOU漏洞等必须要熟练理解掌握,这些在各种CTF平台上在Linux平台下都可以练习到。但是需要注意的一点是CTF还是和实际有些区别。例如CTF上的堆溢出题目绝大部分都基于dlmalloc,而Android早在5.0就切换到了jemalloc。现代软件中最常见的条件竞争漏洞因为比赛平台的限制也很少在CTF中看到(利用比较耗费资源,很难支撑比赛中的大规模并发需求)。
在了解了基础知识之后,可以进一步学习Andriod自身的体系结构。
Binder方面可以学习调试几个经典漏洞(GitHub - flankerhqd/mediacodecoob: Infoleak and PC control poc for CVE-2015-6620 (24445127), I’ll add after conference, https://www.blackhat.com/asia-16/briefings.html#hey-your-parcel-looks-bad-fuzzing-and-exploiting-parcel-ization-vulnerabilities-in-android)
文件格式漏洞自然是经典的stagefright,https://www.exploit-db.com/docs/39527.pdf。
驱动/内核漏洞3636和1805(https://www.blackhat.com/docs/us-15/materials/us-15-Xu-Ah-Universal-Android-Rooting-Is-Back.pdf)。
Chrome V8相关:GitHub - 4B5F5F4B/Exploits
关注每个月的android security bulletin, 尝试从diff反推漏洞研究如何触发和利用。
代码审计:经典书籍 The art of software security assessment
fuzzing文章来源:https://www.toymoban.com/news/detail-711260.html
当然,只要掌握了计算机体系结构,熟悉了程序的运作方式,到达一定境界之后那么各种漏洞、各种系统之间的界限也就渐渐模糊了。文章来源地址https://www.toymoban.com/news/detail-711260.html
到了这里,关于关于Android的root提权漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!