Gerência de Redes de
Computadores
- Ataques Remotos-
Buffer Overflow
Prof. André Peres
andre.peres@poa.ifrs.edu.br
Sobre este material
• Vídeos da apresentação em:
https://youtu.be/8L5nKkd_rhw
Este trabalho está licenciado sob uma Licenç...
Ataques de Buffer Overflow
• Buffer Overflow
• Estouro de buffer:
• atribuição de volume dados de tamanho superior ao
espa...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
• pilha (stack):
• cada processo possui uma pilha
• estrutura FIL...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
Código (RO)
Dados (RW)
Stack (RW)
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
void proc1 () {
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
Início do prog
v...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
void proc1 () {
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
chama proc
void ...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
cód após proc
& ...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
continua de onde...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função segue o código
v...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
void proc1 () {
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
Início do prog
v...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
void proc1 () {
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
chama proc
void ...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
cód após proc
& ...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
Processo:
principal
Dados (RW)
Stack (RW)
função
& cód após proc
...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
• pilha (stack):
• Estouro Acidental:
• erro no programa → progra...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
• Heap:
• área de memória do sistema operacional
• alocada dinami...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
• Heap:
• a memória é alocada em blocos (chunks)
• os blocos são ...
Ataques de Buffer Overflow
• Buffer Overflow → conceitos
• Heap:
• Estouro Acidental:
• erro em qualquer processo que esti...
Próximos SlideShares
Carregando em…5
×

9 - segurança - ataques buffer-injection

273 visualizações

Publicada em

9 - segurança - ataques buffer-injection

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
273
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

9 - segurança - ataques buffer-injection

  1. 1. Gerência de Redes de Computadores - Ataques Remotos- Buffer Overflow Prof. André Peres andre.peres@poa.ifrs.edu.br
  2. 2. Sobre este material • Vídeos da apresentação em: https://youtu.be/8L5nKkd_rhw Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-NãoComercial-SemDerivações 4.0 Internacional. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-nd/4.0/.
  3. 3. Ataques de Buffer Overflow • Buffer Overflow • Estouro de buffer: • atribuição de volume dados de tamanho superior ao espaço reservado em memória • causa: falta de verificação no código dos programas
  4. 4. Ataques de Buffer Overflow • Buffer Overflow → conceitos • pilha (stack): • cada processo possui uma pilha • estrutura FILO (first in last out) • bloco contínuo de memória junto ao processo • utilizada para: • armazenamento de parâmetros de funções • variáveis locais de funções/proc • valores para retorno da função (endereços de retorno) ex: int exArray[10];
  5. 5. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: Código (RO) Dados (RW) Stack (RW)
  6. 6. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  7. 7. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função Início do prog void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  8. 8. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); } código inicial
  9. 9. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função chama proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  10. 10. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função cód após proc & cód após proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  11. 11. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc inicia proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  12. 12. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc cria var buffer de 10 bytes buffer void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  13. 13. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  14. 14. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc retorno PC <- & cód após proc buffer void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  15. 15. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função continua de onde parou void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  16. 16. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função segue o código void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  17. 17. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função void proc1 () { char buffer[10]; … } int main (void) { int i=0; proc1 (); ... exit(0); } Overflow
  18. 18. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função Início do prog void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  19. 19. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); } código inicial
  20. 20. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função chama proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  21. 21. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função cód após proc & cód após proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  22. 22. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc inicia proc void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  23. 23. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc cria var buffer de 10 bytes buffer void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  24. 24. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  25. 25. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer buffer Usuário entra com volume de dados maior que 10 bytes void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  26. 26. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer buffer buffer Invade a área da pilha e escreve sobre o endereço de retorno void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  27. 27. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer *cód malicioso* buffer o conteúdo extra possui código malicioso void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  28. 28. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc resto do proc buffer *cód malicioso* & cod mal e o novo endereço de retorno aponta para este código !!!! void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  29. 29. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc buffer *cód malicioso* & cod mal retorno PC <- & cód malicioso void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  30. 30. Ataques de Buffer Overflow • Buffer Overflow → conceitos Processo: principal Dados (RW) Stack (RW) função & cód após proc buffer *cód malicioso* & cod malcód malicioso executado void proc1 () { char buffer[10]; … } int main (void) { ... proc1 (); ... exit(0); }
  31. 31. Ataques de Buffer Overflow • Buffer Overflow → conceitos • pilha (stack): • Estouro Acidental: • erro no programa → programa finaliza • mensagem de estouro de buffer (SO) • Estouro Malicioso • execução de código malicioso • privilégios do processo explorado
  32. 32. Ataques de Buffer Overflow • Buffer Overflow → conceitos • Heap: • área de memória do sistema operacional • alocada dinamicamente pelos processos • não é necessário reservar memória na compilação • alocada explicitamente (new/malloc/calloc) ex: int* exArray = new int[10];
  33. 33. Ataques de Buffer Overflow • Buffer Overflow → conceitos • Heap: • a memória é alocada em blocos (chunks) • os blocos são interligados via ponteiros • os ponteiros estão em um cabeçalho (header) • overflow de um bloco permite alterar o header do próximo bloco (ex: ponteiros) • o atacante consegue incluir chunks controlados por ele na estrutura alterando os ponteiros • o atacante consegue unir chunks provocando o overflow na pilha ⇒ alteração do endereço de retorno
  34. 34. Ataques de Buffer Overflow • Buffer Overflow → conceitos • Heap: • Estouro Acidental: • erro em qualquer processo que estiver usando a área da memória invadida (o SO deve proteger) • Estouro Malicioso • execução de código malicioso • privilégios do processo explorado

×