雷锋网按:315晚会上,主持人展示了使用视频模拟的方式来破解人脸识别,巧的是,在此之前雷锋网就曾报道过安全研究员在FIT互联网安全创新大会上展示的5种方法破解手法,雷锋网在此再次编辑整理,呈现给读者。
一人,一车,一司机,故事还得从一次“网约黑车”的经历说起 。
车到了,可疑的是,接我的司机、车的信息,与手机客户端上显示的完全不符,但为了赶紧回家,我顾不了太多便上了车,结果司机开了不到一分钟,就回头对我说:“我要取消订单了,等会儿你直接给我钱就行 ”,在我的一再拒绝下,司机说可以把我送回原处,让我重新打个出租车回去。
结果当我再次用该约车软件打车,发现来接我的居然还是那个司机!司机说:“你要么就打个出租车回去,只要你还用这个软件约车,打到的还是我的车!”
当时我就纳闷了,为什么还是你的车?why?
原来,附近有个由30多个黑车司机组成的车队,每个司机都有一堆虚假的司机账号,上百个账号由同一个人来统一接单,然后通过电台调度车辆去接人,因此不管你打到哪个号,都会调我去接人,而且就算是别人去接你,也是一样的流程。
于是我感到奇怪,这个 打车APP 上明明使用了人脸识别功能来验证司机信息,为什么这些司机可以继续使用虚假账号?经过一顿软磨硬泡,司机终于透露,虽然人脸识别听起来很牛逼,但是他们有软件可以轻易破解。
没错,人脸识别技术就这么被一群黑车师傅给黑了。
以上故事是在 Freebuf 主办的 FIT 2017 互联网安全创新大会上,来自平安科技的安全研究员高小厨(高亭宇)在一场“关于人脸识别技术应用风险”主题演讲中的一段描述。说完他便现场展示了那个司机用来破解人脸识别技术的软件,一个可以让照片“张口说话”的APP。
【请注意两张照片的嘴部】
高小厨说,从那之后他开始琢磨人脸识别技术在实际应用层面的风险,并调研了市面上使用了人脸识别技术的软件,最后的结果出乎自己的预料。
通过分析,他发现市面上大部分使用了人脸识别技术的软件,其识别流程均大致如下:
检测人脸 → 活体检测 → 人脸对比(和之前上传的自拍照或证件照)→ 分析对比结果 → 返回结果(通过或不通过)
据雷锋网了解,其中活体检测技术即在人脸识别时要求用户进行眨眼、点头、张嘴等动作,以防止静态图像破解,国内多个知名APP中的人脸识别都采用了该项技术。
高小厨表示,一般的APP开发者不会自己开发人脸识别技术,而是通过第三方的API接口或SDK组件来获得人脸识别功能,基于这个特点,他对人脸识别技术从接入到实际使用过程中的每个关键点进行了分析,最终在多个环节都找到了多个突破点,只要略施小计,就能让人脸识别形同虚设。
高小厨首先在现场演示了通过注入应用的方式来篡改程序,从而绕过所谓的活体检测功能,使用一张静态照片就可以通过人脸识别。
在注入过程中,他首先在程序中布置一个了断点,通过不断演示人脸识别流程来触发该断点,然后分析并修改程序储存的值,来达到最终的绕过活体检测的效果。
除了注入应用之外,他还发现可以通过查看当前APP的数据结构,修改入参字典来篡改活体检测完成后的图片,从而达到活体检测由任意一个人完成都可以通过的效果,这样他同样可以拿着被攻击者的照片来通过静态人脸识别,然后自己眨眼抬头来破解活体检测。
如果说前面的方法需要一些技术门槛,那这个方法就可以适用于所有小白用户,只需要安装一个能够将人脸照片制作成视频的手机软件,然后在朋友圈、个人空间等地方找到对方的一张正面照片(这个应该不难),输入到软件中,就可以令其开口说话,所谓的活体检测也就不攻自破。
文章开头所说的黑车司机也正是用的这款软件,实现了对APP人脸识别功能的破解。由此雷锋网(公众号:雷锋网)猜想,如果使用软件合成的视频即能够破解人脸识别活体检测,那么任意一段清晰的正面视频也应该可以用来尝试破解,如果真如此,那些经常在网络上抛头露面的明星、网红、视频直播,一旦使用人脸识别作为密码,那就相当于把密码写在脸上了。
高小厨注意到,除了点头、眨眼,有些人脸识别还会要求用户进行点头、摇头等动作,于是他立刻想到了使用3D建模,构建人脸模型的方式来破解。
通过网上下载的两个用来制作3D建模的软件,参照郭富城照片中的脸部特征,高小厨在短时间内就做出了对应的 3D 建模图像,人脸检测软件对比结果显示,这两个在短时间内制作出来的模型与原来照片的相似度分别高达 73.17 %和 86.71%,可以用来破解一般的人脸识别。
【3D人脸模型,以及论发型的重要性】
既然3D建模能成功绕过人脸识别,高小厨立刻想到了使用3D 打印来进行尝试,结果却出乎意料的失败了,在分析了失败原因时,他说:
通常人脸识别会分析脸部的多个特征值,而有的人脸识别技术会在眉毛部位提取多个特征点,而3D打印如果不够精细,打印出来人脸一般会缺少眉部特征。
如果3D打印模型只采用了一种材料,打印出来的人脸模型颜色会过于单一,比如材料是黄色的,眉毛也是黄色的,这会大大降低识别的成功率。
如果3D打印使用的材料不合适,打印出来的模型的脸部细节会很粗糙,需要后期手工打磨。
虽然高小厨在现场没有直说,但雷锋网宅客频道编辑已经隐约能读懂他话中的含义:“不是3D打印不行,而是我用的这台3D打印机太辣鸡! 如果换一台更加精密的打印机,破解同样不在话下。”
当他掏出自己用于测试的3D打印模型时,不得不承认这个模型有些惨不忍睹,确实如同高小厨所说,缺乏面部细节、颜色单一,比例似乎也不太对。
【用于测试的3D打印模型】
高小厨发现,部分APP在使用上传人脸图像时,没有对图像数据进行签名,导致图片可以被工具截获然后篡改,而有的则是在数据报文没有加入时间戳,可以通过重放数据报文的方式来实施破解。
在测试某一款应用时,他发现人脸识别的成功与否,是通过返回报文中的一个阈值来决定的,相当于考试中的“及格分数”,如果人脸匹配度超过该阈值就可以通过,不幸的是,该APP 没有对这个返回报文加签名,导致该报文可以被篡改,最终高小厨通过调低该阈值的方式破解了它的人脸识别。
高小厨在现场展示了自己进行的APP风险调研的结果,他发现除了一般的考勤、账号安全APP之外,大量的银行、P2P 金融企业的 APP 已经介入使用了人脸识别技术,其中:
金融行业在使用人脸识别技术时安全性明显高于一般应用;
当人脸识别技术涉及关键业务时,安全防护水准往往更高
比如他在测试国内某P2P金融的客户端时,尝试人脸识别解锁失败数次后,该APP 就检测出了可能存在恶意破解的情况,强制使用银行卡信息、手机短信等其他方式来完成认证。
高小厨在现场强调了一点,除了人脸识别技术在手机上本身的应用缺陷之外,许多问题导致的原因都是开发者在调用第三方的人脸识别服务时,没有严格按照一个安全的规范来做,接入流程不够严谨,甚至经常出现为了提高用户体验而舍弃安全性的做法,这样的做法在技术实力不强的小公司十分常见,最终导致的结果就是,让用户把密码写在了自己的脸上。