This shows you the differences between two versions of the page.
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//. |