Return-to-libc attack

Origem: Wikipédia, a enciclopédia livre.

O ataque return-to-libc é um ataque à segurança do computador, que usualmente inicia com um buffer overflow em que o endereço de retorno da função chamada na pilha é substituído pelo endereço de uma outra instrução, e uma parte da pilha é sobrescrita para fornecer argumentos para está função. Isto permite que o atacante invoque uma função preexistente sem precisar injetar código malicioso no programa.

Uma biblioteca compartilhada chamada "libc" provê o runtime C sistemas baseados em UNIX. Embora o atacante pudesse fazer o código retornar para qualquer lugar, libc é o alvo mais comum, como ela está sempre ligada ao programa, e oferece chamadas úteis ao atacante (como uma chamada de sistema para executar um programa arbitrário que necessite somente um argumento). É por isso que o ataque é chamado return-to-libc mesmo quando o endereço de retorno pode apontar para um local completamente diferente.

Proteções contra o ataque return-to-libc[editar | editar código-fonte]

Uma pilha não executável pode impedir alguns ataques de buffer overflow, no entanto, não pode impedir um ataque return-to-libc, porque nesse ataque somente o código executável já existente é utilizado. Por outro lado, esses ataques só podem chamar funções preexistente. Stack-smashing protection pode evitar ou impedir esse tipo de ataque, já que ele detecta a corrupção da pilha, e, possivelmente eliminar o segmento comprometido.

Address Space Layout Randomization (ASLR) torna esse tipo de ataque improvável de ter sucesso em máquinas de 64 bits, já que faz a alocação sempre em locais diferentes. Em sistemas de 32 bits, a ASLR oferece pouco benefíciom, uma vez que existem apenas 16 bits disponíveis para a randomização, e pode ser vencido por força bruta em questão de minutos.[1]

Ataques relacionados[editar | editar código-fonte]

Programação orientada a retorno (ROP) é um conjunto de técnicas utilizadas neste ataque, e pode ser usada para executar mais operações encadeando pequenos ataques menores, que executam um pequeno número de instruções ao mesmo tempo.

Ver também[editar | editar código-fonte]

Referências

  1. Shacham, Hovav; Page, Matthew; Pfaff, Ben; Goh, Eu-Jin; Modadugu, Nagendra; and Boneh, Dan. «On the Effectiveness of Address-Space Randomization» (PDF). Proceedings of Computer and Communications Security (CCS'04), October 25–29, 2004, Washington (DC) 

Ligações externas[editar | editar código-fonte]