Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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...
Upcoming SlideShare
Loading in …5
×

9 - segurança - ataques buffer-injection

377 views

Published on

9 - segurança - ataques buffer-injection

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

×