This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
secure-low-level-programming:capitole:02-spatii-de-adrese [2018/12/16 13:29] 127.0.0.1 external edit |
secure-low-level-programming:capitole:02-spatii-de-adrese [2018/12/17 17:06] (current) razvan [Spațiul de adrese] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 2. Spații de adrese ====== | ====== 2. Spații de adrese ====== | ||
- | TODO: Descriere scurtă | + | Ne interesează modul în care este structurat spațiul de adrese al unui proces pentru a înțelege vulnerabilitățile legate de memoria sa. Vom vorbi despre zonele din spațiul de adrese al unui proces, rolul fiecăreia și perspective de cum pot fi atacate. |
===== Subiecte abordate ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * procese |
- | * TODO | + | * spațiul (virtual) de adrese al unui proces |
+ | * zone din spațiul virtual de adrese | ||
+ | * alocarea și accesarea memoriei | ||
===== Resurse ===== | ===== Resurse ===== | ||
Line 12: | Line 14: | ||
* [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/slides/02-spatii-de-adrese.pdf|Slide-uri]] | * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/slides/02-spatii-de-adrese.pdf|Slide-uri]] | ||
* [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/02-spatii-de-adrese-skel.zip|Arhiva de suport]] | * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/02-spatii-de-adrese-skel.zip|Arhiva de suport]] | ||
- | |||
- | ===== Alte resurse ===== | ||
- | |||
- | * TODO link | ||
- | * TODO link | ||
- | * TODO link | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
Line 26: | Line 22: | ||
</code> | </code> | ||
- | ==== Exercițiu 1 ==== | + | ==== Spațiul de adrese ==== |
+ | |||
+ | Accesăm directorul ''address-space/'' din arhiva de suport. | ||
+ | |||
+ | Urmăriți conținutul fișierului ''prog.c'' și rulați executabilul ''prog''. | ||
+ | |||
+ | Într-o altă consolă rulați comanda | ||
+ | <code> | ||
+ | pmap -p $(pidof prog) | ||
+ | </code> | ||
+ | Comanda afișează spațiul virtual de adrese al procesului. | ||
+ | |||
+ | Dacă doriți să urmăriți continuu (automat) spațiul virtual de adrese al procesului, rulați comanda | ||
+ | <code> | ||
+ | watch -d -n 1 pmap -p $(pidof prog) | ||
+ | </code> | ||
+ | |||
+ | Treceți prin fiecare pas în program și rulați comanda de mai sus la fiecare pas pentru a vedea cum se modifică (sau nu) zonele din spațiul virtual de adrese al procesului. | ||
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Faceți o modificare ca să alocați (într-o buclă, cel mai simplu) de 10 ori memorie de fiecare fel. |
- | TODO | + | ==== Acces read-write ==== |
- | ==== Exercițiu 2 ==== | + | Accesăm directorul ''read-write-areas/'' din arhiva de suport. |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Urmăriți conținutul fișierului ''prog.c'' și rulați executabilul ''prog''. Generați accesarea de fiecare tip (//read// sau //write//) a fiecărei zone de mari de memorie a unui proces. De ce la unele primiți //segmentation fault//? |
- | TODO | + | ==== Acces peste limite ==== |
- | ==== Exercițiu 3 ==== | + | Accesăm directorul ''over-the-edge/'' din arhiva de suport. |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. Observați cum accesarea dincolo de limitele buffer-ului nu generează //segmentation fault//. |
- | TODO | + | Modificați programul pentru a vedea la ce index din cadrul fiecărei zone (''data'', ''stack'', ''heap'') obțineți //segmentation fault//. |