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).
Per password cracking si intendono tutte quelle operazioni che permettono di reperire una password da una fonte di informazione come ad esempio un file criptato. Questi tipi di attacchi possono essere effettuati in numerevoli modalità sia da remoto, ad esempio con un Brutal force attack (un attacco che mira ad accedere al sistema tramite tentativi di login a ripetizione finchè non si trova un utente e una password validi) oppure in locale, tramite appositi tools come Crack che analizzano file come /etc/passwd.
Nei vecchi sistemi Unix queste stringhe criptate venivano salvate e verificate tramite il file /etc/passwd
, durante il processo di login: username e relativa password venivano confrontati con le entry di questo file tramite la funzione chiamata crypt(), se questa funzione riproduceva una password criptata identica a quella inserita nel file l'utente poteva accedere.
L'inconveniente era che il file /etc/passwd doveva essere leggibili da ogni utente del sistema e quindi le password ivi criptate potevano essere viste da chiunque rendendo vulnerabile il sistema ad un password attack.
Per ovviare a questo problema ci si è appoggiati ad un secondo file leggibile solo da root, /etc/shadow
(nella maggior parte degli *nix) il quale contiene le password criptate, ovviamente sempre affiancato a un /etc/passwd (sempre leggibile da chiunque) senza le password criptate.
Ormai tale configurazione è quella adottata da tutte le distribuzioni GNU Linux dove sono a disposizione (in configurazione standard) due algoritmi di criptazione one-way DES e MD5, i due algoritmi sono in grado di generare una stringa criptata da una password ma non viceversa e rendono "difficile" effettuare un cracking della password in poco tempo.
Inoltre occorre sottolineare che il cracking delle password non viene effettuato solo per eseguire un login su una shell ma in tutti quei casi in cui occorre inserire usename e password per accedere ad un servizio, dunque occorre prestare attenzione non solo alle password di sistema ma anche a quelle dei servizi correlati (per esempio gli accessi via web ad un'area protetta).
Al riguardo va fatta attenzione a dove viene mantenuto l'eventuale file delle password, da quali utenti è leggibile, se esistono password di default (che vanno ovviamente cambiate) o accessi anonimi.
Esistono innumerevoli tools come Crack o John the ripper che semplificano le operazioni di password cracking, questi stessi strumenti possono essere utilizzati dallo stesso system administrator per verificare la robustezza degli account sul proprio sistema.
DES è un algoritmo per la criptazione dati sviluppato da IBM (adottato in seguito dal governo degli Stati Uniti nel gennaio 1977) basato su un altro cipher sviluppato e patentato sempre da IBM denominato lucifer (128bit-key contro i "soli" 64 bit di DES, dei quali solo 56 realmente utilizzabili rimanenti 8 vengono utilizzati per le operazioni di calcolo degli errori).
Attualmente, modificato in alcune sue parti, grazie all'intervento della NSA (National Security Agency) viene utilizzato anche per criptare le password degli utenti di sistema nel mondo Unix.
Fino a pochi anni fà era ritenuto un metodo poco sicuro, ma grazie a queste modifiche non si hanno ancora prove di violazione nella struttura di DES oltre quella effettuata nel luglio del 1998 da parte dell'EFF (Electronic Frontier Foundation) tramite un super computer dotato di schede particolari che hanno permesso di violare il sistema DES 64bit in soli 3 giorni generando tutte le chiavi possibili (2 ^56)
La criptazione tramite il cipher DES (56 bit-key) avviene attraverso 19 step differenti per trasformare i dati in chiaro in dati criptati. Nel primo step i dati in chiaro vengono suddivisi in blocchi di 64bit e per ogni blocco viene eseguita una trasposizione di una chiave, nell'ultimo avviene esattamente l'opposto e nel penultimo avviene uno scambio dei 32 bit di estrema sinistra con quelli di destra. Questi passaggi vengono ripetuti per i rimanenti 16 step.
Il seguente metodo di criptazione è stato sviluppato per permettere la decriptazione tramite la stessa chiave utilizzata per criptare, durante le decriptazione vengono eseguiti gli stessi step ma in senso contrario.
MD5 (message digest 5) è un algoritmo hash 128 bit (Indipendentemente dall'input e dalla sua lunghezza restituisce un output lungo 128bit) sviluppato da Ron Rivest nei primi anni '90, non essendo considerata una tecnologia utilizzata per la criptazione non è soggetta a nessun tipo di restrinzioni in stati come gli USA ove vi sono leggi che limitano e controllano l'uso di sistemi di criptazione dati.
Attualmente è implementato in numerosi linguaggi di programmazione come C, Java e PHP.
Tutti quei programmi che hanno incorporato questo algoritmo per lo più vengono utilizzati per monitorare i file di un sistema per individuare possibili corruzioni o modifiche del file stesso. Esempi di questi programmi sono Tripwire (http://www.tripwire.org/) e SGI_FAM (http://oss.sgi.com/projects/fam/).
L'uso di MD5 nei sistemi linux e Unix per l'autenticazione utente aggiunge due enormi vantaggi in ambito sicurezza delle password:
- Lunghezza infinita della password (Altrimenti limitata a 8 caratteri)
- Spazio maggiore per la chiave (Altrimenti limitata a 13 caratteri)
Esempio:
Password in formato DES: pluto:/ftypF.PVqn5
Password in formato MD5: pluto:$aprl$CaVFD/..$GIrdfKK7x04Nw1iEsYYpl
Calcola il message digest del file specificato secondo l'argoritmo MD5.
Dal momento che anche piccole variazioni in un file danno un message digest completamente diverso, questo comando è tipicamente usato per verificare se un file salvato sul proprio filesystem è stato modificato o per confrontare se un file scaricato da Internet (tipicamente un tar.gz di sorgenti) ha un digest che coincide con quello "ufficiale" comunicato dai responsabili e che quindi è integro e uguale all'originale.
Calcolo del MD5
md5sum [opzioni] [file]
Opzioni comuni
--binary,-b
Abilita la lettura del file in binario.
--text,-t
Abilita la lettura del file in text mode
Esempio di un check MD5 di un file scaricato da Internet. L'output ottenuto (la stringa di lettere e numeri senza apparente senso) va verificato con quello (eventualmente) indicato su sito da cui è stato fatto il download
[al@giraffa DOWNLOADS]$ md5sum task-1.60.tar.gz
e8542e0cd96ea9d6d32913ac9652cd15 task-1.60.tar.gz
E' un metodo utilizzato per l'autenticazione utente di alcuni sistemi che permette di utilizzare password sempre diverse per effettuare il login. La password una volta utilizzata per effettuare il login scade e non potrà più essere utilizzata, questo esclude la possibilità di utilizzo di password intercettate tramite sniffer o altri metodi.
Esistono molteplici modi di implementazione:
SecureID:
L'autenticazione avviene tramite lo scambio di un codice di un username tra il sistema e l'utente. Tale codice ha una validità relativamente breve, pochi secondi e viene trasmesso da un sistema centralizzato su una scheda SecureID in possesso all'utente.
Lo svantaggio risiede nei elevati costi di implementazione.
S/key:
Una delle soluzioni più utilizzate, viene implementato lato server un metodo di generazione automatica di password tramite formule matematiche. Tramite una chiave confronta la password memorizzata con quella fornita dall'utente (ovviamente sempre diversa), se il matching risulta positivo sostituisce la password memorizzata con quella fornita dall'utente.
OPIE:
Di fatto è una libreria (implementa MD5) che comprende anche un FTP server e l'utility su modificata per supportare le OTP.
John The Ripper è buon strumento per testare la robustezza delle password di un sistema. Il suo utilizzo non è complesso e può aiutare ad individuare, fra le proprie password, quelle troppo semplici.
Download del package John the ripper
[root@GIOVE root]# wget http://www.openwall.com/john/john-1.6.tar.gz
[...]
Scompattazione dei sorgenti e compilazione
[root@GIOVE root]# tar zxvf john-1.6.tar.gz
[...]
[root@GIOVE root]# cd john-1.6/src/
[root@GIOVE src]# make
Visualizza l'elenco di piattaforme per il quale è possibile compilarlo. Scegliere quella su cui si sta lavorando.
[root@GIOVE src]# make linux-x86-any-elf
[...]
Nella sottodirectory run
si trova sia il file di configurazione (john.ini
) che il file contenente le parole che verranno utilizzate per il cracking delle password (password.lst
) oltre al binario john
. Il file password.lst
d'esempio può essere sostituito con ben più corposi file con elenchi di parole comuni presi da dizionari, in varie lingue. Considerare che John The Ripper non verifica semplicemente se una password coincide con una parola in password.lst, ma effettua una moltitudine di variazioni sul tema (cambio di lettere con numeri, cambio del case ecc) secondo quanto specificato in john.ini.
A questo punto si è pronti per un test delle password, dal momento che John The Ripper lavora su file con formato uguale a /etc/passwd, è necessario, su sistemi che supportano le shadow, lanciare preventivamente il comando unshadow per creare un unico file che incorpora il secret di /etc/shadow in un unico file simile a passwd:
[root@GIOVE run]./unshadow /etc/passwd /etc/shadow > passwd.test
Verifica le password tramite john (l'operazione può durare parecchio tempo)
[root@GIOVE run]# ./john passwd.test
Loaded 1 password (FreeBSD MD5 [32/32])
root (root)
guesses: 1 time: 0:00:00:00 100% (1) c/s: 1.00 trying: root
In questo caso John the Ripper è riuscito a trovare la password di root che era semplicemente "root".
Da notare che se si rilancia di nuovo il comando ./john passwd.test non si avrà più l'output precedente poichè il cracking della password di root è già stato effettuato:
[root@GIOVE run]# ./john passwd.test
Loaded 0 passwords, exiting...
Nel caso si vogliano rivedere le password già crackate occore lanciare il seguente comando:
[root@GIOVE run]# ./john -show passwd.test
root:root:0:0:root:/root:/bin/bash
1 password cracked, 0 left
Nella directory doc si troveranno tutte le info indispensabili per far funzionare l'utility oppure è possibile richiamare un semplice help lanciando John senza opzioni:
[root@GIOVE run]# ./john
[...]
Crack, giunto attualmente alla versione 5.0a, è un software di password cracking sviluppato originariamente per UNIX da Alec D.E. Muffet, utilizzabile dopo opportune configurazioni anche in ambiente Linux
Analogamente a John The Ripper, Crack permette di indiviudare le password più facilmente violabili su un sistema. Questo software può utilizzare sia le librerie dell'algoritmo di crittografia DES sia quelle dell'MD5.
RECUPERO SORGENTI, CONFIGURAZIONE ED INSTALLAZIONE
E' possibile scaricare Crack liberamente dal server FTP indicato sul sito dell'autore:
[root@Enigma homer]# wget ftp.cerias.purdue.edu/pub/tools/unix/pwdutils/crack/crack5.0.tar.gz
--19:43:46-- http://ftp.cerias.purdue.edu/pub/tools/unix/pwdutils/crack/crack5.0.tar.gz
=> `crack5.0.tar.gz'
Resolving ftp.cerias.purdue.edu... fatto.
Connecting to ftp.cerias.purdue.edu[128.10.252.10]:80... connected.
HTTP richiesta inviata, aspetto la risposta... 200 OK
Lunghezza: 2,964,507 [application/x-tar]
100%[================================================================================>]2,964,507 4.39K/s ETA 00:00
19:54:47 (4.39 KB/s) - `crack5.0.tar.gz' salvato [2964507/2964507]
Successivamente dovranno essere scompattati i sorgenti:
[homer@Enigma homer]# tar xzvf crack5.0.tar.gz
Viene creata la directory c50A e le relative sottodirectory
c50a/
c50a/conf/
c50a/conf/dictrun.conf
c50a/conf/rules.weird
c50a/conf/rules.suffix
...
c50a/extra/Crack7
c50a/extra/b64encode
...
c50a/manual.html
c50a/manual.txt
[root@Enigma homer]#
E' ora necessario spostarsi all'interno della directory appena creata:
[homer@Enigma homer]# cd c50a
[root@Enigma c50a]# ls
conf Crack dict doc extra LICENCE Makefile manual.html manual.txt Reporter scripts src
I file e le directory creati dopo la scompattazione, tra i quali un manuale sia in formato testo che in html
Se il proprio sistema utilizza MD5 come in questo caso (Red Hat 7.3) è necessario eseguire alcune operazioni sui sorgenti come spiegato in manual.html:
[root@Enigma c50a]# mv src/libdes src/libdes,orig
[root@Enigma c50a]# cd src/util
[root@Enigma util]# cp -f elcid.c,bsd elcid.c
[root@Enigma util]# cd ../..
E' necessario inoltre modificare alcune linee in Crack in quanto si utilizza gcc e non cc sotto UNIX. Le direttive di compilazione devono apparire come segue:
# vanilla unix cc
#CC=cc
#CFLAGS="-g -O $C5FLAGS"
#LIBS=-lcrypt # uncomment only if necessary to use stdlib crypt(), eg: NetBSD MD5
# gcc 2.7.2
CC=gcc
CFLAGS="-g -O2 -Wall $C5FLAGS"
LIBS=-lcrypt # uncomment only if necessary to use stdlib crypt(), eg: NetBSD MD5
Una volta configurati i file è possibile lanciare la compilazione dei sorgenti:
[homer@Enigma c50a]# ./Crack -makeonly
Crack 5.0a: The Password Cracker.
..
all made in util
make[1]: Leaving directory `/home/homer/c50a/src/util'
Crack: makeonly done
Si passa quindi alla creazione dei dizionari:
[homer@Enigma c50a]# ./Crack -makedict
Crack 5.0a: The Password Cracker.
(c) Alec Muffett, 1991, 1992, 1993, 1994, 1995, 1996
..
Crack: Created new dictionaries...
Crack: makedict done
E' quindi necessario creare il file da dare in pasto a Crack. Se si utilizzano le shadow password è necessario fare un merge del file con i nomi degli utenti /etc/passwd
con quello contenente le password in forma crittografata /etc/shadow
.
[root@Enigma c50a]# cp /etc/passwd passwd.txt
Copia del file con il nome degli utenti nella directory locale
[root@Enigma c50a]# ./scripts/shadmrg.sv > passwd.txt
Tramite un'utilty a corredo di Crack, shadmrg.sv, è possibile generare un file "violabile"
UTILIZZO
A questo punto è possibile eseguire Crack. La sua sintassi è Crack [opzioni] [-fmt formato] [file...]
[root@Enigma c50a]# ./Crack passwd.txt
Crack 5.0a: The Password Cracker.
(c) Alec Muffett, 1991, 1992, 1993, 1994, 1995, 1996
..
Crack: launching: cracker -kill run/KEnigma.2354
Done
[root@Enigma c50a]#
Una volta lanciata l'esecuzione di Crack, si ritorna al prompt di sistema perchè il software lavora in background. E' possibile tenere sotto controllo il lavoro del programma visualizzando un file utilzzato dallo stesso nella sottodirectory run di nome Knomehost.N, in questo caso KEnigma.2354. Utilizzando TOP è possibile notare che il programma assorbe valori intorno al 98% di CPU
VISUALIZZARE I RISULTATI
L'utility Reporter ci permette di visualizzare le password deboli scovate:
[root@Enigma c50a]# ./Reporter
---- passwords cracked as of sab apr 12 22:17:15 CEST 2003 ----
Guessed root [alabama] root [passwd.txt /bin/bash]
Una password decismente semplice come alabama sul sistema di prova (Pentium III 600 Mhz 126Mb Ram) è stata trovata in pochi minuti
FERMARE LA SESSIONE
Per fermare il il programma in modo pulito è possibile usare uno script sempre a corredo del software:
[root@Enigma c50a]# ./scripts/plaster
RECUPERARE LA SESSIONE IN CASO DI CRASH
In caso il processo dovesse interrompersi per un crash di sistema è possibile riprenderne l'esecuzione creando il file temporaneo da cui ripartire tramite con mv /run/Dnomehost.N /run/nome-file-temporaneo
e poi utilizzare Crack -recover -fmt spf run/nome-file-temporaneo
[root@Enigma run]# mv DEnigma.21087 sessione-interrotta
[root@Enigma c50a]# ./Crack -recover -fmt spf run/sessione-interrotta
Crack 5.0a: The Password Cracker.
(c) Alec Muffett, 1991, 1992, 1993, 1994, 1995, 1996
System: Linux Enigma 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
Home: /home/homer/c50a
Invoked: ./Crack -recover -fmt spf run/sessione-interrotta
Option: -recover enabled
Stamp: linux-2-unknown
...
[root@Enigma c50a]#
CRACKING DISTRIBUITO
Il processo di cracking può essere distribuito su più macchine utilizzando il file di configurazione conf/network.conf
. Per utilizzare questa modalità è necessario che Perl sia installato sulla macchina master. Una volta settato il file di configurazione è possibile lanciare l'esecuzione con:
[root@Enigma c50a]# ./Crack -network [opzioni] nomefile
Per la completa lista delle opzioni sia di crack che delle utility è possibile consultare il file manual.html.
Comando per verificarte l'integrità di un file di password.
Di fatto viene utilizzzato per verificare che tutte le entry nel file /etc/passwd e /etc/shadow siano inserite nel modo corretto e che non ci siano dati non validi (per esempio shell inesistenti).
[root@dido root]# pwck
user adm: directory /var/adm does not exist
user news: directory /var/spool/news does not exist
user uucp: directory /var/spool/uucp does not exist
user gopher: directory /var/gopher does not exist
user ftp: directory /var/ftp does not exist
user sshd: program /etc/nologin does not exist
pwck: no changes
OPIE è un package che permette di implementare le One Time Password mettendo a disposizione librerie e nuovi binari per eseguire il login ed un FTP daemon.
Attualmente sono disponibili anche due patch per implemetare OPIE con ncftp (client FTP) e imap2000b.
Il sito ufficiale è molto scarno ma tutte le informazioni utili per l'installazione e l'implementazioni di OPIE sono contenute nei sorgenti.
Download e scompattazione dei sorgenti
[root@GIOVE src]# wget
http://www.cl.cam.ac.uk/~mgk25/download/otpw-1.0.tar.gz
[...]
[root@GIOVE src]# tar zxvf opie-2.4.tar.gz
[...]
Lancio di configure. Per verificare le opzioni disponibili lanciare il comando ./configure --help
[root@GIOVE src]# cd opie-2.4
[root@GIOVE opie-2.4]# ./configure --prefix=/usr --enable-insecure-override
[...]
Compilazione Sorgenti e installazione
[root@GIOVE opie-2.4]# make
[root@GIOVE opie-2.4]# make install
Abilitazione dell'utente root nell'uso di OPIE e calcolo delle nuove password
[root@GIOVE opie-2.4]# opiepasswd
Adding root:
You need the response from an OTP generator.
New secret pass phrase:
otp-md5 499 GI5005
Response:
Prima di procedere occorre lanciare in una nuova shell l'OTP generator e copiare il risultato nella shell precedente. Nella nuova shell lanciare il comando suggerito dall'output di opiepasswd:
[root@GIOVE opie-2.4]# otp-md5 499 GI5005
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Sorry, but you don't seem to be on the console or a secure terminal.
Warning: Continuing could disclose your secret pass phrase to an attacker!
Enter secret pass phrase:
CURB WRY JOKE WEIR DANK WHOA
Copiare il risultato e inserirlo nella shell precedente:
root@GIOVE opie-2.4]# opiepasswd
Adding root:
You need the response from an OTP generator.
New secret pass phrase:
otp-md5 499 GI5005
Response: CURB WRY JOKE WEIR DANK WHOA
ID root OTP key is 499 GI5005
CURB WRY JOKE WEIR DANK WHOA
Tramite il comando opieinfo è possibile visualizzare il seed e informazioni riguardanti la chiave, informazioni indispensabili per visualizzare l'elenco delle password attive
[root@GIOVE root]# opieinfo
498 GI5005
Per visualizzare l'elenco delle password lanciare i seguenti comandi.
[root@GIOVE root]# opiekey -5 -n 25 498 GI5005
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Sorry, but you don't seem to be on the console or a secure terminal.
Warning: Continuing could disclose your secret pass phrase to an attacker!
Enter secret pass phrase:
474: REB BERN BECK GAP NOT TUNE
475: REAM LOGE TILL YAWL LUCK AX
[...]
497: JOVE YET OAF BUM ODE FLAK
498: TURN RUDE MIST SWUM MILK RID
Ogni riga corrisponde ad una password. Al prompt di login una volta inserita il nome utente verrà visualizzata una riga simile:otp-md5 497 GI5005 ext, ove il primo numero corrisponde alla password da inserire:
[neo@dido neo]$ telnet giove
Trying giove...
Connected to giove
Escape character is '^]'.
Red Hat Linux release 8.0 (Psyche)
Kernel 2.4.18-14 on an i586
login: root
otp-md5 497 GI5005 ext
Response: JOVE YET OAF BUM ODE FLAK
[root@GIOVE root]#
Disabilita OPIE per l'utente root
[root@GIOVE root]# opiepasswd -d
Updating root:
Disable root's OTP access? (yes or no) yes
ID root is disabled.
Il comando pwconv permette di convertire le normali password salvate in /etc/passwd in shadow password, creando il file /etc/shadow. Pwunconv esegue esattamente l'operazione inversa.
Entrambi i comandi non prevedono opzioni. Alcune opzioni come scadenza password e lunghezza minima della password vengono definiti tramite il file di configurazione /etc/login.defs
Esempio pwconv:
[root@GIOVE root]# head -1 /etc/passwd
root:$1$r/zezt0s$1wCCsgogfxiEdnAaf0OWw.:0:0:root:/root:/bin/bash
[root@GIOVE root]# pwconv
[root@GIOVE root]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@GIOVE root]# head -1 /etc/shadow
root:$1$r/zezt0s$1wCCsgogfxiEdnAaf0OWw.:12093:0:99999:7:::
MD5sums è un tool freeware in ambiente Windows che permette di verificare il message digest di un file. E' composto da un solo eseguibile, per utilizzarlo basta copiarlo in una directory nel PATH di sistema.
C:\> md5sums
MD5sums 1.1 freeware for Win9x/ME/NT/2000/XP+
Copyright (C) 2001-2002 Jem Berkes - http://www.pc-tools.net/
Usage: md5sums [OPTION] filespec1 [filespec2 ...]
OPTION switches:
-b Bare output, no path headers
-e Exit immediately; don't pause before returning
-n No percent done indicator
-p Pause before returning (incompatible with -e)
-s Display statistics at end (hashing speed)
-u Mimic output of UNIX md5 command (implies -b, -n)
Examples:
md5sums c:\temp
md5sums original.doc copy*.doc backup*.doc
md5sums -n -e d:\incoming > log
Un esempio:
C:\> md5sums httpd-2.0.50.tar.gz
MD5sums 1.1 freeware for Win9x/ME/NT/2000/XP+
Copyright (C) 2001-2002 Jem Berkes - http://www.pc-tools.net/
Type md5sums -h for help
[Path] / filename MD5 sum
-------------------------------------------------------------------------------
[C:\]
httpd-2.0.50.tar.gz 8b251767212aebf41a13128bb70c0b41