Google Project Zero 團隊的研究人員發布了一種利用核心 tty 子系統中 TIOCSPGRP ioctl 處理程序實作中的漏洞 (CVE-2020-29661) 的方法。 Linux並詳細研究了可以阻止此類漏洞的保護機制。
導致該問題的漏洞已在核心中修復。 Linux 這個問題最早出現在去年12月3日。該問題出現在5.9.13版本之前的核心中,但大多數發行版已在去年發布的核心軟體包更新中修復了該問題(DebianRHEL、SUSE、 UbuntuFedora、Arch)。同時,在 TIOCGSID ioctl 呼叫的實作中也發現了類似的漏洞(CVE-2020-29660),但該漏洞也已被廣泛修復。
這個問題是由鎖定設定錯誤引起的,導致 drivers/tty/tty_jobctrl.c 中出現競爭條件,攻擊者成功利用該競爭條件創建了釋放後使用漏洞,攻擊者可以透過操縱 TIOCSPGRP ioct 呼叫從用戶空間利用該漏洞。目前已示範了一個可用於提權的有效漏洞程式。 Debian 10,核心版本為 4.19.0-13-amd64。
同時,在已發表的文章中,重點不是創建有效漏洞利用的技術,而是內核中存在哪些工具可以防止此類漏洞。 結論並不令人鼓舞,在堆中對內存進行分段和釋放後控制內存訪問等方法在實踐中沒有使用,因為它們會導致性能下降,並且基於 CFI(控制流完整性)的保護,阻止漏洞利用在攻擊的後期階段,需要改進。
當考慮什麼從長遠來看可能會有所不同時,在狀態檢查器的構建階段使用高級靜態分析器或使用內存安全語言,例如 Rust 和帶有豐富註釋的 C 方言(例如 Checked C)脫穎而出。鎖、對象和指針。 在保護方法中,還提到了啟用panic_on_oops模式、將內核結構轉移到只讀模式以及使用seccomp等機制限制對系統調用的訪問。
來源: opennet.ru
