Android瀏覽器泄露敏感硬件信息

Stella
根據(jù)Chrome文檔,Chrome for Android用戶(hù)代理字符串包含Android版本號(hào)和構(gòu)建代碼信息。當(dāng)應(yīng)用程序使用Android的WebView和Chrome自定義選項(xiàng)卡API在自己的應(yīng)用程序中提供Web內(nèi)容時(shí),也會(huì)發(fā)送這些信息。

網(wǎng)絡(luò)安全咨詢(xún)公司Nightwatch發(fā)現(xiàn),谷歌的Chrome瀏覽器,WebView和Android的Chrome標(biāo)簽顯示了有關(guān)運(yùn)行它的設(shè)備的硬件型號(hào),固件版本和安全補(bǔ)丁級(jí)別的信息。這也會(huì)影響使用Chrome呈現(xiàn)網(wǎng)絡(luò)內(nèi)容的所有Android應(yīng)用程序。此信息可用于跟蹤用戶(hù)和指紋設(shè)備。它還可用于確定特定設(shè)備易受攻擊的漏洞,以便針對(duì)攻擊。

雖然供應(yīng)商(Google)在2015年拒絕了最初的錯(cuò)誤報(bào)告,但他們已于2018年10月針對(duì)Chrome v70發(fā)布了部分修復(fù)程序。該修復(fù)程序隱藏固件信息,同時(shí)保留硬件模型標(biāo)識(shí)符。所有先前版本都會(huì)受到影響。建議用戶(hù)升級(jí)到70或更高版本。由于此修復(fù)程序不適用于WebView用法,因此應(yīng)用程序開(kāi)發(fā)人員應(yīng)手動(dòng)覆蓋其應(yīng)用程序中的用戶(hù)代理配置。

供應(yīng)商和MITER都拒絕發(fā)布CVE號(hào)碼來(lái)跟蹤此問(wèn)題,因?yàn)樗麄冋J(rèn)為這不涉及任何安全問(wèn)題。

背景——Chrome and Headers

適用于Android的Chrome瀏覽器由Google提供,作為適用于移動(dòng)設(shè)備的Android操作系統(tǒng)的默認(rèn)瀏覽器。它基于Chromium開(kāi)源項(xiàng)目。它還為在Android平臺(tái)上運(yùn)行的其他應(yīng)用程序提供WebView和Custom Tabs API,用于在不打開(kāi)單獨(dú)的瀏覽器窗口的情況下,在應(yīng)用程序內(nèi)呈現(xiàn)Web內(nèi)容。

與所有瀏覽器一樣,Chrome會(huì)向與其通信的Web服務(wù)器發(fā)送各種標(biāo)頭作為每個(gè)請(qǐng)求的一部分。這些標(biāo)頭在HTTP協(xié)議中定義,可以在RFC7230,7231,7232,7233,7234和7235找到最新標(biāo)準(zhǔn),其中包括User-Agent標(biāo)頭。

HTTP中的“User-Agent”標(biāo)頭由RFC 7231第5.5.3節(jié)定義如下:

user-agent”標(biāo)題字段包含關(guān)于發(fā)起請(qǐng)求的用戶(hù)代理的信息,服務(wù)器通常使用這些信息來(lái)幫助識(shí)別報(bào)告的互操作性問(wèn)題的范圍,處理或調(diào)整響應(yīng)以避免特定的用戶(hù)代理限制,以及分析瀏覽器或操作系統(tǒng)的使用。

背景——Android模型和ID構(gòu)建

Android設(shè)備有內(nèi)置模型和ID構(gòu)建,以識(shí)別手機(jī)模型和Android構(gòu)建。它們是在android.os.Build中定義的。它們?cè)赼ndroid.os.Build.MODEL和android.os.Build.ID屬性中定義。這些在Android兼容性定義文檔(第3.2.2節(jié))中進(jìn)一步定義如下:

MODEL-設(shè)備實(shí)施者選擇的值,包含終端用戶(hù)已知的設(shè)備名稱(chēng)。這應(yīng)該與設(shè)備銷(xiāo)售和銷(xiāo)售給最終用戶(hù)的名稱(chēng)相同。沒(méi)有具體的形式要求。

ID-設(shè)備實(shí)現(xiàn)者以人類(lèi)可讀的格式選擇引用特定版本的標(biāo)識(shí)符。此字段可以與android.os.Build.VERSION.INCREMENTAL相同,但應(yīng)該是一個(gè)足以讓最終用戶(hù)區(qū)分軟件構(gòu)建的值。該字段的值必須可編碼為7位ASCII,并匹配正則表達(dá)式“^[a-zA-Z0-9._-]+$”。

漏洞詳細(xì)信息

