Разработчиците на OpenSSH продължиха да разделят 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, атакуващият не се опитва да постави собствения си код в паметта, а работи с вече съществуващите парчета машинни инструкции, завършващи с инструкция за връщане на контрола (обикновено това са окончания на функции). Работата на експлоита се свежда до изграждане на верига от повиквания на подобни блокове („гаджети“) за получаване на необходимата функционалност.
Източник: opennet.ru
