原文链接:http://bobao.360.cn/learning/detail/122.html
随着手机应用的快速增长,手机应用安全成为了目前安全界最热门的一个话题。在这篇文章中,我们来看一下怎样攻击安卓应用组件。 什么是安卓应用组件? 应用组件是组成安卓应用的关键部分。每个应用都是由一个或者多个组件组成,并且每个都是单独调用。这里主要分为4个主要的组件,介绍如下: Activity: 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务(例如打电话,发短信等) Service(服务): 在后台提供持续性服务,并不需要一个用户界面 Content Providers(内容提供者): 以表格的形式把数据展现给外部的应用。换句话来说Content Providers可以被认为是连接两个处理器的之间的接口。 Broadcast Receivers(广播接收器): 广播接收器是一个接受系统级广播的组件,(例如电量低,重启,耳机插入等)尽管大部分广播都是由系统发出,应用本身也可以发起广播。 背景知识: #################### 相关代码下载(http://yunpan.cn/cfs8zHiW8rf5g 提取码:20c3) 如下图展示,这个应用有两个Activity。第一个Activity接受一个密码输入,如果用户输入了正确的密码他就能够进入“私有区域”,否则他会收到一个密码错误的警告。本文中使用的密码为”password”。我们这里使用黑盒测试的方法来尝试突破密码保护。 [/url] [url=http://p5.qhimg.com/t010f924a3ba070eec8.png] 准备工作: 安装安卓SDK 一个没有root的安卓手机 信息收集: 1.使用APK tool反编译应用 2.分析AndroidManifest.xml文件中的Activity组件 每一个安卓应用都有一个包名称,每一个Activity都有对应的类名称。第一步就是找到包的名称和敏感的类名称。尽管有其他的方法获得这些信息,AndroidManifest.xml是好方法之一。我们可以通过反编译应用来获得这个文件。 1.下载APKTOOL (https://code.google.com/p/android-apktool/downloads/list) 2.把程序放置在跟APKTOOL同级目录中 3.使用以下命令来反编译apk文件: apktool d testapp.apk [/url] 反编译完毕,我们可以看到一个”testapp”目录,其中有一个AndroidManifest.xml文件 [url=http://p7.qhimg.com/t01a0abe85da69fa542.png] 现在我们需要搜索包名称和Activity组件 所有的Activity都会显示在<activity></activity>标签当中,因此在这些标签中的内容就是一个Activity。查看这个AndroidManifest.xml文件,我们可以找到两个Activity组件: [/url] 通过分析AndroidManifest.xml,我们获得了以下信息。 com.isi.testapp 是包的名称 com.isi.testapp.Welcome 是正确登录后的界面 攻击脆弱的Activity组件: 我们的目标是:绕过密码进入登录后的界面 未实现目标,现在有几个途径: 1.使用Activity Manager启动敏感的Activity 2.使用一个恶意的应用调用其他应用的Activity 3.使用Mercury框架来发动这种攻击,此框架会在之后的文章中使用 使用Activity Manager启动敏感的Activity Activity Manager是一个安卓SDK中附带的工具,这个工具可以被用来调用应用的Activity或者服务。我们也可以使用它来绕过。 1.把设备连接到电脑上,使用”adb shell”获得一个shell 2.使用” am start –n com.isi.testapp/.Welcome”来启动Welcome Activity 我们现在就可以看到Welcome Activity而不需要密码。 使用一个恶意的应用调用其他应用的Activity 另一个调用其他应用的Activity的方法是写一个恶意的应用,让它通过包名称和Activity名称来调用。下图展示了程序部分代码。在我们这个案例中,恶意程序不需要申请额外权限来调用Welcome Activity。 [url=http://p0.qhimg.com/t01cbf13161d544eb13.png] 使用Mercury框架 这中攻击也可以使用Mercury框架来实现,我们在之后的课程中还会再介绍。 保护应用程序组件 1.设置android:exported属性为false 在AndroidManifest.xml文件中,我们应该设置下面的属性来保护应用。在我们的案例中com.isi.testapp.Welcome是我们要保护的Activity [/url] 上面的代码限制了其他应用或者系统组件调用这个Activity。只有拥有和这个应用相同的user id才能够访问这个Activity。 2.通过权限控制限制访问 android:exported属性不是唯一的限制措施。我们还可以通过基于权限的方法来定制一个Activity的权限。这个可以限制应用之间的访问权限。 注意:以上讨论的安全措施适用于安卓的其他应用组件。 参考: http://developer.android.com/guide/components/index.html 原文地址:[url=http://resources.infosecinstitute.com/android-hacking-security-part-1-exploiting-securing-application-components/]http://resources.infosecinstitute.com/android-hacking-security-part-1-exploiting-securing-application-components/
|