APP安全性解析

翻看一下乌云上面关于 APP 的漏洞,发现有不少漏洞都是很弱智的错误,而且部分厂家还会选择主动忽略漏洞。按照近期公布的《第36次中国互联网络发展状况统计调查报告》显示,我国网民规模达6.68亿,其中手机网民规模达5.94亿,手机上网人群已超过台式机、笔记本等传统上网模式。如此规模的网民,安全问题却还没有获得足够的重视。

这一篇文章只是对 APP 中常见的安全问题做一个汇总概述,后续可能会单独拿出来一一详解。

登录安全性

登录是获取用户信息的入口,如果这个入口没有把控好,那几乎就等于整个 APP 都沦陷了。不过这里已经有一些成熟的方案来保证安全性了,只要不是由于设计上的缺陷导致出现问题,基本上是安全的。

艺龙旅行网旗下某品牌存在严重设计缺陷可登陆任意用户
点呀点IOS APP 手机号登录验证码存在暴力破解缺陷

权限问题

这里不多说,设计用户信息的接口,务必验证权限。

足迹APP多处平行权限漏洞

脱库隐患

这个问题我觉得算是个普遍的问题,无论是普通接口还是隐私相关的接口,大多有一个唯一的 ID,只要这个 ID 是连续的,那就很容易造成被脱库的下场。
而且 APP 的接口数据往往是结构化数据,更容易被解析,这种数据应该是脱库者的最爱了。
要预防这个问题通常从两方面着手,一个是做 IP 访问限制,频繁访问的 IP 放到黑名单里;另一个就是把连续性的 ID 做成非连续的字符串形式。

本地存储安全性

这个问题通常是对越狱机器来说的,因为 iOS 的 APP 存储空间是不能相互访问的,而 Android 可以把隐私相关文件设置为 PRIVATE 来拒绝用户以及其它 APP 访问。
但是对于越狱机器来说,上面的方法就不管用了,我们能做的就是不要在本地以明文方式存储隐私数据。

团贷网IOS客户端敏感信息泄露
银联手机支付IOS客户端敏感信息泄露

APP 更新

部分 APP 更新会通过接口传输一个是否更新的字段,如果存在新版本,接口会同时返回一个下载地址,问题就出在这里。
如果网络被劫持了,劫持者就可以伪造接口,接口数据返回 APP 需要更新,但是更新地址却是攻击者指定的其它地址,那就可能造成 APP 下载攻击者指定的 APP 的情况出现。

解决这个问题也简单,数据包里加一个完整性的校验,当客户端发现数据包被篡改时可自动注销或提示用户存在风险。进一步的,对下载的 apk 进行签名校验~

优酷Android 4.5客户端升级漏洞

表单的 XSS 攻击

APP 中会出现一些需要用户输入的地方,输入之后往往需要在 web/wap 端展现,这里的输入就需要做 xss 过滤。
xss 是攻击的一个重要领域,这里不细说,防 xss 也有很多比较成熟的解决方式,只要服务器做好相应的过滤基本不会出现太大问题。

京东某手机客户端xss盲打

webview 非法 URL

我们通常会使用 webview 加载部分内容,由于 webview 通常是作为 APP 的一部分而存在的,所以 webview 通常提供与 APP 一致的用户体验。
另一个背景是 APP 通常有一种外部唤起的机制,通过某特殊方式唤起 APP。
如果上面两个条件均满足,APP 支持外部唤起打开 webview。如果唤起之后打开的是攻击者的钓鱼页面,钓鱼页面引导用户输入用户名密码等信息,就会导致用户信息泄露。

解决办法也是对 webview 打开的网址进行校验,校验不通过提示风险。

淘宝客户端某漏洞导致可以大规模钓鱼获取淘宝账号

潜在安全问题

这个问题往往不是自己导致的,比如下面的例子。我们只能多多关注类似问题,一旦发现及时更新响应。

iOS URL Scheme劫持-在未越狱的iPhone 6(iOS 8.2)上盗取支付宝和微信支付的帐号密码
51信用卡IOS客户端设计缺陷可导致中间人攻击

总结

APP 开发其实主要是做前端工作,重要的信息尽量不要直接存储在 APP 中,APP 的功能仅仅用来做数据展示。
另一方面 APP 一旦发布,更新周期比较长,不像 web 和服务器随时可以修改更新,APP 往往需要等待一个审核周期,因此为了保证安全性,就更应该把安全相关的东西放到服务器来完成。

总之,APP 更像是一个高性能的浏览器,在手机硬件资源匮乏的情况下,使用 APP 的方式来做到更好的用户体验,因此我们不要把 APP 和服务器的职责搞混了,web 存在的问题 APP 同样存在,等到手持设备计算资源足够了,APP 很有可能被 web 所取代~

科普文

iOS APP安全杂谈
iOS环境下的中间人攻击风险浅析