hkt1998

hkt1998

安卓APP渗透基础 —— 四大组件暴露测试

2024-06-28

一、Activity组件暴露测试

Activity是Android应用程序与用户进行交互的窗口,可以简单理解为一个activity就是一个窗口,创建一个activity就是创建一个窗口界面。

exported属性影响了Activity的可访问性,当exported属性设置为true时,该Activity可以被其他应用程序的组件启动。举个例子,某应用将某个帖子或者链接分享到微信好友,可以直接唤醒并跳转到微信,这种情况下微信的exported属性就是true。

1. android:exported属性

  • 用来标示当前Activity是否可以被另一个APP启动。
    • android:exported="true":当前Activity可以被另一个APP启动。
    • android:exported="false":当前Activity不可以被另一个APP启动,除非此APP和当前APP的sharedUserId相同并且签名也相同。

2. 默认值判断

  • 没有<intent-filter>:默认值为false,意味着这个Activity只能在应用内部使用。
  • <intent-filter>:默认值为true,意味着这个Activity可以被其他应用从外部启动。

3. 权限控制

  • 使用android:permission指定启动该Activity所需要的权限名称,可以限制外部实体启动当前Activity。

4. 测试方法

  • 方法1:分析AndroidManifest.xml
    • 定位到AndroidManifest.xml文件中的Activity组件。
    • 判断exported属性,如果没有设置权限但exported为true,则认为有风险。
    • 注意:暴露的Activity组件不包括主Activity。
  • 方法2:使用drozer半自动化测试工具

5. 修复建议

  • 如果Activity组件不必要暴露,建议显式设置android:exported属性为false
  • 如果需要提供给外部应用使用,建议添加相应的权限控制。

二、Service组件暴露测试

Service组件是一种在后台执行长时间运行操作而不提供用户界面的应用组件。可以简单理解成后台服务。exported属性同理,控制着后台服务能否被其它应用唤起。

1. 漏洞原理和测试方法

  • 与Activity组件的漏洞原理和测试方法基本相同,主要关注android:exported属性和权限控制。

三、Broadcast组件暴露测试

Broadcast组件的核心组成部分包括广播(Broadcast)、广播接收器(BroadcastReceiver)和意图内容(Intent),它们共同构成了广播机制的三要素。

exported属性设置为true时,意味着该BroadcastReceiver组件可以被其他应用程序的组件通过Intent启动。这实际上是将组件暴露给了外部应用,可能导致敏感信息泄露、权限绕过、拒绝服务等攻击风险。

1. 漏洞原理和测试方法

  • 与Service组件的漏洞原理和测试方法相同,关注BroadcastReceiver组件的android:exported属性和权限控制。

四、Content Provider组件暴露测试

主要用于在不同的应用程序之间实现数据共享。例如微信发送图片时可以访问到手机相册,这个功能就是通过Content Provider实现的。

1. android:exported属性

  • 指示Content Provider是否可以被其他APP访问。
    • android:exported="true":该Content Provider可以被其他APP访问。
    • android:exported="false":该Content Provider不可以被其他APP访问,除非此APP和当前APP的sharedUserId相同并且签名也相同。

2. 默认值

  • minSdkVersion>=17(安卓版本>=4.2):默认值为false
  • minSdkVersion<=16(安卓版本<=4.1):默认值为true

3. 权限控制

  • 使用android:permissionandroid:readPermissionandroid:writePermissionpath-permission指定访问Content Provider所需要的权限名称。

4. 测试方法

  • 方法1:分析AndroidManifest.xml
    • 定位到AndroidManifest.xml文件中的Content Provider组件。
    • 判断exported属性和权限设置,如果exported为true且没有设置权限,则认为有风险。
  • 方法2:使用drozer自动化测试工具

5. 修复建议

  • 如果Content Provider组件不必要暴露,建议显式设置android:exported属性为false
  • 如果需要提供给外部应用使用,建议添加相应的权限控制。