Última actualización: octubre 17, 2022
9.1.2.5 Práctica de laboratorio: Convertir elementos en hashes (versión para el instructor)
Nota para el instructor: Los elementos con color de fuente rojo o resaltados en gris indican texto que aparece solo en la copia del instructor.
Objetivos
Parte 1: Crear hashes con OpenSSL
Parte 2: Verificar hashes
Antecedentes / Escenario
Las funciones de hash son algoritmos matemáticos diseñados para tomar datos como entrada y generar una cadena de caracteres única de tamaño fijo, también conocida como hash. Diseñadas para que sean veloces, las funciones de hash son muy difíciles de revertir; es muy difícil recuperar los datos que crearon un hash determinado, basándose solamente en el hash. Otra de las propiedades importantes de las funciones de hash es que hasta el cambio más pequeño realizado en los datos de entrada genera un hash completamente diferente.
Aunque se puede utilizar OpenSSL para generar y comparara hashes, hay otras herramientas disponibles. En esta práctica de laboratorio también se incluyen algunas de estas herramientas.
Recursos necesarios
- VM CyberOps Workstation
- Acceso a Internet
Parte 1: Crear hashes con OpenSSL
OpenSSL se puede utilizar como una herramienta independiente para tareas de hash. Sigan los pasos que se indican a continuación para crear un hash de un archivo de texto:
Paso 1: Generar un hash a partir de un archivo de texto
a. Abran una ventana del terminal en la máquina virtual CyberOps Workstation.
b. Como el archivo de texto desde el cual se quiere generar el hash se encuentra en el directorio /home/analyst/lab.support.files/, pasen a ese directorio:
[analyst@secOps ~]$ cd /home/analyst/lab.support.files/
c. Escriban el siguiente comando para generar una lista del contenido del archivo de texto letter_to_grandma.txt en la pantalla:
[analyst@secOps lab.support.files]$ cat letter_to_grandma.txt Hi Grandma, I am writing this letter to thank you for the chocolate chip cookies you sent me. I got them this morning and I have already eaten half of the box! They are absolutely delicious! I wish you all the best. Love, Your cookie-eater grandchild.
d. Sin salir de la ventana del terminal, emitan el siguiente comando para generar un hash a partir del archivo de texto. El comando utilizará MD5 como algoritmo de hashing para generar un hash del archivo de texto. El hash aparecerá en la pantalla después de que OpenSSL lo haya computado.
[analyst@secOps lab.support.files]$ openssl md5 letter_to_grandma.txt MD5(letter_to_grandma.txt)= 8a82289f681041f5e44fa8fbeeb3afb6
Observen el formato de la salida. OpenSSL muestra el algoritmo de hashing que se utilizó (MD5), seguido por el nombre del archivo utilizado como datos de entrada. El hash MD5 en sí aparece después del signo igual (‘=’).
e. Las funciones de hash son útiles para verificar la integridad de los datos independientemente de que se traten de una imagen, una canción o un simple archivo de texto. El cambio más pequeño produce un hash completamente diferente. Los hashes se pueden calcular antes y después de la transmisión, para luego compararlos. Si los hashes no coinciden, los datos fueron modificados durante la transmisión.
Modifiquemos el archivo de texto letter_to_grandma.txt y volvamos a calcular el hash MD5. Emitan el siguiente comando para abrir nano, un editor de texto para la línea de comandos.
[analyst@secOps lab.support.files]$ nano letter_to_grandma.txt
Utilicen nano para cambiar la primera oración de ‘Hi Grandma’ a ‘Hi Grandpa’. Observen que solo estamos cambiando un carácter: la ‘m’ a una ‘p’. Después de hacer el cambio, presionen las teclas <CONTROL+X> para guardar el archivo modificado. Presionen ‘Y’ (Sí) para confirmar el nombre y guardar el archivo. Presione la tecla <Intro> y saldrá de nano para continuar con el siguiente paso.
f. Ahora que se ha modificado y guardado el archivo, vuelvan a ejecutar el siguiente comando para generar un hash MD5 del archivo.
[analyst@secOps lab.support.files]$ openssl md5 letter_to_grandma.txt MD5(letter_to_grandma.txt)= dca1cf6470f0363afb7a65a4148fb442
El hash nuevo, ¿es diferente al calculado en el punto (d)? ¿Es muy diferente?
Sí. El nuevo hash es completamente diferente al hash anterior.
g. Los hashes MD5 se consideran débiles y susceptibles a ataques. Algunos algoritmos de hashing más robustos son SHA-1 y SHA-2. Utilicen el siguiente comando para generar un hash SHA-1 del archivo letter_to_grandma.txt::
[analyst@secOps lab.support.files]$ openssl sha1 letter_to_grandma.txt SHA1(letter_to_grandma.txt)= 08a835c7bcd21ff57d1236726510c79a0867e861 [analyst@secOps lab.support.files]$
Nota: Hay otras herramientas para generar hashes. A saber: md5sum, sha1sum y sha256sum se pueden utilizar para generar hashesMD5, SHA-1 y SHA-2-256, respectivamente.
h. Utilicen md5sum y sha1sum para generar un hash MD5 y uno SHA-1 del archivo letter_to_grandma.txt:
[analyst@secOps lab.support.files]$ md5sum letter_to_grandma.txt dca1cf6470f0363afb7a65a4148fb442 letter_to_grandma.txt [analyst@secOps lab.support.files]$ sha1sum letter_to_grandma.txt 08a835c7bcd21ff57d1236726510c79a0867e861 letter_to_grandma.txt [analyst@secOps lab.support.files]$
Los hashes generados con md5sum y sha1sum, ¿coinciden con las imágenes generadas en los puntos (g) y (h), respectivamente? Explique.
Sí. Si bien se utilizan diferentes herramientas, utilizan el mismo algoritmo hash y datos de entrada.
Nota: Si bien SHA-1 aún no se vio comprometido de manera efectiva, las computadoras se vuelven cada vez más poderosas. Se espera que esta evolución natural pronto permita que los atacantes vulneren SHA-1. A modo de medida proactiva, SHA-2 ahora es el estándar recomendado para el hashing. También cabe señalar que SHA-2 es, de hecho, una familia de algoritmos de hashing. La familia SHA-2 está compuesta por seis funciones de hash: a saber: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256. Estas funciones generan valores de hash de 224, 256, 384 o 512 bits de largo, respectivamente.
Nota: La VM CyberOPS solo incluye compatibilidad con SHA-2-224, SHA-2-256 y SHA-2-512 (sha224sum, sha256sum y sha512sum, respectivamente).
Parte 2: Hashes de verificación
Como se mencionó antes, un uso común de los hashes es verificar la integridad de los archivos. Sigan los pasos que se detallan a continuación para utilizar hashes SHA-2-256 y verificar la integridad de sample.img, un archivo que se descargó de Internet.
a. Junto con sample.img, también se descargó sample.img_SHA256.sig. sample.img_SHA256.sig es un archivo que contiene el SHA-2-256 computado por el sitio web. En primer lugar, utilicen el comando cat para mostrar el contenido del archivo sample.img_SHA256.sig:
[analyst@secOps lab.support.files]$ cat sample.img_SHA256.sig c56c4724c26eb0157963c0d62b76422116be31804a39c82fd44ddf0ca5013e6a
b. Utilicen SHA256sum para calcular el hash SHA-2-256 del archivo sample.img:
[analyst@secOps lab.support.files]$ sha256sum sample.img C56c4724c26eb0157963c0d62b76422116be31804a39c82fd44ddf0ca5013e6a sample.img
¿Se descargó correctamente sample.img? Explique.
Sí. Ya que ambos hash coinciden, el hash que se calcula antes de la descarga y el que se calcula después, es correcto indicar que no se introdujeron errores durante la descarga.
Nota: Si bien los hashes de comparación son un método relativamente resistente para detectar errores de transmisión, hay mejores formas de garantizar que nadie modifique el archivo. Diversas herramientas como gpg son un método mucho mejor para garantizar que el archivo descargado no haya sido modificado por ningún tercero y que es, efectivamente, el archivo que el editor quería publicar.