移动应用开发的安全性问题

昨天去“云栖小镇”听了一场关于《初创期间的App和服务端安全探讨》的分享会。本来是抱着很大的期望去的。因为毕竟我们的app还没达到一定的高度,所以对于安全性的考虑有时候会比较少,这方面相对来说涉及到的就不多,然而真的是应验了“希望越大,失望越大。”这句老古话。在分享会上,听到了各种的广告。虽然广告量很大。但是还有有一些小启发的。

记得对我印象最深的一点是,是分享会上的一个嘉宾他自己开发的一个自测工具。具体叫什么,我不知道。然而我们也没法体验。不过他说现在已经在走阿里的开源流程中,相信过段时间我们也能够用上这款iOS上的自测工具。而安卓的他也在计划中。而通过他对于这款工具的介绍,我了解到了我们的app是多么的不安全。对于这款工具,他列举了这么几点:辅助iOS应用审计、辅助iOS逆向分析、安全小白可迅速上手、提高安全审计效率、目前拥有57个功能。

期间他给我们介绍了,通过这款工具,能够很便捷的对市场上的大部分app进行逆向分析,直接拿到app中所有的头文件,以及每个头文件中的相应的方法。我相信拿到这些方法后,就能做一些简单的hack了。而且这款工具还提供了重签名打包的功能。虽然说这个工具功能很强大,对于它的开源还是有些小期待的。但是如果他开源了,面向了所有的开发者,那么也就是说我们的app对于更多的人是裸露的。这想起来还是有一点小恐怖的。特别是对于初创公司的应用。一般情况下,初创公司希望做的是更快的完成需求,去验证需求的可行性。也许对于安全性考虑的就没这么周全。

不过这里想要安利一款产品,当然也是昨天的分享会上被安利的。这款产品就是“阿里聚安全”。应该是有自动化的检测和人工的检测。也就是说能够通过他们产品帮我们的app做自动化的扫描,找出一般的安全性问题,还有功能是阿里的安全专家会手动的对app做安全检查,当然他们还提供了sdk,方便保存密码等敏感信息。
前面说的都是昨天分享会上得到的讯息。

那么下面我发表一下自己对于应用应用安全性问题的想法吧。

我记得之前的我参与过的一个项目中碰到这样一个问题。比如说app中有关注的需求。而这个实现用的是http请求。当时协议是这样的只告诉服务端,我是谁,以及我要关注的那个用户是谁。就这个需求。当时被攻击了,他拿到一组用户id之后,疯狂的发请求让别人关注自己,然后自己更新信息来做广告。相信这种类似的需求在很多场景下都会存在。当时我们采取的措施是,在每次http请求的时候带上一个动态的验证信息。如果验证信息非法那么就抛弃掉当前的请求。

还有如果有app中有长连接需求的,可以把长连接的ip地址通过短连接中的某个请求中返回,这样可以理想化的做到不同的长连接的地址有可能是不同的。防止一些非法的连接。而且同时也能够做到动态的切换。

还有一点是通过“验证码”、“图片识别”等需求延伸出来受到的启发。我相信基本上的app中都会有统计的,如果把统计的数据来验证本次请求是否合法,这何尝不是一种解决方法。比如说注册用户的请求,服务端收到注册的请求,那么这时候判断下当前的设备是否有关于注册方面的统计事件,如果有那么ok,这个在这个层面上可以理解为是合法的请求。反之如果没有,那么可以理解为是非法的请求。

当然最好的是用https替代http,本身苹果就是鼓励代价请求都用https的。还有就是存在本地的敏感数据全部加密,哪怕是用最简单的md5加密,也胜过明文。如果涉及到消费类的需求的,所有的数据能够通过服务端来判断就通过服务端来判断。

总结下:虽然说,防御的手段有很多。但是所有的防御都只是提高了被破解,被攻击的门槛而已。所以app的安全性永远是一个不断提高的点。