近日,Android上的一个本地提权漏洞已被确认,该漏洞可通过设备上运行的Android Debug Bridge Daemon(adbd)被利用。

如果一个安卓设备被发现正在运行于TCP端口监听的adbd,那么设备上运行的恶意程序就可以进行连接和身份验证,从而实现提权。该漏洞影响版本为Android 4.2.2到Android 8.0,编号为CVE-2017-13212。利用这种错误配置可以允许安卓应用从“u:r:untrusted_app:s0”提升为“u:r:shell:s0”。

影响

该adbd配置可以被设备上的恶意应用程序利用,不过恶意应用程序必须能够连接到adbd正在监听的TCP端口,这就需要应用程序在它的AndroidMainifest.xml中定义INTERNET权限。一旦应用程序通过了adbd daemon的验证,就可以使用adb shell用户的权限执行命令了。其可以安装/卸载程序,读写SD卡,截取屏幕,注入触摸事件来模拟用户输入等等。但由于默认情况下AOSP映像中adbd被配置为只能通过认证的USB连接访问,因此该漏洞的影响已显著降低。此外,安装在设备上的程序无法强制ADB通过Wifi连接,因此仅当开启“ADB over Wifi”功能时该露洞才可以被利用。

技术细节

只有在Android设备启用了“USB调试”并且在TCP端口上监听adbd的情况下,此漏洞才存在。 先前通过TCP攻击adb的研究已经说明攻击者和受害者需要在同一局域网内,然后通过局域网向adbd发起身份验证,不过这个漏洞已经在Android 4.2.2通过引入USB安全调试被修补,USB安全调试需要用户验证adb server的RSA公钥来授权每一个adb server连接。因此,攻击者必须在认证到adbd之前避开RSA认证。 下面显示了此RSA身份验证提示的一个示例:

在Android 5.0之前,Android的AOSP映像会将adb二进制文件发送到/system/bin/adb下。一些研究人员已经发现可以使用这个二进制文件连接adbd并获得shell用户的权限。但是自Android 6.0,这个arm二进制文件就从AOSP中删除了。不过即便是这样,攻击者也可以远程地在目标设备上通过恶意应用打破或绕过现有的防御措施,并通过TCP利用adbd。

为了让恶意应用程序能够利用此配置漏洞,首先其必须识别adbd正在监听的TCP端口,然后向守护进程验证其自身。一旦通过身份验证,恶意应用程序就可以作为adb shell用户在设备上执行命令。此攻击已经在Android 7.1.2上进行了测试,还会影响所有支持通过TCP连接到adbd的版本。

使用adb命令“adb tcpip <portnumber>”来启用adbd以监听TCP端口。为了演示此漏洞,adbd被配置为监听端口5555:

要确认adbd正在侦听TCP端口5555,目标设备的netstat输出如下所示:

在启用了USB调试,且adbd正于TCP端口监听的情况下,恶意应用程序可以利用自带的adb二进制文件连接adbd,或者可以实现adb server协议与adbd通信。如果adb server尚未被设备授权,则会触发认证请求并提示用户验证并接受RSA公钥。

为了避免RSA 身份认证,攻击者可以使用覆盖图部分掩盖RSA公钥提示以授权adb server。这种绕过adbd身份验证的方法也可以被用于其他用途,在Android Manifest中声明了SYSTEM_ALERT_WINDOW权限的应用程序能够在SystemUI提示上绘制覆盖图。

为了证明这种攻击,研究人员开发了一个PoC应用程序。应用程序绑定了预编译的adb二进制文件,并使用该文件在设备上安装一个adb server实例。此PoC应用程序定义了INTERNET权限,以允许其连接到adbd正在监听的TCP端口。其还定义了SYSTEM_ALERT_WINDOW权限,以绕过身份认证。为了验证是否提权,应用程序中还添加了一个”REFRESH ID”按钮,可以显示应用程序当前的uid和用户组。以下截图显示了提权之前PoC应用程序的uid和用户组:

上图中的“ESCALATE”按钮可进行提权,代码片段如下(如欲复制,点此查看原文):

点击“ESCALATE”后,与PoC应用程序捆绑的adb server会尝试连接到adbd,此时会触发SystemUI的弹出,提示用户接受adb server的RSA公钥,具体如下图所示:

该SystemUI窗口很容易遭到劫持,为了欺骗用户,可以使用任意消息进行覆盖,如下图所示:

如果用户点击OK,RSA密钥将被接受,应用程序启动的adb server将成功验证adbd。一旦认证,应用程序就可以通过adb server执行命令。 以下屏幕截图显示了使用提权后执行id命令的应用程序:

一旦升级到shell用户,应用程序将被授予权限,uid变成了2000,并在/data/system/packages.xml中定义。 一些更有趣的列举如下:

解决方法

