Android 5.0螢幕錄製漏洞(CVE-2015-3878)威脅預警

wyzsk發表於2020-08-19
作者: 360安全衛士 · 2015/10/19 10:11

0x00 摘要


低技術門檻的漏洞利用或木馬製作隱藏著極大的安全威脅,當這種安全威脅遇上手機使用者的低安全意識時可能導致Android平臺惡意軟體的大規模爆發。360網際網路安全中心最新研究發現,Android5.0螢幕錄製漏洞(CVE-2015-3878)完全能夠激發如上“兩低”條件,漏洞威脅隨時可能大規模爆發。

利用Android 5.0螢幕錄製漏洞,駭客攻擊者可以構造使用者完全無法識別的UI(使用者介面)陷阱,在沒有獲取任何特殊系統許可權的條件下竊取使用者手機上的一切可視資訊,具有非常大的安全隱患。

本研究報告在分析漏洞原理、漏洞成因及利用技術的同時,充分挖掘隱藏在漏洞背後的威脅,以警示開發者和手機使用者注意防範此類漏洞。

2015年8月,360網際網路安全中心首先發現了此漏洞的存在,並於2015年8月15日向Google提交了漏洞細節。2015年8月19號,Google方面確認了該漏洞的存在。2015年10月9日,Google方面公佈漏洞補丁。

0x01 第一章 漏洞原理

一、 Android 5.0新特性

Android 5.0新增的螢幕錄製介面,無需特殊許可權,使用如下系統API即可實現螢幕錄製功能:

表1 Android5.0螢幕錄製API

發起錄製請求後,系統彈出如下提示框請求使用者確認:

在上圖中,“AZ Screen Recorder”為需要錄製螢幕的軟體名稱,“將開始擷取您的螢幕上顯示的所有內容”是系統自帶的提示資訊,不可更改或刪除。使用者點選“立即開始”便開始錄製螢幕,錄製完成後在指定的目錄生成mp4檔案。

二、 漏洞原理


開始錄製螢幕前系統呼叫MediaProjectionManager.createScreenCaptureIntent()發起錄製請求:

Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent();
            startActivityForResult(captureIntent, REQUEST_CODE);

方法createScreenCaptureIntent返回一個帶結果的Intent給應用程式,應用程式接著呼叫startActivityForResult發起該請求。

    public Intent createScreenCaptureIntent() {
        Intent i = new Intent();
        i.setClassName("com.android.systemui",
                "com.android.systemui.media.MediaProjectionPermissionActivity");
        return i;
    }

方法MediaProjectionPermissionActivity接收到該請求後,首先獲取發起請求的應用程式包資訊:

  public void onCreate(Bundle icicle) {
    …
    PackageManager packageManager = getPackageManager();
        ApplicationInfo aInfo;
        try {
            aInfo = packageManager.getApplicationInfo(mPackageName, 0);
            mUid = aInfo.uid;
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "unable to look up package name", e);
            finish();
            return;
        …}

接著,MediaProjectionPermissionActivity彈出AlertDialog提示框請求使用者授權錄製,AlertDialog中的提示資訊由請求錄製螢幕的軟體名稱和“將開始擷取您的螢幕上的所有內容。”兩段組成。

public void onCreate(Bundle icicle) {
      …
      String appName = aInfo.loadLabel(packageManager).toString();
      …
        final AlertController.AlertParams ap = mAlertParams;
        ap.mIcon = aInfo.loadIcon(packageManager);
        ap.mMessage = getString(R.string.media_projection_dialog_text, appName);
        …

此處系統沒有對應用名的長度做檢查,提示框的大小會隨提示內容(應用名)的長短自動調整,當應用名稱足夠長時,“將開始擷取您的螢幕上的所有內容。”這段提示語將不再顯示在AlertDialog中的可視範圍內,從而導致手機使用者只是看到了一串長長的應用名,而沒有看到系統真正想要提示使用者的“有軟體將要錄屏”這樣的重要提示資訊。

利用這一漏洞,攻擊者只需要給惡意程式構造一段特殊的,讀起來很“合理的”應用程式名,就可以將該提示框變成一個UI陷阱,使其失去原有的“錄屏授權”提示功能,並使惡意程式在使用者不知情的情況下錄製使用者手機螢幕。

0x02 利用與防範


一、 漏洞利用

我們針對某銀行客戶端(Android版)編寫一款漏洞測試demo,模擬“竊取”使用者賬號和密碼的過程。測試demo名稱如下:

<string name="app_name">xx銀行客戶端注意事項:\n1、不要在公共場所使用網上銀行,防止他人偷看您的密碼。\n2、不要在網咖、圖書館等公用網路上使用網上銀行,防止他人安裝監測程式或木馬程式竊取賬號和密碼。\n3、每次使用網上銀行後,及時退出。\n4、在其他渠道(如ATM取款、自助終端登入)進行交易時,注意密碼輸入的保護措施,防止他人透過錄影等方式竊取到您的賬號和密碼。\n5、切勿向他人透露您的使用者名稱、密碼或任何個人身份識別資料。\n6、如果您的個人資料有任何更改(例如,聯絡方式、地址等有變動),請及時透過銀行系統修改相關資料。\n7、定期檢視您的交易,核對對賬單。\n8、遇到任何懷疑或問題,請及時聯絡我行“95555-全國統一客服電話”。點選“立即開始”按鈕繼續執行 \t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\naaa</string>

這段demo名稱實際上是仿照了一段手機銀行的風險提示。 我們再透過AlarmManager構造一個輪詢服務,每隔3秒鐘查詢一次當前正在執行的應用程式程式名稱,當檢測到某行客戶端啟動後,發起錄製螢幕請求,此時,系統就會彈出請求提示框效果如下圖:

顯然,從使用者的角度來說,在啟動手機銀行客戶端時,看到這樣的提示訊息是完全合情合理的。但實際上這只是測試demo的軟體名稱(app_name)的一部分,真實的提示訊息透過向上滑動提示框的內容才能顯示,如下圖所示:

如果使用者沒有注意提示框的內容能夠上滑,就不能看到後面的內容,當使用者點選“立即開始”按鈕後,測試demo便開始後臺錄製使用者的一切操作,這樣就能成功竊取使用者在登陸該行客戶端時輸入的的銀行帳號和密碼。 值得引起研究人員注意的是,我們在測試時所使用的這個銀行Android客戶端其實已經考慮到了截圖和螢幕錄製這類攻擊,並在其設定選單中提供了“允許截圖”這一選項供使用者選擇,只要使用者取消該選項,截圖或錄製便無法成功進行。參見下圖。但是,被測試的銀行客戶端和很多銀行客戶端一樣,選項預設是勾選狀態,且沒有任何明顯的提示資訊提示使用者勾選該選項存在的潛在風險,因此一般的使用者根本沒有注意到這個功能。我們的攻擊實驗假定使用者沒有取消該選項。

當然,利用此漏洞的木馬還可以輕而易舉地獲取包括QQ、微信和各類銀行軟體等任何想要監控的軟體的使用者名稱和密碼,以及各種介面的操作情況。

二、 如何防範

(一) 給開發者的建議

在涉及使用者隱私的Acitivity中(例如登入,支付等其他輸入敏感資訊的介面中)增加WindowManager.LayoutParams.FLAG_SECURE屬性,該屬效能防止螢幕被截圖和錄製。

(二) 給手機使用者的建議

1) 及時更新手機作業系統和應用程式,增強安全性;

