Dissertação

{en_GB=Automatic Vulnerability Detection: Using Compressed Execution Traces to Guide Symbolic Execution} {} EVALUATED

{pt=Execução simbólica é uma técnica que permite analisar todos os possíveis caminhos que um programa pode correr, usando variáveis simbólicas em vez de inputs concretos. Nesta tese, trabalhámos com um conjunto de testes que exercitam as vulnerabilidades e um conjunto de testes que demonstram a funcionalidade do programa. São três as contribuições desta dissertação. Primeiro, é um estudo das técnicas mais recentes na análise de software no contexto de segurança. Segundo, mostramos como implementar as técnicas mencionadas para analisar um programa de forma independente da linguagem alvo, e também quais foram os problemas com que nos confrontámos e as soluções que encontrámos para esses problemas. Finalmente, mostramos como implementar uma versão prioritizada da execução simbólica que dado um conjunto de testes que exercitam um certo componente do software, consegue percorrer apenas os caminhos mais parecidos com os que foram exercitados por esse conjunto de testes, com a assistência de um coeficiente de semelhança dinâmico. Avaliámos esta ferramenta analisando a eficácia e eficiência alcançadas ao tentar encontrar vulnerabilidades em um dataset da DARPA usado na famosa competição Cyber Grand Challenge. Analisámos com sucesso 186 binários nesse dataset com 590 vulnerabilidades no total e encontrámos 118 delas. Adicionalmente, comparámos o nosso coeficiente de semelhança dinâmico com dois outros: O coeficiente de Ochiai e um usado numa ferramenta chamada Staged Program Repair. Mostrámos que o nosso coeficiente de semelhança supera os outros, permitindo analisar um maior número de binários e assim, descobrir mais vulnerabilidades., en=Symbolic execution is a technique that allows to execute all possible program paths using symbolic variables instead of concrete values. In this thesis, we develop on a version of AVD where we have a set of inputs that trigger vulnerabilities (bad inputs) and a set of inputs that demonstrate functionality (good inputs). This thesis contributions are three-fold. First, we survey the current state-of-the-art techniques on software analysis, focused on the security aspect. Second, we show how to implement the mentioned techniques in a language-independent way and what were the problems we faced while building such a tool for program analysis and the reason why we chose one solution over the others. Finally, we show how to run a prioritized version of symbolic execution, given tests that exercise some part of the program, that is able to traverse program paths similar to those run by the test with the assistance of a dynamic similarity coefficient. We have evaluated our tool by analyzing its efficiency in finding vulnerabilities in a dataset of DARPA challenges used in the Cyber Grand Challenge. We successfully analyzed 186 binaries in that dataset, where we accurately found 118 vulnerabilities from a total of 590 intended vulnerabilities. Additionally, we compared the application of our dynamic similarity coefficient with Ochiai's and one other used in an automatic patch generation tool called Staged Program Repair. We show that our dynamic similarity coefficient significantly outperforms the others, enabling us to analyze a greater number of binaries and therefore finding more vulnerabilities.}
{pt=Deteção automática de vulnerabilidades, Testes de segurança, Técnicas para análise de software, Execução simbólica, en=Automatic Vulnerability Detection, Security Tests, Software Analysis Techniques, Symbolic Execution}

Novembro 25, 2019, 13:0

Orientação

ORIENTADOR

Pedro Miguel dos Santos Alves Madeira Adão

Departamento de Engenharia Informática (DEI)

Professor Auxiliar