Ataque Return-to-libc - Return-to-libc attack

Um ataque "return-to-libc" é um ataque à segurança do computador geralmente começando com um estouro de buffer em que um endereço de retorno de sub-rotina em uma pilha de chamadas é substituído por um endereço de uma sub-rotina que já está presente na memória executável do processo , ignorando o recurso de bit no-execute (se houver) e livrando o invasor da necessidade de injetar seu próprio código. O primeiro exemplo desse ataque em estado selvagem foi contribuído por Alexander Peslyak na lista de e-mails Bugtraq em 1997.

Em POSIX que cumprem sistemas operacionais da biblioteca padrão C (" libc") é comumente usado para fornecer um padrão ambiente de execução de programas escritos na linguagem de programação C . Embora o invasor possa fazer o código retornar em qualquer lugar, libcé o alvo mais provável, pois quase sempre está vinculado ao programa e fornece chamadas úteis para um invasor (como a systemfunção usada para executar comandos shell).

Proteção contra ataques de retorno para libc

Uma pilha não executável pode evitar alguma exploração de estouro de buffer, no entanto, não pode impedir um ataque de retorno para libc porque no ataque de retorno para libc apenas o código executável existente é usado. Por outro lado, esses ataques só podem chamar funções preexistentes. A proteção contra destruição de pilha pode impedir ou obstruir a exploração, pois pode detectar a corrupção da pilha e possivelmente eliminar o segmento comprometido.

A " blindagem ASCII " é uma técnica que pode ser utilizada para impedir este tipo de ataque. Com a proteção ASCII, todos os endereços das bibliotecas do sistema (por exemplo, libc) contêm um byte NULL ( 0x00). Isso é normalmente feito colocando-os nos primeiros 0x01010101bytes de memória (algumas páginas com mais de 16 MB, apelidada de "região de blindagem ASCII"), pois cada endereço até (mas não incluindo) esse valor contém pelo menos um byte NULL. Isso torna impossível colocar o código que contém esses endereços usando funções de manipulação de string, como strcpy(). No entanto, essa técnica não funciona se o invasor tiver uma maneira de estourar bytes NULL na pilha. Se o programa for muito grande para caber nos primeiros 16  MB , a proteção pode estar incompleta. Essa técnica é semelhante a outro ataque conhecido como return-to-plt , onde, em vez de retornar para libc, o invasor usa as funções da Tabela de Ligação de Procedimentos (PLT) carregadas no código independente de posição (por exemplo, system@plt, execve@plt, sprintf@plt, strcpy@plt).

A randomização do layout do espaço de endereço (ASLR) torna esse tipo de ataque extremamente improvável de ter sucesso em máquinas de 64 bits, pois as localizações das funções na memória são aleatórias. Para sistemas de 32 bits , entretanto, o ASLR oferece poucos benefícios, pois há apenas 16 bits disponíveis para randomização e eles podem ser derrotados pela força bruta em questão de minutos.

Veja também

Referências

links externos