在显示RSA身份验证提示的SystemUI弹出窗口中添加覆盖检测功能即可解决此漏洞。 该补丁包含在2018年1月5日的Android安全公告中。 建议Android用户将设备更新。

*参考来源:mwrinfosecurity,Covfefe编译,转载请注明来自FreeBuf,COM

经验分享 | 通过adbd配置漏洞在安卓设备上提升权限相关推荐

  1. react native新建项目运行在安卓设备上

    最近编辑于2018年6月29日 一. 根据http://facebook.github.io/react-native/docs/getting-started.html或者https://react ...

  2. gnuradio android手机,如何搭配USRP在安卓设备上搭建GNU Radio

    原标题:如何搭配USRP在安卓设备上搭建GNU Radio 在这篇文章中,我们会使用安卓设备通过USB连接USRP.所以就需要USRP B2xx(B200, B210, 或者是 B200mini),这 ...

  3. 【用PS3手柄在安卓设备上玩游戏系列】连接手柄和设备

    背景 硬件要求1:PS3 手柄 + 手柄配套的USB线 硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备 软件要求1:Sixaxis Compatibility Checker PS3 手柄 ...

  4. 如何用TensorFlow在安卓设备上实现深度学习推断

    在 Insight 任职期间,我用 TensorFlow 在安卓上部署了一个预训练的 WaveNet 模型.我的目标是探索将深度学习模型部署到设备上并使之工作的工程挑战!这篇文章简要介绍了如何用 Te ...

  5. 如何通adb命令删除安卓设备上指定的文件和apk

    一.删除文件 1.通过adb命令连接安卓设备 adb connect ip 2.adb root tools>adb remount tools>adb shell #su #cd sys ...

  6. 5大系统清道夫帮你整理安卓设备上的臃肿软件

    大多数安卓设备都安装了一些不同形式的废物臃肿软件.即便在最理想的情况下,几乎所有这些应用程序也会占用宝贵的空间.在最坏的情况下,它们会影响你的工作成果和效率.如果有办法卸掉这些应用程序岂不快哉? 问题 ...

  7. 【经验分享】用adb揪出安卓APP弹窗广告的原形

    背景 相信不少安卓用户中过影子弹窗广告的困扰,这种推广APP本体在后台运行,而且可以在其他APP上弹出覆盖广告,一不小心就会误操作,点击广告或者下载APP,着实令人恶心. 以前的广告软件只在通知栏会推 ...

  8. paypal pdt php 5.3,opencart经验分享-paypal的配置与PDT Token的获取 | SDT技术网

    网上看到很多PDT Token的获取方法,我一直很纠结,我一直在paypal里面找不到,后来才发现,他们说的应该是老版本的paypal的使用吧? 现在是这样的,一开始说的取消那个的我也不知道在哪里啦, ...

  9. 滴滴经验分享:SQLFlow如何让运营专家用上AI?

    蚂蚁金服过去十五年,重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑.在2019杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享.我们将其中的 ...

最新文章

  1. c++ 开方_刷屏时尚圈!The Story Shoulder稳坐风尚C位的背后究竟有什么奇妙魔力?...
  2. oracle clob raw 转换,ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小...
  3. 斯坦福DAWNBench:华为云ModelArts深度学习训练全球最快
  4. UDP、广播、多播与IGMP(七)
  5. mysql某个值连续出现的记录_MySQL-面试必备
  6. 实用 JavaScript 调试技巧
  7. php给html传值,PHP传值到不同页面的三种常见方式及php和html之间传值问题_PHP
  8. Python模块——subprocess
  9. 柔性太阳能电池pdf_电子科大刘明侦教授团队钙钛矿太阳能电池研究取得重要进展...
  10. 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)
  11. 卡方分布分位数_数理统计第五讲(三大分布)
  12. Atitit 计算机的组成与设计 目录 1. 计算机系统是由硬件系统和软件系统两大部分组成。  1 1.1. Cpu(alu+cu ) 1 1.2. 存储内存 外村 1 1.3. Io设备 鼠标
  13. bash shell学习的记录(一)
  14. 高通平台调整通话音量
  15. 苏格拉底的最后日子――柏拉图对话集
  16. 背包问题(最大装载价值)
  17. 笔记本电脑使用的11个酷炫技巧
  18. windows10 C盘后面有一个恢复分区,无法扩展C盘的解决办法
  19. 科技论文写作投稿相关
  20. ~7 ccf 2021-04-1 灰度直方图

热门文章

  1. oracle--rowid
  2. J2ME_System.getProperty
  3. 如何测量代码执行时间
  4. UEFI主板GPT方式安装CentOS 6.4
  5. Redhat 或 CentOS 发行版本号
  6. JVM04内存结构概述
  7. 链表反转相关的题(C++模板)
  8. [云炬创业管理笔记]第二章测试4
  9. 云炬随笔20160914
  10. Unet项目解析(1): run_training.py