Straybird’s Blog

A blog for life and study

谈谈iOS Security

近一年多跟iOS的交互中有一半都是与security的,其实现在关于iOS security的讨论也有非常多了,这里只是对于自己的学习和工作做一个小小的总结。

怎样测试一个app的安全?

与安全相关的面试中,这是一个绝对的热点,根据我自己的浅见以及学习,我觉得需要考虑的如下:

  1. 数据存储

    数据存储表面看起来很简单,但实际上却是移动app中最容易出现的安全问题。在数据存储中,我们有很多需要注意的地方:1.第一步一定是play with app,这个的目的一方面是熟悉app的功能,另一方面是尽可能多的产生一些本地文件 2.本地数据的存储主要包含在2处,一个是app的sandbox,另一个就是keychain 3.app的sandbox中文件很多,这里需要注意的就是关键敏感信息的处理,一定是需要加密的,说到加密,加密算法的使用也非常重要,比如hash的话至少要加盐等,对于sandbox中的文件,我们需要认真对待,很多敏感信息泄漏都出在这里,比如用户名/密码,server地址等等 4.keychain在越狱的设备中不安全,也这是众所周知的,但很多app可能依然就将明文存在keychain中

  2. 网络通信

    现在的移动app都会与服务器进行通信,网络通信中的中间人攻击很常见,http受到攻击太容易了,https的话要看有没有启用certificate pinning,没有的话,攻击起来也不困难。在与服务器的交互之中也涉及到一些web安全的东西,也要考虑暴露服务器的脆弱性的问题。有些app的服务器将数据传回客户端时候就完全信任客户端,这也是非常不安全的。

  3. 动态攻击

    动态攻击涉及到的就是逆向工程了,逆向工程威力很强大,比如代码泄漏/bypass一些关键的逻辑等,所以要看app有没有做binary的保护,没有的话,可以做的事情那就多了。动态攻击方面主要是检查有没有暴露在外很容易攻击又很关键的接口,脆弱的逻辑等等。

需要学习的知识点

做安全一定是要懂开发的,对于ios的一些系统知识也需要了然于心,比如mach-o格式等,还需要掌握很多工具,比如class-dump/theos/gdb/lldb等等.

今晚由于时间紧张,暂时就写这么多了,回头有机会再细化补全。

Comments