Differences

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

Link to this comparison view

so:cursuri:curs-13 [2014/05/12 22:36]
traian.popeea
so:cursuri:curs-13 [2017/02/23 16:34] (current)
razvan.deaconescu
Line 1: Line 1:
 ====== Curs 13 - Securitatea sistemului ====== ====== Curs 13 - Securitatea sistemului ======
 +
 +  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-13.pdf|Curs 13 - Securitatea sistemului (PDF)]]
 +  * Suport curs
 +    * Operating System Concepts Essentials
 +      * Capitolul 13 -- Protection
 +      * Capitolul 14 -- Security
 +        * Secțiunile 14.1, 14.2, 14.5
 +    * Modern Operating Systems, 3rd Edition
 +      * Capitolul 9 -- Security
 +        * Mai puțin secțiunea 9.6: Exploiting Code Bugs
  
 <​html>​ <​html>​
-    ​<iframe src="http://​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;">​+  <​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>​     </​iframe>​
 +  </​center>​
 </​html>​ </​html>​
- 
-  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-13.pdf | Curs 13 - Securitatea sistemului (PDF)]] 
- 
-  * Suport curs 
-    * Operating System Concepts 
-      * Capitolul 14 -- Protection 
-      * Capitolul 15 -- Security 
-        * Secțiunile 15.1, 15.2, 15.5 
-    * Modern Operating Systems 
-      * Capitolul 9 -- Security 
-        * Secțiunile 9.4, 9.6 
  
 ===== Demo-uri ===== ===== Demo-uri =====
  
-Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-13.zip|arhiva aferentă]].+Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-13-demo.zip|arhiva aferentă]].
  
-<​hidden>​ 
   - 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ți, precum mașina virtuală de Linux de SO. +
-    * Compilați fișierul folosind comanda ''​make''​. +
-    * Rulați fișierul obținut:<code bash> +
-./shellcode-samples +
-</code> +
-      * Observați că se deschide o nouă sesiune de shell. +
-    * Î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. +
-  - Exploit de tip stack buffer overflow +
-    * 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țiprecum 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''​.+
  
-</hidden>+Process started 
 + 
 +Setuid on 
 +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 opened, giving up setuid 
 + 
 +Setuid off 
 +Effective user name: worker; UID: 1003 
 +Real user name: worker; UID: 1003 
 + 
 + 
 +File closed, process done 
 +</code> 
 +      * Detalii în [[http://​man7.org/​linux/​man-pages/​man7/​credentials.7.html|pagina de manual credentials]]. 
 +      * Conform principiului least privilege, doar în momentul deschiderii fișierului pentru scriere sunt folosite drepturile utilizatorului owner. 
 +    * Observați că se poate reveni la utilizatorul owner al fișierului (//​temporary privilege drop//).
so/cursuri/curs-13.1399923393.txt.gz · Last modified: 2014/05/12 22:36 by traian.popeea
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