Algoritmo eficiente de análise estática para procurar ataques do tipo variáveis contaminadas
Carregando...
Arquivos
Data
Autor(es)
Título da Revista
ISSN da Revista
Título de Volume
Editor
Universidade Federal de Minas Gerais
Descrição
Tipo
Dissertação de mestrado
Título alternativo
Primeiro orientador
Membros da banca
Marcelo d'amorim
Claudionor Jose Nunes Coelho Junior
Mariza Andrade da Silva Bigonha
Claudionor Jose Nunes Coelho Junior
Mariza Andrade da Silva Bigonha
Resumo
Ataques do tipo variáveis contaminadas ocorrem quando entradas de programas são manipuladas maliciosamente a afim de explorar falhas de segurança inerentes ao software afetado. Ataques deste tipo são comuns em linguagens de scripts como PHP, originadas no lado do servidor. Em 1997, Orbaek e Palsberg formalizaram o problema de detectar essas explorações como uma instância de verificação de tipo e mostraram que um algoritmo com complexidade de tempo O(V3) é capaz de resolver o problema. Um algoritmo similar foi implementado dez anos depois pela ferramenta open source Pixy para encontrar falhas de segurança em programas PHP. Este trabalho mostra que o mesmo problema pode ser resolvido em tempo O(V2). A solução proposta utiliza uma representação intermediária chamada e-SSA (extended Static Single Assignment) proposta por Bodik et al. em 2000. Essa representação pode ser computada eficientemente e permite que o problema seja tratado como um problema de alcance em grafos, onde arestas modelam dependências de dados entre variáveis de programas. Usando a mesma infra-estrutura de implementação, foi comparada a técnica proposta neste trabalho com e-SSA e a técnica que utiliza análise de fluxo de dados (data-flow). Ambas as abordagens possuem a mesma eficácia e foram capazes de detectar 36 vulnerabilidades em programas PHP conhecidos. Nos experimentos é possível observar que a abordagem proposta neste trabalho tem um melhor desempenho que o algoritmo utilizando data-flow. As falhas de segurança encontradas foram reportadas e a implementação do algoritmo proposto está disponível para o compilador de PHP open source phc.
Abstract
Tainted variable attacks are originated from program inputs maliciously crafted to exploit software vulnerabilities. These attacks are common in server-side scripting languages, such as PHP. In 1997, Orbaek and Palsberg formalized the problem of detecting these exploits as an instance of type-checking, and has give an O(V3) algorithm to solve it. A similar algorithm was, ten years later, implemented on the Pixy free-software tool. In this dissertation we give an O(V2) solution to the same problem. Our solution uses Bodik et al.'s extended Static Single Assignment (e-SSA) program representation that can be efficiently computed and it enables us to treat the problem as an instance of graph reachability, where graph edges model data dependencies between program variables. Using the same infrastructure, we compared the data-flow solution with our technique. Both approaches have detected 36 vulnerabilities in well-known PHP programs, and our tests show that our approach tends to outperform the data-flow algorithm for larger PHP programs. We have reported the bugs that we found, and the implementation of our algorithm is now available for the phc open source PHP compiler.
Assunto
Algoritmos, Computação, Compiladores (Programas de computador)
Palavras-chave
Análise Estática, Detecção Automática de Falhas de Segurança, compilador phc, PHP