李琦:声纳信号:安卓图案锁的噩梦

DSC_2700

李琦  清华大学副教授

摘要:手机图案锁是保护移动设备用户隐私的一种重要防护手段。然而利用手机的硬件传感器可以非常容易突破这道防护。在这个报告中,将展示了一种利用声纳信号破解安卓图案锁的新型方法。这种方法的破解效果不受手机所在环境的影响,而且可以同时远程破解大量用户的手机图案锁。基于真实商用手机的实验验证表明此方法的攻击准确率超过90%以上。

图案锁大家都不陌生,包括现在手机的锁屏,根据调研报告发现有40%的用户是用图案锁来保护他们的手机,有些人说我是用密码来锁屏,有很多现实应用包括用的微信、支付宝很多也是用图案锁进行密码保护的,针对图案锁和密码锁它的安全机制,包括沙箱,沙箱可以保护应用,包括基于(英)基于硬件的防护,一定程度上可以很好的解决用户图案锁窃取密码的安全性。

基于这样的保护方式是不够的,手机里面有各种各样硬件的资源,有很多传感器,这里面的传感器大家也不陌生,有NFC,有摄像头,有麦克风等等,利用这些硬件的资源比较方便的得到用户的隐私信息,基于硬件传感器来对待攻击,这种在学术界也有很多人提出,有人提出因为大家在输密码或者是图案锁的时候,手机会晃动,根据手机晃动的幅度用机器学习的方式可以知道什么样的手机晃动幅度他在输入什么样的密码。还有一个类似的,在手机晃动过程中如果一个攻击人可以控制或者是使用手机里面的摄像头,根据晃动幅度也可以推测用户输什么样的密码,针对图案锁也是类似,现在也有很多的工作在做,大家会留意到当我们划过手机屏幕,手机屏幕会有一些油渍痕迹,通过这个痕迹可以很好的推断图案锁,  我们在使用应用的时候会滑动屏幕,  我怎么去推断哪些划痕或者是油渍是用户输入图案锁的痕迹,现在有wifi的信号,做智能医疗,很多是利用Wifi的信号来推断的,用Wifi信号来推断一个人是否摔倒,根据Wifi信号的推断,就可以知道一个干扰物体大概在做哪些动作。

还有一个,某个用户在输入图案锁的时候,可以用照相机不断拍他的输入图案锁的动作,右图,我可以连续拍他的动作,推测手势微小的幅度来推断他输入什么样的图案锁,这种是比较典型的,现在的攻击方式推断图案锁攻击,攻击能力非常有限,第一个油渍,刚才我也提到了,我们在使用手机过程中会不断的划屏,在屏幕上留下的油渍是非常多的,从一定程度上可以确定是有问题的,比如拍照,拍照(英)有一个问题,不会有任何干扰,拍的过程中不会有人遮挡拍的图像。还有一个拍的过程中不能离受害者太远,也不能太近,太远误差太大,太近受害者本身就能观察到,我们需要考虑到是不是有一种比较准确的不受环境干扰的攻击,我们就想到在手机里面是有量身器,用量身器本身的功能来推断用户所使用的图案锁,能不能装一个应用,让应用能够在用户输入图案同时能够播放一种声音,这种声音会在用户输入图案的过程中受到手指的干扰,通过干扰信号来知道用户在划什么样的图案,这个效果跟刚才提到的,刚才提到的所有攻击恢复用户图案是一个一个去分析的,如果可以远程让手机能够通过声纳信号来推断,理论上可以同时来分析对于手机的图案锁,这样一个攻击或者是恢复图案锁的能力是非常大的。

