國(guó)外研究人員披露了Android漏洞(CVE-2018-9489)的信息。Android系統(tǒng)的內(nèi)部廣播機(jī)制會(huì)暴露敏感的用戶和設(shè)備信息,手機(jī)上安裝的應(yīng)用可在用戶不知情或未經(jīng)許可的情況下訪問(wèn)獲取這些信息。
Android系統(tǒng)的內(nèi)部廣播機(jī)制泄露的數(shù)據(jù)包括:Wi-Fi網(wǎng)絡(luò)名稱、Wi-Fi網(wǎng)絡(luò)BSSID,本地IP地址、DNS服務(wù)器信息和設(shè)備的MAC地址等詳細(xì)信息。部分信息(如Mac地址)在Android 6版本以上無(wú)法通過(guò)這個(gè)漏洞獲取,但是剩下的依然可以通過(guò)監(jiān)聽(tīng)廣播來(lái)繞過(guò)權(quán)限檢查和其他防范措施。
背景
Android是谷歌開發(fā)的用于手機(jī)和平板電腦的開源操作系統(tǒng),保守估計(jì)全球有超過(guò)20億臺(tái)設(shè)備運(yùn)行Android。Android上的應(yīng)用程序通常與系統(tǒng)隔離,但是通過(guò)幾種機(jī)制仍然可以實(shí)現(xiàn)應(yīng)用程序的進(jìn)程與操作系統(tǒng)間的交互。
比如說(shuō)這次問(wèn)題的源頭。Android提供了“ Intent ”作為進(jìn)程間的通信方式之一,該機(jī)制允許應(yīng)用程序或系統(tǒng)發(fā)送可由其他應(yīng)用程序收聽(tīng)的消息。盡管開發(fā)人員可以選擇關(guān)閉或限制這個(gè)機(jī)制,但是在實(shí)踐過(guò)程中工程師往往疏于部署限制機(jī)制或屏蔽敏感數(shù)據(jù)。這就導(dǎo)致了上文中的Android漏洞,手機(jī)上的惡意軟件可以監(jiān)聽(tīng)并捕獲其他應(yīng)用程序廣播的消息。
安卓系統(tǒng)提供的最常見(jiàn)的安全機(jī)制是權(quán)限控制,旨在保護(hù)用戶的隱私信息不受侵害。應(yīng)用程序必須通過(guò)應(yīng)用程序清單(“ AndroidManifest.xml ”)中的特殊“ uses-permission ”標(biāo)記明確請(qǐng)求訪問(wèn)某些信息或功能。根據(jù)許可的類型(如“正常”、“危險(xiǎn)”等),系統(tǒng)可以在應(yīng)用安裝期間向用戶顯示授權(quán)信息,或者在運(yùn)行期間再次提示。某些權(quán)限只能由系統(tǒng)應(yīng)用程序使用,并且不向第三方開發(fā)人員開放。
Google Play和運(yùn)行時(shí)的應(yīng)用程序權(quán)限截圖:
漏洞詳情
Android系統(tǒng)通過(guò)“ Intent ”機(jī)制廣播有關(guān)Wi-Fi連接和Wi-Fi網(wǎng)絡(luò)接口的信息:
WifiManager的NETWORK_STATE_CHANGED_ACTION
WifiP2pManager的WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
這些信息包括設(shè)備的MAC地址、Wi-Fi接入點(diǎn)的BSSID、網(wǎng)絡(luò)名稱以及本地IP、網(wǎng)關(guān)IP和DNS服務(wù)器地址等信息。此信息可供用戶設(shè)備上運(yùn)行的所有應(yīng)用程序使用。
雖然應(yīng)用程序也可以通過(guò)WifiManager訪問(wèn)此信息,但這樣的話需要應(yīng)用程序清單中的“ ACCESS_WIFI_STATE ”權(quán)限。通過(guò)Wi-Fi進(jìn)行地理定位通常需要“ ACCESS_FINE_LOCATION ”或“ ACCESS_COARSE_LOCATION ”權(quán)限。此外,在Android版本6.0及更高版本中,設(shè)備的實(shí)際MAC地址不再通過(guò)API提供,并始終返回地址“02:00:00:00:00:00”。然而,監(jiān)聽(tīng)系統(tǒng)廣播的應(yīng)用程序不需要這些權(quán)限,因此允許在不知道用戶的情況下捕獲該信息,并且甚至在Android 6或更高版本上捕獲真實(shí)MAC地址。
嘗試在Android 7.0中獲取MAC地址的應(yīng)用截圖:
研究人員使用多款硬件和不同Android版本進(jìn)行了測(cè)試,結(jié)果顯示所有測(cè)試設(shè)備和Android版本都可以復(fù)現(xiàn)這個(gè)問(wèn)題,盡管某些設(shè)備未在“ NETWORK_STATE_CHANGED_ACTION ”Intent中顯示實(shí)際MAC地址,但它們?nèi)栽?ldquo; WIFI_P2P_THIS_DEVICE_CHANGED_ACTION ”Intent內(nèi)。同時(shí)由于MAC地址是固定且與硬件綁定,所以哪怕設(shè)備的MAC地址是隨機(jī)化的,也可以用它來(lái)識(shí)別和跟蹤任何Android設(shè)備。而針對(duì)網(wǎng)絡(luò)名稱和BSSID信息,可通過(guò)查詢BSSID數(shù)據(jù)庫(kù)(如WiGLE或SkyHook)來(lái)定位用戶。惡意軟件可以使用這些網(wǎng)絡(luò)信息來(lái)進(jìn)一步試探和攻擊本地Wi-Fi網(wǎng)絡(luò)。研究人員表示所有版本的Android系統(tǒng)均會(huì)受到影響,包括各種分支,如亞馬遜的Kindle FireOS。谷歌在Android P/9中修復(fù)了這個(gè)問(wèn)題,但不會(huì)為舊版本的系統(tǒng)提供更新,建議用戶升級(jí)到Android最新版本。
問(wèn)題復(fù)現(xiàn)
通過(guò)應(yīng)用程序
對(duì)于Android設(shè)備用戶,可以按如下方式復(fù)制這些問(wèn)題:
1. 安裝Vilius Kraujutis開發(fā)的“Internal Broadcasts Monitor”應(yīng)用。
2. 打開應(yīng)用,然后點(diǎn)擊“Start”開始監(jiān)控廣播信息。
3. 觀察系統(tǒng)廣播信息,特別是“android.net.wifi.STATE_CHANGE”和“android.net.wifi.p2p.THIS_DEVICE_CHANGED”這兩條。
示例:
通過(guò)代碼
使用代碼復(fù)現(xiàn),需要?jiǎng)?chuàng)建一個(gè)廣播接收器并注冊(cè)以接收這些信息:
android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION
android.net.wifi.WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
示例代碼如下所示:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle state) {
IntentFilter filter = new IntentFilter();
filter.addAction(
android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(
android.net.wifi.WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
registerReceiver(receiver, filter);
}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(intent.toString());
….
}
};
后續(xù)
因?yàn)檫@是一個(gè)重大的API變更,谷歌僅在Android P/9中修復(fù)了這個(gè)問(wèn)題,舊版的Android系統(tǒng)不會(huì)得到更新,建議用戶升級(jí)到Android P/9或更高版本。
|