Dezvoltatorii OpenSSH au continuat separarea sshd în mai multe fișiere executabile separate. În prima etapă de separare realizată în mai, funcțiile legate de gestionarea sesiunilor au fost mutate din sshd într-un proces separat, sshd-session, iar în sshd a rămas doar funcționalitatea necesară pentru acceptarea unei noi conexiuni de rețea și lansarea sshd-session pentru fiecare sesiune nouă. Ieri, în baza de cod OpenSSH a fost adusă o modificare care adaugă un alt proces — sshd-auth, în care codul responsabil cu autentificarea a fost mutat din sshd-session.
Procesul sshd-auth este lansat din sshd-session și permite izolarea suplimentară a datelor legate de autentificare în spațiul de adresă al unui proces separat, ceea ce împiedică accesul la aceste date în memorie în caz de atacuri asupra codului utilizat pentru procesarea etapelor de conexiune înainte de finalizarea autentificării. De asemenea, modificarea reduce ușor consumul de memorie, deoarece codul asociat autentificării este prezent în memorie doar în timpul autentificării, fiind apoi descărcat la finalizarea procesului sshd-auth.
În mod similar cu sshd, ssh-session și ssh-agent, pentru procesul sshd-auth a fost aplicată operația de rearanjare aleatorie a fișierului executabil la fiecare încărcare a sistemului de operare. Rearanjarea aleatorie face ca deplasările funcțiilor în fișierele executabile și biblioteci să fie greu predictibile, ceea ce îngreunează crearea de exploatări care utilizează metode de programare orientate pe returnare (ROP — Return-Oriented Programming). Când se utilizează tehnica ROP, atacatorul nu încearcă să își plaseze codul în memorie, ci operează cu fragmente deja existente de instrucțiuni mașină, care se termină cu o instrucțiune de returnare a controlului (de obicei, acestea sunt finalurile funcțiilor). Funcționarea exploatului constă în construirea unei lanțuri de apeluri ale unor astfel de blocuri („gadgeturi”) pentru obținerea funcționalității dorite.
Sursa: opennet.ro
