Se previnindo de ataques buffer oveflo

Post by R3 | Post in | Postado em 16:36

Vulnerabilidades de buffer overflow são o resultado da validação de inputs pobres: eles permitem que um invasor execute sua entrada como código na vítima. Mesmo quando os cuidados foram tomados para validar todas as inputs, os erros poderiam escapar e fazer o código inseguro. Este artigo apresenta as várias opções disponíveis para proteção contra bufferoverflows. Estes métodos checam funções inseguras de chamadas estaticas, procurar o buffer overflow dinamicamente durante a execução ou impedir a execução de código na pilha.

Pilha inexecutável: Neste método, a pilha não está configurado para realizar qualquer código executável. Patches do kernel estão disponíveis tanto para Linux e Solaris para a configuração de uma pilha não-executável. Dados preventivos á execução no Windows XP e 2003 também podem proteger a pilha contra estouro de buffer. Este método protege contra ataques baseados na pilha de buffer overflow. Heap-based overflows e "Stack Data Segment" não podem ser previnidos por esta técnica;

Analises estáticas: Na análise estática do código fonte são analisada as chamadas de biblioteca perigosas e as condições de "RUN" para detectar possíveis buffer overflows. Funções como strcpy sprintf e são vulneráveis a buffer overflows, para scanners de código fonte são usados para procurar por uso incorreto destas funções. RATS e tala são duas ferramentas, no entanto a análise estática está repleta de falsos positivos.


Análise Dinâmica de tempo de execução(Dynamic runtime protection)1.0: Canary(Canário): Quando uma chamada de função é feita, um "canário" é adicionado ao endereço do remetente, se um "buffer overflow" ocorre, o canário será corrompido. Então, antes de retornar à função o "canário" está marcado novamente para ver se ele foi modificado. "Stack Guard" usa essa técnica, implementando-o como um patch para o compilador GCC, o que provoca atrasos mínimos de desempenho. Free BSD também tem um patch disponível para fazer isso.

2.0: Copiar o endereço de retono: Neste método, o endereço de retorno é guardado separadamente, assim mesmo quando um buffer overflow substitui o endereço de retorno na pilha, ela é definida para o valor original quando a função retorna. Stack Shield - uma ferramenta de desenvolvimento que usa esta técnica - funciona como um processador de arquivo assembler e é suportado por GCC / G + + front ends. Stack Shield no entanto, protege apenas contra a substituição do endereço de retorno.

3.0: Array bounds Checking: Quando uma matriz é lida ou escrita, esta técnica verifica se os limites estão sendo violados. ompaq C Complier and Jones & Kelly‘s GCC patch executamra verificação de limites de matriz, mas o desempenho do seu programa irá cair considerávelmente.

4.0: Verificando o Memory Access: Aqui, o código de verificação é mudado para quando o programa é compilado. Ele verifica violações de acesso em tempo real. Ferramentas como Purify oferecem esta proteção com pouco impacto no desempenho.

Comentários (0)

Postar um comentário

Parceiros

'create