# Password cracking

El password cracking és un procés informàtic que consisteix a desxifrar la contrasenya de determinades aplicacions seleccionades per l'usuari. Es busca codificar els codis de xifrat en tots els àmbits de la informàtica. Es tracta del trencament o desxiframent de les claus (passwords). Normalment en un sistema com aquest, les contrasenyes s'utilitzen per poder autenticar la identitat de l'usuari i així poder establir un nivell de seguretat per entrar al sistema. Aquests atacs són de molt d'interès per als hackers, ja que, si es poguessin aconseguir la Contrasenya podrien entrar com si fossin l'usuari, i tenir els seus permisos per fer qualsevol tipus d'acció a l'equip afectat. Aquestes accions poden anar des de la modificació o eliminació de fitxers a la publicació o filtració de dades privades i personals.

## Sistema de contrasenyes

Abans de veure quins atacs es poden fer cal saber com es guarden les contrasenyes en els sistemes operatius que s'utilitzen diàriament (Windows, Linux i Mac OS). Normalment les contrasenyes no es guarden amb el text en clar. Cada sistema operatiu té el seu mecanisme per xifrar els passwords, aquest mecanisme sol ser un hash del string que conté la contrasenya. Més concretament, al guardar-se, al password se li aplica diverses iteracions d'un hash unidireccional. A més a més, en els hashos se'ls hi afegeix salt per dificultar encara més als possibles atacs.

### Unix

En els sistemes precursors a Unix, Multics, l'emmagatzematge es basava a guardar els passwords en clar, però en un fitxer on només podia accedir algun usuari amb permisos d'administrador. Aquesta solució, amb el pas del temps, va resultar ser inefectiva, ja que van aparèixer atacs per poder obtenir aquests permisos i poder veure el fitxer. Seguidament, en els sistemes posteriors, es va adoptar el mètode de guardar el hash en un fitxer. Inicialment es podia trobar els hashos en el fitxer: /etc/passwd. El problema que comportava aquest mètode era que aquest fitxer pot ser llegit per tots els usuaris, i van aparèixer múltiples atacs per trobar el password a partir del hash. Per afegir un nou nivell de seguretat, en els sistemes actuals, el fitxer "passwd" només es pot trobar informació sobre els usuaris del sistema, i els hashos de les contrasenyes es troben en el fitxer: /etc/shadow, al que només es pot accedir amb permisos d'administrador.

### Windows

El sistema Windows funciona amb una estratègia semblant a la d'Unix. Hi ha un fitxer on es guarda tot el relacionat amb els passwords dels usuaris, aquest fitxer es troba a: \windows\system32\config\sam. Aquest fitxer es coneix com a Security Accounts Manager. La diferència entre aquest fitxer i els d'Unix és que només es pot accedir al SAM abans de què el sistema operatiu s'iniciï, és a dir, un cop s'ha iniciat el Windows aquest fitxer es torna inaccessible.
En sistemes més antics (com Windows XP) en el fitxer, hi havia dues contrasenyes per cada usuari, una de local(LAN) i una de Windows, quan un usuari ficava una contrasenya i coincidia amb alguna d'aquestes, l'usuari podia accedir. Aquest sistema era fàcil d'atacar pel fet que la LAN es processava d'una forma molt poc segura. La LAN tenia un màxim de 14 caràcters, i al guardar-se es dividia en dues parts de 7, el problema va aparèixer quan l'usuari no guardava una contrasenya de 14 caràcters. Quan succeïa això, els espais en blanc se substituïen per un Null. Això feia que enlloc de tenir contrasenyes xifrades de 14 caràcters es podia tenir una contrasenya de 7 caràcters i una plena de Nulls. Això provocava que diversos atacs fossin molt més ràpids, ja que podien atacar a una contrasenya amb la meitat de caràcters que els previstos.

### Passwords en pàgines web

En moltes pàgines web també existeix un sistema de contrasenyes, el problema és que aquest molts cops no està estandarditzat. Hi ha webs que no guarden els passwords d'una forma segura, ja què el sistema de contrasenyes no ha estat fet amb una forta capa de seguretat per darrere. Per exemple, hi han hagut algunes companyies o pàgines que han tingut vulnerabilitats diverses. I s'ha pogut observar com guardaven les contrasenyes dels usuaris, en una base de dades SQL, en clar, és a dir, sense cap xifratge.

## Possibles atacs

