西奧·德·拉特
從 W^X 的工作開始,很明顯這是一條漫長的道路,因為有大量的應用程式使用 JIT。 JIT 實作可分為三類:
- 在W和X狀態之間切換內存,接受系統呼叫的“成本”
保護 . - 在同一記憶體的一對 W 和 X 對映之間建立別名。
- 最「髒」的選項需要允許同時記錄和執行的 W|X 記憶體模型。
目前,使用第三個選項的程序明顯較少,而使用第一個和第二個選項的程序則較多。 然而,由於需要使用 W|X JIT(主要是 Chromium 和 Iridum)運行程序,因此添加了「wxallowed」檔案系統掛載選項,該選項允許記憶體同時用於寫入和執行,以防可執行 ELF檔案標有“wxneeded”標記,並且應用程式本身還使用機制進行了額外保護
為了使此類應用程式中的漏洞利用進一步複雜化,建議對該機制進行補充
Chrome/Iridium 程序已經使用 Promise 和 Reveal 得到了相當可靠的保護,但是刪除使用 write(2) 系統呼叫的能力顯然有一些優勢,因為它給攻擊者帶來了額外的困難。 但是,如果 JIT 實作使用 W|X 記憶體中的本機系統調用,也會出現困難。 然而,我們有理由希望情況不會如此,因為 ABI 已更改多次,但從未有人報告過問題。
這些變更已經在 OpenBSD-Current 分支的常規快照中提供,歡迎有興趣的每個人進行測試。
關於 Chrome/Iridium 中該模式出現的相關新聞值得 Theo 單獨評論
來源: opennet.ru