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

Apresentações semelhantes


Apresentação em tema: "Buffer Overrun Detection using Linear Programming and Static Analysis"— Transcrição da apresentação:

1 Buffer Overrun Detection using Linear Programming and Static Analysis
10th ACM Conference on Computer and Communications Security. Washington, DC, October 2003. 10th ACM Conference on Computer and Communications Security. Washington, DC, October 2003. Vinod Ganapathy, Somesh Jha University of Wisconsin-Madison Vinod Ganapathy, Somesh Jha University of Wisconsin-Madison David Chandler, David Melski, David Vitek Grammatech Inc., Ithaca, New York David Chandler, David Melski, David Vitek Grammatech Inc., Ithaca, New York comentários principais: 1. voce precisa elaborar um exemplo no inicio da apresentacao mostrando como a tecnica funciona. 2. voce precisa detalhar mais as tecnicas. pelos slides que voce mostrou, não deu para entender. Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software Rodrigo Diego Melo Amorim Recife-PE Centro de Informática/UFPE Tópicos Avançados em Engenharia de Software Rodrigo Diego Melo Amorim Recife-PE

2 O Problema: Buffer Overflows
Classe de vulnerabilidades altamente exploradas Bug extremamente comum Programas legados escritos em C continuam vulneráveis Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação Correção: por favor, mostre um ou dois exemplos de buffer overflows. a seguir, tente generalizar situacoes que causar overflow. Source: NVD/CVE 2

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]); Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 3

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]); Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 4

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]); Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 5

6 A Solução: Análise Estática código fonte Possíveis Buffer Overrun’s 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 Um overview da solução e como ela é feita Comentários: confuso! o que eh uma lista de buffer overrun. eh este o termo usado no paper? talvez o que voce esteja querendo dizer seja uma lista de testes que constroem uma situacao de buffer overrun. eh isto?! 6

7 Análise Estática? Análise de Programa
Conceito abstrato de varredura de código antes de pôr em produção; Também conhecido como entendimento ou compreensão de programas; Várias técnicas, desde análise manual até ferramentas sofisticadas; Normalmente feita por ferramentas; Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 7

8 Contribuição Análise de Programa
detecção de buffer overrun incorporado a uma ferramenta de análise de programa fazer a análise de buffer overrun sensível ao contexto Torna os resultados mais precisos Resolução de restrições uso de programação linear para solucionar o problema de análise de intervalo Salienta-se neste slide a contribuição dada pelo paper Comentários: acho que a audiencia não sabera o que significa uma analise estatica sensitiva a contexto. voce precisa explicar o que eh isto e por que eh importante. 8

9 Sensibilidade de Contexto?
Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 9

10 Sensibilidade de Contexto?
Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 10

11 Sensibilidade de Contexto?
Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 11

12 Arquitetura da Ferramenta
Gerador de Restrições CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Figura que guiará toda a apresentação, sendo explicada cada passo do fluxo da solução Comentários: eh muito melhor que voce primeiro mostre um exemplo do inicio ao fim e depois tente generalizar o framework. o que eh o taint analyser? Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis 12

13 Code Surfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares
Gerador de Restrições CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis

14 Code Surfer ‘Detection Front-End’
Ferramenta comercial (Grammatech Inc.)‏ Ferramenta de analise de codigo. A partir de codigo, produz: Grafo de Fluxo de Controle (GFC) Grafo de Dependência de Programa (GDP) Grafo de Dependência de Sistema (GDS) ‘Detection Front-End’ Associa cada ‘warning’ gerado à linha do código fonte correspondente através do GDS; Explica-se nesta parte como funciona a ferramenta que foi tomada como base para elaborar a solução 14

15 Exemplo - código

16 Gerador de Restrições Código fonte C CFG’s, PDG’s e SDG’s
CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis

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

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

19 Exemplo – restrições geradas

20 Taint Analyser (Análise de Segurança)‏
Gerador de Restrições CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis

21 Análise de Segurança Remove variáveis de restrições não inicializadas
chamadas a bibliotecas não modeladas 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 Análise feita para filtrar as restrições geradas tornando o resultado mais eficaz 21

22 Solucionador de Restrições
Gerador de Restrições CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis

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

24 Programação Linear ? Uma função Objetiva: F
Sujeita a: Um conjunto de restrições lineares C Objetivo: otimizar o seu resultado Exemplo: Maximize: x sujeito a: x =< 3 Provavelmente essa parte pode demandar mais slides e, conseqüentemente, mais tempo de explicação 24

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

26 Solucionador de Restrições - Vanilla
é possível reescrever da seguinte forma: Min:Σ (var_max) - Σ(var_min)‏ 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 ? programas lineares infactíveis Lidamos com isso usando algoritmos de aproximação Identificamos Irreducibly Inconsistents Sets (IIS)

29 Análise insensível ao contexto
bar () { int y; y = foobar(30); } foo () { int x; x = foobar(5); } Essa parte tenta explicar a contribuição que, segundo o autor, torna-se mais relevante por aumentar a eficiência e diminuir o número de falsos positivos. Primeiramente explica-se como é uma análise insensível ao contexto e como ela está sendo feita até então pela solução ... int foobar (int z) { int i; i = z + 1; return i; } Resultado: x = y = [6..31] Caminho correto 1 Caminho correto 2 Caminho falso 29

30 Adicionando Sensibilidade de Contexto
bar () { int y; y = foobar(30); } foo () { int x; x = foobar(5); } Y = X = 5 +1 Logo após explica-se como será inserida uma análise sensível ao contexto à solução Resumo: i = z + 1 int foobar (int z) { int i; i = z + 1; return i; } Sem caminhos falsos X = [6..6] Y = [31..31] I = [6..31] 30

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

32 Detector ‘Front-End’ Código fonte C CFG’s, PDG’s e SDG’s
Gerador de Restrições CodeSurfer Código fonte C CFG’s, PDG’s e SDG’s Restrições Lineares Taint Analyser Restrições Lineares Solucionador de Restrições Warnings Buffer Overrun’s Intervalos para variáveis

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ção Linhas de Código Warnings Vulnerabidades Detectado? WU-FTPD-2.5.0 16000 139 CA Sim WU-FTPD-2.6.2 18000 178 Nenhuma 14 Novos Sendmail-8.7.6 38000 295 Identificado por Wagner et al. Sendmail 68000 453 CA Esta parte pretende mostrar os resultados da ferramenta mostrando uma tabela de comparação entre vários programas conhecidamente vulneráveis 35

36 Conclusão Foi construída uma ferramenta para detectar buffer overrun's
Incorporada em um framework de entendimento de programas Relevâncias foi adicionado sensibilidade ao fluxo 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"

Apresentações semelhantes


Anúncios Google