Tots els atacs tenen els seus avantatges i els seus inconvenients. Depenent de la situació, i de quines mesures de protecció tingui la víctima, alguns atacs tindran millors resultats, encara que semblin molt poc òptims. Per poder atacar un sistema de contrasenyes cal trobar el password que doni un hash igual al que està guardat en l'ordinador. La funció hash que cal aplicar dependrà del sistema al qual s'està atacant, però aquesta informació és pública per tant tothom la pot saber. Hi ha atacs que ja porten els hashos precomputats i altres que s'han de computar mentres s'executa l'atac.

### Atac per força bruta

Aquest atac és el més simple de fer però també el que comporta més temps d'execució. L'atac en si consisteix a anar provant passwords en clar, calcular el seu hash, i veure si aquest hash coincideix amb el guardat al sistema. El principal inconvenient és el temps d'execució, ja que l'atac pot durar molt de temps. Per exemple si la contrasenya tingués 10 caràcters Asci hi hauria: $x=10^{127}$ possibilitats. En general aquest atac no és molt utilitzat degut al cost que comporta el càlcul de tants hashos, ja que és més interessant aconseguir penetrar, i aconseguir el password, de la màquina objectiu estant poc temps amb la màquina.

### Atac per diccionaris

Aquest atac consisteix a tenir un diccionari amb els passwords més utilitzats. Aquests passwords es poden trobar fàcilment per Internet, ja que hi ha moltes estadístiques públiques informant dels passwords més típics o diccionaris ja fets per altra gent. Amb aquest diccionari es pot aconseguir augmentar bastant la probabilitat de trobar la contrasenya en poc temps, encara que segueix sent un temps bastant elevat. D'aquest tipus d'atac podem trobar diverses modificacions segons el que tingui el diccionari. Les dues més destacables són:

#### Diccionaris en clar

