刚刚过去的FreeBuf互联网安全创新大会(FIT)中,平安科技银河实验室安全研究员姜若芾带来的“解锁iOS手势密码”的议题尤为吸睛。
什么是手势密码?
手势密码,就是用一个手势作为密码,手机界面上有9个点,任意连接其中若干个点就能组成一个图案,这个图案即可作为一种密码。相比于传统密码,手势密码更为便捷,更易记忆,用户体验也非常良好。
据说只有安卓系统可以使用手势密码解锁手机,于是……
iOS手势密码原理
查阅GitHub上关于iOS手势密码组件讲解最为详细、最受好评的非KKGestureLockView莫属。阅读源代码可以知道,只需在手势密码界面的控制类中实现组件的两个代理回调方法即可集成KKGestureLockView。这两个回调方法分别是:
- (void)gestureLockView:(KKGestureLockView *)gestureLockView didBeginWithPasscode:(NSString *)passcode;
- (void)gestureLockView:(KKGestureLockView *)gestureLockView didEndWithPasscode:(NSString *)passcode;
解锁姿势
设置密码的初衷是为了阻止别人进入自己的设备,泄露不该泄露的信息。正是由于密码的存在,也激发了安全研究员们寻找解锁密码的各种姿势。
姿势0:飞行模式越过手势密码
2013年,支付宝iOS客户端被爆出一个严重漏洞,在飞行模式下,进入支付宝钱包,并连续输入5次错误手势密码后,支付宝会提示输入登录密码。随后在后台关闭支付宝应用,重新进入支付宝应用后,会提示重新设置手势密码,重新绘制手势密码后,关闭飞行模式,即出现账户已经登录的界面。
姿势1:修改文件重置手势密码
有些应用在用户设定好手势密码之后,会将手势密码对应的数字序列以明文或者单次MD5的方式存储在本地,用户解锁时需要对比明文或者MD5数字序列。而对于攻击者来说,只需将某个特定手势对应的数字序列替换掉本地存储的数据,即可重置用户的手势密码。
这里所说的偷窥,不是在别人输入密码时偷瞄别人的密码,而是应用在校验密码的过程中处理不当,导致内存中的“password“变量可被攻击者识别。
姿势3:芝麻开门
这个姿势实际上是开发者在开发进程中留下的一个问题,我们称之为校验密码成功回调。此处需要配备一些逆向技术知识才可成功实现。
姿势4:买通密码审判官
这也是开发者不小心犯的一个错误,将校验手势密码的方法暴露在了外面,攻击者只需简单的修改一下就能顺利买通“审判官“,拿到用户手势密码。
姿势5:暴力破解手势密码
没有办法的办法就是暴力破解。通常手势密码都有错误次数限制,一旦输错手势密码超过一定次数,应用就会要求用户重新登录。所以攻击者一定要注意控制输入密码的次数。
对于安全研究员来说,解锁密码不是目的,他们的目的是发现问题并解决问题,所以姜同学在解锁iOS手势密码的同时也想出了一些破解之法,比如优化本地敏感信息的存储、优化密码校验逻辑、隐藏关键代码等。
观看视频
* FB编辑部出品,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)