我们恢复图案锁攻击是怎么做的,想法是有的,需要假设的是在手机里面用户可以控制的恶意软件,这个恶意软件在用户输入图案的时候,让软件来放声音,声音是一个人耳听不见的高频声音,一般是感知不到的,另外一个动作去捕获扬声器发出的声音,这个声音是被手指头干扰的,通过把这个声音上传到可以处理声音文件的服务器,需要有网络连接的权限把文件传到服务器,服务器可以很准确的推断该用户在使用什么样图案锁来锁屏,这里就有几个工作要做,第一个  我们要检测用户什么时候输入图案锁。第二个分析找到哪些声音信号是被用户手指所干扰的,分析干扰信号,我们怎么检测用户的解锁或者是用户划图案锁的行为,第一个在手机锁屏到屏幕解锁的过程中,手机有一个广播信号,锁屏的时候处于非交互模式,当手机重新打开是一个交互模式,从非交互模式到交互模式这个手机会有一个(英),只有捕获了这个消息,知道用户在输入锁屏或者是解锁手机的图案锁,大家会问那我不用图案锁来锁手机,只是在应用里面来锁某个应用是不是就没用?我们有另外一个方式可以检测用户用图案锁的过程,你们在用手机的时候是不是有这样的行为,第一个输入支付宝,微信的时候,输入过程中是不是抬手进行的,只要我们在检测手机是有突然的手机抬起行为,按现在的研究发现很大的情况下用户输入图案锁,还有一个我们在解锁应用的时候,我们首先有一个动作需要找到应用,用户行为是不断的滑屏幕,滑完屏幕再点屏幕,这个过程就可以预测如果用户在使用APP的时候使用图案锁,我们只要在用户手指划屏幕点屏幕的同时,让我们的分析过程开始工作也可以找到用户在用图案锁保护某个应用的过程,用户输入图案锁,接下来的工作比较简单,我们可以让应用去发一个声音,记录被手指干扰声音反射的信号,这里是需要声音信号,我们需要一个特别的设定,第一个为什么我们设成这么一个(英)信号,我们需要把这个信号分析,还有一个声音信号是18至20分贝,一般人耳是听不到的,其实发完信号以后,当用户手指在屏幕上划的时候,放声音这个声音会被手指干扰,大家可以从这个图里看到,如果手没划到声音信号是平的,如果手指一旦在屏幕上划了以后,这个声音信号就会产生波动,只要我们找到受手指干扰波动信号我们就很容易哪些声音信号是跟输图案锁的过程相关。

接下来要做的事情我们要设置一个声音信号,这个声音信号跟信号处理相关,在声音的过程中是把信号做一个绑定,我们要做的就是把两个信号解开,是解决我们分析声音号的关键,我不知道大家有没有做信号处理的背景,这是信号处理是非常基本的知识,我本身也不是通信专业出来的,只是做这个工作现学去研究了一下这方面的技术,这方面就不展开讲了,拿到声音信号要想的是我们怎么去找,大家划这个线在图案锁的过程中是有连续过程,这个线很复杂,如果完全恢复一个完整的划线图案是非常复杂的,我们在划的过程中是有各种转折点,我们的想法如果把这个线按转折点切分成不同的片段,这样我们的分析过程就比较简单了,基于刚才恢复出来的信号,就按不同转折点把声音向切成不同的片段我们怎么找到手指转折的信号点?根据信号发现手指在转的过程中信号相对比较恒定,手指在转的瞬间信号是比较稳定的,我们找到恒定信号把用户输图案锁的声音切成不同的片段,根据不同的片段我们可以做比较简单的分析工作,根据刚才说的声音信号恢复出来是这么一个圆圈的信号分布,如果从一个直面看过来就是右图所示的一个不同的圈,手指在不同地方开始划的时候,我们在圈上找到哪些点是用户点击屏幕的那几个起点和终点,把它的起点终点相互的数字算出来,这里我就不展开讲了,我们可以计算出手指在屏幕中划动的相对距离,从一个麦克风到扬声器,从麦克风到扬声器的距离,这两个距离会发生变化,根据我刚才说的信号差距,可以利用这个公示可以计算出手指在移动前,移动后相对距离是多少,得到这个相对的距离,底下做的工作就比较简单了,图案锁是3乘3的格子,我们就分析所有可能手指移动片段的特征,3乘3的格子,从一个点到其他八个点相对的移动距离,从一个格子点从一个点到其他八个点的可能性,九个点,我们分析了72组可能的移动距离的变化趋势,根据这个趋势跟我们刚才分析得到计算出来的移动变化做比较,计算相似度,在计算相似度的过程中,移动有两种可能,不同手机有不同配置,一个是在移动过程中手机移动的距离,移动那条线,扬声器和麦克风的中间位置,还有一个移动的时候,麦克风和扬声器是在手移动的同一侧,这样我们可以简单的把手指移动距离规划成一种手指移动的可能,根据手指移动的可能得到了72组所有的可能移动距离,计算相似度,任何手指移动过程中,手指移动的某一条线跟我们计算出来的72条线的每一条线可能性是最相近的,就为每条线分配相似值,根据相似值构造出相似数,左面一二三五八的移动范围,就可以根据每条线移动的可能性构建相似度的数,根据这个数就可以计算前五种可能性,前五种大家比较了解,在安卓手机里面输五次失败以后,你的手机就会被锁屏,我们挑选了前五种最有可能的用户的图案锁行为,用户图案锁输入行为是一二三五八,根据实验发现,在一二三五八可能性很高,覆盖里是0.94,0.92,0.96计算起来是最高的,第二高是一三五七,一三五七和一三五八移动距离是比较近的,根据这样我们可以拿到所有的有可能跟用户图案锁相近的几种移动行为,根据这个我们就可以恢复出可能的用户图案锁行为,根据我们的实验发现,这种分析相对来说我们第一次就能找到用户输入图案锁正确的图案。

