Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão...

13
Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme Hayashi RA: 04122529 Raphael Ricciotti RA: 04148235 (Buffer Overflow…)

Transcript of Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão...

Page 1: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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…)

Page 2: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 3: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 4: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 5: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 6: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 7: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 8: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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

Page 9: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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]);}

}

Page 10: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

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:

Page 11: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

US-Cert – Falha de BO no Winamp

Page 12: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

Demonstração

Page 13: Tópicos de Engenharia de Computação B Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: 04142030 Everton Segato Zanon RA: 04251559 Guilherme.

Perguntas