<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/9769

            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

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线