作者:Covfefe
介紹
今年9月15日,Chrome61發(fā)布,它啟用了WebUSB作為其默認(rèn)功能。而WebUSB是一個(gè)Javascript API,可以允許網(wǎng)頁訪問已連接的USB設(shè)備。這里的USB設(shè)備是指系統(tǒng)和工業(yè)的USB設(shè)備,所以不支持常見的USB設(shè)備(比如網(wǎng)絡(luò)攝像頭,HID或大容量?jī)?chǔ)存設(shè)備)。然而通過WebUSB API,很多其他的USB設(shè)備可以被訪問,且當(dāng)用戶授權(quán)給網(wǎng)頁時(shí),自己可能根本不了解網(wǎng)頁獲取的訪問權(quán)限級(jí)別。
這篇文章探尋WebUSB的功能,以深入了解其工作原理,攻擊方法及隱私問題。我們會(huì)解釋訪問設(shè)備所需的過程,以及瀏覽器是如何處理權(quán)限的,然后我們會(huì)討論一些安全隱患,并演示一個(gè)網(wǎng)站如何使用WebUSB來建立ADB連接來入侵安卓手機(jī)。
基礎(chǔ)
當(dāng)USB設(shè)備插入主機(jī)時(shí),瀏覽器會(huì)讀取設(shè)備發(fā)送的描述符,然后將其儲(chǔ)存在內(nèi)部USB設(shè)備儲(chǔ)存器中。此過程由Chrome的瀏覽器內(nèi)核Blink處理。日志可以在chrome://device-log(GET參數(shù)“refresh = 1”非常有用)中查看。
根據(jù)規(guī)范,設(shè)備可以在其二進(jìn)制對(duì)象存儲(chǔ)中的平臺(tái)描述符中明確地聲明對(duì)WebUSB的支持。
瀏覽器將每個(gè)USB設(shè)備存儲(chǔ)在自己的設(shè)備存儲(chǔ)器中。WebUSB的可訪問性由本機(jī)驅(qū)動(dòng)程序支持所決定。在Windows上,我們可以通過瀏覽器訪問由WinUSB驅(qū)動(dòng)程序處理的每個(gè)USB設(shè)備。其他的諸如大容量存儲(chǔ)設(shè)備,網(wǎng)絡(luò)攝像頭或HID等就無法通過網(wǎng)絡(luò)訪問了,因?yàn)樗鼈兙哂刑幚磉@些設(shè)備的專用驅(qū)動(dòng)程序。
根據(jù)規(guī)范(和本博客文章),一旦設(shè)備注冊(cè),瀏覽器就會(huì)顯示一條通知。看起來像這樣:
但是,這種行為不容易重現(xiàn)。我們?cè)谝韵孪到y(tǒng)上嘗試過:
Windows 7, Chrome 61Windows 10, Chrome 61Debian, Chromium 60 (啟用了chrome://flags/#enable-experimental-web-platform-features)Debian, Google Chrome 61Arch Linux, Chromium 61Arch Linux, Google Chrome 61
Platform Descriptor中有一個(gè)有趣的元素叫做“iLandingPage”。即使規(guī)范將協(xié)議“http://”和“https://”作為前綴,我們也可以選擇一個(gè)空協(xié)議,在這種情況下,我們應(yīng)該可以在提供的URL本身中指定協(xié)議。
但是,Chrome已移除或根本沒有實(shí)現(xiàn)注入任意URL前綴的功能。以下是源文件中名為“webusb_descriptors.cc”的代碼片段。它解析接收到的描述頭,包括“iLandingPage”。將URL前綴限制為“http://”和“https://”。
// Look up the URL prefix and append the rest of the data in the descriptor.?std::string url;?switch (bytes[2]) {? ?case 0:? ? ?url.append("http://");? ? ?break;? ?case 1:? ? ?url.append("https://");? ? ?break;? ?default:? ? ?return false;?}?url.append(reinterpret_cast<const char*>(bytes.data() + 3), length - 3);
請(qǐng)求訪問設(shè)備
網(wǎng)頁可以打開提示請(qǐng)求訪問設(shè)備,它必須指定過濾器來過濾可用的設(shè)備。如果過濾器為空,那么即允許用戶從所有可用設(shè)備中選擇設(shè)備。打開的提示如下所示:
用戶可以看到所有(過濾的)可用設(shè)備。設(shè)備名稱引用于自身所發(fā)送的產(chǎn)品名稱。如果沒有指定產(chǎn)品名稱,Chrome會(huì)嘗試通過有關(guān)設(shè)備的已知信息來猜測(cè)一個(gè)表達(dá)性的名稱。然后,它會(huì)將設(shè)備命名為“來自<vendor_name>”的未知設(shè)備。用戶選擇設(shè)備并點(diǎn)擊“連接”后,即可授予訪問設(shè)備的權(quán)限。
權(quán)限處理
權(quán)限由Chrome的permission API處理。一旦向網(wǎng)頁授予權(quán)限訪問設(shè)備,權(quán)限會(huì)一直持續(xù),直到用戶手動(dòng)撤銷。處理權(quán)限的API根據(jù)其根源區(qū)分“網(wǎng)頁”,即當(dāng)具有匹配的協(xié)議,主機(jī)和端口時(shí),瀏覽器就會(huì)認(rèn)為這個(gè)網(wǎng)頁與另一網(wǎng)頁相同。瀏覽器識(shí)別唯一設(shè)備的行為不是很明顯,用于識(shí)別的候選目標(biāo)由設(shè)備在其描述頭中發(fā)送。候選目標(biāo)如下:
GUIDVendor IDProduct ID
雖然GUID是唯一的ID,但它不能用于識(shí)別設(shè)備。以下是多次插入和拔出測(cè)試設(shè)備的日志的截圖,可見每次設(shè)備都有不一樣的GUID,即便如此,每次插入后設(shè)備都被許可且可以訪問,不需要進(jìn)一步的許可請(qǐng)求。
這表明Chrome使用Vendor ID和Product ID的組合來標(biāo)識(shí)設(shè)備。
訪問設(shè)備
一旦網(wǎng)頁被授予訪問設(shè)備的權(quán)限,那么就可以訪問它了。首先其必須打開設(shè)備,打開設(shè)備的過程中就開始了與設(shè)備的會(huì)話,然后設(shè)備會(huì)被鎖定,這樣同一瀏覽器會(huì)話中的其他選項(xiàng)卡就無法訪問了。但是另一個(gè)瀏覽器的另一個(gè)網(wǎng)頁仍然可以打開相同設(shè)備。
為了與設(shè)備進(jìn)行通信,瀏覽器必須聲明要與之通信的接口。在聲明接口之后,主機(jī)上的任何其他應(yīng)用程序都是無法聲明的。使用聲明的接口,頁面可以與指定接口的端點(diǎn)通信。
接下來,頁面啟動(dòng)控制傳輸來設(shè)置設(shè)備,這基本上指定了它希望與設(shè)備通信的方式以及所要求的確切功能。一旦設(shè)備設(shè)置好,它就可以傳輸數(shù)據(jù),并且完成USB設(shè)備接口的所有功能。
檢查WebUSB的支持
我們構(gòu)建了一個(gè)小型概念性證明(PoC)工具,可以輕松確定WebUSB是否支持設(shè)備。該工具測(cè)試是否能至少聲明一個(gè)已連接的USB設(shè)備的接口,如果存在,那么就意味著它可以與設(shè)備通信,因此該設(shè)備是被支持的。
不過該工具無法測(cè)試USB設(shè)備是否完全不受支持,因?yàn)闊o法聲明接口的原因有所不同。該接口可以被另一個(gè)程序聲明,或?yàn)g覽器可能沒有系統(tǒng)(Linux)的訪問權(quán)限。
該工具是一個(gè)簡(jiǎn)單的靜態(tài)網(wǎng)站。你可以點(diǎn)擊這里下載。這是它的外觀:
要測(cè)試設(shè)備是否支持,請(qǐng)單擊“選擇設(shè)備”按鈕打開權(quán)限提示。此提示將列出所有可用的USB設(shè)備。通過選擇所需的設(shè)備并單擊“連接”,工具將打開設(shè)備,并遍歷每個(gè)可用的界面,并嘗試聲明。結(jié)果記錄在頁面底部的表格中。被聲明的interfaces列顯示可以聲明的接口編號(hào)。
如果要在其他地方使用受支持的設(shè)備,則需要刷新站點(diǎn)或關(guān)閉該選項(xiàng)卡。
安全性考慮
總體來說WebUSB是安全的,但是像所有新添加的代碼一樣,它擴(kuò)大了代碼庫,因此也擴(kuò)大了瀏覽器的受攻擊面。這是一種新技術(shù),所以問題是不可避免的,在這方面的一些安全狀況已經(jīng)有了初步意見。
WebUSB在Chrome的瀏覽器內(nèi)核Blink中運(yùn)行。因此,發(fā)現(xiàn)WebUSB中的內(nèi)存崩潰可能并不比Blink中其他地方的內(nèi)存崩潰更影響更大。
實(shí)現(xiàn)WebUSB的網(wǎng)站應(yīng)確保節(jié)制使用XSS是一個(gè)優(yōu)先事項(xiàng)。利用XSS漏洞的攻擊者可能具有與網(wǎng)站相同的對(duì)已連接設(shè)備的訪問權(quán),期間用戶并不會(huì)注意到。
處理WebUSB的權(quán)限對(duì)于用戶可能不是很明顯。當(dāng)頁面請(qǐng)求訪問USB設(shè)備時(shí),向用戶發(fā)出的通知不包含任何警告,而該站點(diǎn)從這時(shí)起將具有對(duì)該設(shè)備的完整的,靜默的USB訪問權(quán)限。
我們構(gòu)建了一個(gè)概念性證明(PoC)來證明這個(gè)問題。在這種情況下,基于WebUSB的ADB主機(jī)實(shí)現(xiàn)被用于訪問連接的Android手機(jī)。一旦用戶接受請(qǐng)求,該頁面使用WebUSB可以從相機(jī)文件夾中檢索所有圖片?!军c(diǎn)擊這里下載PoC】
通過這種訪問級(jí)別,網(wǎng)站不僅可以從文件系統(tǒng)中竊取每個(gè)可讀取的文件,還可以安裝APK,訪問攝像頭和麥克風(fēng)來監(jiān)視用戶,并可能將權(quán)限升級(jí)到root。
該示例受到用戶交互的高度限制,因此風(fēng)險(xiǎn)大大降低 – 用戶必須向其手機(jī)授予網(wǎng)頁權(quán)限,在其手機(jī)上激活USB調(diào)試,并最終允許來自主機(jī)的ADB連接。到目前為止,這只適用于Linux,因?yàn)樵赪indows中的實(shí)現(xiàn)相當(dāng)不穩(wěn)定。然而,它既可以作為在WebUSB上運(yùn)行復(fù)雜協(xié)議的示例,也可以顯示W(wǎng)ebUSB請(qǐng)求的一次點(diǎn)擊如何導(dǎo)致數(shù)據(jù)泄露。
您可以在下面的視頻中看到PoC的操作。有兩個(gè)虛擬機(jī),左邊的一個(gè)作為惡意的Web服務(wù)器,右邊的一個(gè)作為受害者。網(wǎng)站連接到手機(jī)后,ADB連接在手機(jī)上確認(rèn)。然后檢索所有拍攝的照相機(jī)圖像并將其顯示出來?!军c(diǎn)擊這里下載源碼】
視頻地址:https://labs.mwrinfosecurity.com/assets/Uploads/WebADB-Demo.mp4
進(jìn)一步的研究
進(jìn)一步的研究可能集中在發(fā)現(xiàn)實(shí)現(xiàn)WebUSB的缺陷,并可能會(huì)披露內(nèi)存崩潰bug。然而,代碼庫相對(duì)較小,并且新的修復(fù)也在持續(xù)寫入。
另一個(gè)有趣的調(diào)查對(duì)象是用惡意的USB設(shè)備攻擊Chrome。前者可能會(huì)發(fā)送錯(cuò)誤的USB描述符,并可能在瀏覽器中觸發(fā)未預(yù)期的行為。 Chrome可以為WebUSB(chrome://usb-internals/)添加虛擬測(cè)試設(shè)備,這很有幫助。這樣的攻擊向量需要物理訪問設(shè)備,所以顯得有點(diǎn)不太現(xiàn)實(shí)。
另外,在研究WebUSB或任何其他新的網(wǎng)絡(luò)標(biāo)準(zhǔn)時(shí),如Web藍(lán)牙或Web NFC,請(qǐng)記住,這些功能日新月異,甚至一個(gè)月前的信息可??能已經(jīng)過時(shí)了。
總結(jié)
一般來說,由于在有限的審查期間管理和限制,WebUSB被確定具有良好的安全標(biāo)準(zhǔn)。支持的設(shè)備非常有限,WebUSB無法訪問網(wǎng)絡(luò)攝像頭,HID和大容量存儲(chǔ)設(shè)備。然而進(jìn)一步研究后,我們發(fā)現(xiàn)這是一個(gè)有趣的技術(shù),特別是在引入重大變化或附加功能時(shí)。
建議用戶永遠(yuǎn)不要讓不受信任的網(wǎng)站訪問包含任何敏感數(shù)據(jù)的USB設(shè)備。這可能導(dǎo)致設(shè)備被入侵。
- 消息稱去年全球IT支出超過5萬億美元 數(shù)據(jù)中心系統(tǒng)支出大幅增加
- 2025年全球數(shù)據(jù)中心:數(shù)字基礎(chǔ)設(shè)施的演變
- 谷歌押注多模態(tài)AI,BigQuery湖倉一體是核心支柱
- 數(shù)字化轉(zhuǎn)型支出將飆升:到2027年將達(dá)到4萬億美元
- 量子與人工智能:數(shù)字化轉(zhuǎn)型的力量倍增器
- 華為OceanStor Dorado全閃存存儲(chǔ)榮獲CC認(rèn)證存儲(chǔ)設(shè)備最高認(rèn)證級(jí)別證書
- 2024年終盤點(diǎn) | 華為攜手伙伴共筑鯤鵬生態(tài),openEuler與openGauss雙星閃耀
- 特朗普宣布200億美元投資計(jì)劃,在美國多地建設(shè)數(shù)據(jù)中心
- 工信部:“點(diǎn)、鏈、網(wǎng)、面”體系化推進(jìn)算力網(wǎng)絡(luò)工作 持續(xù)提升算網(wǎng)綜合供給能力
- 2025年超融合基礎(chǔ)設(shè)施的4大趨勢(shì)
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。