这种攻击方式相对是比较简单也比较直观,也是比较有特点的,跟之前所有的分析图案锁的攻击来比我们这个攻击非常隐秘,第一个我们是在用户输入图案锁的过程中来推断用户的行为,这个应用不会给用户手机额外消耗很多电,这样我们使用的声纳信号人耳是听不到的。

第二个推断的方式非常可行,不受用户环境或者是用户行为的干扰。最关键的我们有非常好的行为,让我们的攻击方式在不同用户手机上推断他们的图案锁,我们实现了这么一个攻击场景。

首先需要一个恶意软件,在三星C9和华为P9 Plus做一个采集,让志愿者来输,找了五位同学,分别用他们自己喜欢的习惯来进行恢复,我们采集他们的信号,这是我们整个推断行为的准确率,我们有四条线,我们收集用户第一次输入图案锁的分析,一次行为,只分析用户一次输入图案锁的行为,第一次准确接近达到了70%,之后我们尝试了五次,准确率达到了95%,如果多次收集用户图案锁的行为,收集七次,准确率可以达到100%,这种分析效果准确率相对比较高的。

用户不同,设自己图案锁的时候有不同的习惯,有些用户输入的图案锁会比较复杂一些,有的可能比较简单一些,在我们的场景下是线条多的比较安全,还是线条少的比较安全,在特定的攻击场景下线条多,准确率越高,如果是五条线,基本上我们只测试一次或者是只试一次准确率就能达到70%,在这个特定下越多越不安全。

我们又做了一个实验,每个用户对于图案锁有不同的习惯,有些可以拿一个手来输入,右边第三个图,还有一种习惯是一个手拿手机,另外一个手划,还有一个是手机竖着拿,另外一个手来划,不同的输入习惯对我们的推断分析还是比较有影响的,这三个大家可以猜一猜三个手势那种手势准确率最高,哪种准确率最低,第一个就是手机横着放是准确率最高,第三个手机率一个手来输是准确率最低,因为手指在划的时候,对手机干扰信号是最小的,准确率相对比较低,从总体来说准确率能达到70%左右,理论上没有太大的差别,还是有一定的差距,大概在10%左右。

用户在输入图案锁很关键的输入图案锁的速度,有些人输的很快,有些人会输的很慢,输图案锁的速度对我们的推断也是有影响的,一般输入很快或者是很慢都会有一定的影响,影响不会很大,差距在5%左右,从一般人的用户输入行为来说一般都不会太快,因为太快本身输入的错误率就很高,如果很慢,大家也没这个习惯,输字母一个个点,这个也很容易出错,对于正常的速度来说准确率还是非常好的。

另外一种大家会想到你们用的是声纳信号,是不是我在手机边上放一个干扰物信号是不是就可以被干扰,我们也做了实验,在实验中用了两组实验,第一种实验是使用静态的干扰信号。第二个是动态的干扰信号,静态干扰信号就放一个手,放在被分析手机的周围,距离可能是20厘米至60厘米,还有一组干扰实验让这个手不断在屏幕面前晃动,看这样的晃动是否对我们的分析有影响,从实验结果来说,静态一个手放在手机边上对我们没有干扰,我们是对移动的物体进行分析,静止状态对声音信号不会有任何的干扰变化,由于静态的物体对声音的影响直接可以过滤掉,对于动态的手指会有非常大的影响,手距离手机只有20厘米的时候可以准确的降到40%。

