tópicos de engenharia de computação b professor: edmar rezende alunos: artur praseres varejão...
TRANSCRIPT
Tópicos de Engenharia de Computação B
Professor: Edmar RezendeAlunos:
Artur Praseres Varejão RA: 04142030Everton Segato Zanon RA: 04251559 Guilherme Hayashi RA: 04122529Raphael Ricciotti RA: 04148235
(Buffer Overflow…)
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:
Estruturas adjacentes:
A – cadeia de caracteres
B – número
-> Inserir a palavra transbordar na estrutura A
o que vai acontecer?o que vai acontecer?
• CONSEQUENCIAS:
– FUNCIONAMENTO ERRADO
– FALHA DE SEGMENTAÇÃO
– HORAS DE DESENVOLVIMENTO PERDIDO
– TEMPO ELEVADO PARA ENCONTRAR O ERRO
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