A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Buffer Overrun Detection using Linear Programming and Static Analysis Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software 2008-1 Rodrigo.

Apresentações semelhantes


Apresentação em tema: "Buffer Overrun Detection using Linear Programming and Static Analysis Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software 2008-1 Rodrigo."— Transcrição da apresentação:

1 Buffer Overrun Detection using Linear Programming and Static Analysis Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software Rodrigo Diego Melo Amorim Recife-PE 10th ACM Conference on Computer and Communications Security. Washington, DC, October Vinod Ganapathy, Somesh Jha University of Wisconsin-Madison David Chandler, David Melski, David Vitek Grammatech Inc., Ithaca, New York Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software Rodrigo Diego Melo Amorim Recife-PE 10th ACM Conference on Computer and Communications Security. Washington, DC, October Vinod Ganapathy, Somesh Jha University of Wisconsin-Madison David Chandler, David Melski, David Vitek Grammatech Inc., Ithaca, New York

2 O Problema: Buffer Overflows Classe de vulnerabilidades altamente exploradas o Bug extremamente comum o Programas legados escritos em C continuam vulneráveis Source: NVD/CVE

3 Buffer Overflows? void foo (char *bar) { // no bounds checking... char c[12]; strcpy(c, bar); } int main (int argc, char **argv) { foo(argv[1]); }

4 Buffer Overflows? void foo (char *bar) { // no bounds checking... char c[12]; strcpy(c, bar); } int main (int argc, char **argv) { foo(argv[1]); }

5 Buffer Overflows? void foo (char *bar) { // no bounds checking... char c[12]; strcpy(c, bar); } int main (int argc, char **argv) { foo(argv[1]); }

6 A Solução: técnica automática que assegura que o código está seguro antes de ser posto em produção Uso de Análise Estática de Programas Produção de uma lista de possíveis vulnerabilidades no código combinar alertas de Buffer Overrun's com técnicas de varredura de código Possíveis Buffer Overruns código fonte Análise Estática

7 Análise Estática? Análise de Programa o Conceito abstrato de varredura de código antes de pôr em produção; o Também conhecido como entendimento ou compreensão de programas; o Várias técnicas, desde análise manual até ferramentas sofisticadas; o Normalmente feita por ferramentas;

8 Contribuição Análise de Programa o detecção de buffer overrun incorporado a uma ferramenta de análise de programa o fazer a análise de buffer overrun sensível ao contexto o Torna os resultados mais precisos Resolução de restrições o uso de programação linear para solucionar o problema de análise de intervalo

9 Sensibilidade de Contexto?

10

11

12 Arquitetura da Ferramenta Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

13 Code Surfer Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

14 Code Surfer Ferramenta comercial (Grammatech Inc.) Ferramenta de analise de codigo. A partir de codigo, produz: o Grafo de Fluxo de Controle (GFC) o Grafo de Dependência de Programa (GDP) o Grafo de Dependência de Sistema (GDS) Detection Front-End o Associa cada warning gerado à linha do código fonte correspondente através do GDS;

15 Exemplo - código

16 Gerador de Restrições Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

17 Geração de Restrições Quatro tipos de ponteiros de programa resultam em restrições: o Declaração o Atribuição o Chamada de Função o Retorno de Função Quatro variáveis para cada buffer: o buf_usd_max, buf_usd_min, buf_alc_max, buf_alc_min Operações em um buffer o strcpy (tgt, src) o tgt_usd_max >= src_usd_max o tgt_usd_min =< src_usd_min

18 Métodos de Geração de Restrições Ordem dos Statements o Análise sensível ao fluxo respeita a ordem do programa o Análise insensível ao fluxo não respeita a ordem do programa Chamadas de Função o Modelagem das funções sensíveis ao contexto respeitam a semântica da chamada de retorno o Modelagem das funções insensíveis ao contexto ignoram a semântica da chamada de retorno

19 Exemplo – restrições geradas

20 Taint Analyser (Análise de Segurança) Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

21 Análise de Segurança Remove variáveis de restrições não inicializadas o chamadas a bibliotecas não modeladas o variáveis de programas não inicializadas Remove variáveis de restrições que tem range de valores infinitos; Necessário para que os solucionadores funcionem corretamente

22 Solucionador de Restrições Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

23 Solucionadores de Restrições Problema Abstrato o Dado um conjunto de restrições em variáves máximas e mínimas o Retorna o menor ajuste possível que satisfaça todas as restrições Abordagem o Modelar e Solucionar como um programa linear Foram desenvolvidos dois solucionadores o Vanilla (+ rápido, - preciso) o Hierárquico (+ preciso, - rápido)

24 Programação Linear ? Uma função Objetiva: F Sujeita a: Um conjunto de restrições lineares C Objetivo: otimizar o seu resultado Exemplo: o Maximize: x o sujeito a: x =< 3

25 Solucionador de Restrições - Vanilla Objetivo: Obter valores para os limites do buffer Modelando como um programa linear: Minimize: var_max Sujeita a: um conjunto x de restrições & Maximize: var_min Sujeita a: um conjunto y de restrições Menor limite superior Maior limite inferior

26 Solucionador de Restrições - Vanilla é possível reescrever da seguinte forma: o Min:Σ (var_max) - Σ(var_min) o sujeito a:um conjunto z de restrições Resolvendo apenas um programa linear teremos valores para todas as variáveis!

27 Exemplo – valores das variáveis

28 Solucionador de Restrições - Vanilla Método impreciso: porque ? o programas lineares infactíveis Lidamos com isso usando algoritmos de aproximação Identificamos Irreducibly Inconsistents Sets (IIS)

29 Análise insensível ao contexto foo () { int x; x = foobar(5); } bar () { int y; y = foobar(30); } int foobar (int z) { int i; i = z + 1; return i; } Caminho correto 1 Resultado: x = y = [6..31] Caminho falso Caminho correto 2

30 Adicionando Sensibilidade de Contexto foo () { int x; x = foobar(5); } bar () { int y; y = foobar(30); } int foobar (int z) { int i; i = z + 1; return i; } Sem caminhos falsos X = [6..6] Y = [31..31] I = [6..31] X = 5 +1 Y = Resumo: i = z + 1

31 Pode separar contexto de chamadas Número muito grande de variáveis de restrições Não suporta recursão Adicionando Sensibilidade de Contexto

32 Detector Front-End Código fonte C Restrições Lineares Warnings Buffer Overruns Intervalos para variáveis CFGs, PDGs e SDGs CodeSurfer Gerador de Restrições Taint Analyser Solucionador de Restrições

33 Detector Front-End buf_alloc_min buf_used_max Cenário 1: Possível Buffer Overrun

34 Detector Front-End buf_alloc_min buf_used_max Cenário 2: Buffer Overrun

35 Resultados: Buffer Overrun's AplicaçãoLinhas de Código WarningsVulnerabidadesDetectado? WU-FTPD CA Sim WU-FTPD Nenhuma14 Novos Sendmail Identificado por Wagner et al. Sim Sendmail CA Sim

36 Conclusão Foi construída uma ferramenta para detectar buffer overrun's Incorporada em um framework de entendimento de programas Relevâncias o foi adicionado sensibilidade ao fluxo o reduzindo o número de falso positivos e, ao mesmo tempo, mantendo a escalabilidade

37


Carregar ppt "Buffer Overrun Detection using Linear Programming and Static Analysis Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software 2008-1 Rodrigo."

Apresentações semelhantes


Anúncios Google