网络安全 频道

网易沈明星:Android应用安全开发

  【IT168 资讯】11月3日,以“深度解读应用及业务安全”为主题的OWASP 2012中国峰会在深圳博林诺富特酒店召开。本届大会从多方面、多角度诠释基于因特网、无线电话网和物联网的应用、融合及业务方面的安全,并围绕应用及业务安全发展方向和威胁增长趋势等方面,进行深层次的探讨。

  以下是网易安全专家沈明星的《Android应用安全开发》演讲:

网易沈明星:Android应用安全开发
网易安全专家沈明星

  各位领导各位来宾大家早上好,第一个议题由我抛砖引玉讲一下安卓应用的基础。议题分成Android应用客户端安全、Android应用通信安全、也就是应用Android客户端和服务端之间安全。

  现在Android在移动市场的占有率可能超过一半,这说明Android上如果有漏洞,将严重影响到的企业或者是个人信息安全。这是Android应用跟我们传统的一些对比。第一是手机上可能存储的东西更加的隐私。我们手机的拍照功能功能很强,大家可能会拍一些私人照片在上面。而且通讯录可能关联到整个社会关系,其中包含通话记录、短信等等。短信里包括了非常多的东西,可能是一些私人的东西,还有更多的大家的股票账户、银行都会给你发短信,甚至一些应用通过短信给你发送重置的密码。第二是手机直接关联运营商账号。第三个是手机更容易从物理上丢失,因为我们的PC机或者是我们的笔记本可能丢失的概率远远小于手机的,所以手机从物理上丢弃的概率大很多。第四个刚才提到了手机更多用公用的WIFI网络来上网,我是来自于杭州的,那么我们杭州刚刚宣布了就是说杭州将成为国内第一个有免费无限的互连网络覆盖的城市,在杭州主城区只要用你的手机去搜“I杭州”就可以直接登录,这里面的安全风险其实挺大的,如果我是一个比较恶意的人,我完全可以自己去建一个WIFI热点,也取名为“I杭州”那么就会有人连上来。如果他用这个无线网络去访问一些关键的站点服务并且这个通讯没有被加密的话,那么他的一些很多的敏感信息我就可以截下来了。第五个就是Android的开放性,前面讲到Android架构的时候,他是基于LINUX。大家用Android机的都喜欢刷机对吧,刷机就意味着ROOT,你ROOT之后Android本身固有的保护就破坏。最后一个就是Android不像苹果那样,苹果的应用市场管得很严,除非去它们的官网。

  首先我们分析一下Android客户端安全。这个是每个Android程序中的文件,他定义了程序基本的组件及元数据。其中包含有很多的权限。这里重点讲一下PERMISSION,大家在安装移动应用的时候会跳出来一个很长的东西,他利用linux已有的权限管理机制,为每个application分配不同的UID和GID。在这个基础上对应用程序执行某些具体操作进行权限细分和访问控制。他有很多很多的权限,我没有去数过,大概整个Android权限就几十个。这个东西现在有一些争议,其实你把权限分得这么细,对于一个普通用户来说,你在安装这个程序的时候绝大部分人都是看都不看。在Android上也是类似,你给用户一大堆权限他根本不知道它的专有名词,他的选择绝大部分都是OK,所以造成权限的滥用,其实就是有些程序员图个简单,在申请这个权限的时候就申请了一大堆,甚至要求独立短信、独立的IC卡给你打电话等等。这是比较普遍的一个问题。

  下面是组件之间的调用,前面看到我们的那个文件里面有很多的组件。ACTIVITY是Android上的软件。Content Provider提供了程序之间的数据共享的接口,如果配制不当的话很容易被人家利用。现在重点来讲一下Provider。Content Provider主要是为存储和获取数据提供统一的接口,可以在不同应用程序之间共享数据。

  接下来讲一下Android的存储系统,可能我们的Android手机跟苹果不一样,他往往提供了可以插SD卡的功能,我们的Android主要存储系统分为两块,一块就是我们插上去的SD卡,一块就是它内置的RAM。SD卡在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。RAM是我们真正意义上的内存。现实情况中,我们的内存虽然有权限分离的,但是往往手机自带不够。我们有些软件会产生大量的数据,比如说聊天记录,他会保证很大的聊天记录,这个时候往往会把我们的聊天记录放在我们的SD卡,也就是说我写一个程序我是可以读SD卡的,我可以把人家的聊天记录拿过来或者改掉。这里有一个字段这个可以看到前面的permission有一个声明,我向系统要求申请SD卡的读取权限。那么用户在装的时候我可能点了一下“确定”,程序就可以读SD卡上的所有东西。这个是Android存储上一个非常大的危险点。其实我们国内的很多机器都是被ROOT过的,ROOT过了之后可以读的。现在用的最多的Android2.2、2.3的版本,还是有一些漏洞是可以提成的。我的建议对于SD卡上的敏感信息要加密的,敏感信息加密之后的秘钥要放在RAM上存储,这样相对安全一点。这里还顺便提一下有的存了并不是用户名密码,以第一次用户名密码登录以后给你很长一段乱七八糟的数据串着,这样比明文的好一点但并没有彻底的解决问题。他只是把影响的范围缩小了,如果读到你这个的话,他可能只影响自己的SD的安全而不会影响其他的帐号。这里看到一些可能比较大的公司,他的ATP做一些应用,他可能是想去应用共享,如果读到这个公司的产品应用都可以登录。

  下面讲一下通信安全,通信就是我手机的客户端到服务器端的安全。手机现在大量使用的是开放的无线,这个跟我们传统的PC机或者是我们的笔记本不一样的。PC机固定的某些网络,笔记本大家用的场所可能就是家里、办公室偶尔可能去咖啡馆连一下网络。但是手机的话大家知道,我们利用手机是碎片时间,在公交车上、公交车站或者在每一个地方等人的时候,现在来说无线网络一搜一大片,你去星巴克可能搜到一个无线网络没有加密的,你就加进去了。但是这个无线网络有可能是被人伪造的。

  那么下面介绍一下Android的手机通信信道,分为下面几种,一种是SMS、短信、HTTP、最后一个蓝牙,可能对SMS相对陌生一点,大家认为短信是人工发一下,今天晚上8点钟去哪里吃饭,这是最典型的短信应用。前面讲到的声明权限的时候,他其实有一个SMS的权限,如果我们的程序申请了这个权限,那么我们的ATP是可以用短信的方式跟服务器去连接的。第二个就是SOCKET通信,我看到的比较少,可能某一些产品在用。第三个看得最多的HTTP,现在大部分的Android走的这个协议。 第四个是短线的用户才会用到的蓝牙。

  下一个就是说HTTPS的证书验证,在我们传统的WEB项目里面,网站、服务器端有一个证书,那么我们的浏览器会验证你的证书颁发者,如果这个证书颁发者不可信,他会告诉你。但是Android的应用连一个连接,却没有一个自动的验证过程,一般是通过代码区别的。绝大部分的开发者会选择忽略所有的警告,这个其实就产生了一个问题,就是中间人攻击。

  服务端安全有一些可能是Android特有的,或者有一些可能是Android上没有的,首先关于SESSIONID,我们手机上有一个唯一的编码叫IMEI和IMSI,但是实际上并不唯一。国内很多山寨手机,山寨手机可能很多码都是重的,任意程序都可以读取上传。如果这个时候ID被拿走了,就不适合当做认证凭证使用。

0
相关文章