作者:Nicky@TSRC
随着手机功能越来越多,其在我们生活中扮演的角色也越来越重要,除了保存传统的通讯录、短信、照片等个人隐私,现在的手机还是一个支付工具,如果手机被盗用,手机锁屏密码就是保证大家数据和资金安全的第一道屏障。我们最近也研究和总结了一些手机解锁的新老姿势的安全性,在此分享给大家,欢迎大家上车一起交流。
本次测试的手机包含了苹果,三星,华为,小米,VIVO,Google,一加,乐视等品牌的热销型号手机,测试的解锁姿势主要有以下5种:
1. 手势/PIN码解锁
2. 蓝牙设备解锁
3. 指纹解锁
4. 人脸解锁
5. 虹膜解锁
测试结果表明,以上的解锁姿势都存在一定的安全风险。
在传统角度上来说,手势/数字密码是最安全的手机解锁姿势,一般的4-6位数字或图形密码结合错误次数限制,可以有效的防止攻击者通过暴力破解等方法(当然通过刷机重置系统或非通用 BUG 绕过不在讨论范围内)。虽然很难绕过此类姿势,但我们还可以想想如何在已经解锁的状态去清除密码。
我们团队的安全研究员 Xbalien 在研究后发现了一个影响 Android7.0 及 7.1 的通用手势密码/pin码清除的漏洞,而条件就是只需要在解锁状态下安装运行一个 APP 或开启 ADB 调试即可清除已设置的密码(如上图一)。
在 Android7.0 及 7.1 系统中,系统导出了一个选择解锁方式的系统组件,第三方应用可以调用此接口发送特定参数的 Intent 即可关闭所有锁屏认证功能,包含手势密码/PIN码/指纹等等。目前谷歌已经确认为中危并在新版本中修复了此漏洞(CVE-2017-0704),详见谷歌2017年7月 Android 安全公告。
除此之外,德国斯图加特大学的一个团队的研究报告指出,由于人体手指温度与手机屏幕温度存在一定温差,可以使用红外热成相相机能够拍摄出手指点击或滑动过程中产生的细小温差,从而破解输入的手机锁屏密码(如上图二)。
不过经我们实际测试,距离,成相像素,手机与人体温差,输入时间,都会影响拍摄效果,在日常生活环境中很难使用热成像仪还原出手指操作的轨迹。比如我们使用 seek thermal xr 热成仪(分辨率为 206*156 像素),拍摄距离屏幕 20-30cm 的范围内手指长按屏幕 5 秒后得到的照片(上图三),也只能分辩一个比周边屏幕稍亮的点,如果按正常速度解锁,几乎拍摄不到任何解锁轨迹,所以说这种方法离实际利用还是比较遥远的。
早在 2014 年小米手环一代上市,小米就专门为小米手环在 MIUI 中开发了一个新功能叫做手环解锁,随后谷歌在 Android5.0 及以上版本的的 GooglePlay 组件中也加入了一个 smartLock 功能(上图四),支持蓝牙设备/地理位置/人脸解锁功能。而华为从 EMUI3.1 也开始引入智能解锁功能,支持手机在连接信任的蓝牙设备时无需密码直接解锁。在一段时间的测试后,我们发现华为的智能解锁功能存在漏洞可被利用于绕过手机锁屏密码。
华为 EMUI 在系统设置“锁屏与密码”中存在一个“智能解锁”功能,支持使用手环等蓝牙设备解锁,其中主要实现代码位于 com.huawei.trustagent
包中。主要原理为当用户开启智能解锁功能后,可选择添加可信手环设备,添加成功的手环设备 MAC 地址添加到白名单中。之后当手机亮屏时,后台会自动检测当前手机连接的蓝牙设备MAC地址是否在白名单中且信号强度( rssi )是否在指定范围内,如果符合特定条件则自动免密码解锁。
一看到单纯的 MAC 地址白名单机制,老司机们都会想到各种“猥琐流”思路去绕过白名单。了解蓝牙设备的同学应该知道部分蓝牙芯片厂商的的设备 MAC 地址是可以直接任意修改的,同时手环设备 MAC 地址是公开信息,所以攻击者可以修改蓝牙 USB dongle 的 MAC 地址并主动查询手机蓝牙提供的服务项,此时蓝牙 usb dongle 并没有与手机成功配对,但已经建立连接,从而可以直接绕过手机锁屏密码(如上图五)。
而之前说到的 Google 的 SmartLock 功能在刚上线也出现过类似漏洞,Google 的修复方案是在解锁时检测当前连接的蓝牙设备是否已经配对成功,小米手环则在固件中自定义一个蓝牙 profile 在解锁前与手机通信进行身份校验(这也是小米蓝牙解锁只支持小米手环的部分原因)。 目前华为已经致谢并修复此漏洞,CVE 编号为 CVE-2017-2728,详见华为 PSIRT 安全公告,后续对于这类涉及智能设备的系统漏洞我们也会继续保持关注。
2013年苹果发布了第一款按压式指纹识别的手机—iPhone5S,之后指纹识别几乎是所有旗舰手机的标配,而随着技术的成熟与成本的下降,现在更是普及到了百元机标配。从手机指纹识别技术原理上来看,主要有以下三种方案:
最早也是应用最广当属电容指纹识别,目前苹果iPhone全系及大部分Android手机都使用了这种技术的芯片。其主要原理是利用硅晶元与导电的皮下电解液形成电场,指纹的高低起伏会导致二者之间的压差出现不同的变化,借此可获取准确的指纹图像。
小米5S与乐视乐 Max Pro 均使用了高通的超声波指纹识别芯片,它的原理是通过超声波信息反射来感应指纹形态,能穿透玻璃、金属表面,因此,这项技术不需要集成在 Home 键上同时还能解决湿手情况下的电容指纹识别不灵敏的问题。而在6月28号的上海 MWC2017 大会上 VIVO 还联合高通发布了第三代超声波指纹识别技术,直接将指纹识别功能集成在屏幕内,并支持水下操作和心率检测。
早在3月巴塞罗那MWC2017展会上,国内的汇顶科技展示了一项的 “In-Display fingerprint” 光学指纹识别技术,直接将指纹识别功能集成在手机屏幕中,吸引了不少消费者的关注。其原理主要是借用手机屏幕自身的光源,将指纹反射到屏幕内部的感应器,结合芯片与软件算法获取指纹图像。而苹果之前也申请了一项利用红外光与传感器实现的类似屏下光学指纹识别方案,所以从目前消息来看iPhone8可能会成为上此这项技术的首发机型。
在指纹识别安全方面,国内外已经有不少这方面的研究,如上图九,在2014年德国CCC黑客大会上研究员 Starbug 从德国国防部长一张看似普通的新闻照片中成功提取出了其指纹图案,然后大家可能会想起电影里的用胶带复制玻璃杯上的指纹绕过指纹门禁(一般为光学指纹识别)的方法,不过在这想和大家说的是由于复制的只是平面的指纹图像且胶带并不导电,这种方法并不适于主流的电容式指纹识别手机。
不过极客们又想到了另一种方法,也就是所谓的电容指纹膜。通过混合电容液与电容材料,得到可以导电的指纹套,当套有人手指的指纹套放在电容传感器上时,可产生与原版手指相同的电容值从而被电容指纹芯片成功识别。借助于万能的淘宝,我们只需要40元就能买到一套完整的指纹复制工具,以上就是我们制作一个电容指纹膜,测试可以成功解锁 iPhone7/iPhone6s/Google Pixel/小米Mix/一加2/Vivo Xplay5 等手机(如下图十)。
对于超声波指纹识别来说,由于电容硅胶等物体的反射的声波与人体皮肤并不一致,所以用电容硅胶或其它物体复制的指纹是无法被识别的,而高通的第三代超声波指纹识别技术还加入了心跳/血液检测,所以理论上来说超声波指纹识别安全性要高于电容式指纹识别。屏下光学指纹识别由于暂无实际产品正式发布,安全性还暂时无法判定。
为了提升指纹识别安全性,一些厂商推出了新的活体指纹识别与3D指纹识别方案,活体指纹识别(如金立M2017)在原有的指纹识别的同时检测了心率,肤色。3D指纹识别(如华为Mate9)则在原有的表层指纹识别基础上加以改进,使电信号直抵真皮层,读取深层指纹。这两种方案都可以解决目前常见的指纹复制带来的风险,但日后是否还会出现新的对抗方法还有待研究。
人脸识别技术作为应用最广范的生物识别技术也最容易被破解。和其他的生物特征相比,人脸特征是最容易获取的,伪造者可以通过网上搜索、偷拍等途径获取用户脸部照片或视频。因此针对人脸识别认证系统的欺骗手段一直是人脸识别系统所面对的主要问题。
常见的绕过人脸识别的主要有方法有:
1. 人脸照片: 拍摄二维平面图像人脸;
2. 人脸视频:利用软件模拟或偷拍方法生成的动态人脸视频,具有眨眼等运动信息以及表情信息;
3. 立体人脸模型:通过对人脸进行3D建模并打印实物;
由于手机设备的能耗与体积限制,目前手机上的人脸识别大多依靠的只是一个普通的前置摄像头,我们之前实测三星S8的人脸解锁用一张照片进行移动即可解锁,而在S8最近的更新中,三星已经提升人脸识别算法的准确性,测试已经无法通过照片解锁手机。
在手机端针对人脸照片的活体检测技术主要有眨眼生理行为检测等;针对人脸视频与立体人脸模型的活体检测技术主要有结合特定唇语/语音识别,特定行为交互等需要用户配合的交互手段及近红外人脸识别技术等。下图为部分厂商所使用的人脸识别活体检测方法:
三星在Note7上首发了手机虹膜解锁功能,由于之前的爆炸门事件,这项技术在最新的三星S8上才被大家所熟知。说到其原理,首先需要知道的是人的眼睛结构由巩膜、虹膜、瞳孔晶状体、视网膜等部分组成。虹膜是位于黑色瞳孔和白色巩膜之间的圆环状部分,其包含有很多相互交错的斑点、细丝、冠状、条纹、隐窝等的细节特征,一般用红外光才可以拍清楚完整的虹膜细节。由于虹膜特征点远多于指纹且难以复制,理论上虹膜识别安全性要高于指纹识别。
三星所采用的是斯坦福研究院旗下的 Princeton Identity 公司提供的虹膜识别模块,其通过正面屏幕上方的 850nm 的LED红外补光灯+红外摄像头,可以在近距离(20-30cm)拍摄到使用者虹膜红外图像并提取特征点与已有图像进行对比判断其身份。而在今年德国一个“CCC”黑客俱乐部会议上,之前用公开照片复制了德国国防部长指纹的黑客小哥告 Starbug 诉了我们虹膜识别是一样能够用相机拍照去破解的。
这个安全热点之前也被大部分媒体报道过,主要的破解过程大概是这样的:
而在实践之后我们发现事实上并没有这么简单,正如三星官方所回应的,目前市面要想找到一部能拍摄到清晰的虹膜细节的相机太难了。在试过了手机,单反,单反+滤镜,红外夜视撮像头后,均没能拍到清晰的虹膜照片。于是我们在万能的淘宝上买了一部 Starbug 所用的同款古董级 SONY DSC-V1 红外夜视相机(2003年产),苦于其500万像素值及本身对焦素质,我们测试了多次仍没拍到一张能通过三星的 S8 虹膜解锁的清晰虹膜照片。
此外根据类似原理,我们还可以用人造眼,定制隐形眼镜去模拟指定虹膜破解虹膜解锁,不过最难的部分始终还是如何先取到清晰的虹膜图像。
上文中说的各种解锁姿势其实只是移动端身份认证方式的一部分,这些解锁姿势同样广范用于支付认证/实名认证等领域,从目前趋势上来看,生物识别技术可能将成为未来主流的身份认证手段。
而从安全性方面考虑,相比传统的密码认证与设备认证方法,生物识别技术其实适合用于身份识别(identification)而不是身份认证(authentication),像指纹,虹膜等识别技术只能代表某个人生物特征,由于生物特征存在不可更改性与一定的可复制性,一旦用户生物特征信息泄露,则其身份就可能其它人被复制利用,手机锁屏密码也当然能轻易绕过。
在此我们给大家的防范建议是:
1. 尽量少在社交平台发自拍照,特别是高清无码的;
2. 最最最重要的:不要轻易将手机借给其它人;
3. 使用传统的(6位数字或更长)PIN码解锁手机最安全;
不过大家也不用太担心,以上破解各种解锁姿势的方法在实际生活场景中都有一定的利用难度,厂商们也早已经认识到了此类风险,不断在推出新的带活体检测的生物识别技术方案,相信日后还有更多姿势等待我们去探索,在此也欢迎大家与我们交流。
参考资料:
【1】 http://bbs.pediy.com/thread-216706.htm
【2】 http://securityaffairs.co/wordpress/59381/hacking/samsung-s8-hacking.html
【3】 https://mherfurt.wordpress.com/2015/05/08/tricking-android-smart-lock-with-bluetooth/
【4】 http://d.wanfangdata.com.cn/Periodical/kjsyyj2014z1030
【5】 http://www.huawei.com/cn/psirt/security-advisories/huawei-sa-20170323-01-smartphone-cn
【6】 https://source.android.com/security/bulletin/2017-07-01?hl=zh-cn