Stack smashing attack detection methodology for secure program execution based on hardware

Detalhes bibliográficos
Ano de defesa: 2016
Autor(a) principal: Ferreira, Raphael Segabinazzi lattes
Orientador(a): Vargas, Fabian Luis lattes
Banca de defesa: Não Informado pela instituição
Tipo de documento: Dissertação
Tipo de acesso: Acesso aberto
Idioma: eng
Instituição de defesa: Pontifícia Universidade Católica do Rio Grande do Sul
Programa de Pós-Graduação: Programa de Pós-Graduação em Engenharia Elétrica
Departamento: Faculdade de Engenharia
País: Brasil
Palavras-chave em Português:
Área do conhecimento CNPq:
Link de acesso: http://tede2.pucrs.br/tede2/handle/tede/7073
Resumo: A necessidade de inclusão de mecanismos de segurança em dispositivos eletrônicos cresceu consideravelmente com o aumento do uso destes dispositivos no dia a dia das pessoas. À medida que estes dispositivos foram ficando cada vez mais conectados a rede e uns aos outros, estes mesmos se tornaram vulneráveis a tentativa de ataques e intrusões remotas. Ataques deste tipo chegam normalmente como dados recebidos por meio de um canal comum de comunicação, uma vez presente na memória do dispositivo estes dados podem ser capazes de disparar uma falha de software pré-existente, e, a partir desta falha, desviar o fluxo do programa para o código malicioso inserido. Vulnerabilidades de software foram, nos últimos anos, a principal causa de incidentes relacionados à quebra de segurança em sistemas e computadores. Adicionalmente, estouros de buffer (buffer overflow) são as vulnerabilidades mais exploradas em software, chegando a atingir, metade das recomendações de segurança do grupo norte americano Computer Emergency Readiness Team (CERT). A partir deste cenário citado acima, o presente trabalho apresenta um novo método baseado em hardware para detecção de ataques ocorridos a partir de estouros de buffer chamados de Stack Smashing, propõe ainda de maneira preliminar, um mecanismo de recuperação do sistema a partir da detecção de um ataque ou falha. Comparando com métodos já existentes na bibliografia, a técnica apresentada por este trabalho não necessita de recompilação de código e, adicionalmente, dispensa o uso de software (como, por exemplo, um Sistema Operacional) para fazer o gerenciamento do uso de memória. Monitorando sinais internos do pipeline de um processador o presente trabalho é capaz de detectar quando um endereço de retorno de uma função está corrompido, e a partir desta detecção, voltar o sistema para um estado seguro salvo previamente em uma região segura de memória. Para validar este trabalho um programa simples, em linguagem C, foi implementado, este programa força uma condição de buffer overflow. Esta condição deve ser reconhecida pelo sistema implementado neste trabalho e, ainda, recuperada adequadamente. Já para avaliação do sistema, a fim de verificar como o mesmo se comporta em situações reais, programas testes foram implementados em linguagem C com pequenos trechos de códigos maliciosos. Estes trechos foram obtidos de vulnerabilidades reportadas na base de dados Common Vulnerabilities and Exposures (CVE). Estes pequenos códigos maliciosos foram adaptados e inseridos nos fontes do programa de teste. Com isso, enquanto estes programas estão em execução o sistema implementado por este trabalho é avaliado. Durante esta avaliação são observados: (1) a capacidade de detecção de modificação no endereço de retorno de funções e (2) a recuperação do sistema. Finalmente, é calculado o overhead de área e de tempo de execução.De acordo com resultados e implementações preliminares este trabalho conseguiu atingir 100% da detecção de ataques sobre uma baixa latência por detecção de modificações de endereço de retorno de funções salva no stack. Foi capaz, também, de se recuperar nos casos de testes implementados. E, finalmente, resultando em baixo overhead de área sem nenhuma degradação de performance na detecção de modificação do endereço de retorno.