CVE-2018-9581分析:安卓RSSI廣播敏感資訊洩露漏洞
概要
安卓作業系統的系統廣播會暴露WiFi訊號強度資訊(RSSI)。設別上的所有應用都可以在沒有額外許可權的情況下獲取WiFi訊號強度資訊。惡意應用可以用這些資訊進行室內定位以定位和追蹤使用者。同樣地,底層Android API也可以獲取這些資訊。
該漏洞CVE編號為CVE-2018-9489,影響所有的安卓版本。Google目前還沒有完全修復該漏洞,但在Android 9 / P中已經不會在洩露使用者隱私資訊了。
背景
安卓應用會被作業系統進行隔離,程序之間以及作業系統與程序之間的互動是通過其他機制完成的。Intents就是這樣的機制之一,使用intent進行廣播允許應用或作業系統傳送系統範圍內的訊息,這也是其他應用程式在監聽的。該功能存在是為了限制讀取訊息的使用者,但應用開發者一般都會忽視這些限制導致敏感資料洩露。因此,執行在同一裝置上的惡意安卓應用程式就可以監聽和獲取其他應用廣播的訊息。
安卓系統中的另一個安全機制是許可權permission,這也是為了保護使用者隱私而設定的。應用必須通過AndroidManifest.xml中的uses-permission tag來明確請求對特定資訊或特徵的許可權。根據許可權的型別,作業系統在安裝過程中會展示給使用者,或執行時彈窗。一些許可權只能由系統應用使用,不能被普通開發者使用。
Google+Play/">Google Play中的應用許可權請求和執行時彈窗截圖:
漏洞細節
安卓作業系統會廣播WiFi強度值(RSSI),訪問這些資訊並不需要許可權。RSSI值代表的是裝置接受到的訊號的相對輕度,但並不與真實的物理訊號強度(actual physical signal strength)相關聯。這是通過兩個獨立的intents實現的,Android 9之前是android.net.wifi.STATE_CHANGE,其他安卓裝置是android.net.wifi.RSSI_CHANGED。
當應用通過WifiManager訪問資訊時,正常就在應用manifest中請求ACCESS_WIFI_STATE許可權。因為WiFi RTT特徵是Android 9中新引入的,也是用於位置定位的,需要ACCESS_FINE_LOCATION許可權。但監聽系統廣播時,在不需要通知使用者,不需要其他許可權的情況下就可以獲取資訊。
這裡有兩個單獨的安全問題:
-
RSSI值是通過廣播獲取的,繞過的正常的許可權檢查(ACCESS_WIFI_STATE);
-
通過廣播或WiFimanager獲取的RSSI值可以在不需要其他位置許可權的情況下進行室內定製。
普通使用者復現的步驟
對安卓裝置使用者,可以通過下面的步驟復現該問題:
-
安裝Vilius Kraujutis開發的Internal Broadcasts Monitor程式;
-
開啟應用,點選start來監控廣播;
-
觀察系統廣播,尤其是android.net.wifi.STATE_CHANGE(Android 9及之前版本)和android.net.wifi.RSSI_CHANGED(所有版本)。
截圖如下:
開發者通過程式碼復現
要程式碼復現,首先要建立一個Broadcast receiver,並註冊為接收action android.net.wifi.STATE_CHANGE(Android v8.1及更低版本)和android.net.wifi.RSSI_CHANGED。
示例程式碼如下:
public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle state) {IntentFilter filter = new IntentFilter(); filter.addAction(android.net.wifi.STATE_CHANGE); filter.addAction(android.net.wifi.RSSI_CHANGED); registerReceiver(receiver, filter);}BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Log.d(intent.toString());….}};
測試
研究人員在以下裝置上進行了測試:
-
Pixel 2,執行系統Android 8.1.0,補丁版本2018年 6月
-
Nexus 6P,執行系統Android 8.1.0,補丁版本2018年 6月
-
Moto G4,執行系統Android 7.1.0,補丁版本2018年 4月
-
Kindle Fire HD (8 gen) ,執行系統Fire OS 5.6.10(基於Android 5.1.1),補丁版本2018年4
執行最新韌體的ASUS RT-N56U 路由器
測試步驟如下:
-
安裝Broadcast Monitor app;
-
將手機設定為飛航模式;
-
進入房間;
-
關掉飛航模式,以觸發RSSI廣播;
-
從以下廣播中獲取RSSI值:
android.net.wifi.RSSI_CHANGE – newRssi value
android.net.wifi.STATE_CHANGE – networkInfo / RSSI
-
重複步驟3-4。
測試結果如下:
更多請參見: ofollow,noindex" target="_blank">https://wwws.nightwatchcybersecurity.com/2018/11/11/cve-2018-9581/