====== 10. Controlul accesului ====== Chiar dacă o aplicație este securizată din punct de vedere software este posibil să existe probleme de configurare a aplicației sau permisiuni care îi permit să realizeze intenționat sau nu acțiuni nelegitime. Pentru aceasta sistemul va configura politice și mecanisme care să controleze accesul aplicației la resursele sistemului. Principiul //least privilege// înseamnă că unei aplicații îi vor fi furnizate doar acele permisiuni necesare. ===== Subiecte abordate ===== * privilegii și permisiuni * controlul accesului * capabilități * MAC (//Mandatory Access Control//) ===== Resurse ===== * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/slides/10-controlul-accesului.pdf|Slide-uri]] * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/10-controlul-accesului-skel.zip|Arhiva de suport]] ===== Exerciții ===== Arhiva de suport pentru exerciții se găsește [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/10-controlul-accesului-skel.zip|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/10-controlul-accesului-skel.zip unzip 10-controlul-accesului-skel.zip cd 10-controlul-accesului-skel/ ==== setuid ==== Accesăm directorul ''setuid/'' din arhiva de suport. Urmăriți conținutul fișierului ''prog.c'' și rulați executabilul ''prog''. Programul încearcă deschiderea a două fișiere privilegiate. În primă instanța va eșua. Apoi schimbați owner-ul fișierului în ''root'' și adăugați-i bitul de ''setuid'' folosind comenzile sudo chown root:root prog sudo chmod u+s prog Acum rulați din nou programul și observați că reușește deschiderea unui fișier, câtă vreme //effective user id-ul// (''euid'') este ''0''. În momentul în care //effective user id-ul// (''euid'') este ''1000'', operația eșuează. ==== cap ==== Accesăm directorul ''cap/'' din arhiva de suport. Va trebui să instalați pachetul ''libcap-dev'' folosind comanda sudo apt install libcap-dev Urmăriți conținutul fișierului ''prog.c'' și rulați executabilul ''prog''. Programul încearcă deschiderea a două fișiere privilegiate. În primă instanța va eșua. Apoi oferiți executabilului ''prog'' capabilitatea ''CAP_DAC_READ_SEARCH'' folosind comanda: sudo setcap cap_dac_read_search+ep ./prog Verificați adăugarea capabilității folosind comanda: getcap ./prog Acum rulați din nou programul și observați că reușește deschiderea unui fișier, câtă vreme capabilitatea ''CAP_DAC_READ_SEARCH'' este prezentă. Dacă doriți să eliminați capabilitatea ''CAP_DAC_READ_SEARCH'' din executabilul ''prog'' folosiți comanda sudo setcap cap_dac_read_search-ep ./prog ==== seccomp ==== Accesăm directorul ''seccomp/'' din arhiva de suport. Va trebui să instalați pachetul ''libseccomp-dev'' folosind comanda sudo apt install libseccomp-dev Urmăriți conținutul fișierului ''prog.c'' și rulați executabilul ''prog''. Programul încearcă deschiderea a două fișiere privilegiate. Deschiderea primului fișier va reuși, în vreme ce deschiderea celui de-al doilea fișier va eșua dată fiind folosirea sandboxing-ului cu ajutorul ''seccomp''.