Stagefright 漏洞除多媒體簡訊之外還有其他攻擊方式
稍早Zimperium zLabs 揭露了一個讓駭客經由簡單的多媒體簡訊就能在裝置上安裝惡意程式的 Android 漏洞。由於其潛在的攻擊風險,這個稱為「Stagefright」(怯場) 的漏洞目前已獲得相當大的關注。例如,Stagefright 可讓駭客發送一個多媒體簡訊到某個手機,就能在使用者不知情的狀況下偷偷安裝一個間諜程式。請參考:影響九成以上 Android手機嚴重漏洞,只要一通特製多媒體簡訊(MMS),就可造成手機全面癱瘓!
從 Android 4.0.1 至 5.1.1 的所有版本都包含此漏洞,等於今日使用中的 Android 裝置有 94.1% 都受到影響。
除了 Zimperium zLabs 之外,趨勢科技也獨力發掘了這項漏洞,以下說明這項漏洞的進一步詳細內容。
漏洞分析
如同我們先前發現的 Android 漏洞,此漏洞同樣出現在媒體伺服器 (mediaserver ) 元件,這是一個負責播放多媒體檔案的元件。
包含此漏洞的 mediaserver 無法正常處理損毀的 MP4 檔案。因此,當 mediaserver 在播放一個損毀的 MP4 檔案時,會造成 Heap 記憶體溢位,導致 Heap 記憶體中的資料遭到覆蓋。駭客可利用這點來執行任意程式碼,進而下載一個惡意應用程式到裝置上。
導致此漏洞的原因是當媒體伺服器在解析已損毀的 MP4 檔案時會發生整數溢位的錯誤,導致緩衝區以外的記憶體內容遭到覆寫。更確切一點,這是因為 mediaserver 在解析含有 tx3g 旗標的資料時所發生的錯誤,這些通常是提供字幕的資料。
以下是 frameworks/av/media/libstagefright/MPEG4Extractor.cpp 當中有問題的程式碼:
1890 case FOURCC(‘t’, ‘x’, ‘3’, ‘g’):
1891 {
1892 uint32_t type;
1893 const void *data;
1894 size_t size = 0;
1895 if (!mLastTrack->meta->findData(
1896 kKeyTextFormatData, &type, &data, &size)) {
1897 size = 0;
1898 }
1899 //For example,fist time chunk_size == 0x100000,second time chunk_size == 0xFFF00001.Then 0x100000 + 0xFFF00001 = 1, allocate 1 byte indeed.
1900 uint8_t *buffer = new (std::nothrow) uint8_t[size + chunk_size];
1901 if (buffer == NULL) {
1902 return ERROR_MALFORMED;
1903 }
1904
1905 if (size > 0) {
1906 memcpy(buffer, data, size);//Still writes 0x100000 bytes in 1 byte buffer
1907 }
1908
1909 if ((size_t)(mDataSource->readAt(*offset, buffer + size, chunk_size))
1910 < chunk_size) {
1911 delete[] buffer;
1912 buffer = NULL;
1913
1914 // advance read pointer so we don’t end up reading this again
1915 *offset += chunk_size;
1916 return ERROR_IO;
1917 }
1918
1919 mLastTrack->meta->setData(
1920 kKeyTextFormatData, 0, buffer, size + chunk_size);
1921
1922 delete[] buffer;
1923
1924 *offset += chunk_size;
1925 break;
1926 }
概念驗證示範
趨勢科技測試了三種 mediaserver 可能遭到攻擊的情境。我們利用「adb shell top | grep mediaserver 」這道指令來對其執行程序下命令。我們可以看到 mediaserver 的 PID (Process Identification Number,執行程序識別碼) 發生改變,這表示該執行程序已經當掉然後又重新啟動。
情境 1:從應用程式發動攻擊
此處我們示範如何從一個應用程式來攻擊這個漏洞。我們特製的 MP4 檔案會造成 mediaserver 的 Heap 記憶體遭到損毀,也就是「遭到駭入」。此處我們只是讓程式當掉而已,但事實上駭客可以讓一段精心製作的資料填入 Heap 記憶體中,進而掌控程式的執行權。
圖 1:mediaserver 當掉時系統產生的除錯資料。
我們將同一個損毀的 MP4 檔案 (檔名 mp4.mp4) 內嵌至一個 HTML 檔案當中 (如下所示),然後將 HTML 檔案上傳至網站伺服器。當使用 Android 5.1.1 內建的 WebView 來檢視網站時 (如同 Twitter App 的作法),就會發生與情境 1 當中相同的情況。
圖 2:內嵌 MP4 檔案的 HTML 程式碼。
除此之外,即使行動版的 Chrome 瀏覽器已停用了 <video> 標籤內嵌影片的預載和自動播放功能,但這個損毀的檔案還是造成了 mediaserver 的 Heap 記憶體溢位。所以,這項限制似乎沒有發生作用。
情境 3:透過多媒體簡訊發動攻擊
這是最令人關心的一種攻擊情境。我們可以將這個 MP4 檔案隨附在多媒體簡訊當中,然後傳送至受害者的手機。我們使用了一台採用 Android 5.1.1 的 Nexus 6 手機來進行測試,mediaserver 在接收到這個多媒體簡訊時連續當了兩次。由於這種攻擊方式完全不需使用者操作,因此特別危險。駭客只要將檔案發給含有漏洞的目標裝置,就能攻擊得逞。
圖 3:將損毀的 MP4 檔案隨附在多媒體簡訊當中。
這個漏洞的威力很驚人,因為其主動權完全掌握在駭客手中,駭客可隨時發動或停止攻擊。在 Android 系統中,媒體伺服器 (mediaserver) 負責處理所有多媒體相關的工作,例如:開啟和讀取 MP4 檔案、MPEG4 串流的解碼或編碼、拍照、錄音/錄影/螢幕擷取、讀/寫 SD 記憶卡上的圖片和影片等等。駭客可取得與 mediaserver 相同的權限來執行其惡意程式。
面對這項威脅,使用者能做的相對有限。使用者甚至無法預先「偵測」這項威脅,因為一開始收到的多媒體簡訊看來並無任何問題。目前使用者能做的大概只有關閉自動播放多媒體簡訊的功能,這樣一來,使用者必須手動播放多媒體簡訊中的影片,歹徒的攻擊才會得逞。
目前 Google 已經釋出修補程式,但何時會到使用者手中,還要看手機廠商的腳步而定。此外,一些客製化的 Android 版本若同樣是使用原本的 mediaserver,那就同樣存在著風險。我們將持續監控此漏洞是否出現新的威脅。
安裝一套像安全趨勢科技「安全達人」免費行動防護App( Android / iOS )的資安軟體,也可以讓您多一層保護來防止這類威脅。
揭露時間表
我們已向 Google 通報了這項漏洞,以下是我們揭露過程的細節:
- 5 月 19 日:向 Android Security Team (資安團隊) 通報此漏洞並提供概念驗證攻擊程式碼。
- 5 月 22 日:Android Security Team 將它編號為:ANDROID-21336907,並歸為高嚴重性漏洞。
- 5 月 26 日:Android Security Team 為該問題指定漏洞編號:CVE-2015-3824。
- 7 月 28 日:Android Security Team 確認已經釋出修補程式,並與趨勢科技確認揭露時間表。
原文出處:MMS Not the Only Attack Vector for “Stagefright” | 作者:Wish Wu (行動裝置威脅回應工程師)
▍想了解更多關於網路安全的秘訣和建議,只要到趨勢科技粉絲網頁 或下面的按鈕按讚 ▍
《提醒》將滑鼠游標移動到粉絲頁右上方的「已說讚」欄位,勾選「搶先看」選項,最新貼文就會優先顯示在動態消息頂端,讓你不會錯過任何更新。
【推薦】防毒軟體大評比: 惡意程式防禦力 PC- cillin雲端版榮獲第一名!
【推薦】PC-cillin 雲端版 榮獲世界著名防毒評鑑機構高度評比
趨勢科技PC-cillin雲端版 ,榮獲 AV-TEST 「最佳防護」獎,領先28 款家用資安產品防毒軟體 ,可跨平台同時支援安裝於Windows、Mac電腦及Android、iOS 智慧型手機與平板電腦,採用全球獨家趨勢科技「主動式雲端截毒技術」,以領先業界平均 50 倍的速度防禦惡意威脅!即刻免費下載