以字之名: 藏於暗處的伏擊

以字之名: 藏於暗處的伏擊

你知道字體業能作為駭客攻擊的武器嗎?這其實不難理解「駭客攻擊」本質上就是透過非正規手段,破壞、竊取資訊,而手段可以非常多元,今天的案例就是以字體文件為載體。

伏擊的載體:Multi-Master Type 1

在 2020 年,一個被編號為 CVE-2020-0938 的漏洞, 它藏在 Windows 的 Adobe Type Manager (ATM) 元件內裡,這是個用來解析 Adobe Type 1 字型的元件。

它處理的的並不是我們日常熟悉的 .ttf、.oft 而是一個更古老的技術:Multi-Master Type 1,該檔案被拆分成 .pfb、.pfm 兩部分(The Final Reckoning 既視感 xD),需要同時擁有才可正確顯示。

簡單介紹 Multi-Master,簡單來說就是「可變字型」的雛形,讓設計師能在細與粗、窄與寬之間插值,生成無限可能。然而超前部署(以當時帶來說)的技術,卻也為惡意者留下了縫隙。

目前該技術也要棄用,不過在 Windows 10 上還是有相關套件。

Myriad MM 可以說是第一款利用該技術問世的字體。

所以破口在哪?

漏洞的關鍵在於一個參數「num_master」。 它用來記錄字型中有多少個母版。當時設計人員預設,這個數字應該在合理範圍內不超過 15 個,因此導致一旦超出就會出現錯誤,加上又沒有完善的錯誤處理機制。

ATM 開了一塊固定大小的記憶體陣列,預期 num_master ≤ 15,然而攻擊者可以在字型檔裡寫個 50、100,只要超過就會錯誤。

資料一筆筆寫進去,超出邊界,往上覆蓋堆疊上的其他數據,最後連 return address 也被覆寫。

當函式執行 return,程式流程就不再回到應有的位置,而是跳到攻擊者指定的地址,並執行惡意程式碼。

攻擊場景:你我的日常

該漏洞有個最危險的地方,因為該字型格式主要用於印刷場景,因此可以夾帶在 PDF、CorelDRAW......等常見排印軟體文件中。甚至 Windows Explorer 的預覽窗格,單純瀏覽資料夾,就可能觸發解析。

如何防禦

對於開發設計面——「靈芝的好壞在多醣體,程式的好壞在錯誤處理」,所有功能要預想到可能錯誤情況事先加以應對,當然如果用 Python、Ruby、Rust(非戰鬥人員迅速撤離)...等程式語言,也可避免掉部分記憶體指針問題。

使用者面——首先不下載、開啟、使用來路不明的檔案、字體文件,這是最重要的。如果必要,要使用虛擬環境開啟,或是尋求 IT 部門人員協助。以及定期更新系統。

漏洞現況現況

微軟在 2020 年 4 月的「Patch Tuesday」資安更新包,已提出修復方式。 在此之前,官方建議用戶暫時停用 ATMFD.DLL 相關套件。

不過根據網路上的資料,沒有查到有大規模攻擊事件。目前的 Windows 11 也已經移除相關套件,但是部分 win32 API 還是有顯示支援 .pfb、.pfm 文件,尚未確定在 windows 11 中會有何影響。

https://l.twinty.pe/DSOV1b 分享文章
CC BY-NC 4.0
此授權條款要求再使用者必須對創作者進行署名。它允許再使用者以任何媒介或格式,出於非商業目的,分享、重混、改編及依原作品進行創作。唯重製後之作