微軟推出 CHERIoT,這是一種提高 C 程式碼安全性的硬體解決方案

微軟發現了與 CHERIoT(物聯網 RISC-V 功能硬體擴充)專案相關的進展,旨在阻止 C 和 C++ 現有程式碼中的安全性問題。 CHERIoT 提供的解決方案可讓您保護現有的 C/C++ 程式碼庫,而無需重新編寫它們。 保護是透過使用修改後的編譯器來實現的,該編譯器使用處理器提供的特殊擴展處理器指令集(ISA),並在硬體層級監視記憶體存取、檢查指標工作的正確性並確保程式碼區塊的隔離。

創建該專案時考慮到了這樣一個事實:C 語言的低階性質在處理記憶體時會成為錯誤來源,從而導致緩衝區溢位、存取已釋放記憶體、指標取消引用或雙重釋放等問題。 實踐表明,即使像谷歌和微軟這樣擁有嚴格變更審查政策並使用現代開發方法和靜態分析工具的大公司,也不能保證在處理內存時不出現錯誤(例如,微軟大約70%的漏洞)和Google 都是由不安全的記憶體處理引起的)。

這個問題可以透過使用保證記憶體安全操作的程式語言或帶有額外檢查的綁定來解決,例如,透過使用像MiraclePtr (raw_ptr) 這樣的普通指標來解決,它會對存取已釋放的記憶體區域執行額外的檢查。 但這樣的方法更適合新程式碼,並且重新編寫現有的 C/C++ 專案是相當有問題的,特別是如果它們被設計為在資源受限的環境中運行,例如嵌入式系統和物聯網設備。

CHERIoT硬體組件被設計為基於RISC-V架構的微控制器,實現受保護的CHERI(Capability Hardware Extension to RISC-V)處理器架構,提供基於“能力”(每次讀寫)的受控內存訪問模型對記憶體的操作已被授權)。 基於CHERIoT提供的指令集架構(ISA),建構了軟體模型,確保單一物件層級記憶體操作的安全性,提供對已釋放記憶體的存取保護,並實現輕量級記憶體存取隔離系統。 指定的軟體保護模型直接體現在C/C++語言模型中,這使得它可以用來保護現有的應用程式(只需在支援ISA CHERIoT的裝置上重新編譯和運行)。

建議的解決方案可讓您阻止導致物件超出記憶體邊界的錯誤,不允許指標替換(所有指標必須從現有指標產生),並在釋放後監視記憶體存取(任何使用不正確的記憶體存取)指標或引用已釋放物件的指標會導致拋出異常)。 例如,使用 CHERIoT 可讓您在處理不可信資料的元件中實現自動邊界檢查、記憶體生命週期追蹤和指標完整性強制,而無需更改任何程式碼。

此專案包括擴展的 CHERIoT 指令集架構的規範、支援 CHERIoT ISA 的 32 位元 RISC-V CPU 的參考實作以及修改後的 LLVM 工具包。 CPU 原型圖和 Verilog 中的硬體模組描述在 Apache 2.0 授權下分發。 lowRISC 專案中的 Ibex 核心被用作 CPU 的基礎。 CHERIoT ISA程式碼模型是用Sail語言定義的,並在BSD許可證下獲得許可。

此外,還提出了即時作業系統 CHERIoT RTOS 的原型,即使在具有 256 MB RAM 的嵌入式系統上,它也能夠提供隔離隔間的能力。 CHERIoT RTOS 程式碼是用 C++ 編寫的,並根據 MIT 授權分發。 作業系統的基本元件,如引導程式、調度程式和記憶體分配系統,都是以分區的形式設計的。

CHERIoT RTOS 中的隔間是程式碼和全域變數的隔離組合,類似於共用程式庫,但與後者不同的是,它可以更改其狀態(可變)並在單獨的安全上下文中運行。 外部的任何程式碼都不能將控制權轉移到隔間中的程式碼並存取對象,除非存取專門定義的入口點並使用指向呼叫另一個隔間時明確傳遞的物件的指針。 保證隔間中的程式碼和全域物件的完整性和機密性。

來源: opennet.ru

添加評論