close

前兩天,世超看到一條新聞。

事兒說大也不大,總的來說就是你的安卓手機,可能成了一個遠程竊聽器。

只要一首歌的功夫,黑客就能黑掉一台安卓手機。

你剛按下播放鍵,對方就已經獲得了你的攝像頭和麥克風權限。

不僅能竊聽你的通話內容,甚至連你周圍的聲音都能監聽到。。

這事波及範圍還不小,目前全球可能有 37%的手機,都暴露在這樣的危險之下。

是不是突然有點不敢呼吸了,先別慌,聽世超來解釋一下到底發生了啥。

前兩天,一家以色列的 IT 公司 CHECK POINT,發現高通和聯發科都在使用的一種開源音樂編碼格式,存在一個高危漏洞。

這個漏洞可怕的地方在於,黑客可以通過一段錯誤格式的音頻,實現遠程代碼執行( RCE )。

啥是遠程代碼執行,咱先不管。

問題是依靠這個漏洞,黑客可以在你手機里橫行霸道。不光可以做到開頭說的強制獲取權限,還可以執行惡意軟件或竊取數據。

而這件事真正魔幻的地方在於,倒大霉的安卓這回可能是被蘋果坑了。。

因為高通和聯發科都在用的這個音樂編碼格式,其實是來自蘋果。

一切的糾葛,咱還得從 11 年前的那天說起。

一向喜歡關起門來搞建設的果子哥,在聽歌方面也沒有例外。

2004 年的時候,蘋果弄了一個無損音樂編碼格式 Apple Lossless,又叫做 Apple Lossless Audio Codec(下面簡稱 ALAC ),只允許自家的設備使用。

別看它名字又臭又長,其實就是一種音頻格式,類似於我們最熟悉的 MP3。

只不過,MP3 是有損壓縮,而 ALAC 是無損壓縮,縮小文件大小的同時,還能保證音質。目前使用比較廣泛的無損格式就 FLAC 和 ALAC。

本來如果一直封閉在蘋果生態里,就沒安卓這茬子事了。

問題是, 2011 年的時候,為了普適性(誰能想到,有一天果子哥也會考慮普適性問題),果子哥破天荒在 GitHub 上面開放了源代碼,出了一個開源版 ALAC。

正是這次慷慨開源,很多非蘋果的設備和播放器,都美美用上了無損格式,其中也包括 Windows 播放器。

而這次的主人公高通和聯發科,更是直接將開源版 ALAC 代碼移植到了自己的音頻解碼器里。

然後,扯淡的事情就出現了。。

我們知道 ALAC 有兩個版本。蘋果自己使用的專利版,蘋果一直在不斷更新維護。類似的漏洞,蘋果早就修復了。

而提供給其他廠商的開源版,這 11 年來,蘋果作為開發者從來沒有維護更新過它。

更扯的是,不光蘋果懶得去管這個東西,高通和聯發科也都堅定地奉行「拿來主義」,只拿不修。

世超盲猜高通它們可能心裡在想:

「誰要幫蘋果維護啊,拿來直接用得了。」

ALAC的開源協議為Apache,

所有使用者都可以對項目進行更改▼

所以,高通和聯發科都在使用一套 11 年來從沒有更新過的代碼。

如果高通它們是移植到了相對底層的解碼器中,事情就麻煩了。。只要是使用高通和聯發科芯片的手機,都可能會因為這個漏洞遭到黑客攻擊。

按照這兩個全球最大移動芯片製造商的市場份額來看,2021 年售出的手機里,有三分之二都暴露在危險中。

2020年第二季度與2021年第二季度

全球智能手機AP/SoC出貨量市場份額▼

看到這,你是不是覺得事態相當嚴重,巴不得親自替這些偷懶的廠家上手。

稍安勿躁,還記得世超開頭說的嗎,這事它說大也不大。

這個漏洞帶來的後果確實很嚴重,上百萬台手機都可能被攻擊。不過,check point 在對外公布漏洞之前,已經提前告知了兩家芯片廠商。

目前補丁都已經推送了,咱只要留意一下最近廠商推送的系統更新,安裝好,縫縫補補之後,基本上就沒啥問題。


