This shows you the differences between two versions of the page.
|
so:curs:mem-sec [2020/04/04 15:34] razvan.deaconescu |
so:curs:mem-sec [2020/04/06 17:33] (current) alexandru.radovici |
||
|---|---|---|---|
| Line 16: | Line 16: | ||
| * Filmări | * Filmări | ||
| + | * 3CA [[https://web.microsoftstream.com/video/631f6edd-2f5b-474e-9f87-ae4edecbd93d]] | ||
| * 3CC, curs 11, partea 1: https://web.microsoftstream.com/video/ff52e02f-c2dc-49d6-b227-2dc9a1026625 | * 3CC, curs 11, partea 1: https://web.microsoftstream.com/video/ff52e02f-c2dc-49d6-b227-2dc9a1026625 | ||
| * 3CC, curs 11, partea a 2-a: https://web.microsoftstream.com/video/7bae5cdb-0a54-4f2e-b5a5-df039790ac37 | * 3CC, curs 11, partea a 2-a: https://web.microsoftstream.com/video/7bae5cdb-0a54-4f2e-b5a5-df039790ac37 | ||
| + | | ||
| + | * Curs CA [[https://www.slideshare.net/alexandruradovici/sisteme-de-operare-securitatea-memoriei|slideshare]] | ||
| ===== Demo-uri ===== | ===== Demo-uri ===== | ||
| Line 254: | Line 257: | ||
| <code> | <code> | ||
| - | $ checksec buffer-overflow | + | $ wget https://raw.githubusercontent.com/slimm609/checksec.sh/master/checksec |
| - | [*] '/home/razvan/school/so/git-repos/curs.git/curs-07-demo/buffer-overflow/buffer-overflow' | + | [...] |
| - | Arch: amd64-64-little | + | |
| - | RELRO: Partial RELRO | + | $ chmod a+x checksec |
| - | Stack: No canary found | + | |
| - | NX: NX enabled | + | $ ./checksec --file=buffer-overflow |
| - | PIE: No PIE (0x400000) | + | RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE |
| - | $ checksec buffer-overflow-pie | + | Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH 75 Symbols No 0 3 buffer-overflow |
| - | [*] '/home/razvan/school/so/git-repos/curs.git/curs-07-demo/buffer-overflow/buffer-overflow-pie' | + | |
| - | Arch: amd64-64-little | + | $ ./checksec --file=buffer-overflow-pie |
| - | RELRO: Full RELRO | + | RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE |
| - | Stack: No canary found | + | Full RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 77 Symbols No 0 3 buffer-overflow-pie |
| - | NX: NX enabled | + | |
| - | PIE: PIE enabled | + | $ ./checksec --file=buffer-overflow-ssp |
| - | $ checksec buffer-overflow-ssp | + | RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE |
| - | [*] '/home/razvan/school/so/git-repos/curs.git/curs-07-demo/buffer-overflow/buffer-overflow-ssp' | + | Partial RELRO Canary found NX enabled No PIE No RPATH No RUNPATH 76 Symbols Yes 0 3 buffer-overflow-ssp |
| - | Arch: amd64-64-little | + | |
| - | RELRO: Partial RELRO | + | |
| - | Stack: Canary found | + | |
| - | NX: NX enabled | + | |
| - | PIE: No PIE (0x400000) | + | |
| </code> | </code> | ||
| ==== Injectarea codului. Shellcodes ==== | ==== Injectarea codului. Shellcodes ==== | ||
| + | |||
| + | <note important> | ||
| + | Pentru acest demo trebuie să aveți instalat pe sistem asamblorul NASM. Pe un sistem Debian/Ubuntu îl puteți instala folosind comanda: | ||
| + | <code> | ||
| + | sudo apt install nasm | ||
| + | </code> | ||
| + | </note> | ||
| În exploit-urile prezentate mai sus am suprascris code pointeri și am modificat fluxul de execuție al programului apelând o funcție existentă (''inject_func''). Această metodă, de refolosire a codului existent în cadrul unui atac, poartă numele de //code reuse attacks//. Din păcate pentru atacator, în cazul unui atac de tipul //code reuse// spațiul posibil de acțiune este limitat la codul existent. Așa că este de preferat un atac de tipul //code injection// care adaugă (injectează) cod în spațiul virtual de adrese al procesului. În general acest cod rezidă într-o zonă de date (unde este citit) care primește permisiuni de execuție. | În exploit-urile prezentate mai sus am suprascris code pointeri și am modificat fluxul de execuție al programului apelând o funcție existentă (''inject_func''). Această metodă, de refolosire a codului existent în cadrul unui atac, poartă numele de //code reuse attacks//. Din păcate pentru atacator, în cazul unui atac de tipul //code reuse// spațiul posibil de acțiune este limitat la codul existent. Așa că este de preferat un atac de tipul //code injection// care adaugă (injectează) cod în spațiul virtual de adrese al procesului. În general acest cod rezidă într-o zonă de date (unde este citit) care primește permisiuni de execuție. | ||
| Line 390: | Line 395: | ||
| Programul este compilat cu suport de //Stack Smashing Protection// care plasează stack canary pe stivă în funcția ''process_client()''. Opțiunea de compilare ''-fstack-protector'' este adăugată în fișierul ''Makefile'': | Programul este compilat cu suport de //Stack Smashing Protection// care plasează stack canary pe stivă în funcția ''process_client()''. Opțiunea de compilare ''-fstack-protector'' este adăugată în fișierul ''Makefile'': | ||
| <code> | <code> | ||
| - | CFLAGS = -Wall -Wextra -g -fstack-protector -fno-PIC | + | CFLAGS = -Wall -Wextra -Wno-unused-function -g -fstack-protector -fno-PIC |
| </code> | </code> | ||