跳转至

CheckList

移动客户端安全

IOS APP 应用完整性检查

客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。所以在 IOS 基础项测试中往往会对 IOS APP 进行应用完整性的检查,以防止他人修改 APP 内容造成危害。

端口开放

APP 可能通过监听本地端口作为一个服务启动,这样攻击者就可以通过存在漏洞的端口服务入侵用户手机。

敏感信息安全

数据文件

检查客户端程序存储在手机中的配置文件,防止账号密码等敏感信息保存在本地。如果信息明文存储在本地就可能造成敏感信息泄露。

系统日志

检测系统中是否抛出或泄露该应用的敏感信息也是一个基础项,使用 xcode/同步助手 等工具查看系统实时日志,检测是否抛出该应用的敏感信息,如用户账号密码等,如果日志中有敏感信息,则可能会造成应用信息系泄露。

密钥链数据

在 IOS 基础项的检测中,需要检查客户端是否在密钥链 (Keychain) 中存放明文密码,如果使用信息明文存储就可能造成敏感信息泄露。

安全策略

密码复杂度检测

测试客户端是否检查用户输入密码的强度,是否覆盖常见的弱口令,以免攻击者通过字典爆破用户密码。此外对于金融类客户端,还应该检查手机银行的登录密码是否与交易密码相同,是否与银行卡交易密码相同。如果没有对密码的复杂度进行要求的话,用户很可能因为方便而使用弱密码,从来造成攻击者可尝试通过弱口令攻击用户账户。

账户锁定策略

测试移动客户端时需要查看 APP 是否对登录尝试次数进行了限制,如果没有登录错误次数进行限制的话,那么攻击者就可通过爆破的方法攻击用户的账户。

会话安全设置

测试移动客户端在一定时间内无操作后,是否会使会话超时并要求重新登录,超时时间设置是否合理,如果设置有问题就可能存在会话被攻击者获取后造成长期劫持。

登录页面设计

在测试 APP 登录时,查看登录返回的登录错误提示信息是否有「用户名不存在」或「密码错误」等,这些错误信息有利于攻击者获取注册用户的信息,从而通过该问题使用用户名字典遍历 APP 已注册用户。

UI信息泄漏

检查移动客户端的各种功能,看是否存在敏感信息泄露问题,如果 UI 信息未做遮掩处理,就可能造成用户敏感信息泄露。

账号登录限制

测试能否在两个设备上同时登录同一个账号,用户账号异常登录难以被及时发现。

安全退出

验证 APP 在退出登录状态时是否会和服务器进行通信以保证退出的及时性,简单地说就是看 APP 在用户退出后,之前登录状态抓取到的数据包是否还能继续使用。

验证码安全性

验证移动客户端使用的验证码的安全性,如果验证码存在问题,则可能造成基于验证码的访问控制失效。

密码修改验证

验证移动客户端进行密码修改时的安全性,如果存在问题则可能造成用户密码被非法修改。

手势密码修改策略

检测移动客户端在取消手势密码时是否会验证之前设置的手势密码,检测是否存在其他导致手势密码取消的逻辑问题,如果存在则可能会导致手势密码被非法修改。

手势密码锁定策略

测试移动客户端是否存在手势密码多次输入错误被锁定的安全策略。防止木马使用穷举法暴力破解用户密码。因为手势密码的存储容量非常小,一共只有 9! = 362880 种不同手势,若手势密码不存在锁定策略,木马可以轻易跑出手势密码结果,手势密码在输入时通常以 a[2] 这种 3*3 的二维数组方式保存,在进行移动客户端同服务器的数据交互时通常将此二维数组中数字转化为类似手机数字键盘的 b[8] 这种一维形式,之后进行一系列的处理进行发送,如果没有设置手势密码的锁定策略,那么攻击者可通过穷举方式破解手势密码。

通信安全

通信加密

验证移动客户端和服务器之前的通信是否强制使用 https 加密信道,如果未使用 https 加密通道,则存在中间人攻击风险。

访问控制

测试移动客户端访问的 URL 是否仅能由手机移动客户端访问。是否可以绕过登录限制直接访问登录后才能访问的页面,对需要二次验证的页面(如私密问题验证),能否绕过验证,如果允许 PC 端访问则会降低漏洞利用

关键数据加密和校验

验证移动客户端和服务器之前的通信是否使用加密通信,其关键的数据是否进行了加密和校验,如果没有则存在数据包篡改风险。

证书有效性验证

验证移动客户端和服务器之间是否存在双向验证的机制,同时确认此机制是否完善,服务器是否以白名单的方式对发包者的身份进行验证,如果不存在证书的双向验证机制则存在中间人攻击的风险。

业务安全

IOS业务安全漏洞

IOS 中的业务安全漏洞主要是偏向逻辑漏洞,需要耐心的挖掘,这里我整理了一些我在 IOS 上之前挖掘到的漏洞。