Beyond Stack Smashing : Recent Advances in Exploiting Buffer Overruns
Artigo de Jonathan Pincus e Brandon Baker publicado em IEEE Computer Society 1540-7993/4
Neste artigo são descritas três modos de exploits para buffer overrun, também conhecidos como Buffer Overflow : arc injection, pointer subterfuge, e heap smashing.
O método tradicional de exploração de buffer overrunns é através de stack smashing, que ocorre através da modificação do endereço de retorno salvo no stack (região da memória empregada para armazenamento de parâmetros, variáveis locais e endereços de retorno), que aponta para o código do atacante que reside num buffer stack do sistema atacado.
Hackers criaram formas de explorar buffer overruns. A técnica Heap smaching permite exploração de buffer overruns na área da memória alocada dinamicamente.
Explorando Buffer Overruns
Um buffer overrun ocorre quando uma aplicação tenta ler ou escrever além do endereçamento de um array declarado na área de buffer da memória. O Buffer overrun ocasiona exceções em linguagens como Pascal, Ada, Java, porém linguagens como C e C++ não realizam nenhum tipo de checagem.
Stack Smashing
É uma técnica descrita em detalhes pelos hackers AlephOne e DillDog, na qual troca-se o controle de fluxo de dados para executar o código criado pelo atacante. A técnica se vale do fato de que a maioria dos compiladores C armazenam o endereço de retorno salvo na mesma pilha usada para as variáveis locais.
Arc Injection
Nesta técnica o atacante fornece dados a uma aplicação, tendo como retorno o efeito desejado e com o objetivo de modificar o endereço de retorno. Em geral o endereço de retorno passa a apontar para algum local que contenha alguma função específica.
Pointer Subterfuge
Pointer Subterfuge utiliza-se da alteração de valores de ponteiros. Algumas variações são: funtion-pointer clobbering, data-pointer modification, exception-handler hijcking e virtual pointer smashing.
Heap Smashing
Heap Smashing explora implementações em memória dinâmicas alocadas por violação em algumas invariantes assumidas.
Conclusão
O desenvolvimento de software seguro vem se tornando cada vez mais necessário, onde é de grande importância o conhecimento das vulnerabilidades de linguagens como C, C++, de forma a estudar os ataques que possam ocorrem nestes ambientes. Esforços devem ser empregados para minimizar as vulnerabilidades encontradas nestes ambientes, de modo a diminuir cada vez mais a chance de erros de programação.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário