Páginas

30 julio, 2012

Verificar la integridad de ficheros comprobando sus hashes MD5 y SHA

Cómo se genera un hash de verificación para comprobar la integridad de un fichero?

Sin entrar en cálculos matemáticos, básicamente una función hash o función resumen de un fichero se genera en base a un cálculo algorítmico obtenido por sus bytes. Según una palabra escrita o un fichero estos ocupan y están formados por un determinado grupo de bytes que serán los que se usen para calcular la codificación del tipo de hash que sea.
 
Por ejemplo en el caso de ser un hash de checksum MD5 este está formado por 32 dígitos hexadecimales el cual será el valor resultante de la codificación de salida del fichero tratado.

Existen múltiples algoritmos usados para la comprobación de checksum de ficheros, hoy en día los más usados son:
  • CRC: Cyclic Redundancy Check.
  • MD4/MD5: Message-Digest Algorithm 4/5.
  • SHA-1/SHA-2/SHA-3: Secure Hash Algorithm 1/2/3.
Más información sobre como se calcula un hash:

¿Por qué es importante verificar los checksum MD5 o SHA-1 de los ficheros que descargamos de Internet?

Principalmente por integridad de la información por si el fichero se encuentra dañado y después por seguridad, ya que nos dirá si un archivo descargado de Internet a sido modificado o no. 

Muchas veces cuando descargamos una aplicación esta viene acompañada al lado del enlace de descarga (normalmente) un código de comprobación, lo que sería un checksum. Lo que nos viene diciendo es que el fichero de la aplicación que nos descargamos tiene ese código checksum y si cuando descargamos el fichero y comprobamos el este código checksum y NO concuerda quiere decir que ese fichero que nos descargamos a sido modificado por alguien o de algún otro modo pero lo que está claro es que no del propio desarrollador. Lo cual habría que tener cuidado o directamente borrarlo ya que pudo ser modificado para hacer la función de algún tipo de malware y este tener la capacidad de poder ejecutar código arbitrario en nuestro equipo local.

Existen infinidad de tools para poder comprobar los checksums de los ficheros, como puede ser:
openssl dgst -md5 <Nombre_Fichero>
Pero en esta entrada me centré en FCIV ya que es propietaria de Microsoft y no está de más saber que también cuenta con su propia herramienta para esto.

En HashCheck Shell Extension el cual es muy cómodo y nos permite realizar un comprobación de integridad de los ficheros de forma rápida.

File Checksum Integrity Verifier (FCIV) es una utilidad propietaria de Microsoft y que funciona bajo línea de comandos, calcula y comprueba los valores hash de cifrado de archivos. FCIV puede calcular MD5 o SHA-1 los más típicos valores hash criptográficos.

Estos valores se pueden visualizar en la pantalla o almacenarse en una base de datos de archivo XML para su posterior uso y verificación.

Un ejemplo, creamos un fichero de imagen de formato JPG. Ahora comprobaremos su checksum MD5 del siguiente modo: Nos vamos a donde tenemos el ejecutable que descargamos de la herramienta FCIV.exe. Y la sintaxis del comando para esto sería la siguiente:
fciv -both pruebaMD5.jpg
Donde -both especifica que se muestren los dos hashes tanto MD5 como SHA-1 que se generó para esta imagen cuando la guardé. En vez de -both podríamos especificar los atributos "-md5 -sha1" seguido dle fichero, ambas sintaxis se interpretarían de igual forma.

pruebaMD5.jpg: Sería el nombre del fichero si no está en el mismo path, lo indicaremos.

Figura 1: Generación de hashes MD5 y SHA-1 para una imagen.

En el siguiente ejemplo vemos la integridad del fichero descargable del software Notepad++ v6.8.3 release.

Nuevamente la orden en línea de comandos en la misma que la anterior, con la única diferencia de la especificación del fichero .exe en cuestión.

Figura 2: Comprobación de integridad del hash SHA-1 en Notepad++.

Para más información sobre el uso de FCIV: https://support.microsoft.com/en-us/kb/841290

Otra alternativa más cómoda es: HashCheck Shell Extension, una utilidad que se añade como una pestaña en las propiedades de cualquier fichero la cual nos permite comprobar la integridad checksum de ese fichero en cuestión de forma rápida. CRC-32, MD4, MD5, SHA-1. Ya sea de un único fichero que estemos analizando o de una carpeta que agrupe un conjunto de ficheros.

Figura 3: HashCheck comprobando la integridad de un fichero de imagen .iso.


Otra funcionalidad de HashCheck Shell Extensión es que nos permite crear un checksum MD5, haciendo botón derecho sobre el fichero veremos la opción de "Crear archivo checksum...".

Otra alternativa similar a la anterior pero con más posibilidades de comprobación de hashes es: HashTab en la que podemos seleccionar entre múltiples funciones resumen las cuales queremos comprobar y mostrar, dispone de una larga lista de funciones, entre ellas SHA-2 y SHA-3.

Figura 4: HashTab comprobando función resumen de SHA-3 de un fichero .iso.

Saludos!

Entradas Populares