Table of Contents

2. Spații de adrese

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

Resurse

Exerciții

Arhiva de suport pentru exerciții se găsește aici. Descărcați arhiva și apoi decomprimați-o folosind comenzile:

wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/02-spatii-de-adrese-skel.zip
unzip 02-spatii-de-adrese-skel.zip

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

pmap -p $(pidof prog)

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

watch -d -n 1 pmap -p $(pidof prog)

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.

Faceți o modificare ca să alocați (într-o buclă, cel mai simplu) de 10 ori memorie de fiecare fel.

Acces read-write

Accesăm directorul read-write-areas/ 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?

Acces peste limite

Accesăm directorul over-the-edge/ 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.

Modificați programul pentru a vedea la ce index din cadrul fiecărei zone (data, stack, heap) obțineți segmentation fault.