随着智能手机的普及,越来越多各式各样的应用和服务出现在手机平台上。这些应用和服务要访问手机上的

资源,就牵涉到权限问题。手机又是一个非常敏感的平台,涉及到用户的很多个人信息,隐私等等,在这种背景

下权限控制显得非常有必要。

1.       Android中已经定义了permission这个概念来管理系统中的权限,但是一个恶意程序可能会申请超过其需求不必要的权限,获取用户信息,对手机进行破坏等等,怎么样能够更严格的控制系统中的行为?有三个方案:

a)         Android不是定义了permission吗?我们可以通过去除恶意App的权限,达到控制的目的。但是这样会带来一个问题,当该App需要访问资源时AMS会checkPermission,如果它的permission被去除了,系统就会抛exception,app可能会crash。这样带来的用户体验不好,用户会说App正在运行怎么出错停止运行了?

b)         在系统中访问特定资源的地方加hook,如果不允许该app访问资源,返回无效值,使其得不到有用信息或者无法写入信息。 Hook通过root,进程注入的方式实现。此方案的缺点是系统需要root,而root会给手机带来很多风险,所有app都可以获取最高root权限。市面上的手机安全软件都是通过这种方式,不root就不能进行权限控制。

c)         如果系统本身已经拥有这样的hook点,则不需要root也可以实现权限控制。具体做法是单独运行一个安全进程,如果有访问资源的行为,从hook点发起IPC调用到安全进程,安全进程根据访问者的package name,uid,pid等信息决定允不允许访问。这是我们的方案,系统内部已经集成了安全机制,真正做到不root也安全的Android系统。

2.       那么我们就来看看哪些权限是用户关心的,怎么处理才可以满足权限控制需求并获得最佳体验。首先是一些敏感数据。

a)         数据库信息,比如联系人信息,通话记录,短信等。这些信息都是很重要的,而很多app在自己功能之外额外的申请访问这些资源。我们知道这些信息在Android中是以provider的形式存储,通过ContentResovler访问,可以拥有query,Insert,delete,update操作。不同信息在数据库中通过URL区分,每一条记录是一行,通过检测判断URL和App信息,决定允不允许读写。

i.              query操作

通过特定URL查询,返回对应Cursor。如果禁止此次查询,可以返回一个WrapCursor,该Cursor是对原来信息的封装,App拿到之后获取不到里面的任何信息,没有行、列,任何操作都会返回无效值。

ii.              insert操作

往对应URL中插入一行,返回插入后的那一行。如果禁止此次写操作,返回null,不执行插入操作。

iii.              delete操作

将对应URL中删除若干行,返回删除行数。如果禁止删除,返回 -1 ,不删除任何内容。

iv.              update操作

更新URL中的若干行,返回更新行数。如果禁止更新,返回 -1 ,不进行任何更新。

b)         手机中有很多跟硬件相关信息,比如IMSI,IMEI,手机号码等。这些信息标示着这部手机在网络中的身份。通过TelephonyManger拿到手机信息PhoneSubInfo,再使用PhoneSubInfo的方法获取对应信息。不想让App获取这些有用信息,只要在PhoneSubInfo的这些方法中返回null就可以。

i.              IMEI: 国际移动设备身份码,与每台手机一一对应,而且该码是全世界唯一的。PhoneSubInfo的getDeviceId方法获取。

ii.              IMSI: 国际移动用户识别码,区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。PhoneSubInfo的getSubscriberId方法获取。

iii.            手机号码: PhoneSubInfo的getLine1number方法获取。

c)         Android中有两种跟手机位置相关的信息,一种是通过GPS获取的精确位置信息(FINE_LOCATION) ,一种是通过基站获取的粗略位置信息(COARSE_LOCATION) 。具体实现是App通过LocationManager的requestLocationUpdate方法注册一个listener,当位置信息变化时通知App。用户可能不希望暴露自己的位置,那么可以在此方法中真正注册listener之前返回,使App无法获取手机位置信息。

3.       Android手机中的敏感行为:

a)         打电话。一个哪怕是后台的service都可以申请这个权限,并且偷偷的打电话,而用户只想让特定软件具有该功能,比如系统自带的phone。如何控制打电话权限呢?打电话实际上最终通过startActivity(Intent(ACTION_CALL))启动Phone App的呼叫界面,进行拨号。如果我们禁止打电话,只要在AMS中startActivity这个动作真正执行之前返回就可以了。

b)         电话录音。这个权限比打电话还要危险,因为打电话还要弹出系统呼叫界面,而录音则可以静默执行。如果有恶意程序在后台录音,会造成用户隐私甚至是商业秘密等泄露。对通话进行录音要通过MediaRecorder对象来操作,设置录音来源为电话setAudioSource(VOICE_CALL)。如果要禁止,在其开始录音(MediaRecorder.start)真正执行之前返回,或者使其无法正常start。

