搜索
查看: 740|回复: 0

安卓Hacking Part 2: Content Provider攻防

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2018-5-17 23:29:55 | 显示全部楼层 |阅读模式
原文链接:http://bobao.360.cn/learning/detail/127.html

在上一期中,我们讨论了攻击及加固Activity组件的方法,今天我们来看看所谓的”Content Provider Leakage”。

什么是Content Provider?

按照Google为Android设计的安全模型,应用的数据属于私有数据,故默认情况下,应用无法访问其他应用的私有数据。但当应用需要与其他应用共享数据时,Content Provider就扮演着应用间数据共享桥梁的角色。Content Providers使用标准的insert(),query(),update(), delete()等方法来操作应用的数据,每个Content Provider都对应一个以”content://”开头的特定URI,任何应用都可以通过这个URI操作Content Provider 应用的数据库。

[/url]

某些时候,应用的Content Provider并不是为了与其他应用共享数据,或者是为了与具有一定权限的应用共享数据,在这种情况下,如果应用对权限控制不当就会造成信息泄露。

Android中内置的SMS短信应用就是一个典型的Content Provider的例子,任何应用都能通过这个URI读取收件箱:content://sms/inbox,但必须在应用的AndroidManifest.xml文件中登记READ_SMS权限。

本文用到的示例应用下载:

[url=http://yunpan.cn/cfARX3G3WbFw8]http://yunpan.cn/cfARX3G3WbFw8  提取码:d52d (源码及apk)

前期准备:

       安装了Android SDK的电脑

       一台未root的Android设备

示例程序功能测试:

下载了测试应用之后,安装在一个未root的android设备中

可通过以下命令安装

#adb install <name of the apk>.apk


该应用具有保存数据的功能,打开运行后的界面如下:

[/url]

我们的目标是寻找该应用是否实现了Content Provider,如果有,我们就需要进一步对其进行测试看是否会造成信息泄露。

相关主题:

       信息收集

       攻击脆弱的Content Provider

       应用加固

信息收集:

与其他的渗透测试步骤一样,我们同样从信息收集入手。假设现在我们都拿到了APK文件,使用我们第一期介绍的方法反编译该APK文件,检查在APK的AndroidManifest.xml文件中注册的content provider。并检查所有用到了相关URI的smali文件。

Content provider 通常以如下形式在AndroidManifest.xml中注册

[url=http://p0.qhimg.com/t01e3db78ce59e0e7b6.png]

检查测试应用的AndroidManifest.xml文件:

[/url]

我们在AndroidManifest.xml文件中发现其中注册了一个content provider ,并且该content provider 是暴露的(android:exported=”true”),这意味着所有应用都可以访问这个content provider

攻击content provider

这是我们这次试验最有趣的部分了,现在我们尝试通过这个content provider 去查询数据,如果有数据返回,就意味着这个content provider 是可以被攻击的,我们有很多种办法来进行这个查询:

1、            使用adb命令

2、            使用一个恶意应用发起查询

3、            使用Mercury框架(译者注:以改名为drozer)

使用adb

       要使用adb来访问content provider,测试应用要先安装在一台供测试的设备上。

       首先获得一个adb shell (cmd: # adb shell),并使用下面的命令来读取content provider.比如我现在要去的读取一个在MyProvider.smali中发现的URI:

       Content –query –uri content://com.isi.contentprovider.MyProvider/udetails

不出意外的话,我们就能看到储存在应用数据库中的内容了,如下图所示:

[url=http://p6.qhimg.com/t01f8850f6248eb5945.png]

使用恶意应用

       我们甚至能自己写一个简单的恶意应用来读取content provider。以下一段读取收件箱的示例代码:

[/url]

使用Mercury框架(drozer)

       使用mercury框架,整个攻击过程将更加简单和高效。

加固应用

1、  设置android:exported 属性为false:

在我们这个应用的AndroidManifest.xml文件中,我们应该加上以下属性来对应用进行加固,比如,我们的content provider 的类名是com.isi.contentprovider.MyProvider

[url=http://p5.qhimg.com/t014c38c1128ea8a492.png]

如果我再尝试读取一个属性android:exported 为false的content provider就会抛出异常,如图所示:

[url=http://p1.qhimg.com/t01d87ffbadd1680e92.png][/url]

注:API level 在17以下的所有应用的android:exported属性默认值都为true.

2、  通过设置自定义权限来限制对content provider的访问

我们可以通过自定义权限来对content provider的访问进行权限控制.这在开发者想对具有特定权限的应用开放访问的情况下很有用。

Content Provider的其他安全问题

sql注入:如果安全控制不当,Content Provider 会造成客户端的SQL注入,与传统的SQL注入攻击方法类似。

目录遍历:如果Content Provider的实现存在问题,可能还会造成目录遍历。这与WEB中的目录遍历类似,允许攻击者遍历并访问本地文件系统。可通过该漏洞读取设备中的敏感文件。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表