[0x1A] STRUCTURED EXCEPTION HANDLER

3 months ago 30

Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software, saiba mais.Aula 26: Sobrescrita de SEHsO Structured Exception Handler (Tratador Estruturado de Exceções) é um mecanismo do Windows para capturar e gerenciar exceções (erros de software).Estrutura na Pilha: O SEH é implementado como uma lista ligada de registros. Esses registros são anotados na pilha (Stack), localizados logo abaixo do frame da função onde o código com potencial para lançar exceções reside.Conteúdo do Registro: Cada registro SEH na pilha contém dois ponteiros principais:O endereço do tratador de exceção (o código a ser executado em caso de exceção).O endereço do próximo SEH na lista ligada.Funcionamento: Quando uma exceção é lançada, o Despachador de Exceções (código do sistema operacional) percorre essa lista de tratadores, a partir do topo da pilha, até encontrar o primeiro tratador elegível definido por um filtro.O principal objetivo da técnica é sobrescrever os ponteiros do SEH através de um buffer overflow. Essa abordagem é usada para desviar o fluxo de execução para um código malicioso (shellcode) antes que a proteção do canário seja checada.Vantagem sobre o Canary: Em um buffer overflow tradicional, sobrescrever o Canary (localizado entre o buffer e os metadados da função) leva à detecção e ao lançamento de uma exceção de segurança quando a função tenta retornar. O ataque SEH Overwrite força o lançamento de uma exceção antes que a função retorne, evitando a checagem do Canary.A Estratégia POP POP RET: Para garantir que o ataque funcione independentemente do layout da pilha (superando a imprevisibilidade de endereços), o exploit não usa um endereço hardcoded para o shellcode. A técnica envolve:Sobrescrever o Endereço do Tratador: O atacante preenche o campo do endereço do tratador com o endereço de uma sequência de instruções POP POP RET encontrada em uma biblioteca do sistema.Sobrescrever o Próximo SEH: O campo do próximo SEH é sobrescrito com uma instrução de salto curto (JMP SHORT) que aponta para o shellcode injetado na pilha.O Desvio:O despachador de exceções salta para o endereço POP POP RET.O POP POP desempilha 8 bytes, posicionando o topo da pilha (ESP) exatamente sobre o campo do próximo SEH (o JMP SHORT).O RET (Return) retira o endereço do topo da pilha e desvia a execução para lá, que agora é a instrução JMP SHORT, saltando assim para o shellcode.Com o tempo, o sistema operacional Windows implementou proteções para mitigar os ataques SEH Overwrite:SafeSEH: Exige que os módulos da aplicação sejam compilados com uma lista de tratadores seguros, validando-os na execução.SEHOP (SEH Overwrite Protection): Introduzido a partir do Windows Vista SP1. Adiciona um registro SEH sentinela (sentinel) inalcançável no final da lista. Durante a execução, o SEHOP checa se o último SEH é o sentinela. Se não for, indica que a lista foi corrompida, e a execução é encerrada. Foi contornado em 2009 sob certas condições.Próxima aula, clique aqui.


View Entire Post

Read Entire Article