User Tools

Site Tools


secure-low-level-programming:capitole:08-masuri-defensive

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
secure-low-level-programming:capitole:08-masuri-defensive [2018/12/16 13:30]
127.0.0.1 external edit
secure-low-level-programming:capitole:08-masuri-defensive [2018/12/20 16:24] (current)
razvan [Fortify Source]
Line 1: Line 1:
 ====== 8. Măsuri defensive ====== ====== 8. Măsuri defensive ======
  
-TODO: Descriere scurtă+Compilatorul și sistemul de operare oferă mecanisme defensive cu rol în minimizarea riscului de atac în cadrul aplicațiilor. Acestea fac mai dificil efortul atacatorului,​ dar nu imposibil. În general, se recomandă folosirea unei palete cât mai largi de măsuri defensive, reținând că au un overhead de rulare.
  
 ===== Subiecte abordate ===== ===== Subiecte abordate =====
  
-  * TODO +  * atacator și apărător 
-  * TODO+  * perspectiva atacatorului 
 +  * măsuri defensive la runtime 
 +  * validarea intrării 
 +  * izolarea aplicațiilor 
 +  * securitatea fluxului de informație
  
 ===== Resurse ===== ===== Resurse =====
Line 15: Line 19:
 ===== Alte resurse ===== ===== Alte resurse =====
  
-  * TODO link +  * https://​github.com/​slimm609/​checksec.sh 
-  * TODO link +  * https://​github.com/​google/​sanitizers/​wiki/​AddressSanitizer 
-  * TODO link+  * https://​github.com/​google/​sanitizers 
 +  * https://​idea.popcount.org/​2013-08-15-fortify_source/​ 
 +  * https://​www.corelan.be/​index.php/​2009/​09/​21/​exploit-writing-tutorial-part-6-bypassing-stack-cookies-safeseh-hw-dep-and-aslr/​ 
 +  * http://​7h3ram.blogspot.com/​2012/​07/​exploit-mitigation-techniques-on-linux.html 
 +  * http://​fluxius.handgrep.se/​2011/​10/​20/​the-art-of-elf-analysises-and-exploitations/​
  
 ===== Exerciții ===== ===== Exerciții =====
Line 24: Line 32:
 wget http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​arc/​08-masuri-defensive-skel.zip wget http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​arc/​08-masuri-defensive-skel.zip
 unzip 08-masuri-defensive-skel.zip unzip 08-masuri-defensive-skel.zip
 +cd 08-masuri-defensive-skel/​
 </​code>​ </​code>​
  
-==== Exercițiu 1 ====+==== Măsuri defensive aplicate unui executabil ​====
  
-Accesăm directorul ''​lalala/''​ din arhiva de suport.+Accesăm directorul ''​checksec/''​ din arhiva de suport.
  
-TODO+Fișierul cod sursă ''​prog.c''​ (al cărui conținut nu ne interesează) este compilat și linkat cu diferite opțiuni în executabilele ''​prog_all''​ și ''​prog_no''​.
  
-==== Exercițiu 2 ====+Folosiți comanda ''​checksec''​ având, pe rând, ca argument, cele două executabile și observați ce opțiuni de securitate sunt prezente/​absente în fiecare. Urmăriți în fișierul ''​Makefile''​ opțiunile de compilare/​linkare folosite pentru fiecare.
  
-Accesăm directorul ''​lalala/''​ din arhiva de suport.+==== Stack Smashing Protection (SSP) ====
  
-TODO+Accesăm directorul ''​ssp/''​ din arhiva de suport.
  
-==== Exercițiu 3 ====+În fișierul ''​README''​ din director vi se indică să parcurgeți directoarele care încep cu ''​bo-''​ din [[:​secure-low-level-programming:​capitole:​06-exploatarea memoriei|Capitolul 06: Exploatarea memoriei]]. Reexploatați-le folosind atât opțiunea curentă ''​-fno-stack-protector''​ din fișierele ''​Makefile''​ existente (de dezactivare a SSP, //Stack Smashing Protection//​ sau //stack canary// sau //stack guard//), cât și opțiunea ''​-fstack-protector''​ de activare a SSP.
  
-Accesăm directorul ''​lalala/''​ din arhiva de suport.+==== Data Execution Prevention (DEP) ====
  
-TODO+Accesăm directorul ''​dep/''​ din arhiva de suport.
  
 +În fișierul ''​README''​ din director vi se indică să parcurgeți directoarele care conțin ''​-shellcode''​ din [[:​secure-low-level-programming:​capitole:​06-exploatarea memoriei|Capitolul 06: Exploatarea memoriei]]. Reexploatați-le folosind atât opțiunea curentă ''​-zexecstack''​ din fișierele ''​Makefile''​ existente (de dezactivare a DEP, //Data Execution Prevention//​),​ cât și eliminarea opțiunii, pentru activarea DEP.
  
 +Se observă că deși acum executabilul are activat DEP (verificați cu ''​checksec''​) în continuare exploit-ul funcționează. Acest lucru se întâmplă întrucât variabila ''​shellcode''​ este de tipul ''​const char'',​ adică parte din ''​.rodata'',​ secțiune care se "​unește"​ cu cea de text și este executabilă. Ca să nu meargă faceți tipul variabilei ''​shellcode''​ să fie ''​char''​ (fără ''​const''​),​ pentru ca variabila să fie reținută în ''​.data'',​ zonă care este //​writable//​ dar **nu** //​executable//​.
 +
 +==== Fortify Source ====
 +
 +Accesăm directorul ''​fortify_source/''​ din arhiva de suport.
 +
 +Urmăriți conținutul fișierului ''​prog.c''​ și rulați executabilul ''​prog''​.
 +
 +În fișierul ''​Makefile''​ comentați prima linie ca să dezactivați opțiunea ''​_FORTIFY_SOURCE'':​
 +<​code>​
 +# CPPFLAGS = -D_FORTIFY_SOURCE=2
 +</​code>​
 +
 +Exploatați executabilul ''​vuln''​.
 +
 +Apoi decomentați prima linie din ''​Makefile''​ și încercați din nou exploatarea executabilului ''​vuln''​. În mod obișnuit, absența/​dezactivarea opțiunii ''​_FORTIFY_SOURCE''​ nu ar mai permite exploatarea executabilului. Cu toate acestea, e posibil ca anumite versiuni de compilator să definească implicit opțiunea ''​_FORTIFY_SOURCE''​. Soluția este să precizăm valoarea ''​0''​ pentru opțiunea în fișierul ''​Makefile''​ ca mai jos:
 +<​code>​
 +CPPFLAGS = -D_FORTIFY_SOURCE=0
 +</​code>​
 +
 +==== Address Sanitizer ====
 +
 +Accesăm directorul ''​asan/''​ din arhiva de suport.
 +
 +Urmăriți conținutul fișierului ''​prog.c''​ și rulați executabilul ''​prog''​. Fișierul executabil ''​prog''​ este obținut folosind suport de //Address Sanitizer//,​ așa cum puteți observa din fișierul ''​Makefile''​.
 +
 +La rularea executabilului,​ //Address Sanitizer// detectează situația de //stack buffer overflow//.
secure-low-level-programming/capitole/08-masuri-defensive.1544959815.txt.gz · Last modified: 2018/12/16 13:30 by 127.0.0.1