Sistemi Operativi Modulo I: Approfondimenti Passwords - PDF

Document Details

AdmirableHyperbolic9384

Uploaded by AdmirableHyperbolic9384

Sapienza Università di Roma

Fabio De Gaspari

Tags

passwords Linux security computer science

Summary

This document, from the Sapienza University of Rome, details aspects of operating systems, specifically focusing on passwords. Topics explored include various Linux files (passwd, shadow), password hashing mechanisms, and potential attacks, using examples. The document's focus points towards understanding operating systems and security implications for the user, and the complexity of creating secure passwords.

Full Transcript

Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Approfondimenti: Passwords Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica Roadmap Passwords in Linux Attacchi a password Sviluppi futuri Passwords in Li...

Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Approfondimenti: Passwords Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica Roadmap Passwords in Linux Attacchi a password Sviluppi futuri Passwords in Linux Linux usa due file per gestire utenti e le relative password \etc\passwd \etc\shadow Entrambi sono normali file di testo con una sintassi simialre, ma hanno funzioni e permessi diversi Originariamente, esisteva soltanto il file passwd, che includeva la password dell’utente in plaintext Cambiato per ovvi motivi... per ogni riga (utente) in passwd, esiste una corrispondente riga in shadow che indica la sua password \etc\passwd É un plaintext file, contenente l’intera lista di utenti (account) presenti nel sistema Include non solo utenti “normali”, ma anche utenti standard di sistema e utenti speciali Ad esempio, l’untente nobody, che é solitamente usato per dare il minimo set di permessi possibili ad un processo Di default, ha i seguenti permessi: -rw-r--r-- 1 root root 2659 Dec 22 12:21 /etc/passwd \etc\passwd Ciascuna riga del file passwd indica informazioni fondamentali su un utente del sistema, ed ha il seguente fomato: 1 Username: nome dell’utente usato per il login. Stringa alfanumerica di max 32 caratteri 2 Password: inutilizzato oggi. Il carattere “x” indica che l’hash della password é nel file shadow 3 User ID (uid): ogni utente nel sistema ha uno user id numerico assegnato. alcuni hanno significati speciali: 0 indica sempre l’utente root, 1-999 sono riservati per account predefiniti e di sistema \etc\passwd 4 Group ID (gid): una volta creato ogni utente é assegnato ad un primary group (gruppo primario). é il gruppo che il sistema operativo assegna ai file creati dall’utente la descrizione del gruppo e i suoi dettagli sono contenuti in \etc\group 5 GECOS: campo descrittivo che contiene informazioni generali sull’utente 6 home directory: path assoluto alla home directory dell’utente 7 shell: path assoluto alla command shell usata dall’utente (eseguibile) \etc\shadow É un plaintext file contenente, per ciascun utente del sistema, l’hash della sua password ed altre informazioni aggiuntive Data la criticità delle informazioni contenute, sottrarre e decifrare lo shadow file spesso é uno degli obiettivi principali di un attaccante Conseguentemente, ha permessi molto più restrittivi di passwd Di default, ha i seguenti permessi: -rw-r----- 1 root root 2659 Dec 22 12:21 /etc/shadow \etc\shadow Ciascuna riga del file shadow contiene informazioni sulla password del rispettivo utente: 1 Username: nome dell’utente a cui la password appartiene, definito in passwd. 2 Password: password dell’utente salvata usando il Modular Crypt Format 3 Last changed: data dell’ultimo cambiamento della password, espresso in giorni trascorsi da Unix Epoch (01/01/1970) \etc\shadow Ciascuna riga del file shadow contiene informazioni sulla password del rispettivo utente: 4 Min Age: minimo numero di giorni dall’ultimo cambio prima che la password possa essere nuovamente cambiata 5 Max Age: massimo numero di giorni dopo dei quali é necessario cambiare la password 6 Warn: quanti giorni prima della scadenza della password va avvisato l’utente Modular Crypt Format Formato usato nello shadow file per salvare gli hash delle password $ID$salt$hash ID: algoritmo di hashing usato per questa password (MD5, blowfish, SHA256,...) salt: salt usato nel processo di hashing hash: hash della password, calcolato con l’algoritmo ID e salt Hash Functions Hash Functions Trasforma input di lunghezza variable in output di lunghezza fissa in maniera deterministica Data la stessa stringa in input, darà sempre lo stesso output (detto hash o digest) Inoltre, una funzione hash é detta crittografica se: É computazionalmente difficile calcolare l’inverso della funzione hash É computazionalmente difficile, dato un input x ed il suo hash d, trovare un altro input x1 che abbia lo stesso hash d É computazionalmente difficile trovere due input diversi di lunghezza arbitraria x1 e x2 che abbiano lo stesso hash d Password Hashing o Cifratura Date le caratteristiche elencate, capiamo perche le funizoni hash sono usate per le password Ma perchè non cifrare direttamente la password? In entrambi i casi, le password non sono leggibili da un attaccante Se si usa cifratura ed un attaccante ottiene la chiave, potrebbe decifrare ed ottenere tutte le password in plaintext! Le funzioni hash sono one-way: una volta fatto l’hash, non si torna più indietro Se un attaccante ottiene l’hash, non potrá mai scoprire la password che l’ha generato (a parte eccezioni, vedremo poi) É comunque semplice verificare se una password corrisponde a quella salvata in formato hash: basta fare l’hash della password e verificarne l’equivalenza (hashing é deterministico) Roadmap Passwords in Linux Attacchi a password Sviluppi futuri Hash Inattaccabili? Questo non vuol dire che gli hash di password siano inattaccabili: Attacco Dizionario Attacco Rainbow Table Attacco Dizionario Problema: ci sono un numero infinito di password che possono risultare nello stesso hash. Come facciamo a scoprire qual’é quella giusta? Fortunatamente (per gli attaccanti): gli utenti sono pigri 1 non vogliono (o non possono) ricordarsi password molto complesse 2 non vogliono ricordarsi molte password Conseguenza 1: password brevi e semplici Conseguenza 2: stessa password riusata molte volte per servizi diversi Attacco Dizionario Attacco Dizionario: se gli utenti usano password semplici, in molti avranno la stessa password É possibile dunque compilare una lista di password comunemente utilizzate e fare bruteforce Dato un hash d che voglio invertire 1 per ogni x nella mia lista di password, calcola dx = h(x) 2 ripeti finchè dx == d Esistono oggi dizionari di svariati GB di password! (es, rockyou) Attacco Dizionario Vantaggi Molto semplice da effettuare (richiede solo una lista di password) Versatile: funziona per qualsiasi funzione hash, password, ecc Moltissimi tool disponibili per automatizzare il tutto (es, John the Ripper) Svantaggi Può essere molto lento, in quanto richiede la computazione in real time degli hash La password può non essere presente nel dizionario Attacco Rainbow Table Le funzioni hash sono deterministiche Data una lista di password ed una funzione hash, l’hash computato sara sempre lo stesso per ciascuna password Perchè calcolare l’hash delle password del dizionario in real time durante l’attacco? Meglio percomputarle! Rainbow Table: dizionario di coppie (valore hash, plaintext password) Usato per trovare velocemente quale password corrisponde ad un hash Creato offline, e riutilizzato più volte per molti attacchi In realtà, utilizza un sistema più complesso di funzioni di riduzione per mantenere trattabili le dimensioni della tabella, noi semplifichiamo Attacco Rainbow Table Vantaggi Molto semplice da effettuare, data la rainbow table precompilata Molto più veloce rispetto a dictionary bruteforce Svantaggi Rigidità: funziona solo per la funzione di hash per la quale é stata creata la rainbow table (se vogliamo più funzioni, servono più rainbow tables!) Salvati dal Sale Come fare per proteggersi da questi attacchi? Ci pensa il sale (salt) Ricordate MCF: $ID$salt$hash ? il salt è un valore randomico, generato quando un utente sceglie la password, che viene aggiunto alla computazione dell’hash prima: d = h(x) poi: d = h(x, s) il salt viene poi salvato in chiaro assieme all’hash calcolato rende impossibile l’uso di rainbow tables se per ogni utente c’è un salt randomico diverso, non posso precomputare gli hash altra proprietà utile: due utenti con la stessa identica password avranno due hash diversi, perchè molto probabilmente i loro salt saranno diversi Attacco dizionario bruteforce funziona ancora, ma quello é inevitabile Roadmap Passwords in Linux Attacchi a password Sviluppi futuri Sviluppi Futuri Creare grandi dizionari di password non é semplice Sfruttare questi dizionari al massimo é ancora di più difficile Data una password semplice comune, gli utenti tendono a farci spesso modifiche es. “password” diventa: Password1, p@assw0rd,... I tool usati per fare bruteforcing applicano in automatico una serie di regole a ciascuna delle password nel dizionario, per creare varianti comunni come quelle qui sopra Difficile pensare a tutte le possibili regole utili per modificare password in modo sensato Generalmente, si usano regole molto generali, che si applicano ad un’ampia platea di utenti; difficile trovare regole specifiche per gruppi di utenti specifici (es, gamers) Sviluppi Futuri Si può usare machine learning (ML) per imparare a generare password realistiche ML ed in particolare Deep Learning sono ideali per imparare a riconoscere pattern L’insieme delle password “human-like” ha pattern molto specifici e riconoscibili Machine Learning e Passwords ML Password Generation I modelli generativi sono bravissimi ad imparare pattern e riprodurli ML Password Generation Hitaj B., P. Gasti, G. Ateniese, and F. Perez-Cruz. “Passgan: A deep learning approach for password guessing.” In International Conference on Applied Cryptography and Network Security, 2019. Pasquini, D., A. Gangwal, G. Ateniese, M. Bernaschi, and M. Conti. “Improving password guessing via representation learning.” In 2021 IEEE Symposium on Security and Privacy, 2021. Pagnotta, G., Hitaj, D., De Gaspari, F., and Mancini, L. V. “Passflow: guessing passwords with generative flows” In International Conference on Dependable Systems and Networks. 2022

Use Quizgecko on...
Browser
Browser