This is an old revision of the document!
umask
, autentificare, autorizare, controlul accesului, root
, sudo
, parole, password cracking, passphrase, /etc/passwd
, /etc/shadow
, criptografie, criptare, decriptare, plain text, ciphertext, chei simetrice, chei asimetrice, semnătură digitală, semnare, verificarePentru rularea demo-urilor de mai jos folosim mașina virtuală USO Demo. Mașina virtuală (în format OVA) poate fi importată în VirtualBox. Comenzile le vom rula în cadrul mașinii virtuale.
Mașina virtuală deține două interfețe de rețea:
eth0
pentru accesul la Internet (interfață de tipul NAT)eth1
pentru comunicarea cu sistemul fizic (gazdă, host) (interfață de tipul Host-only Adapter)Pentru a rula demo-ul avem două opțiuni:
eth1
a mașinii virtuale și ne conectăm prin SSH, de pe sistemul fizic, folosind comandassh student@<adresa-IP-vm-eth1>
unde <adresa-IP-vm-eth1>
este adresa IP a interfeței eth1
din cadrul mașinii virtuale.
Pentru conectarea la mașina virtuală folosim numele de utilizator student
cu parola student
. Contul student
are permsiuni de sudo
. Folosind comanda
sudo su -
obținem permisiuni privilegiate (de root
) în shell.
eth1
atunci folosim comanda
sudo dhclient eth1
pentru a obține o adresă IP.
Unul dintre cele mai importante principii în securitate este principiul celui mai mic privilegiu (least privilege). Pentru aceasta, inclusiv în sistemul de fișiere (fișiere, directoare), se recomandă permisiuni (drepturi de acces minime). Acestea pot fi schimbate folosind comanda chmod
. Dorim, însă, să putem configura permisiunile implicite la crearea intrărilor în sistemul de fișiere. Pentru aceasta folosim comanda umask
.
La o rulare simplă, comanda umask
ne afișează valoarea sa:
student@uso-demo:~$ umask 0022
Comanda umask
indică permisiunile care vor fi absente în momentul creării unor intrări. Regulile de stabilire a permisiunilor de creare sunt:
Pentru umask = 0022
, ~umask = 7755
. Rezultă permisiunile de creare:
666 & 7755 = 0644
777 & 7755 = 0755
Putem verifica acest lucru creând un fișier și un director:
student@uso-demo:~$ touch test-file student@uso-demo:~$ mkdir test-dir student@uso-demo:~$ ls -l total 4 drwxr-xr-x 2 student student 4096 Jan 5 11:31 test-dir -rw-r--r-- 1 student student 0 Jan 5 11:31 test-file
Observăm că fișierul (test-file
) a fost creat cu permisiunile rw-r--r--
(adică 644
) iar directorul (test-dir
) a fost creat cu permisiunile rwxr-xr-x
(adică 755
). Adică valorile așteptate.
În ideea de least privilege, este uzual să oferim permisiuni doar utilizatorului (user
) și nici o permisiune pentru group
și others
. Pentru aceasta stabilim valoarea umask
la 077
, folosind comanda
student@uso-demo:~$ umask 077 student@uso-demo:~$ umask 0077
Observăm din a doua comandă că acum valoarea umask
este alta.
Creăm un nou fișier și un nou director și verificăm aplicarea noii valori a umask
pentru stabilirea permisiunilor de creare:
student@uso-demo:~$ touch test-file-2 student@uso-demo:~$ mkdir test-dir-2 student@uso-demo:~$ ls -l total 8 drwxr-xr-x 2 student student 4096 Jan 5 11:31 test-dir drwx------ 2 student student 4096 Jan 5 11:36 test-dir-2 -rw-r--r-- 1 student student 0 Jan 5 11:31 test-file -rw------- 1 student student 0 Jan 5 11:36 test-file-2
Observăm că fișierul (test-file-2
) a fost creat cu permisiunile rw-------
(adică 600
) iar directorul (test-dir
) a fost creat cu permisiunile rwx------
(adică 700
). Adică valorile așteptate, rezultate în urma calculului:
666 & ~umask = 666 & ~0077 = 666 & 7700 = 600 = rw-------
777 & ~umask =777 & ~0077 = 777 & 7700 = 700 = rwx------
Valoarea umask
este configurată funcție de nevoile utilizatorului ținând cont și de principiul celui mai mic privilegiu.
umask
este pe 4 cifre în octal. Prima cifră este aferentă biților speciali (setuid
, setgid
, sticky
) folosiți în permisiuni. Nu insistăm pe acest lucru. Puteți găsi informații în secțiunile aferente din pagina de manual a chmod.
umask
se recomandă plasarea comenzii de configurare într-un fișier de configurare a sesiunii de shell (precum ~/.bashrc
).
Din perspectiva atacatorului (sau a unui hacker etic) este util să putem “sparge” parolele dintr-un sistem. Dacă ajungem să avem acces la baza de date cu parole a unui sistem putem încerca spargerea acestora. Un utilitar pentru acest lucru este John the Ripper.
Pentru a folosi john
întâi îl vom instala:
student@uso-demo:~$ sudo apt-get install john Reading package lists... Done Building dependency tree [...] Setting up john-data (1.8.0-2) ... Setting up john (1.8.0-2) ...
John vine în mod implicit cu un dicționar de parole comune de folosit în fișierul /usr/share/john/password.lst
student@uso-demo:~$ head -20 /usr/share/john/password.lst #!comment: This list has been compiled by Solar Designer of Openwall Project #!comment: in 1996 through 2011. It is assumed to be in the public domain. #!comment: #!comment: This list is based on passwords most commonly seen on a set of Unix #!comment: systems in mid-1990's, sorted for decreasing number of occurrences #!comment: (that is, more common passwords are listed first). It has been #!comment: revised to also include common website passwords from public lists #!comment: of "top N passwords" from major community website compromises that #!comment: occurred in 2006 through 2010. #!comment: #!comment: Last update: 2011/11/20 (3546 entries) #!comment: #!comment: For more wordlists, see http://www.openwall.com/wordlists/ 123456 12345 password password1 123456789 12345678 1234567890 student@uso-demo:~$ wc -l /usr/share/john/password.lst 3559 /usr/share/john/password.lst
Există fișiere de parole mai bune care, în general, costă bani.
Aceste parole sunt parole frecvente folosite de utilizatori și care pot fi ușor sparte cu John.
Pentru verificare, să creăm doi utilizatori (ana
și bogdan
) cu parole relativ comune test123
și qazwsx
:
student@uso-demo:~$ sudo useradd -m -d /home/ana -s /bin/bash ana student@uso-demo:~$ sudo useradd -m -d /home/bogdan -s /bin/bash bogdan student@uso-demo:~$ less /usr/share/john/password.lst student@uso-demo:~$ echo "ana:test123" | sudo chpasswd student@uso-demo:~$ echo "bogdan:qazwsx" | sudo chpasswd student@uso-demo:~$ id ana uid=1001(ana) gid=1001(ana) groups=1001(ana) student@uso-demo:~$ id bogdan uid=1002(bogdan) gid=1002(bogdan) groups=1002(bogdan)
Mai sus am creat cei doi utilizatori cu parolele dorite.
chpasswd
este o comandă care schimbă/actualizează parola unuia sau mai mulți utilizatori. Parola primește la intarea standard linii în forma <username>:<password>
și actualizează parola utilizatorului <username>
cu valoarea <password>
.
Parolele utilizatorilor sunt stocate în forma criptată (hash) în fișierul /etc/shadow
, accesibil doar cu permisiuni privilegiate
student@uso-demo:~$ tail -2 /etc/shadow tail: cannot open ‘/etc/shadow’ for reading: Permission denied student@uso-demo:~$ ls -l /etc/shadow -rw-r----- 1 root shadow 1276 Jan 5 11:59 /etc/shadow student@uso-demo:~$ sudo tail -2 /etc/shadow ana:$6$Lz4VGpO.$NhGn3XzSJ8dRd.EURfPRnPPlU3rvTG5C7xEvvh8taiPCLEFb0V2LAFG.6s.GlXWZqby326wvZm91QMDoCXCoU0:16805:0:99999:7::: bogdan:$6$AJ8cjSHz$QdI1KrolofQtAk4F2bHweL7vxzGYcM3gHxfLgRiUzR7UtEugUZyWARc66zo8YMEiMmAWob5PJMlaoUyA8rfCx.:16805:0:99999:7:::
Dacă avem acces la hash-urile parolelor putem încerca spargerea lor cu John. În cazul de față vom reuși pentru că parolele sunt foarte simple:
student@uso-demo:~$ sudo tail -2 /etc/shadow > shadow-entries student@uso-demo:~$ cat shadow-entries ana:$6$Lz4VGpO.$NhGn3XzSJ8dRd.EURfPRnPPlU3rvTG5C7xEvvh8taiPCLEFb0V2LAFG.6s.GlXWZqby326wvZm91QMDoCXCoU0:16805:0:99999:7::: bogdan:$6$AJ8cjSHz$QdI1KrolofQtAk4F2bHweL7vxzGYcM3gHxfLgRiUzR7UtEugUZyWARc66zo8YMEiMmAWob5PJMlaoUyA8rfCx.:16805:0:99999:7::: student@uso-demo:~$ /usr/sbin/john -wordlist:/usr/share/john/password.lst shadow-entries Created directory: /home/student/.john Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/32]) Press 'q' or Ctrl-C to abort, almost any other key for status test123 (ana) qazwsx (bogdan) 2g 0:00:00:33 100% 0.05959g/s 62.93p/s 71.51c/s 71.51C/s pretty..celtic Use the "--show" option to display all of the cracked passwords reliably Session completed
Mai sus, pentru început, am extras cele două intrări din /etc/shadow
și apoi am folosit John ca să încercăm spargerea lor. În mod așteptat, parolele fiind simple, John a reușit spargerea lor.
În general, un atacator va încerca să obțină accesul la baza de date cu parole. Chiar dacă acestea sunt criptate, atacatorul va încerca să le spargă. Doar parolele puternice (cu multe caractere dintr-un set mai mare) pot supraviețui suficient de mult timp unui atacator. Chiar și așa, se recomandă actualizarea parolelor după o perioadă de 6 luni sau 1 an.
a
cu @
sau e
cu 3
. Cu un word list bun, multe parole pot fi sparte relativ rapid.
TODO
TODO
TODO