Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le password: metodi e debolezze

Debolezze e funzionamento dei metodi di autenticazione tramite nome utente e password nei sistemi Windows e Linux. Dagli attacchi a dizionario a quelli a forza bruta
Debolezze e funzionamento dei metodi di autenticazione tramite nome utente e password nei sistemi Windows e Linux. Dagli attacchi a dizionario a quelli a forza bruta
Link copiato negli appunti

L'uso di username e password è da sempre uno dei metodi più diffusi per
verificare le credenziali di un utente durante l'accesso ad un sistema
informatico. Dal punto di vista teorico questo sistema di autenticazione risulta
relativamente robusto ma una serie di fattori, quali una implementazione
debole o, più spesso, una errata scelta della password, può vanificarne
completamente la sicurezza.

Di seguito si analizzerà il processo di autenticazione usato dai sistemi Windows e Linux evidenziando differenze e debolezze. Verranno illustrati i principali metodi usati per violare una password e si daranno alcuni suggerimenti per sceglierne una resistente agli attacchi.

Hashing

Il sistema concede o nega l'accesso ad un utente confrontando la password
inserita durante il login con quella presente, in forma criptata, in un
particolare database degli utenti. La forma criptata, denominata hash, è
ottenuta dalla password attraverso una funzione non reversibile. Questo
significa che non esiste un algoritmo che sia in grado di
calcolare la password a partire dal suo hash. Si è dimostrato che la cosa è
computazionalmente impossibile. Tutti i procedimenti matematici durerebbero un tempo
confrontabile con la durata delle ere geologiche o addirittura con il tempo di
vita dell'universo.

L'autenticazione quindi avviene calcolando l'hash della password fornita durante il login e confrontandolo con quello presente nel database. Se risultano uguali, la parola d'accesso inserita è corretta. Il sistema dunque non è a conoscenza della password dell'utente ma solo di una sua "firma".

L'hash è caratterizzato da una lunghezza fissa, tipicamente 16 byte, indipendente dalla lunghezza della password da cui deriva.

Gli algoritmi di hashing sono spesso chiamati anche algoritmi di message digest o one-way functions.

Per considerazioni più approfondite sulle funzioni di hash si consiglia la lettura del saggio: Funzioni Hash.

Autenticazione nei sistemi Windows

Tutti i sistemi Windows della famiglia NT (NT/2000/XP/2003) conservano il database degli utenti locali in un file protetto denominato SAM (Security Account Manager). Il tipo di autenticazione di questi sistemi prende il nome di NTLM.

Windows 95, 98 e ME invece non consentono una autenticazione locale e quindi non conservano informazioni sugli utenti. A questi sistemi è però concesso connettersi via rete a macchine appartenenti alla famiglia NT. In questo caso il tipo di autenticazione risulta diverso e viene denominato LM (Lan Manager).

I sistemi NT quindi, e d'ora in poi si farà riferimento solo a questi, devono
potere gestire sia autenticazioni NTLM sia, per compatibilità con i vecchi
sistemi, autenticazioni LM.
NTLM e LM prevedono procedure di hashing completamente differenti tra loro. Per
dare al sistema la possibilità di gestire correttamente ogni tipo di accesso,
per ogni password vengono memorizzati entrambi gli hash.

Di seguito si illustrano le caratteristiche dei due tipi di autenticazione
citati. Risulterà evidente la intrinseca debolezza di  LM rispetto a NTLM

