(Buffer Overflow…)
Tópicos de Engenharia de Computação B
Professor: Edmar Rezende
Alunos:
Artur Praseres Varejão
Everton Segato Zanon
Guilherme Hayashi
Raphael Ricciotti
RA: 04142030
RA: 04251559
RA: 04122529
RA: 04148235
Agenda
• Introdução
• Visão Geral
• Ataques
• Buffer Overflow Baseado em Pilha
• Buffer Overflow Baseado em Heapy
• Buffer Overflow de Retorno a Libc
•
•
•
•
Códigos
Prevenção
Demonstração
Perguntas
Introdução
• O que é?
•
É uma falha de segurança cometida por
falha do programador durante o período de
desenvolvimento de um software.
• Quando ocorre ?
•
Ocorre quando o tamanho do buffer
ultrapassa sua capacidade máxima de
armazenamento.
• Vulnerabilidade
•
O envio de dados maliciosos à um programa
por meio de um buffer de dados não
dimensionado, podendo corromper dados,
quebrar o programa ou executar código
malicioso
Visão Geral
• Exemplo:
• A:
• B:
• CONSEQUENCIAS:
–
FUNCIONAMENTO ERRADO
–
FALHA DE SEGMENTAÇÃO
–
HORAS DE DESENVOLVIMENTO
PERDIDO
–
TEMPO ELEVADO PARA ENCONTRAR
O ERRO
Estruturas adjacentes:
A – cadeia de caracteres
B – número
-> Inserir a palavra transbordar na estrutura A
o que vai acontecer?
Ataques
• Como é explorada esta Vulnerabilidade?
• Explorando-se esta vulnerabilidade pode-se deixar que
informações contidas em memória sejam sobrescritas por
dados inconsistentes como a área de memória onde se
encontra, valor de variáveis locais, parâmetros e/ou endereço
de retorno de uma função. Os dados maliciosos podem
substituir o endereço de retorno da função, transferindo assim
os dados para o controle do atacante.
• Tipos de Ataque
• Buffer Overflow Baseado em Pilha
• Buffer Overflow Baseado em Heapy
• Buffer Overflow de Retorno a Libic
Buffer Overflow Baseado em Pilha
• Como Funciona?
• A técnica de exploração mais simples e comum, atua pela
alteração do estado da pilha durante a execução do programa
para direcionar a execução para o código malicioso contido no
buffer estourado
• Formato
Buffer Overflow Baseado em Heap
• Como Funciona?
• Bem mais difícil de explorar, por causa da disciplina de acesso
à heap (blocos não contíguos, fragmentação interna). Deve-se
estourar o buffer armazenado na área da heap em direção ao
endereço de retorno na pilha, para direcionar a execução para
o código malicioso que se encontra no buffer estourado
• Formato
Buffer Overflow de Retorno a Libc
• Como Funciona?
• Alteram o fluxo de execução pelo estouro de algum buffer na
pilha ou heap, para algum trecho de código armazenado no
segmento de texto do programa. Tipicamente este trecho de
código é alguma chamada de função comumente utilizada da
biblioteca padrão libc, como as chamadas de execução
arbitrária de comandos (funções da família exec(3))..
• Formato
Exemplos com códigos
void processaParam ( char * arg )
{
char buffer[10];
strcpy(buffer, arg);
/* PROBLEMA: se a string arg tiver mais que 10 caracteres
então ela irá exceder o tamanho de buffer
provocando um buffer overflow */
printf(buffer);
}
void main ( int argc, char *argv[] )
{
if(arg > 1)
{
printf(“param: %s\n”, argv[1]);
processaParam(argv[1]);
}
}
Prevenção
• Como evitar
• Boas Práticas de programação para evitar ataques de Buffer
Overflow mostram que o ideal é evitar funções que não
especifiquem o número máximo de caracteres a serem
copiados entre strings.
• Tabela de risco de funções:
US-Cert – Falha de BO no Winamp
Demonstração
Perguntas
Download

Buffer Overflow Baseado em Pilha