Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:cursuri:curs-13 [2014/04/14 18:10]
razvan.deaconescu created
so:cursuri:curs-13 [2017/02/23 16:34] (current)
razvan.deaconescu
Line 1: Line 1:
-====== Curs 13 - Securitatea ​sistemelor de operare ​====== +====== Curs 13 - Securitatea ​sistemului ​======
- +
-<​html>​ +
-<iframe src="​http://​prezi.com/​embed/​0oxmg6hvis3u/?​bgcolor=ffffff&​amp;​lock_to_path=0&​amp;​autoplay=0&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​ +
-</​html>​ +
- +
-  * [[http://​prezi.com/​0oxmg6hvis3u/​so-curs-12/?​kw=view-0oxmg6hvis3u&​rc=ref-31844697 | Curs 12 - Securitatea sistemelor de operare (Vizualizare Prezi)]] +
-  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-12.pdf | Curs 12 - Securitatea sistemelor de operare (PDF)]]+
  
 +  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-13.pdf|Curs 13 - Securitatea sistemului (PDF)]]
   * Suport curs   * Suport curs
-    * Operating System Concepts +    * Operating System Concepts ​Essentials 
-      * Capitolul ​14 -- Protection +      * Capitolul ​13 -- Protection 
-      * Capitolul ​15 -- Security +      * Capitolul ​14 -- Security 
-        * Secțiunile ​15.1, 15.2, 15.5 +        * Secțiunile ​14.1, 14.2, 14.5 
-    * Modern Operating Systems+    * Modern Operating Systems, 3rd Edition
       * Capitolul 9 -- Security       * Capitolul 9 -- Security
-        * Secțiunile 9.4, 9.6+        * Mai puțin secțiunea ​9.6: Exploiting Code Bugs 
 + 
 +<​html>​ 
 +  <​center>​ 
 +    <iframe src="​https://​docs.google.com/​viewer?​url=http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-13.pdf&​embedded=true"​ width="​600"​ height="​480"​ style="​border:​ none;">​ 
 +    </​iframe>​ 
 +  </​center>​ 
 +</​html>​
  
 ===== Demo-uri ===== ===== Demo-uri =====
  
-Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-12.zip|arhiva aferentă]].+Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-13-demo.zip|arhiva aferentă]].
  
   - Bitul de set-user-ID-on-execution   - Bitul de set-user-ID-on-execution
-    * Intrați în directorul ​''​1-setuid/''​. +    * Consultați fișierul ​''​test.c''​. 
-    Consultați ​fișierul ''​setuid-test.c''​. +      Scopul acestui program este de a genera un fișier de log care să conțină timestamp-uri aferente fiecărei rulări a sa, de forma ''​user: time''​
-    * Compilați fișierul ​folosind comanda ​''​make''​.+      * Numai owner-ul fișierului are drept de scriere asupra fișierului
 +    * Folosiți fișierul ''​prep_users.sh'' ​pentru a genera cei doi utilizatori de test.
       * Trebuie să aveți drept de sudo pentru a reuși întreg procesul.       * Trebuie să aveți drept de sudo pentru a reuși întreg procesul.
-    * Folosiți ''​ls -l''​ pentru a obține informații complete despre executabilul ''​setuid-test''​. +    ​* Ca utilizatorul ''​master''​ (''​su - master''​) compilați fișierul folosind comanda ''​make''​. 
-      * Observați că executabiul este deținut de ''​root''​ și că are bitul de set-user-ID activat. +    ​* Folosiți ''​ls -l''​ pentru a obține informații complete despre executabilul ''​test''​. 
-    * Ca utilizator neprevilegiat rulați executabilul:​<code bash> +      * Observați că executabiul este deținut de ''​master''​ și că are bitul de set-user-ID activat.<​code bash> 
-./setuid-test+-rwsr-xr-x 1 master master 12315 2014-05-12 22:33 test
 </​code>​ </​code>​
