1. L'obiettivo:archiviazione di password sicura
Il principio fondamentale è che la password in chiaro effettivo è * mai * memorizzata da nessuna parte. Se il database contenente le password fosse mai compromesso, gli aggressori avrebbero immediatamente accesso a tutti gli account utente. Hashing e salting lo impediscono.
2. Hashing:
* Funzione a senso unico: Hashing è un'operazione matematica che trasforma la password in una stringa di caratteri a grandezza fissa chiamata "hash". È una funzione * a senso unico *, il che significa che è computazionalmente impossibile (estremamente difficile e che richiede tempo) invertire il processo e derivare la password originale dall'hash.
* Resistenza alla collisione: Idealmente, password diverse dovrebbero produrre hash diversi. Un buon algoritmo di hashing riduce al minimo la possibilità di una "collisione", in cui due password diverse generano lo stesso hash.
* Algoritmi di hashing comuni in Linux:
* bcrypt: Spesso considerato la scelta più forte e preferita. Include un sale integrato ed è progettato per essere computazionalmente costoso, rendendolo resistente agli attacchi di forza bruta.
* Argon2: Un moderno algoritmo di hashing della password che è anche progettato per essere computazionalmente costoso e duro, aumentando ulteriormente la resistenza agli attacchi. Sta diventando più popolare.
* Scrypt: Un'altra funzione di derivazione chiave progettata per essere resistente agli attacchi di forza bruta.
* sha-512: (Meno comune * ora * per hash della password diretta, ma spesso utilizzato come parte di una funzione di derivazione chiave più ampia). Storicamente è stato usato. È ancora a volte usato come parte delle configurazioni PAM.
* MD5, SHA-1, SHA-256: Non usarli! Questi sono considerati obsoleti e vulnerabili per lo hash della password diretta. Sono troppo veloci e facilmente rotti con hardware moderni e tavoli arcobaleno precomputati. Potrebbero essere trovati nei sistemi più vecchi, ma dovrebbero essere aggiornati.
3. Salting:
* Aggiunta di casualità: Un "sale" è una stringa casuale di caratteri che è unica per ogni utente. Il sale è concatenato (aggiunto a) la password * prima * è hash.
* Prevenire gli attacchi del tavolo arcobaleno: Le tabelle arcobaleno sono tabelle precomputate di hash per password comuni. Senza saltare, un utente malintenzionato potrebbe semplicemente cercare l'hash in una tabella arcobaleno per trovare la password corrispondente. La salatura rende inutile le tabelle dell'arcobaleno perché ogni password ha un sale unico, risultando in un hash unico anche per password comuni.
* Il sale è immagazzinato con l'hash: Fondamentalmente, il sale stesso viene archiviato insieme alla password hash nel file `/etc/shadow (o in alcuni database nei sistemi moderni). Questa è * non * una vulnerabilità di sicurezza; Il sale è * richiesto * per verificare una password.
* Perché conservare il sale? Per verificare la password di un utente, il sistema deve:
1. Recupera il sale immagazzinato per quell'utente.
2. Concatena la password inserita con il sale.
3. Hash Il risultato usando l'algoritmo di hashing * stesso * usato originariamente.
4. Confronta l'hash di recente generazione con l'hash immagazzinato. Se corrispondono, la password è corretta.
4. Il file `/etc/shadow` (approccio tradizionale)
Tradizionalmente, le password dell'utente e le loro informazioni associate sono archiviate nel file `/etc/shadow`. (Nota:la visualizzazione o la modifica diretta di questo file di solito richiede privilegi di root).
* Permessi: Il file `/etc/shadow` è in genere leggibile solo dall'utente` root`, garantendo che gli utenti normali non possano vedere le password hash di altri utenti.
* Struttura: Ogni riga nel file `/etc/shadow` rappresenta un account utente e ha il seguente formato (semplificato):
`` `
Nome utente:hashed_password:last_change:min_days:max_days:warn_days:inactive_days:scade_date:flags
`` `
* Il campo `Hashed_Password`: È qui che viene archiviata la password salata e hash. Il formato di questo campo di solito include un identificatore per l'algoritmo di hashing utilizzato, il sale e l'hash reale. Per esempio:
* `$ 6 $ some_random_salt $ averylonghashedpasswordstring` (questo utilizza sha-512)
* `$ 2b $ 10 $ a altro_random_salt $ evenlonghashedpasswordstring` (questo utilizza bcrypt)
* `$ 6` indica sha-512
* `$ 2b` indica bcrypt
*Il numero (ad esempio, `10` in bcrypt) indica il *fattore di costo *o *fattore di lavoro *. Un fattore di costo più elevato rende il processo di hashing più costoso computazionalmente, aumentando il tempo necessario per rompere la password.
5. Sistemi moderni e PAM (moduli di autenticazione collegabile)
* Database: I sistemi moderni utilizzano spesso database (ad es. LDAP, Active Directory) per archiviare le informazioni sull'account utente, comprese le password hash.
* Pam: PAM è un framework flessibile che consente agli amministratori di sistema di configurare diversi meccanismi di autenticazione. Viene utilizzato per gestire il processo di autenticazione, comprese le password di hashing, la verifica delle password e l'esecuzione di altre attività relative alla sicurezza. I file di configurazione PAM (ad esempio, in `/etc/pam.d/`) determinano quali moduli di autenticazione vengono utilizzati e come sono configurati.
Scenario di esempio:verifica della password dell'utente
1. L'utente inserisce la password: L'utente digita la password in un prompt di accesso o un'applicazione.
2. Il sistema recupera il sale: Il sistema cerca l'account dell'utente e recupera il sale memorizzato da `/etc/shadow` (o il database appropriato).
3. Concatenazione e hashing: Il sistema concatena la password immessa con il sale recuperato. Quindi, utilizza l'algoritmo di hashing indicato nella voce `/etc/shadow` (ad es. SHA-512 o bcrypt) per hash la password e il sale combinate.
4. Confronto: L'hash appena generato viene confrontato con l'hash immagazzinato in `/etc/ombre`.
5. Autenticazione Successo/fallimento: Se i due hash corrispondono, l'autenticazione ha successo. Altrimenti, l'autenticazione fallisce.
Considerazioni importanti:
* Complessità della password: Incoraggia gli utenti a scegliere password forti che sono lunghe, complesse e difficili da indovinare.
* Modifiche a password regolari: Richiedere periodicamente agli utenti di modificare le proprie password può aiutare a mitigare il rischio di compromesso della password.
* Autenticazione a più fattori (MFA): L'uso di MFA aggiunge un ulteriore livello di sicurezza richiedendo agli utenti di fornire più forme di identificazione, come una password e un codice dal proprio telefono.
* Audit di sicurezza: L'auditing regolarmente la configurazione di sicurezza del sistema può aiutare a identificare e affrontare potenziali vulnerabilità.
* Resta aggiornato: Mantieni aggiornati il sistema operativo e il software con le ultime patch di sicurezza.
In sintesi: Linux non "decodifica" le password. Utilizza una forte combinazione di salatura e hash per archiviare in modo sicuro le rappresentazioni di password. Gli algoritmi `bcrypt` e` argon2` sono generalmente preferiti per la loro resistenza agli attacchi di forza bruta. La configurazione corretta di PAM e mantenere il sistema sicuro è cruciale per proteggere gli account utente.
Domanda © www.354353.com