大家好,我是老李。前几天和大家聊了一下关于某购物平台的利用系统漏洞获取权限的问题,后来已经被河蟹掉了。今天我们就不说具体是谁了,单从技术方面聊一下APP是如何利用系统漏洞获取系统权限,并且获取权限之后,都干了什么事。由于准备仓促,有些 Code 没有仔细看,感兴趣的同学可以自己去研究研究,多多讨论
关于这个 App 是如何获取这个系统权限的,「 深蓝洞察 」2022 年度最 “不可赦” 漏洞 ,这篇文章讲的很清楚,就不再赘述了:
Android Framework 中一个核心的对象传递机制是 Parcel, 希望被通过 Parcel 传递的对象需要定义 readFromParcel 和 writeToParcel 接口函数,并实现 Parcelable 接口。 理论上来讲,匹配序列化和反序列化函数应当是自反等效的,但系统 ROM 的开发者在编程过程中可能会出现不匹配的情况,例如写入的时候使用了 writeLong, 读取的时候却使用了 readInt。 这类问题在运行过程中一般不会引起注意,也不会导致崩溃或错误,但在攻击者精心布局下,却可最终利用 Settings 和 system_server 进程,将这个微小的错误转化为 StartAnyWhere 提权。 Android 近年来累计已修复上百个这类漏洞,并在 Android 13 中对 Parcel 机制做了改革,彻底杜绝了大部分此类攻击面。
但对于鸿蒙和绝大部分未升级到 Android 13 的设备和用户来说,他们仍处于危险之中。
我们这篇主要来看看XXX apk 内嵌提权代码,及动态下发 dex 分析 这个库里面提供的 Dex ,看看 App 到底想知道用户的什么信息?
总的来说,App 获取系统权限之后,主要做了下面几件事(正常 App 无法或者很难做到的事情),各种不把用户当人了
- 自启动、关联启动相关的修改,偷偷打开或者默认打开
- 开启通知权限
- 监听通知内容
- 获取用户的使用手机的信息,包括安装的 App、使用时长、用户 ID、用户名等
- 修改系统设置
- 整一些系统权限的工具方便自己使用
另外也可以看到,App 对于各个手机厂商的研究还是比较深入的,针对华为、Oppo、Vivo、Xiaomi 等厂商都有专门的处理,这个也是值得手机厂商去反向研究的
0. Dex 文件信息XXX apk 内嵌提权代码,及动态下发 dex 分析 这个库提供的的 Dex 文件总共有 37 个,不多,也不大,慢慢看
由于是 dex 文件,所以直接使用 https://github.com/tp7309/TTDeDroid 这个库的工具打开看即可,比如
showjar 95cd95ab4d694ad8bdf49f07e3599fb3.dex
默认是用 jadx 打开,我们重点看内容
打开后可以看到具体的功能逻辑,可以看到一个 dex 一般只干一件事,那我们重点看这件事的核心实现部分即可
1. 通知监听和通知权限相关1.1 获取 Xiaomi 手机通知内容- 文件 : 95cd95ab4d694ad8bdf49f07e3599fb3.dex
- 功能 :获取用户的 Active 通知
- 类名 :com.google.android.sd.biz_dynamic_dex.xm_ntf_info.XMGetNtfInfoExecutor
一般我们会通过 ServiceManager 的 getService 方法获取系统的 Service,然后进行远程调用
2. 通过 NotificationManagerService 获取通知的详细内容通过 getService 传入 NotificationManagerService 获取 NotificationManager 之后,就可以调用 getActiveNotifications 这个方法了,然后具体拿到 Notification 的下面几个字段
- 通知的 Title
- 发生通知的 App 的包名
- 通知发送时间
- key
- channelID :the id of the channel this notification posts to.
可能有人不知道这玩意是啥,下面这个图里面就是一个典型的通知