安徽做手机网站,织梦网站图片修改,使用wordpress标签库,服务态度好的外贸客户搜索软件前言
前段时间公司对应用在爱加密上进行了安全扫描#xff0c;本文将基于爱加密的漏洞分析报告#xff0c;针对部分内容#xff0c;介绍理论修复实践
最小化特权准则概念介绍
最小化特权准则#xff0c;即指组件只能供自身应用调用#xff0c;尽可能禁止其他应用访问及…
前言
前段时间公司对应用在爱加密上进行了安全扫描本文将基于爱加密的漏洞分析报告针对部分内容介绍理论修复实践
最小化特权准则概念介绍
最小化特权准则即指组件只能供自身应用调用尽可能禁止其他应用访问及调用。
违反最小化特权的危害
若组件违反最小化特权准则则会带来如下危害 攻击者恶意调用应用的 Activity, 修改程序的状态或关键数据。举个例子如果您的应用的应用需要人脸认证才可以登录一般需要保存一个人脸认证状态如果攻击者修改了人脸状态改为已认证通过则可以直接进入应用主页。 通过调用 Activity 内部的方法可获取私密数据甚至造成拒绝服务和应用崩溃。例如如果您的登录 Activity 违反了最小化特权准则攻击装者可通过反射来调用您的 Activity 有一个私有方法用来获取账号和密码。
解决方案
设置 Activity 组件 android:exported false必须 exported 的 Activity 组件必须仅限于授权用户或者特定组件调用谨慎使用 intent-filter 属性若必须使用则需强制设置 android:exported false
这里涉及几个概念简要介绍一下
1. android:exported
适用于 Android 四大组件其作用是控制其他应用程序是否可以与当前组件交互。其中 true 为可以与之交互。若设置为 false 意味着对于 Service 组件只有相同应用程序的组件或相同用户 ID 的程序才能启动或绑定该服务。值得注意的是如果该组件在 AndroidManifest 中声明了 intent-filter , 该组件的 exported 属性将自动设置为 true。若没有声明则默认为 false.
2. 用户 ID (UID)
对于 Android 应用每个应用程序都有一个 UID, 默认情况下Android 系统会为每一个分配一个互不相同的 UID. 如果两个应用的 UID 不同则不能相互调用。若希望相互调用可进行如下操作
设置 android:sharedUserId 属性该属性的作用是将一个或多个应用程序共享同一个 UID。具体代码如下所示两个应用需使用相同的签名文件进行签名
// 应用一manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagetest.anna.helloandroid:sharedUserIdanna.uid
// 应用二manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagetest.anna.hello2android:sharedUserIdanna.uid 3. 自定义安全权限
该标签用于在 AndroidManifest 中声明一个安全权限可用于此应用程序的特定组件或功能的访问。例如一个发送广播的业务APK1 用于接收广播APK2 用于发送广播APK1 此时仅想接收声明了对应权限的应用发送的广播。此时需要在 APK1 通过 定义安全权限, 在 APK2 通过 申请 APK1 定义的安全权限即可。 定义格式如下
permissionandroid:descriptionstring resourceandroid:icondrawable resourceandroid:labelstring resourceandroid:namestringandroid:permissionGroupstringandroid:protectionLevel[normal | dangerous |signature | signatureOrSystem] / android:description 用于描述该权限所针对的操作及用户授予这个权限的后果android:label 用于描述该权限android:name 用于唯一标识权限android:permissionGroup 用于标识该权限所属权限组的名称android:protectionLevel 用于标识该权限的等级可控制权限的授予方式normal 表示声明后自动获取signature 表示定义权限的 APK 和声明权限的 APK 必须使用同一签名文件才可获取权限。
Activity 最小化特权漏洞修复
案例详解 1
在本例中IncomingDialog 为会议振铃和外呼界面。由于 IncomingDialog 设置了 标签 导致了android:exported true, 因此强制设置 exported 为 false 即可 修改前 activityandroid:namecn.redcdn.incoming.IncomingDialogandroid:process:JMeetingServiceandroid:screenOrientationportraitandroid:configChangesorientation|screenSize|keyboardHiddenandroid:themeandroid:style/Theme.NoTitleBar.Fullscreenintent-filteraction android:namecn.redcdn.jmeetingsdk.start.incomingactivity /category android:nameandroid.intent.category.DEFAULT //intent-filter/activity 修改后
activityandroid:namecn.redcdn.incoming.IncomingDialogandroid:process:JMeetingServiceandroid:screenOrientationportraitandroid:exportedfalseandroid:configChangesorientation|screenSize|keyboardHiddenandroid:themeandroid:style/Theme.NoTitleBar.Fullscreenintent-filteraction android:namecn.redcdn.jmeetingsdk.start.incomingactivity /category android:nameandroid.intent.category.DEFAULT //intent-filter/activity 这里简要介绍一下 android:enabled 属性该属性适用于四大组件控制该组件是否可以被系统初始化默认为 true, 如果设置为 false, 对应控件无法初始化例如无法启动服务。值得注意的是 标签中也会可以声明该属性而且该 enabled 与 组件声明都为 true 的情况下组件才可被初始化。修改点同样是将 exported 改为 false
数据越权备份风险
概念
应用数据备份
Android 2.1 系统可为 APP 提供数据的备份与恢复功能可在 AndroidManifest 标签下声明 android:allowBackup, 属性决定是否禁用该功能其中 false 标识禁用。值得注意的是该属性默认为 true
违反数据越权备份的危害
攻击者可利用此漏洞攻击任何可以打开 USB 调试的应用非 root 设备。
通过 adb backup 命令将制定应用的数据拷贝到外设。一旦该应用数据被备份后所有的用户在这个应用的SharedPreferences 和 DB都可被攻击者读取。通过 adb restore 命令可指定某个备份数据恢复应用的数据
虽然可以对备份后的文件.ab进行加密但是仍有许多工具工具可对其解密例如: android-backup-extractor, 下面将简单介绍一下 adb backup 的用法
adb backup
adb backup [-system|-nosystem] -all [-apk|-noapk] [-shared|-noshared] -f 档案名称 [需要备份的应用包名]例如想备份包名为emergency.cicdi.com的数据可以输入如下代码
adb backup -nosystem -noapk -f emergency.ab emergency.cicdi.com该命令会在当前目录下生成名为 emergency.ab 的备份文件。通过 android-backup-extractor 可得到对应应用的SharedPreferences 和 DB文件
解决方案
将 app module 下的 AndroidManifest.xml 中设置 android:allowBackupfalse 即可但是这么处理是不够的会遇到一个问题由于我们的项目集成了多个依赖比如扫码二维码的库和 IM Library, 依赖中 AndroidManifest 都默认设置 android:allowBackuptrue 会导致编译时不同 module 合并 AndroidManifest 文件会产生冲突。需要解决冲突即统一该属性的取值。但是有些 library 是远程依赖本地项目并不可以编辑代码而且一个一个修改未免效率较低因此需要在 app module 下的 AndroidManifest.xml 中声明 application...tools:replace android:icon,theme,allowBackup ...
这行代码标识 Manifest 合并规则意味着当合并 library 中的 Manifest 文件到主 App Manifest时不考虑 library Manifest 中的 allowBackup 取值以 app 中的 Manifest 为准进行合并。最后
如果你看到了这里觉得文章写得不错就给个赞呗如果你觉得那里值得改进的请给我留言。一定会认真查询修正不足。谢谢。 最后针对Android程序员除了上面的知识体系我这边给大家整理了一些资料其中分享内容包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发ReactNativeWeex微信小程序、Flutter等全方面的Android进阶实践技术希望能帮助到大家也节省大家在网上搜索资料的时间来学习也可以分享动态给身边好友一起学习关注我的主页个人说明有惊喜哦~ --------------------- 作者whale_kyle 来源CSDN 原文https://blog.csdn.net/whale_kyle/article/details/92428743 版权声明本文为作者原创文章转载请附上博文链接 内容解析ByCSDN,CNBLOG博客文章一键转载插件