前言
目前做android安全,对于遇到的问题及学习做一个专题记录
android安全有两大部分,第一部分就是web端的安全,不再记录;第二部分就是apk本身的问题包括四大组件,源码,加解密等
一、四大组件简介
Activity
Activity组件就相当于是一个个页面,用户交互的主要部分,用于显示界面处理用户事件,通过Inetnt进行通信
Service
service就是一个个后台服务,eg:下载音乐等操作,其生命周期独立于Activity,通过startService()或bindService()方法进行启动
BroadReceive
用于接收系统或者应用发出的广播消息,用于不同组件之间或者不同应用之间的通信
ContetnProvider
android中用于应用程序之间共享数据的一种机制,允许一个应用向其他应用提供数据,但并不需要知道数据的具体存储细节
二、四大组件常见问题
Activity
1.越权:一些敏感页面需要验证用户身份才能访问,如果对与Activity组件没有进行权限验证,调用此Activity即可进行绕过
2.拒绝服务崩溃:通过Intent给Activity传输畸形数据让程序崩溃
3.对Activity界面进行劫持
Service
1.提权
2.service劫持
3.消息伪造
4.拒绝服务
BroadReceive
1.消息伪造和拒绝服务:通过两种方式注册广播接收器,一种在AndroidMainfest.xml文件中通过<receiver>标签进行静态注册,一种通过Context.registerReceiver()动态注册,指定相应的intentFilter参数。动态注册的广播低质都是默认导出的,如果对于导出的没有做权限控制,导致其组件可以接受一个外不可控的url或者其他命令,导致用户可以越权利用应用
eg:消息伪造【借用大佬的例子,原文放到最后】
2.拒绝服务
org.owasp.goatdroid.fourgoats存在导出风险,功能:一旦接收到action,就会获得对应的phonenumber和message,其类代码:
package org.owasp.goatdroid.fourgoats.broadcastreceivers;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import org.owasp.goatdroid.fourgoats.misc.Constants;
import org.owasp.goatdroid.fourgoats.misc.Utils;
/* loaded from: classes.dex */
public class SendSMSNowReceiver extends BroadcastReceiver {
Context context;
@Override // android.content.BroadcastReceiver
public void onReceive(Context arg0, Intent arg1) {
this.context = arg0;
SmsManager sms = SmsManager.getDefault();
Bundle bundle = arg1.getExtras();
sms.sendTextMessage(bundle.getString("phoneNumber"), null, bundle.getString("message"), null, null);
Utils.makeToast(this.context, Constants.TEXT_MESSAGE_SENT, 1);
}
}
其Action:
如果伪造这个action,并修改phonenumber和message就可以达到消息伪造目的:
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 123 --extra string message ggg
[如果action行为为空,可检测程序崩溃拒绝服务]
ContetnProvider
Binder进程之间通信权限是要可控的,contenprovider组件本身提供一些读取权限控制会导致使用过程中存在一些漏洞
1.敏感信息泄露
2.SQl注入
3.目录遍历
4.数据备份:android8+提供了程序的备份和恢复,由Mainfest中allowBackup属性决定。allowback为ture时,用户可通过adb backup和adb restore进行数据备份和恢复。这个过程可以通过备份其数据信息,然后安装到另一台手机中进行回复,就可以得到敏感数据信息了
adb backup -f allowBackup.db -noapk com.example.sieve
adb restore allowBackup.db
总结
最基础的android相关组件问题差不多就这些,对于drozer具体利用来测试这些问题回头整理一份目前正在实战的一个用例。
ps:记录一下:对于drozer3来讲目前是不能在windows环境上搭建的,github上大佬说过目前仅支持linux环境下搭建droker容器实现,对于一些三方应用没有做严格限制仅能在android14上运行的apk,可以考虑使用drozer2.4左右版本
引用大佬原文链接:https://www.cnblogs.com/GGbomb/p/18067207