Android Binder漏洞挖掘技术与案例分享(下)

Android Binder简介

"In the Android platform, the binder is used for nearly everything that happens across processes in the core platform." html

–Dianne Hackborn,Googlejava

lkml.org/lkml/2009/6…android

Android Binder是知名女程序员Dianne Hackborn基于本身开发的OpenBinder从新实现的Android IPC机制,是Android里最核心的机制。不一样于Linux下的管道、共享内存、消息队列、socket等,它是一套传输效率高、可操做性好、安全性高的Client-Server通讯机制。Android Binder经过/dev/binder驱动实现底层的进程间通讯,经过共享内存实现高性能,它的安全经过Binder Token来保证。git

Binder里用到了代理模式(Proxy Pattern)、中介者模式(Mediator Pattern)、桥接模式(Bridge Pattern)。熟悉这些设计模式有助于更好的理解Binder机制。须要了解如下概念:Binder、Binder Object、Binder Protocol、IBinder interface、Binder Token、AIDL(Android interface definition language)、ServiceManager等。下图大体描述了Binder从kernel层、中间件层到应用层中涉及的重要函数,本文漏洞利用部分会用到。程序员

读者若是想深刻了解Binder,推荐阅读:Android Binder Android Interprocess Communicationgithub

drozer的架构和高级用法

drozer是MWR实验室开发的一套针对Android安全审计和攻击利用的框架,相似于Metasploit。drozer由三部分组成:Console、Agent、Server。下图左边的部分为Agent界面,运行在手机端,右边的部分为Console界面,运行在PC端。shell

Agent是一个只申请了internet权限的非特权App,它会开启一个ServerSocket服务,默认监听31415端口。Console连上Server以后就能够控制Agent与Dalvik虚拟机、第三方App的IPC节点(intent)以及底层操做系统进行交互。为何一个无特权的Agent应用能够无缝与Dalvik虚拟机进行交互呢?设计模式

drozer使用了反射和动态类加载的技术。下图右边的部分是官方提供的drozer模块的demo,能够看到这么一行,直接能够new一个Java类对象实例,这里内部实现就用到了Java反射机制。左边的部分是drozer源码的一个目录,能够看到有许多.java源文件和对应的APK文件,drozer使用了动态类加载机制,在运行相应模块时,会将这个APK文件上传到手机上Agent应用的缓存目录,使用动态类加载机制调用类里的Java函数。这个功能很实用,在本文第三部分还会涉及到这部分知识。缓存

关键代码:安全

drozer有两种模式:直连模式和基础设施模式。Android应用安全审计用到最多的就是直连模式,手机端装上Agent应用,经过USB链接电脑,Console端经过端口转发后便可发送命令给Agent端的Embedded Server,来实现对Agent端的控制。

基础设施模式多用在远程攻击利用上:以下图你能够手动设置Server的host和port,以及是否须要开启密码保护和SSL。

也能够经过源码编译一个无launcher的恶意Agent,只须要下图中一条命令。

编译时能够指定Agent回连的server IP 、port,而且能够经过设置密码来作身份鉴权,只有经过认证的用户才能够与该Agent创建session,所以很适合作Android远控。能够在一台服务器上开启drozer Server,以下图所示命令。

当用户中招(能够经过社工、钓鱼等手段诱导用户下载安装),Agent连上来以后,你可在以任意一台电脑上经过Console连上Server来控制Agent。你能够远程下载安装相应的攻击插件,好比打电话、发短信、读取联系人、上传下载Sdcard文件等。开源的drozer-modules比较好用的有curesec、metall0id。这些功能在Android 4.3如下很好用,在高系统版本因为各类安全机制的限制,致使许多攻击功能没法完成。

下图展现了用户中招后,经过远程下载安装drozer利用模块,实现读取用户联系人、打电话、停止来电的功能:

drozer是模块化的,可扩展。上文也提到了许多开源的drozer攻击模块。那么如何写一个本身的插件呢?

有两个要素:

1.图中显示的这些元数据是必须的,哪怕是空。
2.execute()函数是核心,在这里执行本身的逻辑。

基于drozer的自动化漏洞挖掘技术

