信息來源:FreeBuf
概述
在這篇文章中,我們將會給大家介紹一種從瀏覽器中提取敏感信息的方法,而我們所要用到的工具就是你的智能手機或筆記本電腦中的環(huán)境光傳感器。文章結(jié)構(gòu)如下:
1. 首先,我們會介紹與光傳感器有關(guān)的內(nèi)容。
2. 接下來,我們會描述用戶設(shè)備的屏幕顏色將會對光傳感器的數(shù)據(jù)產(chǎn)生怎樣的影響。我們的主要目標(biāo)是跨域提取瀏覽器的數(shù)據(jù)和歷史記錄,而攻擊者將可以從中提取出敏感文檔和圖片(例如用于賬號恢復(fù)的二維碼圖片)。
3. 最后,我們會介紹瀏覽器廠商所能采取的應(yīng)對策略,并幫助大家緩解這種風(fēng)險。
注:當(dāng)前版本的Firefox和Chrome瀏覽器都無法抵御這種攻擊,包括帶有光傳感器的Android以及桌面設(shè)備(例如MacBookPro)。
背景知識:智能手機中的光傳感器
現(xiàn)在,幾乎所有型號的智能手機和絕大多數(shù)的筆記本電腦都配備有環(huán)境光傳感器。這種傳感器一般會被安裝在設(shè)備的頂部,也就是在靠近前置攝像頭的地方。智能手機不僅可以利用環(huán)境光傳感器來檢測用戶距離,而且還可以感應(yīng)外部環(huán)境,并通過調(diào)整屏幕亮度來達到省電的目的。除此之外,光環(huán)境信息也可以用來調(diào)整智能手機的響應(yīng)方式,或者對硬件進行配置。因此,光傳感器的數(shù)據(jù)是十分敏感的。
環(huán)境光傳感器返回的數(shù)據(jù)其精確度是非常高的,在國際標(biāo)準(zhǔn)單位中,衡量光強度所用的單位是勒克斯(lux),輸出數(shù)據(jù)范圍在0(黑暗)到上萬lux不等。而且光傳感器輸出數(shù)據(jù)的頻率也是非常高的,讀取間隔大約為100-200毫秒。
為了與原生App競爭并給用戶提供更好的用戶體驗,越來越多的網(wǎng)站開始有訪問環(huán)境光傳感器數(shù)據(jù)的需求了。但是,W3C設(shè)備與傳感器工作組織目前還在討論是否要允許網(wǎng)站在沒有得到用戶許可的情況下訪問光傳感器數(shù)據(jù)。但是,當(dāng)前版本的Chrome和Firefox都已經(jīng)實現(xiàn)了相應(yīng)的API。
傳感器隱私
W3C組織近期正在討論有關(guān)通用傳感器API的內(nèi)容,其中一個主要的話題就是第三方服務(wù)在訪問特定傳感器數(shù)據(jù)時是否需要征得用戶的許可。因此,我們此次研究的目的就是要研究環(huán)境光傳感器(ALS)目前所面臨的安全威脅。在此之前,我曾從安全和隱私這兩個方面對ALS進行過全面的分析,通過研究發(fā)現(xiàn),攻擊者不僅可以通過傳感器泄漏數(shù)據(jù)來檢測房間內(nèi)是否有人,而且還可以找出目標(biāo)用戶的銀行密碼。
在這篇文章中,我們的重點是傳感器數(shù)據(jù)將如何幫助攻擊者從目標(biāo)用戶的瀏覽器中提取出隱私數(shù)據(jù)。接下來,我們會討論實際的攻擊場景。
利用光傳感器提取數(shù)據(jù)
那么我們到底如何才能通過環(huán)境光傳感器來提取出用戶的隱私數(shù)據(jù)呢?首先,我們要注意以下兩點:
1. 用戶屏幕的顏色攜帶著大量的有用信息,但是出于安全方面的考慮,網(wǎng)站是禁止直接讀取這方面信息的。
2. 攻擊者可以通過光傳感器的讀數(shù)來區(qū)分不同的屏幕顏色
我們待會兒再詳細描述第二點,但簡而言之,屏幕所發(fā)出的光不僅會對光傳感器的讀數(shù)產(chǎn)生影響,而且還會允許網(wǎng)站判斷設(shè)備屏幕的顏色。
而第一點肯定會讓你感到驚訝吧?畢竟網(wǎng)站可以控制它們在用戶屏幕上所顯示的內(nèi)容,所以它們?yōu)槭裁催€會對這些數(shù)據(jù)感興趣呢?但你要知道,下面這兩種顏色狀態(tài)是網(wǎng)站無法直接獲取的:
1. 已訪問過的鏈接顏色:出于隱私原因,瀏覽器不會向開發(fā)者透露頁面所顯示的鏈接顏色,否則惡意開發(fā)者就可以利用“:visited”這種頁面style來檢測用戶所訪問過的網(wǎng)站了。
2. 跨域資源:同源策略可以防止惡意網(wǎng)站跨域訪問受害網(wǎng)站的合法資源。雖然網(wǎng)站不能跨域檢查其他網(wǎng)站的框架和圖片,但他們可以根據(jù)自己的需要來顯示這些內(nèi)容,例如縮放大小和改變顏色。
接下來,我們將介紹攻擊的實現(xiàn)方法。
檢測已訪問過的鏈接
雖然網(wǎng)站可以采用不同的style來顯示已訪問過的和未訪問過的鏈接顏色,但是它們不能檢測鏈接是如何顯示給用戶的。不過,我們可以通過傳感器來識別鏈接的真實顏色。大致步驟如下:
1. 設(shè)置鏈接的style:已訪問過的(白色)、未訪問過的(黑色)。
2. 校準(zhǔn):顯示一個白色背景然后再顯示黑色背景,以此來識別用戶環(huán)境的光等級。不過需要注意的是,傳感器讀數(shù)波動較大將會增加我們的攻擊難度。
3. 遍歷鏈接列表:一個接一個地讀取列表中的地址,然后顯示在屏幕中。已訪問過的鏈接將以白色顯示,未訪問過的鏈接則是黑色。
4. 記錄下每一條鏈接的光等級,識別它們的顏色。由于我們已經(jīng)在第二步中對屏幕進行了校準(zhǔn),所以我們現(xiàn)在就能知道光傳感器的每一個讀數(shù)所代表的顏色了。
最后,攻擊者將獲取到所有白色的鏈接,這樣他們就能知道用戶之前訪問過哪些頁面了。
演示視頻如下:
視頻地址:https://youtu.be/Rg0LQ3npkP0
在演示視頻中,我們實驗環(huán)境的光條件在數(shù)據(jù)提取階段是不會發(fā)生變化的,但是去除這個限制條件也并非難事。
竊取跨域資源
在我們的實驗過程中,我們的重點將放在竊取圖片上,因為圖片資源比較好提取。在下面的演示視頻中,網(wǎng)站允許用戶通過掃描二維碼(https://victim.com/account-code.png)來緊急訪問或恢復(fù)賬號,而攻擊者就可以利用這個二維碼來劫持用戶賬戶了。
視頻地址:https://youtu.be/LF8Wi1UVj7U
攻擊機制大致如下:
1. 從受攻擊的域名嵌入一張圖片。一般情況下,這張圖片對于不同身份的用戶是不一樣的,例如用戶頭像或安全碼。
2. 使用SVG過濾器來創(chuàng)建黑白形式的圖片。
3. 縮放圖片,讓圖片充滿整個屏幕。
4. 遍歷圖片中的所有像素,并在用戶屏幕上顯示每一個像素,然后記錄下光傳感器對每一個像素的讀數(shù)。
5. 將所有像素組合成結(jié)果圖像。
檢測速度
由于我們一次只能提取一位數(shù)據(jù),所以檢測速度就成為了這種攻擊技術(shù)的主要瓶頸。雖然瀏覽器傳感器的讀取速率只有60Hz,但這并不意味著我們每秒能提取出60位數(shù)據(jù),而最終的檢測速度也會受到傳感器檢測屏幕亮度的頻率所限制。
不同情況所對應(yīng)的檢測時間如下:
-8個字符所組成的明文字符串:24秒-16個字符所組成的明文字符串:48秒-20x20的二維碼圖片:3分20秒-掃描瀏覽歷史中1000個訪問頻率最高的URL:8分20秒-64x64的像素圖片:34分08秒
下面這個視頻演示了竊取圖片的完整過程:
視頻地址:https://youtu.be/SI8Uf-VCixs
應(yīng)對方法
目前比較有效的應(yīng)對方法主要有以下兩種:
1. 限制傳感器的讀取速率(低于60Hz)
2. 限制傳感器的輸出精度
不過對于光傳感器而言,限制頻率也無法阻止我們的攻擊,就算頻率降低至1Hz我們也同樣能夠進行攻擊,但限制頻率可以顯著增加攻擊的時間成本。相比而言,限制傳感器的輸出精度也許是更加好的解決方案。但很明顯,最佳的解決方案應(yīng)該是限制網(wǎng)站訪問傳感器數(shù)據(jù),至少也要在它們訪問這些數(shù)據(jù)之前得到用戶的權(quán)限許可。
總結(jié)
我們此次演示的攻擊技術(shù)不僅暴露了目前光傳感器所存在的安全隱患,而且也證明了惡意網(wǎng)站能夠利用光傳感器數(shù)據(jù)來繞過網(wǎng)站的同源策略并跨域竊取用戶的敏感信息。其實除了光傳感器之外,像溫度感應(yīng)器、GPS和陀螺儀等傳感器或多或少都存在著各種安全問題,而以安全和隱私為主要考量因素來設(shè)計這些設(shè)備的行業(yè)標(biāo)準(zhǔn)其實也并非易事。因此,我們希望廠商能夠更加關(guān)注傳感器的安全問題,并且能夠在將來為這些設(shè)備增加更多的安全保護功能。
* 參考來源:lukaszolejnik, FB小編Alpha_h4ck編譯,轉(zhuǎn)載請注明來自FreeBuf.COM