L'obiettivo ultimo di un hacker è quello di riuscire ad avere i privilegi di root (Administrator) sul sistema attaccato per averne pieno controllo, ciò può avvenire o tramite l'exploit di programmi e servizi vulnerabili o a causa di errori di amministrazione come la configurazione sbagliata di un servizio o l'impostazione di policy errate per la gestione degli utenti e delle relative password.
Una via, relativamente semplice, per compromettere un sistema è quella di accederci come utente "normale" e poi tramite l'utilizzo di bachi di package installati elevarsi a root o administrator.
Ovviamente, come è pure intuibile, questa semplicità relativa dipende dalle policy utilizzate per definire gli username e le password.
E' essenziale creare una policy ed educare gli utenti di un sistema ad utilizzare password difficilmente reperibili seguendo semplici regole:
- Utilizzare le shadow password ove è possibile, quindi basarsi su algoritmi di criptazione difficilmente decriptabili (MD5 + DES). Uno dei vantaggi di avere le password criptate su un file come /etc/shadow
anzichè il solito /etc/passwd
è che a differenza del secondo, leggibile da ogni utente Unix, il primo è accessibile soltanto da root.
- Utilizzare password complesse non riconducibili all'utente (nomi, date, preferenze etc..) o a semplici parole contenute in un dizionario, ma parole complesse almeno di 6 caratteri alcuni dei quali dovranno essere numeri e caratteri speciali come ().?!#
Cercare di trovare un proprio "algoritmo" mentale che ci permetta di ricordarci una password apparentemente complessa senza doverla scrivere da qualche parte.
- Verificare tramite utility di password cracking l'esistenza di password nel sistema facilmente deducibili. Queste stesse utility possono essere utilizzate da un intrusore, in possesso del file con le password criptate, per eseguire un brute force attack sulle password, cercando di individuare quelle più semplici cn strumenti automatici.
- Settare una policy di scadenza delle password. Le password potenzialmente eterne non dovrebbero esistere, anche perchè si tende a lasciarle tali. E' sempre meglio impostare una scadenza (anche non brevissima, come 6 mesi o 1 anno) a tutte le password anche se questo può rendere più scomoda la vita degli amministratori e mettere a dura prova la memoria degli utenti. In casi estremi si può pensare di implementare un sistema di one-time password, dove ad ogni accesso viene automaticamente cambiata la password.
- Non lasciare traccia delle password, sia in formato cartaceo (post-it attaccati al video o sotto la tastiera) o in formato elettronico (Fogli excel oppure semplici file di testo). Se le password sono complesse si può comunque pensare di averle scritte in un qualche file o documento, che però devono essere particolarmente protetti (sotto chiave, criptati, ecc.)
Ovviamente la possibilità di cracking delle password non si riduce a zero anche seguendo queste poche regole, che oltretutto pur semplici sono spesso ignorate, ma di sicuro rendono difficoltosi tutti quegli attacchi al proprio sistema che mirano al cracking di una password.
A questo proposito si cerchi anche di limitare la possibilità di accesso ad una macchina (via telnet, ssh, remote desktop...) da qualsiasi parte su Internet. La maggior parte delle problematiche di password guessing e escalation dei privilegi da utente normale a root si hanno su sistemi in cui l'utente ha la possibilità di usare una shell (unix) o il sistema stesso (Windows).
In altri casi (accesso ftp o http ad aree riservate) la compromissione delle password difficilmente porta alla compromissione del sistema, anche se può dare diritti importanti all'intruso (possibilità di modificare le pagine di un sito o di accedere ad informazioni riservate).