-    * Observați cele trei tipuri de identificatori de utilizatori:​ //user id//, //effective user ID//, //saved set-user-ID//​. +    * Ca utilizatorul ​''​worker''​ (''​su worker''​) rulați executabilul:<code bash> 
-      * Detalii în [[http://​man7.org/​linux/​man-pages/​man7/​credentials.7.html|pagina de manual credentials]]. +./test
-    * Observați că se poate reveni la utilizator privilegiat,​ dacă cel puțin unul dintre identificatorii de utilizatori este 0 (''​root''​(//temporary privilege drop//). +
-      * În momentul în care nici unul dintre identificatorii de utilizatori nu mai este 0, nu se poate reveni la utilizator privilegiat (//​permanent privilege drop//). +
-  - Exemplu de [[http://​www.shell-storm.org/​shellcode/​|shellcode]] +
-    * Intrați în directorul ​''​2-shellcode/''​+
-    * Consultați fișierul ''​shellcode-samples.c''​. +
-      * Urmăriți cele trei variabile de tip shellcode. +
-    * Acele variabile se găsesc în forma binară și în fișierul ''​binary-shellcodes''​. +
-      * Folosiți ''​objdump''​ pentru a dezasambla fișierul:<code bash> +
-objdump -D -b binary -mi386 binary-shellcodes+
 </​code>​ </​code>​
-      * Se afișează instrucțiunile dezasamblate;​ au fost plasate niște instrucțiuni de tip ''​nop''​ între cele trei shellcode-uri. +    ​* Observați ​cele două tipuri de identificatori de utilizatori:​ //user id//, //effective user ID//.<​code>​ 
-      ​* Observați ​apelul ''​int $0x80''​reprezentând trap pentru acces în kernel space (//apel de sistem//)+worker@erathia:​~$ ~master/​test ​ 
-    * Shellcode-ul din variabila ''​shellcode_write''​ realizează un apel ''​write'',​ iar shellcode-urile din variabilele ''​shellcode_exec'',​ respectiv ''​shellcode_exec_sh''​ deschid o sesiune de shell. + 
-    * Pentru compilare va trebui să folosiți un sistem pe 32 de bițiprecum mașina virtuală de Linux de SO. +Process started 
-    * Compilați fișierul folosind comanda ''​make''​. + 
-    * Rulați fișierul obținut:<code bash> +Setuid on 
-./​shellcode-samples+Effective user name: master; UID: 1002 
 +Real user name: worker; UID: 1003 
 + 
 + 
 +Giving up setuid until opening the file 
 + 
 +Setuid off 
 +Effective user name: worker; UID: 1003 
 +Real user name: worker; UID: 1003 
 + 
 + 
 +Wanting to open the file 
 + 
 +Setuid on 
 +Effective user name: master; UID: 1002 
 +Real user name: worker; UID: 1003 
 + 
 + 
 +File openedgiving up setuid 
 + 
 +Setuid off 
 +Effective user nameworker; UID: 1003 
 +Real user name: worker; UID: 1003 
 + 
 + 
 +File closed, process done
 </​code>​ </​code>​
-      * Observați că se deschide o nouă sesiune de shell. +      * Detalii ​în [[http://man7.org/linux/man-pages/man7/credentials.7.html|pagina ​de manual credentials]]. 
-    * Înlocuiți, ​în ''​main'',​ variabila ''​shellcode_exec''​ cu ''​shellcode_exec_sh''​ și, respectiv, ''​shellcode_write'',​ recompilați si rulați, din nou, fișierul obținut. +      Conform principiului least privilege, doar în momentul deschiderii ​fișierului pentru scriere sunt folosite drepturile utilizatorului owner
-  - Exploit de tip stack buffer overflow +    * Observați că se poate reveni la utilizatorul owner al fișierului (//temporary privilege drop//).
-    * Intrați în directorul ''​3-exploit/''​. +
-    * Consultați fișierul ''​exploit.c''​. +
-      * Se încearcă suprascrierea valorii de retur a funcției ''​main''​ din cadrul parametrului ''​argv[1]''​. +
-    * Pentru compilare va trebui să folosiți un sistem pe 32 de biți, precum mașina virtuală de Linux de SO. +
-    * Compilați fișierul folosind comanda ''​make''​. +
-      * Opțiunile de compilare dezactivează stack smashing (''​-fno-stack-protector''​) și reactivează execuția de cod de pe stivă (''​-z execstack''​). +
-    * Consultați fișierul ''​run-exploit.sh''​. +
-      * Acesta compilează fișierul, dacă nu este compilat, dezactivează ASLR (//Address Space Layout Randomization//) și trimite un argument conținând un shellcode programului. +
-    * Argumentul trimis conține un shellcode (21 de octeți), urmat de un padding de 23 de caractere ''​a''​ și adresa de start a bufferului. +
-      * Adresa ​de start a buffer-ului este suprascrisă în zona cu adresa de retur a funcției ''​main''​. Când funcția ''​main''​ se încheie se face jump pe stivă și se execută shellcode-ul. +
-      * Padding-ul este necesar pentru a acoperi cei 32 de octeți ai buffer-ului și un padding de aliniere pe stivă dispus de compilator între buffer și salvarea frame pointer-ului (ebp) pe stivă. +
-    * Urmăriți dispunerea argumentelor pe stivă în [[:​so:​laboratoare:​laborator-04#​stiva|laboratorul 4]]. +
-    Rulați scriptul:<​code bash> +
-./​run-exploit.sh +
-</​code>​ și observați deschiderea unui nou shell. +
-  - Protejarea la stack buffer overflow folosind stack smashing protection +
-    * Intrați ​în directorul ''​4-stack-smash/''​. +
-    * Consultați ​fișierul ''​stack-smash.c''​+
-      * Observați că bufferul a este suprascris folosind ''​memcpy''​ cu un șir de dimensiune mai mare, ajungând să producă un stack buffer overflow cu riscul de suprascriere a adresei de retur a funcției main. +
-    * Folosiți comanda ''​make''​ pentru a compila două executabile:​ +
-      * ''​stack-smash-no-protector'':​ fără suport de stack smashing; +
-      * ''​stack-smash-protector'':​ cu suport de stack smashing. +
-    * Rulați cele două executabile:<​code bash> +
-./stack-smash-no-protector +
-./stack-smash-protector +
-</code> +
-      * Observați că nu se întâmplă nimic nevalid în cazul primei rulări, dar apare mesaj specific de eroare în cazul celei de-a doua rulări. +
-      * Programul a fost testat pe un sistem pe care comportamentul este cel de mai sus. +
-        * Dacă pe sistemul vostru nu merge, alterați dimensiunea șirului ''​TEST_STRING''​.+
so/cursuri/curs-13.1397488249.txt.gz · Last modified: 2014/04/14 18:10 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0