В OpenSSH код аутентификации вынесен в отдельный процесс Sshd-auth

Разработчики OpenSSH продолжили разделение sshd на несколько отдельных исполняемых файлов. На реализованном в мае первом этапе разделения из sshd в отдельный процесс sshd-session были вынесены функции, связанные с обработкой сеансов, а в sshd оставлена лишь функциональность, необходимая для приёма нового сетевого соединения и запуска sshd-session для каждого нового сеанса. Вчера в кодовую базу OpenSSH было внесено изменение, добавляющее ещё один процесс – sshd-auth, в который из sshd-session перенесён код, выполняющий аутентификацию.

Процесс sshd-auth запускается из sshd-session и позволяет дополнительно изолировать связанные с аутентификацией данные в адресном пространстве отдельного процесса, что не даст получить доступ к этим данным в памяти в случае проведения атак на код, используемый для обработки стадий соединения до завершения аутентификации. Кроме того, изменение немного снизит потребление памяти, так как связанный с аутентификацией код теперь присутствует в памяти только в момент проведения аутентификации, а затем выгружается при завершении процесса sshd-auth.

По аналогии с sshd, ssh-session и ssh-agent для процесса sshd-auth применена операция случайной перекомпоновки исполняемого файла во время каждой загрузки операционной системы. Случайная перекомпоновка делает плохо предсказуемым смещения функций в исполняемых файлах и библиотеках, что затрудняет создание эксплоитов, использующих методы возвратно-ориентированного программирования (ROP – Return-Oriented Programming). При использовании техники ROP атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков (“гаджетов”) для получения нужной функциональности.

Release. Ссылка here.