Password LM

  • La password può avere una lunghezza massima di 14 caratteri. Se risulta più lunga verrà troncata. Se è più corta verranno aggiunti in coda degli zeri fino al raggiungimento del quattordicesimo carattere.
  • L'insieme dei caratteri ammissibili è un sottoinsieme dei caratteri ASCII.
  • Tutti i caratteri alfabetici verranno convertiti in maiuscolo. Le password
    "Sicurezza99" e "siCuReZza99" verranno quindi considerate uguali.
  • La password di 14 caratteri così ottenuta viene suddivisa in due blocchi di 7.
  • Le due metà vengono codificate indipendentemente per
    ottenere due hash di 8 byte ognuno. L'hash LM è costituito dalla
    concatenazione dei due hash ottenuti. In sostanza è come se avessimo due
    password di massimo 7 caratteri.
  • Password NTLM

    • La password può raggiungere la
      lunghezza di 127 caratteri. È prevista una limitazione a 15 caratteri solo in
      Windows NT.
    • Sono accettabili tutti i caratteri
      UNICODE
      enormemente più ampio dei caratteri ASCII.
    • La password intera viene codificata attraverso l'algoritmo MD4 per
      ottenere un unico hash di 16 byte

    Rimandiamo ad un articolo

    Autenticazione nei sistemi Unix/Linux

    Nei sistemi Unix/Linux il database degli utenti si trova in un file di testo
    presente in /etc/passwd. Eventualmente l'hash delle password può essere
    contenuto in un file separato /etc/shadow accessibile solo
    dall'utente root.

    La codifica degli hash in questo tipo di sistemi assomiglia a quella NTLM. A
    complicare la cosa interviene l'aggiunta del cosiddetto salt (sale).

    Il seguente procedimento porta alla creazione dell'hash da memorizzare nel
    database degli utenti:

    • Si genera una stringa casuale di una certa lunghezza denominata salt.
    • Si genera l'hash della stringa ottenuta dalla concatenazione di password e
      salt. L'hash possiede quindi una componente casuale.
    • Si memorizza nel file /etc/shadow
      concatenazione di salt e dell'hash precedentemente calcolato.

    Per l'autenticazione il sistema procederà in senso inverso:

    • Preleva il salt dalla stringa salt+hash presente nel file /etc/shadow
    • Concatena il salt alla password inserita dall'utente e ne calcola l'hash
    • Confronta l'hash con quello memorizzato.
    • Violazione delle password

      Si è precedentemente affermato che da un hash non è possibile risalire
      nuovamente alla password. Come è possibile allora che avvengano intrusioni in
      sistemi protetti da questo tipo di autenticazione?

      Se non è possibile procedere
      in senso inverso l'unica soluzione consiste nel provare nell'unica direzione
      possibile: si generano per tentativi delle password, si calcolano gli hash e li
      si confronta con quelli memorizzati nel database degli utenti. Se coincidono
      avremo trovato una password.

      Attacchi a dizionario

      Tralasciando il problema di recuperare gli hash dal database che in genere
      risulta protetto, l'operazione descritta precedentemente può sembrare alquanto ostica.
      Il fattore umano a questo punto gioca un ruolo determinante: la password deve
      necessariamente essere ricordata dall'utente che tenderà ad usare per essa
      parole comuni, date, nomi propri seguiti dall'anno di nascita o comunque
      stringhe composte da pochi caratteri. Tali password vengono denominate
      deboli
      (weak).

      Ecco così che l'insieme da cui scegliere le nostre password di prova può non essere
      del tutto arbitrario. E sufficiente disporre di un buon elenco di termini comuni e di
      nomi propri. A questi è possibile eventualmente concatenare delle cifre per
      ottenere stringhe che possano assomigliare, per esempio, alle tipiche forme
      "carlo75" o "mary82". Le varianti che si possono escogitare sono numerose.
      Un procedimento di questo genere viene chiamato attacco a dizionario. Il
      dizionario può essere molto grande, centinaia di migliaia o anche milioni di
      voci da provare. Nonostante questo l'attacco, generato da appositi programmi,
      viene completato in pochi minuti e garantisce buoni risultati.

      Attacchi a forza bruta

      Se il precedente metodo non ha dato i risultati sperati è possibile usare una
      tecnica più spartana: si provano tutte le combinazioni di password possibili. I
      tempi di attesa per un'analisi completa possono diventare proibitivi a seconda
      della lunghezza della password e dall'insieme dei caratteri utilizzati per la
      ricerca.

      Ancora una volta però ci vengono in aiuto le cattive abitudini degli utenti che scelgono
      spesso parole d'accesso corte e composte da soli caratteri alfabetici e cifre. Una
      password come "aj2t7b" difficilmente potrà essere trovata con un attacco a
      dizionario ma è individuabile, anche se in tempi più lunghi, attraverso un
      attacco a forza bruta che provi tutte le combinazioni di sole lettere e numeri.

      Per quanto riguarda Windows ci viene inoltre in aiuto l'intrinseca fragilità dovuta al doppio hash. Poichè l'hash LM è il più debole dei due è logico si scelga questo per tentare di forzare la password. Ciò consente di limitare la ricerca a due password di 7 caratteri al massimo in cui i caratteri alfabetici siano solo maiuscoli.
      Questi fattori contribuiscono a rendere il sistema decisamente vulnerabile.

      La buona notizia è che è possibile disabilitare la generazione del doppio hash.

      Disabilitare la generazione di hash LM

      Esistono vari metodi per ottenere lo scopo.

      Il più semplice è scegliere una password di almeno 15 caratteri. Non potendo
      questa essere gestita dall'algoritmo LM il relativo hash non verrà generato.

      Il secondo metodo prevede una disabilitazione incondizionata agendo sul
      registro di sistema. Dopo aver individuato la seguente chiave: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa
      è sufficiente creare una voce NoLMHash  di tipo DWORD.
      Se si usa Windows 2000 (a partire da sp2) non è necessario fare altro. Se si usa
      Windows XP o 2003 bisogna impostare tale voce al valore 1.

      Al termine è necessario reimpostare tutte le password già presenti sul
      sistema perché l'hash LM venga eliminato.

      Per informazioni più dettagliate sulle procedure descritte rimandiamo ad un articolo della Knowledge Base di Microsoft

      Attacchi con tabelle precompilate

      Il fattore critico negli attacchi a forza bruta è il tempo necessario al suo
      completamento. Questo è dovuto alla complessità della funzione di hashing che
      necessita di molti calcoli per essere eseguita.

      Una soluzione alternativa consiste nell'immaginare una enorme tabella in cui
      siano stati precedentemente calcolati tutti gli hash di tutte le possibili
      password. Una semplice ricerca dell'hash cercato nella tabella porterebbe
      all'individuazione immediata della password senza alcun calcolo matematico. Il
      problema è che l'ipotetica tabella avrebbe dimensioni veramente proibitive già
      per password di pochi caratteri il che vanificherebbe la sua utilità. Quello che
      si cerca di fare nella pratica è un compromesso tra lo spazio occupato e il
      tempo necessario per il calcolo. In questo modo è possibile creare una tabella
      di dimensioni ragionevoli che possa essere usata per risalire alla password
      usando poche decine di secondi o minuti di ulteriore calcolo. Famoso a tal
      proposito è il progetto RainbowCrack che permette di creare tabelle precompilate
      per gli hash LM di dimensioni pari a pochi GB o diverse decine di GB a seconda
      che si ricerchino password alfabetiche o alfanumeriche.

      La possibilità di usare un attacco di questo genere è subordinato al fatto
      che un confronto tra hash equivalga ad un confronto tra password. Questo succede
      se password uguali possiedono sempre lo stesso hash. I sistemi LM e NTLM godono
      di questa proprietà.

      Nel metodo di hashing usato dai sistemi Unix/Linux questo non succede. Poichè
      ogni hash possiede una componente casuale dovuta al salt, password uguali
      avranno hash sempre diverso. L'uso del salt quindi rende i sistemi *nix non
      vulnerabili ad un attacco con tabelle precompilate. Per questi sistemi sarà
      sempre necessario un calcolo dell'hash, con i relativi tempi di attesa, per
      forzare una password.

      Scelta di una password robusta

      Arrivati a questo punto è lecito chiedersi come debba essere strutturata una
      password difficile da attaccare con i metodi precedentemente descritti.

      • Una parola d'accesso lunga
        poche possibilità di essere scoperta. Contrariamente a quanto si può pensare
        password lunghe non sono necessariamente difficili da ricordare, anzi è spesso
        vero il contrario. Usare una frase
        buon modo per costruire un account sicuro.
      • Diversificare la tipologia dei caratteri
        esponenzialmente gli attacchi a forza bruta. Possiamo alternare i caratteri
        minuscoli a quelli maiuscoli. Possiamo usare le cifre, possibilmente non solo
        a fine password. L'uso di simboli poco usati come !"£$%&/?^ complica
        ulteriormente il processo di recupero.
      • Una tecnica ancor più estrema nella diversificazione dei caratteri prevede
        l'uso dei caratteri unicode
        ALT

        password avrà la minima possibilità di riuscita dato l'elevatissimo numero di
        codici da testare.

      La tecnica migliore consiste nell'usare contemporaneamente tutti i metodi descritti ma le possibilità sono limitate solo dalla fantasia.

      Nell'articolo citato di seguito è possibile approfondire le tematiche
      relative alla scelta della password e delle tecniche per minimizzare le
      probabilità di un possibile recupero. Il tutto alla luce dei recenti vincoli
      imposti dalla nuova legge sulla privacy.

Ti consigliamo anche