Previnindo Buffer Overflow | Vulnerabilidades de buffer overflow são resultado da má Validação de entradas: elas permitem que um atacante execute código no seu discurso como a vítima. Mesmo quando houve o cuidado de validar todas as entradas, os erros podem escorregar e fazer o pedido através de insegurança. Este artigo apresenta as várias opções disponíveis para proteção contra buffer overflows. Esses métodos, quer para verificar inseguro função chamadas estaticas, procure por Overflow dinâmico durante a execução ou ou impeça a execução de código na pilha.
# Pilha não executável: Neste método, a pilha está configurado para não possuir nenhum código executável. Patches do kernel estão disponíveis tanto para Linux e Solaris, para configurar uma pilha não-executável. Data Execution Prevention em 2003 e Windows XP também proteger a pilha de buffer overflow. Este método baseia-pilha protege contra ataques de buffer overflow. Heap overflow é baseado em dados estáticos seguidos overflows, no entanto, não podem ser impedidas por esta técnica.
# Analise statica: Na análise estática do código fonte é analisado para chamadas perigosas na biblioteca condições de detectar potenciais buffer overflows. Funções como sprintf eo strcpy, são vulneráveis a buffer overflows, etc código fonte scanners são usados para procurar por uso incorreto destas funções. RATOS tala e são esses dois instrumentos, no entanto análise estática está crivada de falsos positivos.
# Runtime Proteção dinâmica: Se condições forem detectados durante o atual funcionamento do programa, neste método, e um ataque frustrado. Diferentes técnicas de análise dinâmica runtime são:
anary: Quando é feita uma chamada de função, um "canário" é adicionado ao endereço de retorno; se um buffer overflow ocorre, o canarinho vai ser corrompidos. Então, antes de retornar à função mãe, o "canário" está marcada novamente para ver se ele tiver sido modificado. Guarda pilha 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 o fazer.
Copiando o indereço de retorno: Neste método, o endereço de retorno é guardado em separado, por isso mesmo quando um buffer overflow explorar sobrescreve o endereço de retorno na pilha, é um retrocesso para o valor original quando a função retorna. Stack Blindagem - uma ferramenta de desenvolvimento que usa essa técnica - funciona como um arquivo assembler e transformador é apoiado por CGC / G + + front ends. Blindagem pilha no entanto, só protege contra a sobreposição do endereço de retorno.
Array limites Verificação: Quando um array é lido ou escrito para, esta técnica dupla verifica se os limites estão a ser violados. Compaq C Compiler e Jones & Kellyâ € ~ s GCC patch array cabe a realizar testes, mas custa da degradação considerável desempenho.
Memory Access verificação: Aqui, a verificação é adicionada ao código binário quando o programa é compilado. Ele verifica violações acessar em tempo real. Ferramentas como Purificar oferecem essa proteção, com pouco impacto no desempenho.
Use versões e funções mais seguras: Alternativas safer estão disponíveis para todas as funções tradicionais atormentado por um buffer overflow. Por exemplo, strncpy snprintf e são mais seguros do que os mais velhos e strcpy sprint. Quando estão a ser desenvolvidas novas aplicações, garantir que apenas as variantes mais seguras são usadas.