安卓组件漏洞防护注意事项
防止利用系统组件漏洞
原则:最小化组件暴露
设置组件访问权限
组件传输数据验证
暴露组件的代码检查
activity编码安全
私有activity:
(1)不声明taskAffinity
(2)不声明 LaunchMode
(3) 设置exported为false
(4) 保证intent发送时的安全性,确定Intent是来自本应用程序
(5)在确保本应用程序发送Intent的时候,可以防止一些敏感信息
(6)启动Activity的时候不设置FLAG_ACTIVITY_NEW_TASK
(7) 使用显示Intent与指定的类的方式来调用一个activity
(8)敏感的信息放置在extra中发送
(9)在onActivityResult的时候应对返回的data小心处理
公共activity:
(1)设置exported为true
(2)接到Intent时注意小心处理
(3)finish时在Intent中放置一些敏感信息
伙伴activity:
(1)不声明taskAffinity
(2)不声明 LaunchMode
(3) 不设置intent-filler设置exported为true
(4) 使用白名单机制验证应用签名
(5)处理Partner Activity来的Intent时小心注意
(6)只返回给Partner Activity一些公开信息
另一方Partner Activity启动该activity
(1)不适用FLAG_ACTIVITY_NEW_TASK
(2)extra中不放置一些公开与不敏感的信息
(3) 使用显示intent,具体到报名、类名
(4) 使用startActivityForResult()启动Partner Activity,返回时可以做校验
内部activity:
(1)定义Activity的签名权限为signnature
(2)不声明taskAffinity
(3) 不声明 LaunchMode
(4) 不设置intent-filler设置exported为true
(5)验证签名
(6)验证intent传输的数据要小心
Brocast Recevier编码安全
Brocast Recevier分为:私有、公共、内部
也可分为静态广播和动态广播
私有广播:
(1)不设置intent-filler设置exported为false
(2)接收处理Intent信息的时候注意信息安全
(3) 可以防止一些重要的信息在Intent中传输,所有处理完毕后需要终止掉广播
公共广播:
(1)设置exported为true
(2)获取Intent的时候小心处理
(3) return result的时候别防止敏感信息
内部广播:
(1)定义一个内部的Signature Permission来发送、接受广播
(2)设置exported为true
(3) 动态、静态广播注册的时候也需要声明Signature Permission。
Service编码安全
私有service:
(1)设置exported为false
(2)接收处理Intent信息的时候注意数据的敏感性和来源的正确性
(3) 确保在同一个应用中的Intent才可以防止敏感信息
公共service:
(1)设置exported为true
(2)发送接收处理Intent信息的时候注意敏感信息
(3) return的时候不放置敏感信息
合作service:
(1)设置exported为true
(2)处理Intent信息的时候小心
(3) 注意返回消息,特别是敏感信息的接收对象
内部service:
(1)建立一个signature的permission
(2)给待启动的service添加permission
(3) 不设置intent-filler设置exported为true
(4)在不同的内部应用中使用相同的签名
(5)使用intent发送、返回数据的时候注意敏感信息的处理
Provider编码安全:
私有content provide:
(1)2.2之前的版本别使用
(2)设置exported为false
(3) 只能在同一个应用程序中进行敏感信息的发送和接收
公共content provide:
(1)返回result时不放置敏感信息
(2)设置exported为true
(3) 接收输入条件时小心
合作content provide:
(1)在代码中对使用方的包名和签名做检验操作
(2)设置exported为true
(3) 接收处理敏感信息时小心
(4)确认可以公开合作伙伴的信息才做返回
内部content provide:
(1)定义一个signature的permission
(2)设置该content provide需要此permission
(3) 设置exported属性为true
(4) 代码内部检测传入应用的签名和包名的合法性
(5)传入的参数信息与返回信息注意敏感数据泄露
部分content provide:
(1)2.2之前的版本别使用
(2)设置exported为false
(3) 指定允许访问的uri权限授予临时路径
(4)处理接收到的请求数据和安全,即使已经获得应用程序的监视授权
(5)返回数据时只返回部分开放的内容
(6)给予指定的uri的intent临时访问权限