Conclusão e Trabalhos Futuros

No documento Análise esparsa de fluxo de informação (páginas 97-101)

Este Capítulo apresenta na Seção 5.1 as conclusões deste trabalho de tese. Os trabalhos futuros vislumbrados pelo estudante podem ser encontrados na Seção 5.2.

5.1

Conclusão desta Tese

Este trabalho de Tese focou no rastreamento eficiente do fluxo de informação como forma de detectar vulnerabilidades relacionadas ao fluxo tais como vazamento de in- formação e fluxo contaminado. Para tanto foi necessário detectar as dependências explícitas relacionadas ao fluxo de dados entre as instruções do programa e as depen- dência implícitas relacionadas ao fluxo de controle. As dependências explícitas foram facilmente detectadas através de um único passo de compilador. Porém para a de- tecção do fluxo implícito houve um desafio maior. Inicialmente pensou-se em utilizar a abordagem de Ferrante et al. para detectar tais fluxos, entretanto essa abordagem poderia gerar no pior caso um número excessivo de arestas de controle no grafo de dependências, o qual é uma estrutura de dados auxiliar que permite representar ambos fluxos de informação.

Como forma de contornar esse inconveniente da abordagem de Ferrante et al., foi projetado um algoritmo linear sobre o número de definições somado ao uso das variáveis do programa. Tal algoritmo é extremamente simples de ser implementado de forma a ser possível representá-lo com poucas dezenas de linhas de código SML. A grande ideia por trás de tal algoritmo é a utilização de uma estrutura de dados chamada árvore de dominância, já presente na maioria dos compiladores industriais. O texto desta Tese comprova que o algoritmo funciona inclusive para programas não estruturados e está correto, por meio de um conjunto de teoremas e suas respectivas provas.

Além do novo algoritmo, esta tese também contribui para o estado da arte de análise de fluxo, por meio de uma implementação esparsa do sistema de Tipos de Hunt e Sands. Essa implementação consegue ser esparsa por utilizar uma forma de representação de programas bastante conhecida e usada por compiladores modernos, incluindo GCC e LLVM, chamada forma SSA. Nessa forma de programas, cada variável pode ser definida apenas 1 vez no texto do programa. Isso permite associar facilmente informação à cada variável ao invés de associá-la à outros pontos que tornariam a análise densa, tal como o espaço entre uma instrução e outra.

O Sistema de tipos de Hunt e Sands implementado de forma esparsa foi utilizado nesta Tese para detectar 4 tipos de vulnerabilidades: vazamento de endereços, estouro de arranjo e de inteiro e canais laterais baseados em tempo. Isso foi possível com a implementação de uma ferramenta chamada FlowTracker que usa tal sistema de tipos e está disponível para download ou uso on-line, sendo capaz de detectar vulnerabilidades de canais laterais e reportá-las ao programador em tempo de compilação. FlowTracker se mostrou bastante escalável, sendo capaz de rastrear todo fluxo de informação e detec- tar vulnerabilidades em programas realmente grandes tais como compilador GCC que possui mais de 600K linhas de código fonte em poucos segundos. FlowTracker também se mostrou efetivo, pois foi capaz de certificar uma importante biblioteca criptográfica chamada NaCl, provando suas propriedades isócronas. Por outro lado FlowTracker reportou diversos problemas de segurança na conhecida biblioteca OpenSSL. Final- mente FlowTracker se mostrou adaptável, sendo facilmente customizado para rastrear as demais vulnerabilidades relacionadas ao fluxo.

Por meio destes resultados experimentais, conclui-se que analisadores estáticos são poderosas ferramentas que podem ser usadas para o rastreamento consistente (sem falsos negativos) de diversas vulnerabilidades. Também conclui-se que analisadores es- táticos esparsos são mais eficientes do ponto de vista de consumo de memória e tempo de execução do que analisadores densos e podem desde agora ser implementados utili- zando um novo algoritmo linear para o rastreamento dos fluxos implícitos de informação construído neste trabalho de tese, ao invés da abordagem clássica de Ferrante et al., que embora correta, produz mais informação do que o necessário para tais analisadores e portando sofre de um alto custo de pior caso (O(|I| × |E|)).

5.2

Trabalhos Futuros

Como trabalho futuro, deseja-se modificar os traços que contenham canais laterais de forma a interromper os caminhos que conectam informação sigilosa a predicados de

5.2. Trabalhos Futuros 75

instruções de desvio, bem como à indexação de memória. Isso, obviamente deve ser feito mantendo a semântica do programa e com baixo overhead. Duas abordagens para tal feito poderiam ser experimentadas tais como:

1. Incluir instruções inócuas nas ramificações dos desvios de forma a fazê-los exe- cutar pelo mesmo tempo. Isso resolveria parte do problema, mas canais laterais devido ao comportamento de memória ainda continuariam a existir.

2. Substituir instruções de desvio dependentes de informação sigilosa e suas rami- ficações, por sequências de instruções que realizam as mesmas ações de ambas ramificações do desvio, prevalecendo apenas os resultados condizentes com a ava- liação desvio na versão original do código fonte. Essa abordagem poderia imputar um alto overhead, mas é uma alternativa.

Um segundo trabalho futuro diz respeito a encontrar vulnerabilidade de canal lateral em programas importantes que estejam em uso atualmente e reportar tais pro- blemas aos seus desenvolvedores, como forma de promover FlowTracker na comunidade internacional.

Um terceiro trabalho futuro, está sendo realizado no momento pela equipe da PRODEMGE e diz respeito à permitir que FlowTracker encontre canais laterais em aplicações Java. Para tanto, FlowTracker está sendo portado da plataforma LLVM para a plataforma SOOT1 que é um analisador de código Java publicamente disponível para uso.

No documento Análise esparsa de fluxo de informação (páginas 97-101)