A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Buffer Overflows Julio Auto - jam.

Apresentações semelhantes


Apresentação em tema: "Buffer Overflows Julio Auto - jam."— Transcrição da apresentação:

1 Buffer Overflows Julio Auto - jam

2 Roteiro Introdução Stack Overflows Heap Overflows Integer Overflows
Format String Attacks Conclusões Referências

3 Introdução - Prólogo Fudamentos sobre Intel x86 Ambiente Linux/UNIX
Pré-requisito: programação C (ou linguagem de sintaxe similar) No entanto, os conceitos se aplicam a outros S.O.’s, arquiteturas e linguagens modernos

4 Introdução - Histórico
1970: Criação da Linguagem C, K&R 1988: Worm de Robert T. Morris Jr. 1996: Phrack publica “Smashing The Stack For Fun And Profit”, de AlephOne 2001: “Exploiting Format String Vulnerabilities”, de scut 2001: Phrack 57

5 Introdução – O Que É Estouro da memória de um buffer
Stack/Heap overflows Sobrescrita de dados Comportamento inesperado Denial of Service Execução de código arbitrário

6 Introdução – O Que É (2) /* buf é um array com capacidade para 8 int’s */ for (i = 0; i <= 8; i++) buf[i] = 0; /* o que acontece? */

7 Introdução – Para Que Serve
Local Escalação de privilégios SUID Remoto Acesso (de preferência root)

8 Stack Overflows A Stack é uma área do espaço de endereçamento de cada processo LIFO (Push/Pop) Manipulação indireta do ESP “Empilha” (para baixo) chamadas às funções Guarda parâmetros das funções Guarda variáveis locais às funções

9 Stack Overflows (2) Cada função chamada cria um novo frame
Armazenamento do endereço de retorno (call) Armazenamento do EBP Ao término da função, o frame é destruído EBP restaurado Controle dado para a instrução apontada pelo endereço de retorno (ret)

10 Stack Overflows (3) Figura tirada de:

11 Stack Overflows (4) Imagine que “local var #2” é um array de 4 char’s
O que acontece quando executamos a seguinte linha de código passando uma string “evil” maior do que 3 caracteres? strcpy (localvar2, evil);

12 Stack Overflows (5)

13 Stack Overflows (6) Sobrescrita de memória indevida
Qual a importância dos valores na memória sobrescrita? Quão importante são para o fluxo do programa? Podemos controlar esses valores?

14 Stack Overflows (7) Variáveis locais = (possivelmente) não tão importantes EBP e EIP = problemas maiores Controle do EIP = controle do fluxo Mas controlar para onde? Shellcode!

15 Stack Overflows (8) Shellcode
Código a ser executado pelo programa comprometido Pode ser armazenado no próprio buffer Afinal de contas, código é apenas uma sequência de bytes

16 Stack Overflows (9) Quanto espaço um shellcode precisa?
Shell local ~ 24 bytes Bindshell ~ 80 bytes Normalmente, menos do que há disponível

17 Stack Overflows (10) Como saber o endereço do shellcode?
Normalmente, a stack está sempre na mesma posição quando o bug ocorre Brute-Force Algumas melhorias NOPs Variáveis de Ambiente

18 Stack Overflows (11) Contra-medidas Contra-contra-medidas
Non-exec stack ASLR(Address Space Layout Randomization) Programação decente  Contra-contra-medidas ret-into-libc

19 Heap Overflows Heap = espaço para alocação de memória dinâmica
malloc() calloc() realloc() free()

20 Heap Overflows (2) Diferentes implementações do algoritmo de memory management (malloc): Doug Lea BSD Kingsley BSD PHK System V Yorktown RtlHeap

21 Heap Overflows (3) Heap Overflows mais complicados de explicar que Stack Overflows Dependem da implementação do malloc ‘Chunks’ de malloc contêm headers: Tamanho do chunk, Tamanho do chunk anterior, Flags...

22 Heap Overflows (4) O interessante agora é sobrescrever os valores desses headers O algoritmo pode fazer algo indevido se os valores nos headers foram corrompidos Durante um free(), o algoritmo de Doug Lea pode escrever o endereço de nosso buffer em outro endereço (arbitrário)

23 Heap Overflows (5) Sobrescrita do endereço de retorno com o endereço do buffer Buffer = Shellcode Double-free’s Dois free()’s de um mesmo ponteiro também corrompem as estruturas do malloc Depois disso, dois malloc()’s consecutivos podem retornar o mesmo ponteiro

24 Heap Overflows (5) Contra-medidas XÅW
Ajuda de heap profilers no desenvolvimento Programação decente 

25 Integer Overflows Estouro dos limites de um inteiro
ie., um número muito grande para caber em um int é “truncado” Como bug, sozinho não é tão perigoso Mas pode ser usado como vetor para o disparo de outros bugs

26 Integer Overflows (2) Antiga vulnerabilidade no OpenSSH:
input_userauth_info_response() em auth2-chall.c: nresp = packet_get_int(); if (nresp > 0) { response = xmalloc(nresp * sizeof(char*)); for (i = 0; i < nresp; i++) response[i] = packet_get_string(NULL); }

27 Integer Overflows (3) Contra-medidas Programação decente 

28 Format String Attacks Format Strings são strings usadas para formatar um número arbitrário de parâmetros de tipo arbitrário em uma única string, eg.: /* sprintf (char *buffer, const char *format [, argument, ...]); */ sprintf(output, “Nome: %s\nNumero: %d\n”, nome, numero); printf(“Dados:\n%s”, output);

29 Format String Attacks (2)
E se uma format string recebe mais argumentos do que os que foram passados para a função? Ela vai ler (ou escrever) o que estiver na stack

30 Format String Attacks (3)
O problema está quando o programa nos deixa controlar a format string: Poderia ser feito diferente? /* fprintf (FILE *stream, const char *format [, argument, ...]); */ fprintf(file, string); /* fprintf (FILE *stream, const char *format [, argument, ...]); */ fprintf(file, “%s”, string);

31 Format String Attacks (4)
Format Strings maliciosas podem: Ler o conteúdo de qualquer lugar na memória Escrever qualquer valor em qualquer lugar da memória O resto não é novidade: Injeção do shellcode, Sobrescrita do endereço de retorno...

32 Format String Attacks (5)
Contra-medidas Programação decente 

33 Conclusões Buffer Overflow é um dos tipos de bug mais comuns e mais perigosos A exploração de um buffer overflow pode invalidar várias medidas de segurança: Firewalls, Criptografia...

34 Conclusões (2) O mundo procura por soluções:
Linguagens “seguras”, Softwares de bug-hunting, Proteções em memory-level... Até lá, somente uma medida se mostra infalível: Programação decente 

35 Referências Phrack - http://www.phrack.org/
sshutup-theo -

36 Buffer Overflows Julio Auto - jam


Carregar ppt "Buffer Overflows Julio Auto - jam."

Apresentações semelhantes


Anúncios Google