O que é um estouro de buffer de pilha?
Um estouro de buffer de pilha é o que acontece quando um programa faz uma entrada na memória do computador que é maior que o espaço alocado. Em algumas circunstâncias, isso pode corromper outros dados na memória, causando problemas na execução do computador. Em outros casos, um estouro de buffer de pilha pode ser explorado por um aplicativo mal-intencionado para assumir o controle de outras partes do computador.
O nome de um estouro de buffer da pilha deriva primeiro da pilha, que é efetivamente uma lista ativa na qual os dados são organizados: o termo vem da analogia de acumular itens físicos. Uma versão disso, a pilha de chamadas, é a lista que um programa de computador usa para rastrear as várias partes do programa, as sub-rotinas, que estão operando em qualquer momento específico. Como a pilha de chamadas opera temporariamente e precisa ser acessada rapidamente, ela está localizada na memória do computador, e não no armazenamento permanente, como no disco rígido.
Como os sistemas operacionais modernos permitem a execução de vários programas ao mesmo tempo, é necessário organizar a maneira como a memória é alocada, inclusive para chamar pilhas. Isso é feito com eficiência, atribuindo buffers, um espaço na memória projetado para ser grande o suficiente para lidar com o espaço máximo exigido por um buffer específico. Na maioria dos casos, parte do espaço não será utilizada, portanto, ela atua como um buffer entre os dados de aplicativos diferentes, deixando espaço para lidar com o problema, se de repente você precisar de espaço extra. Uma maneira de visualizá-lo seria pensar em uma biblioteca que alocasse uma certa quantidade de espaço para cada área, garantindo um espaço extra para lidar se, por exemplo, todos os livros de um assunto estivessem na biblioteca do local. ao mesmo tempo, em vez de fazer o check-out de qualquer um deles.
Um estouro de buffer de pilha ocorre quando um programa grava dados da pilha de chamadas no buffer de uma maneira que excede o espaço alocado. Isso pode acontecer por engano, geralmente através de um bug em um programa. Por exemplo, se um aplicativo for projetado para permitir que o usuário digite um número de telefone, mas não tenha limite no número de caracteres que podem ser inseridos, um hacker poderá usar o campo ilimitado para causar intencionalmente um estouro de buffer de pilha . Dependendo da maneira como o sistema operacional funciona, isso pode permitir que o hacker acesse indiretamente outro aplicativo ou o próprio sistema operacional.
Existem várias abordagens para atenuar os efeitos de um estouro de buffer de pilha. Um é conhecido como randomização do layout do espaço de endereço. Isso organiza as áreas de dados mais importantes do computador de forma aleatória. A idéia é que, mesmo que um hacker cause ou explore um estouro de buffer de pilha, ele não poderá explorar a violação de maneira confiável.