Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouManoela Savedra Alterado mais de 10 anos atrás
1
(Buffer Overflow…) Tópicos de Engenharia de Computação B
Professor: Edmar Rezende Alunos: Artur Praseres Varejão RA: Everton Segato Zanon RA: Guilherme Hayashi RA: Raphael Ricciotti RA:
2
Agenda Introdução Visão Geral Ataques Códigos Prevenção Demonstração
Buffer Overflow Baseado em Pilha Buffer Overflow Baseado em Heapy Buffer Overflow de Retorno a Libc Códigos Prevenção Demonstração Perguntas
3
Introdução O que é? Quando ocorre ? Vulnerabilidade
É 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
4
Visão Geral Exemplo: A: B: CONSEQUENCIAS: Estruturas adjacentes:
FUNCIONAMENTO ERRADO FALHA DE SEGMENTAÇÃO HORAS DE DESENVOLVIMENTO PERDIDO TEMPO ELEVADO PARA ENCONTRAR O ERRO Exemplo: A: B: Estruturas adjacentes: A – cadeia de caracteres B – número -> Inserir a palavra transbordar na estrutura A o que vai acontecer?
5
Ataques Como é explorada esta Vulnerabilidade? Tipos de Ataque
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
6
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
7
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
8
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
9
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]);
10
Prevenção Como evitar Tabela de risco de funções:
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:
11
US-Cert – Falha de BO no Winamp
12
Demonstração
13
Perguntas
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.