
用戶在蘋果電腦上點擊了一條連結,在他眼裡,一切都那麼平靜。然而他並不知道,隨著點擊的輕響,無數數據在電腦中奔湧激盪。在秒針走動 5 次的時間內,蘋果公司頂尖程式設計師們藉由代碼構建的層層防禦體系毀滅殆盡,賽博世界的上帝悄然易主。電光火石間,駭客奪取了電腦的一切權限。
這件事,真實地發生在「駭客奧運會」──Pwn2Own 2016 上。做出這種華麗攻擊的,正是來自騰訊科恩實驗室的駭客們。令人髮指的是,他們還使用了另一種姿勢,再次讓 macOS 的世界失守崩潰。
正是這種震懾人心的駭客美學,幫助他們成功獲得了「世界破解大師」的稱號。
從今年 3 月開始,全世界都在等待這群「大師」揭曉那次神秘攻擊的方法。5 個月過去了,科恩實驗室的駭客們終於決定還原這次攻擊的技術細節。他們選擇的舞台,是駭客界的最高盛會──BlackHat USA。

▲ 由左至右分別是:Gross、Flanker(何淇丹)、傅裕斌、陳良。
隱密入口──關於那次攻擊的驚人真相
陳良、Flanker(何淇丹)、傅裕斌、Gross,正是當時破解 macOS 的主力駭客。
他們親口講述的真相,幾乎超出所有人的想像:兩次完美的進攻,全部擊潰了蘋果的圖形渲染系統。這種攻擊方法,在世界上只出現過一次。而那一次攻擊的導演,仍然是他們。
這是一個隱密的入口。
陳良告訴雷鋒網,
遠端攻擊是所有攻擊中難度較大的。而駭客進行遠端攻擊的首選正是瀏覽器 Safari。這兩次成功的攻擊,利用了兩套「Safari + 圖形渲染」漏洞。
對於這種攻擊的發生,蘋果也負有一定的責任。 Flanker 說,「在舊的蘋果系統中,一般的應用是無權調用 GPU 和圖形渲染系統的,所有的圖形渲染都必須透過『窗口管家』實現;而在新的蘋果系統中,為了保證用戶體驗的順暢,蘋果開放了普通應用調用 GPU 的權限。」
這正是一切災難的邏輯起源。

▲ 中國駭客團隊展示 macOS 圖形渲染系統工作邏輯示意圖。
畸形的數據
簡單科普一下:如果一個 App 想要繪製圖形,需要提供一些邏輯坐標,這些坐標透過內核驅動器傳遞給 GPU 繪製,進而轉換成屋裡坐標,出現在顯示器上。
對於已經透過漏洞「綁架」Safari 的陳良一眾,可以偽造 Safari 的命令,向圖形繪製系統發出各種畸形的數據。
例如一個非常非常長的矩形,例如一個邊長為負數的矩形。
對於圖像渲染系統來說,無論 Safari 的命令有多麼不可靠,他都無法「抗旨不尊」。於是,可憐的渲染系統手握小皮鞭,逼迫 GPU 畫出一個「邊長為負數的矩形」。於是 GPU 方了,它的世界崩潰了,各種沒頭沒腦的數據被寫進記憶體,駭客的嘴角露出一絲笑容。
然而,這還遠遠不夠。

▲ 記憶體溢出示意圖。
精心構建的數據陷阱
讓系統完全崩潰顯然不是駭客的目的,他們的目的是精準地控制這種崩潰──讓 GPU 的「哀號」組成一段「動人的交響曲」。
為了達到這個目的,他們面對「3 座大山」。
- 他們要利用這個微小的創口,用手術刀精準地在記憶體裡排列出他們想要的代碼。
- 即使這麼艱難,但蘋果的代碼還是「閉源」的,他們必須透過逆向工程「猜」出蘋果的代碼邏輯。
- 雪上加霜的是,封閉的蘋果系統在安全防護上之決絕遠超過 Windows。
事實上:他們每一個微小的動作,都會造成大面積的影響。
舉例來說,
這就像駕駛一部堆高機穿針引線,連續完成 100 次;
這就像戴上墨鏡玩遊戲,連續破關不浪費一滴血;
這就像同時交往 100 個女朋友,還讓她們感覺不到彼此的存在。
總之,這件事情,比你想像的更難。

▲ 現場展示對 macOS 的破解過程。
Flanker 告訴雷鋒網:
比較簡單的漏洞,可以允許駭客在任意地址寫任意值。這種情況就很容易。但是和圖形相關的漏洞通常是依靠 GPU 執行浮點運算。所以我們必須滿足它的性質──浮點數要對應很大的整形,所以必須在精確的記憶體位置布置極其特別的數據。
從技術上來說,他們需要找到一片穩定的記憶體,然後在極其短暫的時間內,把自己精心構建的代碼鋪進去。就像在飛馳的列車旁,精準地跳上一個指定的車門。然而,上帝在大多數時候並不那麼給力。
這個漏洞處於比較活躍喧囂的記憶體區,利用時一旦內存收到干擾,就會失敗。所以我們發明了一套「記憶體風水論」。利用記憶體分配某些「先進先出」的特性,構造了一些「空洞」,然後想辦法讓我們的代碼正好落入這片「空洞」之中。
Flanker 這樣解釋。
以上的技術路徑,是兩套破解方案中較為複雜的一套,被他們稱為「內核態漏洞方案」,而另一套「用戶態漏洞方案」雖然理論相近,但利用方案相對簡潔。

▲ 現場展示影片中,攻擊者獲得系統最高權限。
永不消逝的噪音 vs. 永不磨滅的駭客精神
正如前文所言,這種破解相當於「在飛馳的列車旁,精準地跳上一個指定的車門」。然而,Flanker 和傅裕斌告訴雷鋒網一個殘酷的事實:存在一定的可能性,當你準確地跳向車門時,車門卻是關閉的。
這種在電影《全面啟動》最底層將入侵者扼殺掉的力量,仍然是來自記憶體的「永不消逝的噪音」。 Flanker 說,「用戶態漏洞方案」有 15% 至 20% 的失敗機率,而「內核態漏洞方案」雖然失敗機率極低,但是仍然難保 100% 成功率。
這些來自賽博實際的的噪聲,是他們盡了最大的努力,仍然不能控制的最低值。
在 3 月的 Pwn2Own 大賽上,嚴苛的賽制規定,一個團隊只能在 15 分鐘的時間內最多進行 3 次嘗試。也就是說,雖然概率很小,但是他們仍然有失敗的可能。
然而這一次,一直為他們出難題的上帝終於眷顧了他們,兩種方案全部一次攻擊成功,分別花費 5 秒和 1 分鐘。
上帝眷顧他們的理由或許很多,但是有一條不容置疑,那就是這群中國駭客身上流淌著的,永不磨滅的駭客精神。
(本文由 雷鋒網 授權轉載)