fuzzing是安全人员用来自动化挖掘漏洞的一种技术,经过编写fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入能够是彻底随机的或精心构造的,使用边界值附近的值对目标进行测试。为何选择drozer来作fuzzing框架呢?可扩展、易用是最大的缘由。下面简单介绍我如何使用drozer对Android Binder进行fuzzing测试。

介绍两种:fuzzing intent、fuzzing系统服务调用。

第一种fuzzing intent。这里我介绍一种通用的方式,不依赖数据类型。这里用到了15年初做者发现的通用型拒绝服务漏洞,能够参考发布在360博客上的技术文章Android通用型拒绝服务漏洞分析报告。简单介绍下这个漏洞的原理:经过向应用导出组件传递一个序列化对象,而这个序列化对象在应用上下文中是不存在的,若是应用没有作异常处理将会致使应用拒绝服务crash。而对Android系统中的一些高权限组件实施这样的攻击,将会致使Android系统拒绝服务重启。 这个漏洞很暴力,可让不少第三方手机厂商的系统拒绝服务,固然也包括Google原生系统。

第二种是fuzzing系统服务调用。我尽可能用你们容易理解的方式来简单介绍这块。Android中有不少系统服务,能够经过adb shell service list这条shell命令列出来。以下图,个人Nexus 5X 7.12系统能够列出126个这样的系统服务。[ ]里是该服务对应的类接口。

这些接口里定义了系统服务用到的函数,下图列出的是lock_settings服务对应的接口类。接口里的每个函数对应一个整型int值,咱们能够对这些函数进行fuzzing,fuzzing其参数。

以下图,咱们能够基于shell命令进行fuzzing。举例:adb shell service call lock_settings CODE i32 -1 ,其中CODE部分对应接口类中每个函数对应的数字,i32是第一个参数的类型,表明32位的整型。

前面提到drozer利用动态加载技术能够加载一个apk文件执行,咱们能够利用Java反射机制来肯定系统服务中函数的参数个数和类型,而后传入相应类型的随机或畸形数据,这些数据能够经过Ramada生成。

上文也讲到了如何写一个drozer模块,咱们只要在execute()函数中执行fuzzing逻辑便可。这里提一下,由于drozer的模块每次修改都须要从新经过module install MODULE_NAME命令进行安装,这里能够把核心功能写在drozer的Python模块里或者写在Java文件里,而后经过外部的Python脚原本自动化这个过程,控制fuzzing的逻辑,经过输出每一个fuzzing数据的参数值以及logcat来定位引起漏洞的参数。要注意的是:不是只有Crash才是漏洞,有的漏洞就是正常的调用,并无Crash异常。我接下来分享的lock_settings服务漏洞就属于这种类型。至此,你就能够写个本身的fuzzer进行自动化漏洞挖掘了。

最后,咱们再介绍几种漏洞利用方法。

漏洞利用方法分享

结合AIDL利用

在Android开发中,可使用Android SDK tools基于AIDL文件自动生成Java语言的接口文件。读者可自行了解更多关于AIDL相关知识。能够参考:对安卓Bound Services的攻击

关键代码:

经过Java反射利用

和第一种利用方式相似,只是不须要根据AIDL文件生成Java接口文件,直接经过反射利用。

关键代码:

结合Android源码利用

须要将利用代码放在Android系统源码目录进行编译。参考BinderDemo

关键代码:

经过Java调用shell脚本利用

关键代码:

Runtime runtime = Runtime.getRuntime();    
Process proc = runtime.exec(command);
复制代码

shell脚本内容举例:

service call lock_settings 10 i32 0
复制代码

做者简介

2017年加入美团点评金融服务平台。从事Android端应用安全和系统漏洞挖掘将近4年,积累了大量真实漏洞案例。后续拟分享Android应用安全系列技术文章,主要从漏洞利用场景、漏洞产生原理、漏洞案例、修复方案来展开,但愿能帮助公司开发者提高安全意识,共同构建更加安全,更加健壮的应用软件。


  • 本文转自美团点评技术学院,未经做者许可,不容许私自转载!
  • 加入美团云技术交流群(QQ群:469243579),每日分享更多精彩技术文章。
相关文章
相关标签/搜索