Al diccionari en clar es guarden les contrasenyes sense el seu hash, això fa que el diccionari ocupi molta menys memòria, però té el problema de tenir un cost de temps (al moment de fer l'atac) semblant a l'Atac per força bruta, ja que s'han de calcular els hashos per cada contrasenya què es provi.

#### Diccionaris Pre-Computats

Aquest tipus de diccionari guarda els hashos de les contrasenyes a més de les contrasenyes en clar. Tot el cost computacional de calcular els hashos es fa prèviament a l'atac, això comporta una reducció significativa del temps que es trigarà a trobar la contrasenya a la màquina objectiu. Però tot té un preu, aquesta reducció es veu afectada per l'espai en memòria necessari per emmagatzemar el diccionari, ja que amb els hashos la mida augmenta significativament. Com més passwords es vulguin tenir precomputats més espai es necessitarà.

### Rainbow Tables

Com els diccionaris Pre-Computats ocupen molt i els diccionaris en clar segueixen sent molt lents apareixen les Rainbow Tables. L'estructura d'una Rainbow Table es basa en cadenes de passwords on a cada un dels passwords se li aplica una funció hash(H) i una funció de reducció (R). Aquestes funcions s'apliquen alternament, és a dir, es comença aplicar una funció H i seguidament s'aplica una funció R, i es va seguint així fins a obtenir un nombre específic de combinacions. En aquest atac és important la funció R, aquesta funció no retorna l'invers del hash, en lloc d'això retorna un password en clar qualsevol. Tant el hash com la R les escull qui fa la Rainbow Table Per exemple:
$H=FuncioHash,R=FuncioReduccio$
$X_{1}->H->Y_{1}->R->X_{2}->H->Y_{2}->R->X_{3}->H->Y_{3}$
$X=PasswordEnClar,Y=HashPassword$
De tota aquesta cadena, que pot ser tan gran com es vulgui, en una Rainbow Table es pot veure el primer i l'últim element. I en el fitxer es troben diferents entrades on cada una d'elles és una cadena. Per poder fer un atac amb una Rainbow Table cal mirar si el Hash en el sistema coincideix amb algun últim element d'alguna cadena. Quan es trobi alguna coincidència s'agafa el primer valor de la cadena i es reconstrueix fent servir les funcions R i H. S'anirà expandint la cadena fins que algun hash coincideixi amb el guardat al sistema. Quan s'ha trobat la coincidència la contrasenya serà el valor anterior. Per exemple:
$HashContrasenyaGuardada=428$
$Cadena:2->428$
$Descomposem:$
$2->H->134->R->6->H->863->R->8->H->428$
$Contrasenya=8$
Amb aquest atac s'aconsegueix un temps per atacar a la màquina molt reduït, a més de necessitar poc espai de memoria, ja que només s'emmagatzema el primer i l'últim element de cadenes que poden ser molt grans. Però tot i això no es un atac perfecte, en les cadenes es poden produir bucles infinits, o més d'una cadena diferent pot tenir el mateix últim element(també conegut com a col·lisió). Per solucionar això s'han d'utilitzar diferents funcions de reducció dins d'una mateixa cadena.

## Possibles solucions
### Salt

La salt és el mètode més utilitzat per tal de fer que els atacs siguin molt més complicats de fer. Una salt és un valor de X bits, depenent del sistema serà d'un nombre de bits o d'un altre, que es guardarà en clar conjuntament amb la contrasenya. Aquest valor varia és aleatori i canvia de valor per a cada un dels usuaris del sistema. En el moment de fer el hash es farà:
$FuncioHash(Password,Salt)$
Amb aquest mètode s'aconsegueix que els diccionaris pre-computats i les Rainbow Tables costin molt més temps de fer, a més que els diccionaris ocuparan molta més memòria. Això és pel fet que en fer la pre-computació no es pot saber quina salt es ficarà, ja que varia segons cada usuari. A l'únic atac que no afecta és al de força bruta, ja que com s'ha de fer quan es té accés a la màquina ja es pot conèixer la salt, però en ser un atac molt poc viable de fer no representa cap problema.

### Augmentar dificultat de les contrasenyes

Una altra solució és augmentar la dificultat de les contrasenyes. Segons molts estudis i investigacions molta gent utilitza contrasenyes molt fàcil d'endevinar, la contrasenya més utilitzada al món és la de:"123456" i la segona:"12345". Cal tenir a totes les contes una contrasenya suficientment llarga i barrejant el màxim de caràcters possible. Escollir una contrasenya molt llarga i difícil tampoc és una opció, ja que amb el temps s'acaba oblidant i llavors l'usuari és qui no pot accedir a la seva pròpia conta. La millor opció per escollir una contrasenya és utilitzar el sentit comú, agafar una contrasenya que sigui molt lògica i fàcil només per tú, i si pot contenir números, caràcters i lletres millor.

## Probabilitats d'encertar un password

La probabilitat d'èxit d'aconseguir un password es pot mesurar amb la fórmula d'Anderson's. Aquesta és la següent:
$N>=(T*G)/P$
$Generalitzada:$
$P>=(T*G)/N$
$On:$
$P=ProbabilitatExit,N=NumeroPossiblesPasswords$
$T=UnitatsTemps,G=IntentsPerCadaT$
Com es pot veure la probabilitat d'èxit anirà relacionada amb la quantitat de possibilitats que s'hagin d'avaluar, per això la importància d'escollir un bon password.

## Atacs més utilitzats

Hi ha una gran diversitat d'atacs a Internet amb els que es pot atacar un sistema de contrasenyes, dins d'aquest conjunt es poden destacar:
* John The Ripper
* Brutus
* Rainbow Crack
* Wfuzz
* Cain and Abel

## Vegeu també

* Seguretat informàtica
* Sal (criptografia)
* Criptografia
* Address Resolution Protocol
* Encaminador
* SSL
* Falsejament d'identitat
* Virus informàtic

## Referències

* 1 2 Sam Martin and Mark Tokutomi. Password Cracking. https://www2.cs.arizona.edu/~collberg/Teaching/466-566/2012/Resources/presentations/2012/topic7-final/report.pdf
* ↑ https://support.microsoft.com/es-es/help/102716/ntlm-user-authentication-in-windows
* 1 2 Ross Anderson. Security Engineering: A Guide to Building Dependable Distributed Systems. Wiley, 2nd edition edition, 2008. http://www.cl.cam.ac.uk/~rja14/book.html.
* 1 2 Pass-the-hash attacks: Tools and Mitigation. Author: Bashar Ewaida. https://www.sans.org/reading-room/whitepapers/testing/pass-the-hash-attacks-tools-mitigation-33283
* 1 2 https://www2.cs.arizona.edu/~collberg/Teaching/466-566/2012/Resources/presentations/2012/topic7-final/report.pdf
* ↑ https://lasec.epfl.ch/~oechslin/publications/crypto03.pdf Arxivat 2017-08-30 a Wayback Machine.
* ↑ https://crackstation.net/hashing-security.htm#salt
* ↑ https://www.imperva.com/docs/gated/WP_Consumer_Password_Worst_Practices.pdf
* ↑ https://www.lightbluetouchpaper.org/2011/11/08/want-to-create-a-really-strong-password-dont-ask-google/
* ↑ http://resources.infosecinstitute.com/10-popular-password-cracking-tools/#gref