Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouGabrielle Coval Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.