Os desenvolvedores do OpenSSH continuaram a divisão do sshd em vários arquivos executáveis separados. Na primeira etapa da divisão, implementada em maio, funções relacionadas ao gerenciamento de sessões foram transferidas do sshd para um processo separado, o sshd-session, enquanto no sshd ficou apenas a funcionalidade necessária para aceitar uma nova conexão de rede e iniciar o sshd-session para cada nova sessão. Ontem, uma mudança foi feita no código base do OpenSSH que adiciona mais um processo — o sshd-auth, para o qual o código que realiza a autenticação foi transferido do sshd-session.
O processo sshd-auth é iniciado a partir do sshd-session e permite isolar ainda mais os dados relacionados à autenticação no espaço de endereçamento de um processo separado, o que não permitirá o acesso a esses dados na memória em caso de ataques ao código utilizado para processar as etapas de conexão até que a autenticação seja concluída. Além disso, a mudança reduz ligeiramente o consumo de memória, já que o código de autenticação agora está presente na memória apenas durante a autenticação e, em seguida, é descarregado ao final do processo sshd-auth.
De forma semelhante ao sshd, ssh-session e ssh-agent, para o processo sshd-auth foi aplicada uma operação de reorganização aleatória do arquivo executável durante cada inicialização do sistema operacional. A reorganização aleatória torna difícil prever os deslocamentos das funções em arquivos e bibliotecas executáveis, o que dificulta a criação de exploits que utilizam métodos de programação orientada a retorno (ROP — Return-Oriented Programming). Ao usar a técnica ROP, o atacante não tenta colocar seu código na memória, mas opera com pedaços já existentes de instruções de máquina que terminam com a instrução de retorno de controle (geralmente, são os fins das funções). O trabalho do exploit consiste em construir uma cadeia de chamadas a esses blocos (“gadgets”) para obter a funcionalidade desejada.
Fonte: opennet.ru
