0x00 简介
ACtivity因组件不合理地导出,可能会产生以下安全风险:
- 越权绕过
- 信息泄露
- 钓鱼欺诈
- 拒绝服务
0x01 越权绕过漏洞
1、应用场景
在一些业务场景中,某些界面包含敏感数据需要验证后才能查看,但是由于该敏感信息的Activity是导出的,无权限验证,则攻击者无需输入验证信息即可绕过权限查看敏感信息。
2、利用方法
(1)直接启动敏感界面
(2)通过启动主界面的子界面再返回,达到启动主界面效果
(3)通过设置本地密码的Activity,重置密码
3、防护
-
私有Activity,不应被其他应用启动相对是安全的,设置exported属性为false
-
公开暴露的Activity,可以被任意应用启动:
1.设置exported属性为true
2.谨慎处理接收的intent
3.有返回数据时不应包含敏感信息
4.不应发送敏感信息
5.当收到返回数据时谨慎处理
0x02 组件导出导致钓鱼欺诈
1、漏洞原理
Activity栈,当新的Activity启动时,前一个Activity就会停止,压入历史栈,当用户按下back键时,顶部Activity弹出,恢复前一个Activity,栈顶指向当前的Activity。由于Activity的这种特性,如果启动一个Activity时,给它加入一个标志位FLAGACTIVITYNEW_TASK
,就能使它置于栈顶并立马呈现给用户,如果这个Activity是用与盗号的伪装Activity ,那么就会产生钓鱼安全事件或者是一个 Activity中有webview加载,如果允许加载任意网页也有可能会产生钓鱼事件。
2、防护
(1)可在onStop()
及时提醒用户;
//在停止的时候提示
protected void onStop(){
super.onStop();
Context context=getApplicationContext();
Toast toast=Toast.makeText(getApplicationContext(),"程序进入后台",Toast.LENGTH_SHORT);
toast.show();
}
(2) 如果当前的程序进入后台那么进行Notification
提示用户进程已经进进入后台运行。
0x03 拒绝服务漏洞
1、漏洞原理
Android应用本地拒绝服务漏洞源于程序没有对Intent.getXXXExtra()
获取的异常或者畸形数据处理时没有进行异常捕获,从而导致攻击者可通过向受害者应用发送此类空数据、异常或者畸形数据来达到使该应用crash的目的。
简单的说就是攻击者通过intent发送空数据、异常或畸形数据给受害者应用,导致其崩溃。本地拒绝服务漏洞不仅可以导致安全防护等应用的防护功能被绕过或失效(如杀毒应用、安全卫士、防盗锁屏等),而且也可被竞争方应用利用来攻击,使得自己的应用崩溃,造成不同程度的经济利益损失。
2、危害
拒绝服务漏洞对于锁屏应用、安全防护类软件危害是巨大的。
3、防护
处理通过Intent.getXXXExtra()
获取的数据时进行以下判断,以及用try catch
方式进行捕获所有异常,以防止应用出现拒绝服务漏洞。
常见异常处理:
- 空指针异常处理
- 类型转换异常(序列化)
- 数组越界访问异常
- 类未定义异常
- 其他异常
0x04 参考
1、Android app漏洞挖掘初探(0) https://blog.csdn.net/m0_37344790/article/details/78795235
2、Android应用本地拒绝服务漏洞浅析 https://blog.csdn.net/myboyer/article/details/44940811