使用者在蘋果電腦上點選了一條連結,在他眼裡,一切都那麼平靜。然而他并不知道,随着點選的輕響,無數資料在電腦中奔湧激蕩。在秒針跳動五次的時間内,蘋果公司頂尖程式員們藉由代碼建構的層層防禦體系毀滅殆盡,賽博世界的上帝悄然易主。電光火石間,黑客奪取了電腦的一切權限。
這件事,真實地發生在“黑客奧運會”——pwn2own 2016 上。做出這種華麗攻擊的,正是來自騰訊科恩實驗室的黑客們。令人發指的是,他們還使用了另一種姿勢,再次讓 macos 的世界失守崩潰。
正是這種震懾人心的黑客美學,幫助他們成功獲得了“世界破解大師”的稱号。
從今年3月開始,全世界都在等待這群“大師”揭秘那次神秘攻擊的方法。五個月過去了,科恩實驗室的黑客們終于決定還原這次攻擊的技術細節。他們選擇的舞台,是黑客界的最高盛會——blackhat usa。
【從畫左到畫右分别是:gross,flanker(何淇丹)、傅裕斌、陳良】
陳良、flanker(何淇丹)、傅裕斌、gross,正是當時破解 macos 的主力黑客。
他們親口講述的真相,幾乎超出所有人的想象:兩次完美的進攻,全部擊潰了蘋果的圖形渲染系統。這種攻擊方法,在世界上隻出現過一次。而那一次攻擊的導演,仍然是他們。
這是一個隐秘的入口。
陳良告訴雷鋒網,
遠端攻擊是所有攻擊中難度較大的。而黑客進行遠端攻擊的首選正是浏覽器 safari。這兩次成功的攻擊,利用了兩套“safari+圖形渲染”漏洞。
對于這種攻擊的發生,蘋果也負有一定的責任。flanker 說,“在舊的蘋果系統中,一般的應用是無權調用 gpu 和圖形渲染系統的,所有的圖形渲染都必須通過“視窗管家”實作;而在新的蘋果系統中,為了保證使用者體驗的順暢,蘋果開放了普通應用調用 gpu 的權限。”
這正是一切災難的邏輯起源。
【macos 圖形渲染系統工作邏輯示意】
簡單科普一下:如果一個 app 想要繪制圖形,需要提供一些邏輯坐标,這些坐标通過核心驅動器傳遞給 gpu 做繪制,進而轉換成實體坐标,出現在顯示器上。
對于已經通過漏洞“綁架” safari 的陳良一衆,可以僞造 safari 的“矯诏”,向圖形繪制系統發出各種畸形的資料。
例如一個非常非常長的矩形,例如一個邊長為負數的矩形。
對于圖像渲染系統來說,無論 safari 的指令有多麼不靠譜,他都無法“抗旨不尊”。于是,可憐的渲染系統手握小皮鞭,逼迫 gpu 畫出一個“邊長為負數的矩形”。于是 gpu 方了,它的世界崩潰了,各種不着四六的資料被寫進記憶體,黑客的嘴角露出一絲笑容。
然而,這還遠遠不夠。
【記憶體溢出示意】
讓系統完全崩潰顯然不是黑客的目的,他們的目的是精準地控制這種崩潰——讓gpu的“哀嚎”組成一段“動人的交響曲”。
為了達到這個目的,他們面對“三座大山”。
1、他們要利用這個微小的創口,用手術刀精準地在記憶體裡排列出他們想要的代碼。 2、即便這麼艱難,但蘋果的代碼還是“閉源”的,他們必須通過逆向工程“猜”出蘋果的代碼邏輯。 3、雪上加霜的是,封閉的蘋果系統在安全防護上之決絕遠超 windows。
事實上:他們每一個微小的動作,都會造成大面積的影響。
舉例來說,
這就像駕駛一部叉車穿針引線,連續完成一百次; 這就像帶上墨鏡打遊戲,連續通關一絲血都不費; 這就像同時交往一百個女朋友,還讓她們感覺不到彼此的存在。
總之,這件事情,比你的想象更難。
【現場展示對 macos 的破解過程】
flanker 告訴雷鋒網(公衆号:雷鋒網):
比較簡單的漏洞,可以允許黑客在任意位址寫任意值。這種情況就很容易。但是和圖形相關的漏洞通常是依靠 gpu 執行浮點運算。是以我們必須滿足它的性質——浮點數要對應很大的整形,是以必須在精确的記憶體位置布置極其特别的資料。
從技術上來說,他們需要找到一片穩定的記憶體,然後再極其短暫的時間内,把自己精心建構的代碼鋪進去。就像在飛馳的列車旁,精準地跳上一個指定的車門。然而,上帝在大多數時候并不那麼給力。
這個漏洞處于比較活躍喧嚣的記憶體區,利用時一旦記憶體收到幹擾,就會失敗。是以我們發明了一套“記憶體風水論”。利用記憶體配置設定某些“先進先出”的特性,構造了一些“空洞”,然後想辦法讓我們的代碼正好落入這片“空洞”之中。
flanker 解釋道。
以上的技術路徑,是兩套破解方案中較為複雜的一套,被他們稱為“核心态漏洞方案”,而另一套“使用者态漏洞方案”雖然理論相近,但利用方案相對簡潔。
【現場示範視訊中,攻擊者獲得系統最高權限】
正如前文所言,這種破解相當于“在飛馳的列車旁,精準地跳上一個指定的車門”。然而,flanker 和 傅裕斌 告訴雷鋒網一個殘酷的事實:存在一定的可能性,當你準确地跳向車門時,車門卻是關閉的。
這種在盜夢空間最底層将入侵者扼殺掉的力量,仍然是來自記憶體的“永不消逝的噪音”。flanker 說,“使用者态漏洞方案”有15%-20%的失敗幾率,而“核心态漏洞方案”雖然失敗幾率極低,但是仍然難保 100% 成功率。
這些來自賽博實際的的噪聲,是他們盡了最大的努力,仍然不能控制的最低值。
在3月的 pwn2own 大賽上,嚴苛的賽制規定,一個團隊隻能在15分鐘的時間内最多進行3次嘗試。也就是說,雖然機率很小,但是他們仍然有失敗的可能。
然而這一次,一直為他們出難題的上帝終于眷顧了他們,兩種方案全部一次攻擊成功,分别用時 5 秒和 1 分鐘。
上帝眷顧他們的理由或許很多,
但是有一條不容置疑,
那就是這群中國黑客身上流淌着的,永不磨滅的黑客精神。