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

Both sides previous revision Previous revision
Next revision
Previous revision
secure-low-level-programming:capitole:08-masuri-defensive [2018/12/20 11:45]
razvan [Exerciții]
secure-low-level-programming:capitole:08-masuri-defensive [2018/12/20 16:24] (current)
razvan [Fortify Source]
Line 54: Line 54:
  
 Î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. Î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 ==== ==== Fortify Source ====
Line 68: Line 70:
 Exploatați executabilul ''​vuln''​. Exploatați executabilul ''​vuln''​.
  
-Apoi decomentați prima linie din ''​Makefile''​ și încercați din nou exploatarea executabilului ''​vuln''​. ​Observați că activarea ​opțiunii ''​_FORTIFY_SOURCE''​ nu mai permite exploatarea executabilului.+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 ==== ==== Address Sanitizer ====
  
-Accesăm directorul ''​fortify_source/''​ din arhiva de suport.+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''​. 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//. La rularea executabilului,​ //Address Sanitizer// detectează situația de //stack buffer overflow//.
secure-low-level-programming/capitole/08-masuri-defensive.1545299159.txt.gz · Last modified: 2018/12/20 11:45 by razvan