Android的安全问题报告

来源:互联网 发布:mp3 编辑软件 mac 编辑:程序博客网 时间:2024/05/21 04:23
新产品总是伴随着新的攻击者,两者就像一对好基友,你追我赶,各种捉迷藏。

     下面分两部分介绍Android安全问题,第一部分是从非技术层面介绍Android安全问题和解决思路,参考[1];第二部分是从技术层面介绍Android的不安全因素,参考[2], 摘取了一些重点和图片, 想看完整的可以移步[2]

第一部分:Android的安全问题和解决思路
  1. 风险和易攻击点:
    • 用户无法承担管理者的重任。用户拥有安装app、确定给予app权限、任意下载data并且访问不安全的网络的权限。这就像360弹出的是否允许权限的框一样,用户根本不知所以,一般都无差别选择“是”。
    • 应用市场管理差。Android的应用市场没有很好的检查应用安全性。
    • 任意连接PC。没有对SD卡的安全管理,SD上的文件可以被任意访问。
    • 应用权限管理。用户不明白弹出权限的含义,大量读写SMS、地理信息以及Phone的权限都被给予了。
    • 恶意应用劫取应用交互信息。应用截取应用间传输数据的Intent信息,从而获取重要数据和干扰应用的正常运行。
    • 第三方应用权限过高。Android中大量包括通讯录、短信、键盘等在内的重要应用都可以更换,容易丢失重要数据。即使Facebook和Twitter这样的大公司也使用过明文传输密码和账号,更何况躺在床上敲代码的程序员呢。
    • Rooting。Rooting类似于iPhone中的越狱。一旦越狱,Android有没有很好的管理系统级别的权限,不法应用将获得高级权限。
    • WIFI。通过wifi共享从而进入内部网络,同时使用大量无加密的不可靠WIFI容易丢失信息。
    • 传统浏览器木马。不多说了。PC上木马泛滥。
    • 隐私信息。大量GPS等地理信息被窃取。
    • 不可靠的生产厂商。HTC曾在系统级别的应用上理所当然的收集accounts、Phone numbers、SMS等信息,并且还没有把接口保管好,容易被第三方应用窃取。
  2. 解决思路
    • 关闭root。必须关闭,否则手机一旦被刷机所有防护功能都失效。
    • 权限管理。默认Android只能选择是否给予权限从而安装与否,现在需要能够选择功能或者更新Android源码将部分权限回收。
    • 擦除信息。将擦除信息的应用装载为root级别,从而防止此类安全应用被下载。
    • 设备死锁。图案密码是必须的。
    • 数据加密。加密所有重要数据。
    • 市场严格过滤。查看市场来源,甚至使用apkinspector来查看assets、resources和certificates保证安全。
    • 应用密码认证。使用密码来安装市场中的应用,防止恶意安装。
    • 链接安全监测。
    • 通话权限管理(MDM)。使用黑名单限制过滤通话权限。使用通话或者短信时需要过问或者直接屏蔽。
    • NFC支付功能限制。
第二部分:Android的安全问题和解决思路

1. 敏感数据通过Permission System Service保护,权限由权贵把持。

2. 码农的安全意识很重要。
  • 不要把应用数据放在不加密的SD卡中,从而全局文件泄露。
  • content provider需要保护,否则容易遭受权限代理攻击。
  • 注意关闭log信息,否则重要信息容易被外部读取,logcat即可。
  • 加密网络请求,传输容易被窃取,使用可靠的协议。使用https或者ssl协议。
  • 考虑到丢失手机时,应用一定要有锁。
  • 不要在程序中存储路径。
  • Permission越少越好,尽量调用应用。
3. 用户证书
Android没有严格的开发者证书,但是它依旧很重要,丢了密钥沙盒也保护不了你。
同样的签名可以共用UID,意味着获得用户的数字签名后可以去读取用户信息。保护好私钥。
 

4. Android安全架构
 
  • 最底层认证:Linux DAC机制,每个App拥有UID和GID。系统功能或者System Services调用open等系统调用则需要Linux DAC。
  • 上层认证:组件认证,通常是被调用一方进行权限控制,比如应用调用系统能力(指System Server层的System Services)可能有System Server鉴权;应用间调用则由被调用一方进行IPC认证,Android采用的IPC认证为Binder进制的Intent fileters、Permissions以及Signatures来进行管理。
     通过这张图可以了解到权限管理从上而下的两种基本机制。
     类似Browser Process:Binder机制->System Call
     普通应用:Binder机制->System Server/Services->System Call

5. 沙盒
      
应用都存在于自己的沙箱里。防止病毒在应用间相互感染。
问题来源:通过反射和java层对接;native code修改进程空间,动态修改应用状态。

Android应用的Binder机制:Intent filters用于过滤,Permissions摆设而已,Signatures很有用。

6. 总结:攻击入口,千疮百孔。
 
7. 权限控制不是万能的,最好使用签名控制,比较靠谱。
下图说明权限控制保证恶意应用无法直接申请到权限。
 
但是应用通过其它软件的漏洞接口来实现wifi等功能。
 
关键得签名控制,AndroidManifest中有权限控制。
http://developer.android.com/guide/topics/manifest/permission-element.html
protectionLevel="normal" 无提示 
protectionLevel="dangerous" 有提示
protectionLevel="signature" 只有相同签名的应用才可以互相间调用。


参考资料:
[1] Ryan Farmer  "A Brief Guide to Android Security"
[2] 老王  Google安全团队对Android安全的认识
原创粉丝点击