根據(jù)Chrome文檔,Chrome for Android用戶(hù)代理字符串包含Android版本號(hào)和構(gòu)建代碼信息。當(dāng)應(yīng)用程序使用Android的WebView和Chrome自定義選項(xiàng)卡API在自己的應(yīng)用程序中提供Web內(nèi)容時(shí),也會(huì)發(fā)送這些信息。雖然Android確實(shí)提供了覆蓋這些功能的能力(通過(guò)WebView中的WebSettings.setUserAgent()),但大多數(shù)應(yīng)用程序選擇不這樣做以通過(guò)依賴(lài)默認(rèn)標(biāo)頭來(lái)確保兼容性。

加劇問(wèn)題的是,用戶(hù)代理標(biāo)頭總是通過(guò)后臺(tái)運(yùn)行的進(jìn)程發(fā)送,同時(shí)伴隨發(fā)送HTTP和HTTPS請(qǐng)求。此外,與桌面瀏覽器Chrome不同的是,在Android,除了當(dāng)前會(huì)話(huà)的瀏覽器本身的“請(qǐng)求桌面站點(diǎn)”選項(xiàng)之外,沒(méi)有任何擴(kuò)展或覆蓋可以更改標(biāo)題。

例如,針對(duì)Android版v5.1.1的Nexus 6上Chrome Beta的用戶(hù)代理標(biāo)頭:

Mozilla/5.0(Linux;Android 5.1.1;Nexus 6 Build/LYZ28K)AppleWebKit/537.36(KHTML,類(lèi)似Gecko)Chrome/46.0.2490.34 Mobile Safari/537.36

當(dāng)用戶(hù)選擇“請(qǐng)求桌面站點(diǎn)”選項(xiàng)時(shí),發(fā)送的用戶(hù)代理標(biāo)頭是通用Linux標(biāo)頭。以下是適用于Android v5.1.1的Nexus 6上Chrome Beta的示例:

Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,類(lèi)似Gecko)Chrome/46.0.2490.34 Safari/537.36

不同之處在于,在移動(dòng)模式下,以下字符串是額外的:

Android 5.1.1;Nexus 6 Build/LYZ28K

它識(shí)別操作系統(tǒng)及其版本的事實(shí)并不是唯一的。這與許多其他常見(jiàn)瀏覽器在桌面和移動(dòng)設(shè)備上情況相同。構(gòu)建標(biāo)記是問(wèn)題所在。如上所述,構(gòu)建標(biāo)記標(biāo)識(shí)設(shè)備名稱(chēng)及其固件構(gòu)建。對(duì)于許多設(shè)備來(lái)說(shuō),這不僅可以用于識(shí)別設(shè)備本身,還可以用于識(shí)別運(yùn)行它的運(yùn)營(yíng)商以及所在國(guó)家/地區(qū)。它還可用于確定設(shè)備上的哪個(gè)安全補(bǔ)丁級(jí)別以及設(shè)備易受攻擊的漏洞。

從以上例子不難看出,其中構(gòu)建LYZ28K可以很容易地識(shí)別為在T-Mobile上運(yùn)行的Nexus 6。使用構(gòu)建信息根據(jù)已知哪些運(yùn)營(yíng)商在哪個(gè)構(gòu)建號(hào)上來(lái)確定運(yùn)營(yíng)商也是微不足道的。可以從諸如此類(lèi)的制造商和電話(huà)運(yùn)營(yíng)商網(wǎng)站輕松獲得構(gòu)建號(hào)碼。

要想檢查設(shè)備是否受到影響,用戶(hù)可以訪問(wèn)顯示瀏覽器發(fā)送的用戶(hù)代理標(biāo)頭的任何網(wǎng)站,或者您可以在Google搜索中鍵入“查看用戶(hù)代理”?;蛘撸梢栽谙馢sFiddle這樣的網(wǎng)站上使用以下JavaScript:document.write(navigator.userAgent)

供應(yīng)商響應(yīng)和緩解建議

Bug#494452已于2015年針對(duì)Chromium提交此錯(cuò)誤,并被供應(yīng)商拒絕為“WAI”-“按預(yù)期工作”。但是,在2018年,供應(yīng)商提交了一個(gè)新的錯(cuò)誤#860229和功能請(qǐng)求,這部分修復(fù)于2018年10月在Chrome v70 for Android中通過(guò)從標(biāo)頭中刪除固件構(gòu)建信息,但設(shè)備型號(hào)仍然存在。

該修復(fù)程序僅適用于Chrome應(yīng)用程序本身,而不適用于應(yīng)用程序開(kāi)發(fā)人員使用的WebView實(shí)現(xiàn),如以下說(shuō)明所示:

不按照Android兼容性定義文檔的要求,將更改應(yīng)用于Android Web View。

建議用戶(hù)更新到Chrome v70或更高版本以解決此問(wèn)題。應(yīng)用程序作者應(yīng)使用WebSettings.setUserAgent()方法來(lái)設(shè)置覆蓋用戶(hù)代理。雖然許多人不愿意這樣做以便失去兼容性,但專(zhuān)家建議使用以下方法,即使用默認(rèn)用戶(hù)代理并刪除其中的構(gòu)建和模型信息。

THEEND

最新評(píng)論(評(píng)論僅代表用戶(hù)觀點(diǎn))

更多
暫無(wú)評(píng)論