index.html (5735B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>Hardening de passwd y shadow</title> 7 <link rel="icon" type="image/png" href="/favicon.png" /> 8 <link rel="stylesheet" type="text/css" href="../article.css" /> 9 </head> 10 <body> 11 <header> 12 <p class="title">Hardening de passwd y shadow</p> 13 <p class="date">12 de febrero de 2016 • fjbalon</p> 14 </header> 15 <p>El contenido del fichero <emb>/etc/passwd</emb> determina el esqueleto de usuarios del sistema, constituyéndose como la primera línea de defensa del sistema contra accesos no deseados, por lo que debe mantenerse escrupulosamente y libre de errores y fallos de seguridad. En él mantenemos registrados las cuentas de usuarios, asi como las claves de accesos y privilegios. Separado por :, indica respectivamente el nombre del usuario, la clave cifrada, UID, GID, nombre completo del usuario, directorio de trabajo (<emb>/home</emb>) e intérprete usado. Si el campo de contraseña, en lugar de contener la clave cifrada contiene una x indica que la clave se encuentra cifrada en el archivo <emb>/etc/shadow</emb>, dando un mayor grado de seguridad. La sintaxis de passwd es:</p> 16 <pre><code>usuario1:FXWUuZ.vwXttg:500:501:usuario pepito:/home/usuario1:/bin/bash</code></pre> 17 <p>Los permisos predeterminados de passwd son 644 y los propietarios son root:root, evitando modificaciones erróneas, de modo que cualquier usuario sólo pueda leer el archivo.</p> 18 <p>Por otro lado, el archivo <emb>/etc/shadow</emb> almacena información sensible de los usuarios; que separados por :, indica respectivamente el nombre del usuario, la clave cifrada, el lastchanged o último cambio de contraseña en días transcurridos desde el 1 de enero de 1970, el mínimo número de días entre cambios de contraseña, el máximo número de días de validez de la cuenta, los días que avisa antes de caducar la cuenta, los días desde que caduca una contraseña para deshabilitar la cuenta y la fecha de caducidad de la cuenta en días transcurridos desde el 1 de enero de 1970. Su sintaxis es:</p> 19 <pre><code>test:$1$CQoPk7Zh$370xDLmeGD9m4aF/ciIlC.:14425:0:99999:7:::</code></pre> 20 <p>Los permisos predeterminados de passwd son 400 y los propietarios son root:root, sólo puede leer root. La contraseña se puede cifrar utilizando diferentes métodos, que son reconocidos por el identificador presente después del primer carácter $$. A continuación puedes tener el valor del id y la técnica de cifrado correspondiente que indica:</p> 21 <pre><codeb>$1$: MD5: $1$5df9f63916ebf8528697b629022993e8/li> 22 $2a$: blowfish (pez globo): $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy</li> 23 $5$: SHA-256: $5$93fa3e4624676f2e9aa143911118b4547087e9b6e0b6076f2e1027d7a2da2b0a 24 $6$: SHA-512: $6$6859f96680702a57a951eabe43fec49964ea51dde72df97e43a1fcf6f8b41b89a51cae8f3162c0cbb3e7fd0850577759aa653e25c4bdfd57264015fa6588360f</codeb></pre> 25 <p>De la misma forma que se organiza y componen los ficheros anteriores sobre los usuarios, tenemos los ficheros <emb>/etc/group</emb> (similar a <emb>/etc/passwd</emb>) y <emb>/etc/gshadow</emb> (similar a <emb>/etc/shadow</emb>); ambos con la diferencia que no se centran en los usuarios, sino en los grupos, que separados por :, indica respectivamente el nombre de grupo, la clave cifrada, GID y la lista de usuarios que pertenecen al grupo separados por ,. La sintaxis es:</p> 26 <pre><code>root:x:0:root</code></pre> 27 <h2>Verificación de integridad de passwd</h2> 28 <p><emb>pwck</emb> comprueba la integridad y la información de autenticación, comprobando que cada entrada de passwd y shadow tienen el formato adecuado y que los datos sean válidos:</p> 29 <pre><code>pwck /etc/passwd 30 usuario malvado: el directorio /home/malvado no existe 31 pwck: sin cambios</code></pre> 32 <h2>Descifrando claves con john</h2> 33 <p>En caso de tener acceso a passwd y shadow, algo que por lo general ya supone un reto debido a la estructura de permisos, podemos unshadow y buscar descifrarla mediante fuerza bruta o diccionario, usaremos john the ripper para ello.</p> 34 <pre><code>unshadow /etc/passwd /etc/shadow > unshadowed</code></pre> 35 <p>De tal forma que obtenemos las líneas passwd puras, en fusión con los datos necesarios secretos de shadow. De al forma que este nuevo fichero podemos pasarlo a john:</p> 36 <pre><code>john unshadowed # Fuerza bruta 37 john --incremental unshadowed # Fuerza bruta 38 john --wordlist=diccionario.lst --rules unshadowed # Diccionario 39 40 Using default input encoding: UTF-8 41 Loaded 4 password hashes with 4 different salts (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x]) 42 Remaining 1 password hash 43 Cost 1 (iteration count) is 5000 for all loaded hashes 44 Will run 2 OpenMP threads 45 Proceeding with single, rules:Single 46 ...</code></pre> 47 <p>Una vez finalizado el proceso, si todo ha ido bien, podremos revisar las claves cracked desde:</p> 48 <pre><code>john --show passwords 49 maria:Passw0rd2233:1006:1006::/home/maria:/bin/bash 50 1 password hashes cracked, 3 left</code></pre> 51 <h2>Descifrando claves con hashcat</h2> 52 <p>Hashcat es otra herramienta archi-conocida de craking para una amplia variedad de tipos de hashes de passwords, soportando los algoritmos de hash comunes de GNU/Linux y sus códigos hashcat:</p> 53 <ul> 54 <li>DES (Unix) = 1500</li> 55 <li>MD5 = 0</li> 56 <li>MD5 (Unix $1$) = 500</li> 57 <li>Blowfish (Unix $2*$) = 3200</li> 58 <li>SHA1 = 100</li> 59 <li>SHA-256 = 1400</li> 60 <li>SHA-256 (Unix $5$) = 7400</li> 61 <li>SHA-512 = 1700</li> 62 <li>SHA-512 (Unix $6$) = 1800</li> 63 </ul> 64 <pre><code>hashcat -m 1800 -a 0 passwords diccionario.code -r /usr/share/hashcat/rules/InsidePro-PasswordsPro.rule -o cracked.code --force</code></pre> 65 </body> 66 </html>