当前位置 - 股票行情交易網 - 股票交易 - 如何通過語言提供的能力來防範Log4j之類的漏洞?

如何通過語言提供的能力來防範Log4j之類的漏洞?

功能能力安全(capability-safe)的語言(如Rust)可以最大限度地減少甚至防止Log4j漏洞發生。

在本文中討論圍繞Log4j漏洞的兩個問題:

。。。

log4j維護人員考慮實施引入導致漏洞的 JNDI 功能時,接下來可能會發生壹些事情:

這三種可能性都比實際發生的情況要好,實際情況是: log4j突然獲得了訪問網絡的能力,但其 API 並未更改以反映這壹點,因此用戶沒有註意到

因此,功能安全的語言本可以節省或至少減輕這壹點。

所以未來的語言設計師,請考慮讓妳的語言功能能力安全。

Rust基於能力的安全

操作系統有壹個資源句柄或文件描述符的概念,它們是可以在程序內部和有時在程序之間傳遞的值,代表對外部資源的訪問。程序通常具有 環境權限,只需提供其名稱或地址即可請求任何文件或網絡句柄:

可能有訪問控制列表、命名空間、防火墻或虛擬化機制來管理哪些資源可以實際訪問,但這些通常是粗粒度的,並在應用程序之外進行配置。

基於能力的安全尋求避免環境權威,使沙箱更細粒度和可組合。要打開文件,需要壹個Dir,代表它所在的打開目錄:

嘗試訪問未包含在目錄中的路徑:

返回PermissionDenied錯誤。

這允許應用程序邏輯配置自己的訪問,而無需更改整個主機進程的行為、設置單獨的主機進程或需要外部配置。

cap-std是Rust 標準庫的基於能力的版本,cap-std項目圍繞同名的cap-stdcrate 進行組織,並開發了壹些庫以簡化基於功能能力的代碼的編寫,包括:

Cap-std 具有針對CWE-22 的保護功能,即“對受限目錄的路徑名的不當限制(‘路徑遍歷’)”,它在2021 年 CWE 前 25 名最危險的軟件弱點中排名第 8 。它還可用於防止不受信任的輸入誘導程序在 Linux 上打開“/proc/self/mem”。

如何通過語言本身提供的能力約束防範Log4j之類的漏洞?