c)         发短信。很多App都申请这个权限,大都是为了方便用户使用其服务,但是也不乏发短信扣费的服务,如果用户玩游戏时不小心点了某个窗口就有可能定制了某服务,几块钱就花出去了。更严重的是App可以悄悄地在后台发送短信,导致用户信息泄露。发送短信需要通过SmsManager提供的send方法,在真正开始发送之前检查发送发起者是否合法,如果禁止就返回,使发送动作没有真正执行。

d)         在通知栏弹通知。手机的屏幕本来就小,很多软件偏偏又要在通知栏弹很多广告之类的通知,让很多用户很苦恼。弹通知是通过NotificationManager的notify方法,最终在NotificationManagerService的enqueueNotificationInternal方法中加入通知队列。在此之前做检查,不希望弹的通知不准加入队列,就可达到控制弹通知的目的。

4.       综上,我们的方案是系统本身就提供权限检查机制,不需要将手机root。在App访问敏感资源或行为时,提示用户,阻止用户不希望的访问,让用户真正做手机的主人,使潜在的危险降低到最小。

Android中的那些权限相关推荐

  1. android 安全 权限,[原创]Android 中的那些权限

    [原创]Android 中的那些权限 2013-5-9 20:04 4610 [原创]Android 中的那些权限 2013-5-9 20:04 4610 1.        随着智能手机的普及,越来 ...

  2. 修改Android中的文件权限

    在Android中有一个精简版的linux系统,因为是linux系统,那么有时候在写Android应用程序的时候会遇到权限问题.我们都知道在shell中可以通过chmod命令来修改权限,所以就希望通过 ...

  3. android危险权限分组,Android 中的危险权限详细整理

    Android 中的危险权限详细整理 前言: Android 中有上百种权限,现在将所有的权限归为两类: 一类是普通权限 一类的危险权限 普通权限是指那些不会威胁到用户安全和隐私的权限,这部分权限系统 ...

  4. 自定义权限 android,如何在Android中使用自定义权限?

    蛊毒传说 我创建了一个测试代码,您可以使用它并测试您的权限.有两个应用程序PermissionTestClient声明权限并使用此权限保护其活动.这是清单文件:<?xml version=&qu ...

  5. android+关闭selinux权限问题,快速解决Android中的selinux权限问题【转】

    在Android开发的过程中,遇到关于selinux相关的东西,当时还一下子看不懂,现在好像有点眉目了. 比如,内核打印这个提示 type=1400 audit(32.939:25): avc: de ...

  6. Android中已经添加权限,依然提示缺少权限,此时你需要添加动态权限

    原文链接:http://blog.csdn.net/android_hdh/article/details/52583557 ------------------------------- 最近在开发 ...

  7. Android中各个权限详解

    在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列出来,供大家使用时参考之用. ...

  8. android apk获取root权限执行相应的操作 demo调试

    在apk中,有时候需要root权限,例如通过apk更新系统库等system的文件等,避免升级固件,或者在apk中需要直接访问某些设备等.下面是在apk中获取root权限的方法,前提是设备已经root过 ...

  9. android apk 的信息,Android中获取apk基本信息

    一 PackageManager可以获得的所有包节点信息: 1,所有节点的基类:PackageItemInfo: 2,PackageInfo:package的全面信息,与AndroidManifest ...

最新文章

  1. react取消监听scroll事件
  2. 计算机科学与导论期末论文题目,★计算机科学与技术导论论文题目计算机科学与技术导论毕业论文题目大全计算机科学与技术导论论文选题参考(3页)-原创力文档...
  3. 【Nginx】访问日志里有大量的 HEAD 方法请求
  4. 5 可隐藏的侧栏_6种隐藏式设计,不仅实用,而且更显高级!
  5. ListView实现倒序显示
  6. b端 ux 设计思维_借助系统思维从视觉设计过渡到UX
  7. java关闭websocket_关闭代码1006关闭websocket的原因
  8. radare2命令介绍
  9. 2021-08-02 表的增删改查
  10. weblogic部署war包
  11. 使用Excel背单词-高效-简单
  12. OCR之表格结构识别综述
  13. ASP.NET MVC form表单提交
  14. 一篇走心的文章和一个不起眼的引流方法
  15. Vertu TI root教程_方法
  16. [区块链安全-Ethernaut]区块链智能合约安全实战-已完结
  17. 百度云管家提速试用手记 - 几多欢喜几多愁
  18. 塞班:一场顺理成章的死亡
  19. 牛客网——华为题库(41~50)
  20. Excel函数--跟时间有关的函数(TODAY、DATEDIF、DAYS、DATEVALUE等)

热门文章

  1. 某快手程序员爆料:给小厂随便投投简历,面试表现很差也能过,大厂背书确实有用!...
  2. 干货!用大白话告诉你什么是Mock测试
  3. 我成功攻击了Tomcat服务器,大佬们的反应亮了
  4. 知乎千万级高性能长连接网关揭秘
  5. 在Data Collector中使用TensorFlow进行实时机器学习
  6. 推荐10个能带来快感的实用windows软件,好评如潮!
  7. 这7个实用工具类网站,你用过几个?
  8. Scrum敏捷开发工具Leangoo-卡片多选
  9. HTML5本地存储localStorage,sessionStorage
  10. HTML5代码基础结构