Empilhamento

Definição - o que significa Stack Smashing?

O esmagamento de pilha é uma forma de vulnerabilidade em que a pilha de um aplicativo de computador ou sistema operacional é forçada a transbordar. Isso pode levar à subversão do programa / sistema e travá-lo.

Uma pilha, um circuito first-in last-out, é uma forma de buffer contendo resultados intermediários das operações dentro dela. Para simplificar, o esmagamento de pilha coloca mais dados em uma pilha do que sua capacidade de retenção. Hackers habilidosos podem introduzir deliberadamente dados excessivos na pilha. Os dados excessivos podem ser armazenados em outras variáveis ​​da pilha, incluindo o endereço de retorno da função. Quando a função retorna, ela salta para o código malicioso na pilha, o que pode corromper todo o sistema. Os dados adjacentes na pilha são afetados e força o programa a travar.

Definirtec explica Stack Smashing

Se o programa afetado pelo empilhamento aceita dados de redes não confiáveis ​​e é executado com privilégios especiais, é um caso de vulnerabilidade de segurança. Se o buffer contiver dados fornecidos por um usuário não confiável, a pilha pode ser corrompida pela injeção de código executável no programa, obtendo acesso não autorizado a um computador. Um invasor também pode sobrescrever informações de fluxo de controle armazenadas na pilha.

Como o empilhamento se tornou uma vulnerabilidade muito séria, certas tecnologias são implementadas para superar o desastre do empilhamento. A proteção contra estouro do buffer de pilha altera a organização dos dados no frame da pilha de uma chamada de função para incluir valores canário. Esses valores, quando destruídos, indicam que um buffer anterior a ele na memória estourou. Os valores canários monitoram estouros de buffer e são colocados entre os dados de controle e o buffer na pilha. Isso garante que um estouro de buffer corrompa o canário primeiro. Uma falha na verificação dos dados canário significa um estouro na pilha. Os três tipos de canário são Random, Terminator e Random XOR.

O canário do terminador é baseado no fato de que o ataque de estouro do buffer de pilha depende de operações de string que terminam em terminadores. Canários aleatórios são gerados aleatoriamente a partir de um daemon de coleta de entropia, o que impede que os invasores conheçam os valores. Canários aleatórios são gerados na inicialização do programa e armazenados em variáveis ​​globais. Canários XOR aleatórios são portadores aleatórios que são XOR embaralhados usando dados de controle. É semelhante aos canários aleatórios, exceto que o "método ler da pilha" para obter o canário é complexo. O hacker precisa do canário, do algoritmo e dos dados de controle para produzir o canário original. Eles protegem contra ataques envolvendo buffer overflowing em uma estrutura em ponteiros para mudar o ponteiro para apontar para um dado de controle.