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 08:14]
razvan
secure-low-level-programming:capitole:08-masuri-defensive [2018/12/20 16:24] (current)
razvan [Fortify Source]
Line 16: Line 16:
   * [[http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​slides/​08-masuri-defensive.pdf|Slide-uri]]   * [[http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​slides/​08-masuri-defensive.pdf|Slide-uri]]
   * [[http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​arc/​08-masuri-defensive-skel.zip|Arhiva de suport]]   * [[http://​koala.cs.pub.ro/​training/​res/​secure-low-level-programming/​arc/​08-masuri-defensive-skel.zip|Arhiva de suport]]
 +
 +===== Alte resurse =====
 +
 +  * https://​github.com/​slimm609/​checksec.sh
 +  * https://​github.com/​google/​sanitizers/​wiki/​AddressSanitizer
 +  * 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 22: 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 unzip 08-masuri-defensive-skel/​+cd 08-masuri-defensive-skel/​
 </​code>​ </​code>​
  
Line 44: 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 58: 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.1545286445.txt.gz · Last modified: 2018/12/20 08:14 by razvan