从原始来看,20厘米对我们的攻击虽然有一定的影响,20厘米在你手机边上晃,用户自己输图案的时候很尴尬,20厘米输的过程中一个手在不断的在你屏幕上划,这种场景是不存在的,如果移动手的距离超过40厘米的时候,攻击就会超过10%,在现在这个情况下还是比较有效的恢复图案锁的方式。

我们做了另外一个实验,在不同的环境中,第一个环境在咖啡厅,星巴克,还有一个办公室,星巴克里面的噪音比较大,有打电话,有使用电脑的噪音,办公室里比较安静,另外我们拿了两个手机做实验,第一个是三星C9,另外一个是华为P9,在咖啡厅和办公室对我们的分析几乎没有什么影响,差距在1%左右,但是手机型号对我们的攻击是有影响的,为什么三星的要比华为高5%左右,因为三星手机屏幕大,这个也是比较直观可以解释的现象,有几个跟大家讨论一下,我们的攻击需要假设有一个用户或者是攻击者需要在手机上安装APP软件,我们需要收集声音,在放声音收集声音需要一个麦克风权限,这个是比较敏感的权限,需不需要麦克风权限,允许,这个是比较大的问题,我们发现这不是一个问题,我们分析APP,我们发现(英)上,如果大家用过(英)会把APP分成不同的类别,有天气预报的,还有通讯的,娱乐的,在(英)(英)和(英)APP使用需要麦克风权限非常多,超过55%和52%APP都需要麦克风权限,我们能不能把我们的APP伪装成这些类别的应用权限,这样我们是不是有可能让用户来下载,当时找学生来做了这么一个实验,把我们刚才做实验的APP直接上传(英),声称我们的APP是(英)的APP,我们那个同学也很实诚,名字也没改,直接放上去,(英)网站就直接放出来了,我们做的事情赶紧把它下下来,如果真有用户安装以后这个问题可能就比较大了,从一个方面来看,我们分析涉及的权限是比较小的,直接编了这么一个APP来做,如果把一个APP重新打报或者是伪装成一个游戏或者是伪装成娱乐的正常软件,我们在里面直接安装,在用户输入的时候能够收集声音。

针对这个问题我们怎么防御,锁屏的时候需要放声音,放声音APP是需要在后台来放,我们可以做的事情,如果不让后台的应用来发声,是不是我们的问题就解决了,这个肯定解决了,我们(英)在(英)没法这么做,谷歌很多的应用还需要用应用能够在后台发声音,如果大家熟悉(英),他就需要通过放声音能够让用户远程启动谷歌的应用,直观来说我们没办法用野蛮的方式让麦克风不能在后台使用。另外一个方式我们用户在使用过程中一旦麦克风在使用的时候,我们可以通知用户警告用户,最近微信或者是最近的(英)版本是有一个新手机,跟同学讨论过程中发现我跟他们的微信讨论,开着微信语音的时候,在手机上面没出现微信在使用麦克风,不知道这个怎么设定的,最近我发现这个警告没了,这是比较有效至少让用户感知到是有一些非正常的应用在使用麦克风。

第三种可能的防御方式,我们需要使用高频的声音来作为信号,如果我们限制手机发声的频率,相比来说就比较好检测,如果用户发出的声音是人耳一下子听到了,就知道这是有异常的,相当于我们手机的硬件需要重新做设定,这个复杂度比较高。

最后一个实验比较简单,通过应用更新就行,让用户输入图案锁随机化,大小随机化,图案锁的位置可以随机化,这样达到的效果,没法准确预先计算用户手指划动屏幕的位置,这样可以“很好”的解决这个问题,这个很好解决也给用户的使用造成困难,图案一会儿变大,一会儿变小的情况下,用户输入都会有些困难,这些方式也是我们需要找一个比较好的折中,我们验证可以来缓解刚才提到的攻击的方式。

今天给大家讲的我们发现一种新的应用传感器软件,麦克风和扬声器来构造的恢复用户手机图案锁的攻击方式,这样的好处,非常隐秘,同时分析大量用户的图案锁,我们的实验表明我们的分析效果非常好,准确率很高。(速记)

上一篇:刘惠明:沙箱内持久化:行之有效的沙箱攻击新思路

下一篇:邵国安:主持人