在現代軟體開發中,記憶體安全漏洞(如緩衝區溢位、Use-After-Free 等)長期以來是安全威脅的主要來源,據統計約佔安全漏洞的 70%。傳統的解決方案通常依賴於作業系統層級的隔離,例如使用記憶體管理單元(MMU, Memory Management Unit)來區分不同的進程(Process)或虛擬機(VM)。然而,這種粗粒度的隔離在需要高效能通訊時會面臨巨大的挑戰:當兩個隔離的任務需要共享數據時,開發者必須設計複雜的遠端程序呼叫(RPC)框架,涉及數據序列化、多次記憶體拷貝以及昂貴的核心模式切換,導致系統開銷劇增且開發難度提高。
為了打破這個僵局,David Chisnall 在 InfoQ 的分享中介紹了 CHERI(Capability Hardware Enhanced RISC Instructions)架構。CHERI 的核心理念並非創造一種全新的指令集(ISA),而是一種可以整合進現有指令集(如 ARM 或 RISC-V)的擴展技術。它將「指標」從單純的記憶體地址,提升為硬體強制執行的「能力」(Capability),從底層硬體層面解決記憶體安全與細粒度隔離的問題。
核心技術:將指標轉化為能力(Capabilities)
在傳統架構中,指標僅是一個代表記憶體位置的數字,程式可以對其進行任意的整數運算,這也是導致溢位攻擊的根本原因。CHERI 重新定義了指標,將其擴展為包含元數據(Metadata)的能力。一個 CHERI 能力包含三個關鍵部分:地址(Address)、邊界(Bounds)以及權限(Permissions)。
邊界定義了該指標可訪問的記憶體起點與終點,任何超出此範圍的讀寫操作都會直接觸發硬體陷阱(Trap),從而實現空間記憶體安全(Spatial Memory Safety)。權限則定義了該指標能執行的操作(例如僅限讀取或禁止修改指標),且這些權限具有單調性(Monotonicity),即權限只能被縮減而不能被擴展。
為了防止攻擊者偽造能力,CHERI 在物理記憶體中為每個能力字組增加了一個不可由軟體直接修改的標記位(Tag Bit)。如果程式嘗試將一個隨機數字或網路接收的數據當作指標使用,由於其標記位為 0,硬體在解引用時會立即攔截,有效防止了指標注入攻擊。此外,CHERI 引入了封裝(Sealing)機制,允許將能力轉化為不透明的令牌(Opaque Tokens),只有持有特定金鑰的模組才能將其解封,這為實現類型安全(Type-safe)的句柄(Handles)提供了硬體基礎。
解決時間記憶體安全與細粒度隔離
除了空間安全,CHERI 在 CHERIoT(針對微控制器的實現)中還解決了極具挑戰性的時間記憶體安全(Temporal Memory Safety),即防止 Use-After-Free 漏洞。其運作方式是利用影子記憶體(Shadow Memory)記錄每個分配單元的狀態。當物件被釋放(free)時,系統會將對應的影子位標記為已釋放。當硬體加載能力時,會檢查該位,若發現指向已釋放區域,則立即清除標記位,使該指標失效。同時,背景掃描機制會定期清理記憶體中殘留的失效指標,確保記憶體能被安全地回收再利用。
在隔離機制上,CHERI 實現了所謂的「細粒度分區」(Fine-grained Compartmentalization)。傳統隔離依賴頁表切換,而 CHERI 的隔離是基於「可達性」:一個分區能訪問的記憶體,僅限於其暫存器中持有的能力及其可觸及的物件圖(Object Graph)。這使得在同一個地址空間內創建數以萬計的微小沙箱(Sandbox)成為可能,且分區間的數據共享只需傳遞一個能力指標,無需經過核心拷貝,效能提升可達數倍甚至數千倍。
實務意義與部署限制
對於 C/C++ 開發者而言,CHERI 的最大優勢在於其對源碼的低侵入性。實現空間記憶體安全通常僅需要重新編譯(Recompile),無需重寫代碼。例如,在 FreeBSD 的移植案例中,數億行 C/C++ 代碼在無需大規模修改的情況下實現了記憶體安全。若要進一步實現細粒度分區,僅需少量的代碼標註(約 1% 至 3%)來定義分區接口。
然而,這種硬體級的改進也帶來了特定的限制與成本。首先是記憶體開銷,由於指標大小增加(例如從 64 位元變為 128 位元),可能會增加快取(Cache)壓力並提高記憶體占用。其次,這需要對 CPU 硬體進行重新設計,無法在現有的通用處理器上通過純軟體方式實現。
儘管如此,CHERI 提供了一種全新的安全審計模型。由於分區間的所有交互必須通過明確的導入表(Import Table)定義,安全審查人員無需閱讀所有源碼,只需審核分區圖(Compartment Graph)和權限策略,即可確定哪些模組有權訪問網路或敏感數據。這種從硬體底層出發的設計,將記憶體安全從「開發者的自律」轉化為「硬體的強制」,為構建高可靠的嵌入式系統與雲端基礎設施提供了新的路徑。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。