OpenSSH 開發人員繼續將 sshd 拆分成幾個獨立的可執行檔。在 5 月實施的第一階段分割中,與處理會話相關的功能從 sshd 移至一個單獨的進程 sshd-session,並且只保留了接受新網路連接和為每個新會話啟動 sshd-session 所需的功能。昨天,OpenSSH 程式碼庫進行了更改,新增了另一個進程 sshd-auth,執行身份驗證的程式碼從 sshd-session 移至該進程。
sshd-auth 程序從 sshd-session 運行,並進一步將與身份驗證相關的資料隔離在單獨進程的位址空間中,防止在身份驗證完成之前用於處理連接階段的程式碼受到攻擊時存取記憶體中的資料。此外,此變更將稍微減少記憶體消耗,因為與身份驗證相關的程式碼現在僅在身份驗證時存在於記憶體中,然後在 sshd-auth 進程退出時卸載。
與 sshd、ssh-session 和 ssh-agent 類似,sshd-auth 進程在每次作業系統啟動時都會對可執行檔進行隨機重組。隨機重組使得預測可執行檔和函式庫中函數的遷移變得困難,這使得使用面向返回程式設計 (ROP) 方法建立漏洞利用變得複雜。使用 ROP 技術時,攻擊者不會嘗試將程式碼放入記憶體中,而是對以返回指令結尾的現有機器指令片段進行操作(通常,這些指令片段是函數的結尾)。漏洞利用的工作歸結為建立類似區塊(“gadget”)的呼叫鏈,以獲得所需的功能。
來源: opennet.ru
