enabling client side crash resistance to overcome
play

Enabling Client-Side Crash-Resistance to Overcome Diversification - PowerPoint PPT Presentation

Enabling Client-Side Crash-Resistance to Overcome Diversification and Information Hiding Robert Gawlik , Benjamin Kollenda, Philipp Koppe, Behrad Garmany, Thorsten Holz Ruhr University Bochum Horst Grtz Institute for IT-Security Bochum,


  1. Enabling Client-Side Crash-Resistance to Overcome Diversification and Information Hiding Robert Gawlik , Benjamin Kollenda, Philipp Koppe, Behrad Garmany, Thorsten Holz Ruhr University Bochum Horst Görtz Institute for IT-Security Bochum, Germany

  2. Crash-Resistance

  3. Crash-Resistance char* addr = 0; void crash(){ addr++; printf("reading %x", addr); char content = *(addr); printf("read done"); } int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  4. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ addr++; printf("reading %x", addr); char content = *(addr); printf("read done"); } int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  5. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); char content = *(addr); printf("read done"); } int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  6. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); • crash() generates a fault on char content = *(addr); first execution printf("read done"); } int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  7. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); • crash() generates a fault on char content = *(addr); first execution printf("read done"); } Program should int main(){ MSG msg; terminate abnormally SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  8. NDSS 2016 | San Diego | 02/24/2016

  9. NDSS 2016 | San Diego | 02/24/2016

  10. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); • crash() generates a fault on char content = *(addr); first execution printf("read done"); } Program should int main(){ MSG msg; terminate abnormally SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  11. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); • crash() generates a fault on char content = *(addr); first execution printf("read done"); } Instead: int main(){ MSG msg; Program runs endlessly SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  12. Crash-Resistance char* addr = 0; • Set timer callback crash() void crash(){ • Dispatch crash() each ms addr++; printf("reading %x", addr); • crash() generates a fault on char content = *(addr); first execution printf("read done"); } int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  13. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); } printf("read done"); __except( expr ) } { int main(){ MSG msg; } SetTimer(0, 0, 1, crash); while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  14. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); Access violation } printf("read done"); __except( expr ) } { int main(){ MSG msg; } SetTimer(0, 0, 1, crash); while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  15. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); Access violation } printf("read done"); __except( expr ) } expr returns 1 { int main(){ MSG msg; } SetTimer(0, 0, 1, crash); while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  16. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); Access violation } printf("read done"); __except( expr ) } expr returns 1 { int main(){ execute handler MSG msg; } SetTimer(0, 0, 1, crash); while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  17. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); Access violation } printf("read done"); __except( expr ) } expr returns 1 { int main(){ execute handler MSG msg; } SetTimer(0, 0, 1, crash); continue execution while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  18. Crash-Resistance Behind the Scenes char* addr = 0; DispatchMessage: void crash(){ __try addr++; { printf("reading %x", addr); crash() char content = *(addr); } printf("read done"); __except( expr ) } { int main(){ MSG msg; } SetTimer(0, 0, 1, crash); while (1){ return GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  19. Crash-Resistance Behind the Scenes char* addr = 0; void crash(){ addr++; printf("reading %x", addr); If a fault is generated, char content = *(addr); execution is printf("read done"); transferred to the end } of the loop int main(){ MSG msg; SetTimer(0, 0, 1, crash); while (1){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  20. Crash-Resistance Behind the Scenes char* addr = 0; void crash(){ addr++; printf("reading %x", addr); If a fault is generated, char content = *(addr); execution is printf("read done"); transferred to the end } of the loop int main(){ MSG msg; SetTimer(0, 0, 1, crash); Program continues while (1){ running despite GetMessage(&msg, NULL, 0, 0); producing faults DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  21. Crash-Resistance Behind the Scenes char* addr = 0; void crash(){ addr++; printf("reading %x", addr); If a fault is generated, char content = *(addr); execution is printf("read done"); transferred to the end } of the loop int main(){ MSG msg; SetTimer(0, 0, 1, crash); Program continues while (1){ running despite GetMessage(&msg, NULL, 0, 0); producing faults DispatchMessage(&msg); } } NDSS 2016 | San Diego | 02/24/2016

  22. Client-Side Crash-Resistance

  23. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination NDSS 2016 | San Diego | 02/24/2016

  24. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination → Attacks: ASLR de-randomization [1]; Hacking Blind [2]; Missing the Point(er) [3] NDSS 2016 | San Diego | 02/24/2016

  25. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination → Attacks: ASLR de-randomization [1]; Hacking Blind [2]; Missing the Point(er) [3] • Client programs do not restart upon a crash (e.g., web browsers ) NDSS 2016 | San Diego | 02/24/2016

  26. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination → Attacks: ASLR de-randomization [1]; Hacking Blind [2]; Missing the Point(er) [3] • Client programs do not restart upon a crash (e.g., web browsers ) • Crash-resistant code constructs are available in browsers NDSS 2016 | San Diego | 02/24/2016

  27. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination → Attacks: ASLR de-randomization [1]; Hacking Blind [2]; Missing the Point(er) [3] • Client programs do not restart upon a crash (e.g., web browsers ) • Crash-resistant code constructs are available in browsers • Crash-resistant code prevents abnormal termination of browsers NDSS 2016 | San Diego | 02/24/2016

  28. Client-Side Crash-Resistance • Server applications respawn upon abnormal termination → Attacks: ASLR de-randomization [1]; Hacking Blind [2]; Missing the Point(er) [3] • Client programs do not restart upon a crash (e.g., web browsers ) • Crash-resistant code constructs are available in browsers • Crash-resistant code prevents abnormal termination of browsers • It is possible to access memory more than once with wrong permissions NDSS 2016 | San Diego | 02/24/2016

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend