As falhas graves são geralmente relacionados aos erros de Buffer Overflow, o qual chamamos em português de estouro da pilha. A ‘pilha’ fornece um espaço onde são armazenados diversos dados (memória). A idéia do ataque é “estourar” a pilha para que os dados que “vazarem” sejam executados como código pelo processador.

Imagine a pilha como uma garrafa de refrigerante. O que acontece quando você colocar mais refrigerante do que cabe na garrafa? A garrafa vai ficar cheia e o refrigerante vai derramar. No computador, esse “derrame” acaba caindo como código que vai ser executado no processador. Os ataques de estouro de pilha fazem com que a pilha não tenha espaço para guardar todos os dados que são enviados e “derrame” os supostos ‘dados’ no processador para execução.

Um exemplo real de fácil entendimento é a falha das figuras, da falha do GDI+ nos softwares Microsoft. A figura ‘dizia’ que o seu tamanho era de -1, o que é impossível, porém a pilha era criada com este tamanho mesmo assim, pois a pilha só precisa ser de tamanho suficiente para armazenar os dados que ela vai receber. Depois a imagem é enviada para a pilha, mas, surpresa, ela é maior que -1. Portanto, a pilha estoura e o que não cabe na pilha é executado pelo processador.

Algumas vezes o código não cai no processador, porém o estouro de pilha é ruim para o sistema, o que causa, geralmente um travamento do programa. Por exemplo, no caso do Blaster o computador reiniciava porque o estouro da pilha do serviço fazia com que houvesse um erro fatal e o serviço fosse finalizado. Como o serviço de RPC (explorado pelo Blaster) é crítico ao sistema, o Windows força uma reinicialização total para que o serviço esteja disponível novamente.

Escrito por Altieres Rohr

Editor da Linha Defensiva.