可是,当我们主动使用这些资源,比如摄像头的时候,我们可能想要干一些重要的事情(比如用QQ扫描红包二维码),这个时候摄像头对准有用的东西的概率也会大大提高。因此,如果一个恶意程序在这个时候竞争摄像头(我们的标题的来源!),并且拍照,那么恶意程序更有可能会获得有用的资源(比如红包二维码!然后和你一起分享红包里的钱!)。这篇文章当中着重研究了针对摄像头以及触控屏的攻击。
我们将攻击分为三类,即在正常应用使用资源前、使用时、使用后攻击。先讨论摄像头吧!安卓规定,当一个程序拥有最高用户优先级时,它可以打开摄像头。一个程序如果想要使用摄像头,它必须被授权。因此,我们可以把我们的恶意程序给弄成一个美颜相机之类的,让它名正言顺地获得相机授权。在正常程序准备拍照(或者正在拍照)的时候,我们的程序搞一个透明窗口出现在屏幕上,然后快速拍10张照片,然后关闭透明窗口。用户基本上发现不了什么异常。经过实验,发现这样的搞法是很有效的,在经过平均1秒多的拍摄后,我们可以获得清晰的照片了(也可能会拍到模糊的照片)。
这样的攻击是有现实意义的。比如红包二维码。当你使用微信或者QQ扫描红包二维码的时候,恶意程序插手,也拍到了红包二维码。这样,恶意程序的所有者也能跟你分享红包了!研究者真的对微信和QQ进行了研究,发现这样的攻击居然是行之有效的(除了微信的动态二维码红包)。
再来说一说触控屏的事情吧!面对触控屏,一个问题是我们不知道用户到底什么时候在看B站、刷知乎,什么时候在输入密码。这很好解决,靠读取加速度计等传感器的数据就可以了,这些不属于这篇文章的重点。另一个问题是,怎么攻击呢?在安卓里面,一般来说,我们如果截获了用户的输入,那么正常程序就得不到用户输入了。不要紧!我们可以一次截获一个字母。
举个例子吧!如果密码是osprey,我们的第一次攻击只需要截获o,然后攻击停止(要不然,用户发现自己啥都没输进去,大概会起疑心)。此时,用户发现o没输进去,大概会大骂手机质量不佳,然后重新输入osprey。事实上,只截获一个o不太够,我们可以在用户输入密码时多截获几次。比如,你获得了o和p,那么你就知道密码中o在p前面。你需要更耐心一些,多搞几次,然后通过一些手段,可以还原密码。研究表明,这样的手段是很有效的,特别是那些六位数密码(你在生活中设置过多少个六位数密码?)。
如何防止此类攻击呢?对于相机来说,比较好的方式是检查自己到底有没有获得相机权限。如果没有就要直接提示,而不能在尝试几次后再提示。对于触控屏来说,程序需要检查有没有什么东西挡住了自己(比如透明的窗口),当一个程序莫名其妙地挡住了别的程序的时候,操作系统也需要给出提示(这就回答了开头的问题!)。
所以,下次手机再次提醒你,微信在别的应用程序前面显示时,不要责怪自己的手机了。(而且据说你可以关掉这个提示!)
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。