而且,世超去翻了一下發布的補丁。發現這 BUG 雖然很危險,但實現手法還挺常見的,主要是利用了緩衝區溢出。

世超這裡粗糙地解釋一下,這到底啥玩意。

首先要科普的是,程序是怎麼在系統里跑起來的。

手機里的各個程序要想跑起來,就得向系統要內存來運行,這個大多數人都知道。


分配結束後,一堆程序在各自申請來的內存里跑,井水不犯河水。

這有點像一個施工隊要了個庫房,在裡頭幹活兒的感覺。

但這些程序是咋知道這要來的 「 庫房 」 在哪裡呢?這是因為系統給程序分配內存的時候,給了一個叫做內存地址的玩意兒。

一般來說這些地址是一串十六進制的數字▼

另一個需要科普的概念,是緩衝區。

有的時候,一個程序在運行某些功能時,臨時會需要一些額外的內存,用完就還給系統。

這一部分臨時要來的內存被稱為緩衝區,它們也有相對應的地址,這就好比是在庫房外賣臨時搭了一個棚。

程序運行的時候,需要的庫房(內存)地兒不夠了,它可能會崩潰。

但如果需要的臨時棚(緩衝區)地兒不夠了,它不一定會崩潰,但是這些堆在棚里的傢伙,在棚里幹活的人(代碼)會堆到別的地兒去。

這個情況就是緩衝區溢出。

而溢出的部分,在一些不安全的系統里是不一定會檢測的。

因此即使是惡意代碼,也可以通過溢出偷偷執行。

有的黑客故意要一個小一點的臨時棚,然後規模過大的施工隊進去,那他們就容易跑到別的施工現場去,這些地方可能有很重要的程序在跑。

然後這些施工隊手腳還不太乾淨(惡意代碼),去別的地兒搞破壞,或者偷看一些有的沒的,想辦法傳給黑客。。。

這就是溢出的危險之處。

看完了世超的解釋,你就不難理解,這個事兒聽着挺可怕,實際上原理挺基礎。

也就是說,這並不是很難避免。

人家搭棚子前,你(系統)看看人帶了多大施工隊(檢查緩衝區輸入)來不就行了嗎?

但是,蘋果的這套 ALAC 沒去檢查這件事,同時整整 11 年沒人去維護過這玩意兒。。。

只要我給你塞一段特別大的音頻文件,然後猥瑣地把惡意代碼藏在文件尾端。就能利用溢出,瞞天過海地干點有的沒的。

不過,更多的技術細節 check point 會專門開個會詳細介紹,感興趣的差友可以關注一下。

事情到這算是圓滿解決了,不過世超想在最後來算算總賬。

這事咱們到底該賴誰呢?

差友們可能會有點難理解,其實這事兩邊都沒錯,但都不太厚道。

先講果子哥。按理來說,開源項目丟出來之後,免費給所有人用,維不維護就全看開發者的心情。

但錯就錯在你可是蘋果。

一般蘋果這種體量的公司,項目的使用人數往往比較多,波及範圍廣,公司都會派人員負責維護。

但果子哥直接當起了甩手掌柜,多多少少有點不地道。

而高通和聯發科這邊,又一心只想白嫖,能省一點人力維護就省一點。(畢竟這可是蘋果)

秉持着極簡的態度,能躺着絕不坐着,能坐着絕不站着。

等大鼻涕流進嘴裡知道甩了,漏洞出現知道有問題了。

畢竟就算真的栽跟頭了,還有爆肝的程序員,以及俺們這些隱私泄露得褲衩都不剩的消費者來買單。。

類似的 「白嫖」 開源項目還不少,這次只是小毛病,那下次呢?

撰文:四大 編輯:面線、小鑫鑫

圖片、資料來源:

維基百科、GitHub

https://blog.checkpoint.com/2022/04/21/largest-mobile-chipset-manufacturers-used-vulnerable-audio-decoder-2-3-of-android-users-privacy-around-the-world-were-at-risk/

知乎@a301:淺談緩衝區溢出

如何選擇開源許可證?|阮一峰


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()