Android安全检查之组件暴露

Android四大组件简介


Android应用有四大组件Activity、Service服务、Content Provider内容提供者和Broadcast Receiver广播接收器。

Activity:在应用程序中,每个Activity通常就是一个单独的屏幕,显示控件并处理用户的响应事件,每一个看到的应用界面都是一个Activity。
Service:一个Service是以长生命周期的,没有用户界面的程序,可以用来开发后台服务或者监控类的程序。例如,当音乐播放器退出用户界面之后,还需要继续播放,通常会使用Context.startService()来启动一个后台服务,来保持音乐的持续播放。
Content Provider:每个应用程序都会有些数据存储,存储方式一般有5种(Android应用五种数据存储方式),Content Provider使一个应用程序的指定数据集提供给其他应用程序,例如通讯录、信息和通话记录等。
Broadcast Receiver:应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。


组件暴露漏洞原理


应用程私有组件只能被当前应用启动,不能被其他应用启动相对是安全的。

当一个应用程序的组件暴露,就可以被第三方的应用任意调用,可能导致敏感信息泄露、拒绝服务、权限提升绕过,界面劫持、远程代码执行等安全漏洞。

简单举个例子, 查看如下代码,假设暴露的activity通过Bundle传输数据,如果第三方的应用启动这个暴露的组件,传入一个错误的数值,这个类就会抛出异常。

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        int key = savedInstanceState.getInt("key");
    }


组件暴露漏洞检测规则


每一个组件在Manifest.xml定义,都有一个android:exported属性,满足以下两种情况都认为是有组件暴露漏洞

显式设置exported属性为true
没有显式设定exported值,但组件下面有intent filter,这样组件exported默认值也为true


漏洞修复建议


显式设置设置exported属性为false,不提供暴露的组件。
如果实在需要提供暴露的组件,不在暴露的组件中操作敏感信息。
不管是private组件还是public组件,不返回敏感信息,谨慎处理接收的intent。

 

补充说明

每一个app都会有一个主要的组件暴露出来也就是启动组件、不然就会无法启动导致提示应用未安装,所以如果是启动组件请忽略。不需要处理组件暴露

 


--------------------- 
作者:dmfrm 
来源:CSDN 
原文:https://blog.csdn.net/u010889616/article/details/80946925 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Android,Android安全处理,组件暴露)