可是,當(dāng)我們主動使用這些資源,比如攝像頭的時候,我們可能想要干一些重要的事情(比如用QQ掃描紅包二維碼),這個時候攝像頭對準(zhǔn)有用的東西的概率也會大大提高。因此,如果一個惡意程序在這個時候競爭攝像頭(我們的標(biāo)題的來源!),并且拍照,那么惡意程序更有可能會獲得有用的資源(比如紅包二維碼!然后和你一起分享紅包里的錢!)。這篇文章當(dāng)中著重研究了針對攝像頭以及觸控屏的攻擊。
我們將攻擊分為三類,即在正常應(yīng)用使用資源前、使用時、使用后攻擊。先討論攝像頭吧!安卓規(guī)定,當(dāng)一個程序擁有最高用戶優(yōu)先級時,它可以打開攝像頭。一個程序如果想要使用攝像頭,它必須被授權(quán)。因此,我們可以把我們的惡意程序給弄成一個美顏相機之類的,讓它名正言順地獲得相機授權(quán)。在正常程序準(zhǔn)備拍照(或者正在拍照)的時候,我們的程序搞一個透明窗口出現(xiàn)在屏幕上,然后快速拍10張照片,然后關(guān)閉透明窗口。用戶基本上發(fā)現(xiàn)不了什么異常。經(jīng)過實驗,發(fā)現(xiàn)這樣的搞法是很有效的,在經(jīng)過平均1秒多的拍攝后,我們可以獲得清晰的照片了(也可能會拍到模糊的照片)。
這樣的攻擊是有現(xiàn)實意義的。比如紅包二維碼。當(dāng)你使用微信或者QQ掃描紅包二維碼的時候,惡意程序插手,也拍到了紅包二維碼。這樣,惡意程序的所有者也能跟你分享紅包了!研究者真的對微信和QQ進行了研究,發(fā)現(xiàn)這樣的攻擊居然是行之有效的(除了微信的動態(tài)二維碼紅包)。
再來說一說觸控屏的事情吧!面對觸控屏,一個問題是我們不知道用戶到底什么時候在看B站、刷知乎,什么時候在輸入密碼。這很好解決,靠讀取加速度計等傳感器的數(shù)據(jù)就可以了,這些不屬于這篇文章的重點。另一個問題是,怎么攻擊呢?在安卓里面,一般來說,我們?nèi)绻孬@了用戶的輸入,那么正常程序就得不到用戶輸入了。不要緊!我們可以一次截獲一個字母。
舉個例子吧!如果密碼是osprey,我們的第一次攻擊只需要截獲o,然后攻擊停止(要不然,用戶發(fā)現(xiàn)自己啥都沒輸進去,大概會起疑心)。此時,用戶發(fā)現(xiàn)o沒輸進去,大概會大罵手機質(zhì)量不佳,然后重新輸入osprey。事實上,只截獲一個o不太夠,我們可以在用戶輸入密碼時多截獲幾次。比如,你獲得了o和p,那么你就知道密碼中o在p前面。你需要更耐心一些,多搞幾次,然后通過一些手段,可以還原密碼。研究表明,這樣的手段是很有效的,特別是那些六位數(shù)密碼(你在生活中設(shè)置過多少個六位數(shù)密碼?)。
如何防止此類攻擊呢?對于相機來說,比較好的方式是檢查自己到底有沒有獲得相機權(quán)限。如果沒有就要直接提示,而不能在嘗試幾次后再提示。對于觸控屏來說,程序需要檢查有沒有什么東西擋住了自己(比如透明的窗口),當(dāng)一個程序莫名其妙地擋住了別的程序的時候,操作系統(tǒng)也需要給出提示(這就回答了開頭的問題!)。
所以,下次手機再次提醒你,微信在別的應(yīng)用程序前面顯示時,不要責(zé)怪自己的手機了。(而且據(jù)說你可以關(guān)掉這個提示!)
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。