Detecção Automática de Vulnerabilidades em Código Protegido por Canários - Maffra, Izabela Karennina Travizani; Pereira, Fernando Magno Quintão; Oliveira, Leonardo Barbosa (Anais do Simpósio Brasileiro de Cibersegurança (SBSeg), 2013)
O estouro de arranjos é um tipo de ataque que custa, todo ano, milhões de dólares aos usuários de software. Canários são uma das formas mais conhecidas de prevenção contra esse tipo de ataque. Apesar de serem muito efetivos na prática, canários não são a solução ideal. Em alguns casos, eles não impedem a sobrescrita das chamadas variáveis locais. Tal omissão pode permitir que um adversário tome o controle do programa, desde que haja escalares posicionados após um arranjo vulnerável. A detecção desse tipo de vulnerabilidade é difícil, pois demanda grande familiaridade com o código sob análise. O objetivo deste artigo é resolver esse problema de forma automática. Tal feito pode ser conseguido via análises estáticas de código, implementadas a nível do compilador. Nossa técnica não requer qualquer tipo de intervenção do usuário e é notavelmente precisa. Esses algoritmos, implementados no compilador LLVM, foram testados em benchmarks que juntos nos deram mais de 1,4 milhões de linhas de código C. Nossa análise é prática e eficiente. Por exemplo, detectamos 836 potenciais vulnerabilidades em 17 programas presentes em SPEC CPU 2006.