2) 檢查手機銀行是否有類似“允許截圖”的選項,在沒有必要的情況下取消該選;

3) 在登入或轉賬過程中注意突然彈出的提示框,仔細閱讀提示內容,上下滑動提示資訊,確保瞭解提示框的真實意圖。

0x03 影響範圍及威脅評估


一、 主要威脅範圍

金錢利益是移動端黑產的驅動力。對於攻擊者來說,使用者手機上能夠產生金錢利益的資訊主要來自直接的金錢賬戶資訊竊取與隱私資訊倒賣。由於該漏洞的功能特性使得攻擊者透過錄制使用者螢幕竊取使用者敏感資訊基本上沒有技術門檻,所以,使用者手機上有關網路金融、移動支付、電商平臺、社交軟體及其他一切隱私資訊幾乎完全可處於攻擊者的監控之下。

而從受影響的系統來看,由於Android 5.0以下版本沒有提供螢幕錄製介面,所以,該漏洞僅影響Android 5.0及以上版本系統。

二、 Android平臺應用受威脅概況評估

根據360網際網路安全中心資料顯示,Android平臺應用軟體中預設開啟禁止截圖(錄屏)功能的約佔0.1%,即大約99.9%的Android軟體都沒有抵禦這種威脅的能力。

三、 銀行類應用受威脅情況評估

統計國內234款手機銀行、信用卡Android客戶端軟體,其中只有9款預設開啟禁止截圖屬性,即這234款銀行類應用中只有約3.8%能夠抵禦這種威脅,餘下96.2%遇到這種威脅時均無法保證使用者賬戶資訊的安全性。

四、 主流社交軟體受威脅情況評估

社交軟體是手機使用者最重要的工具軟體之一,特別是在融入了各種金融相關的功能之後,其安全性變得尤為重要。我們針對國內主要社交軟體進行分析,包括微信、QQ和微博等多款社交軟體進行了檢測,結果發現,這些社交引用無一不將使用者資訊暴露在這種威脅之下。

表2 主流社交軟體截圖屬性分析

五、 電商及支付類應用受威脅情況評估

電商及支付類應用直接涉及到使用者的金錢資訊,我們統計了國內16款主流的電商及支付類應用抵禦該威脅的能力,發現沒有一款能夠抵禦這種威脅。

表3 電商及支付類應用截圖屬性分析

0x04 漏洞成因分析及補丁


一、 漏洞成因分析

該漏洞實際上是由於Google沒有制定合理的Android應用名稱規範導致,綜合表現為如下兩點:

1) 沒有規範應用名稱長度,使得應用名稱可為任意長度;

2) 沒有規範應用名稱字符集,如應用名稱可包含換行符和製表符。

二、 漏洞提交及補丁

1) 2015年8月15日,360網際網路安全中心向Google提交該漏洞;

2) 2015年8月19日Google確認漏洞存在;

3) 2015年9月3日分配CVE-ID;

4) 2015年10月7日,360網際網路安全中心及漏洞發現者李平獲Google公開致謝;

5) 2015年10月9日,Google公佈漏洞補丁,補丁地址:https://android.googlesource.com/platform/frameworks/base/+/b3145760db5d58a107fd1ffd8eeec67d983d45f3

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章