30 julio, 2012

Verificar la integridad de ficheros comprobando sus hashes

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

Sin entrar en cálculos mátematicos... 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:
https://es.wikipedia.org/wiki/MD5
https://es.wikipedia.org/wiki/Funci%C3%B3n_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.
Esto 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:
- MD5summer
- FSUM 2.52
- MD5Fourmilab
- MD5Ckecker 2.3.1
- pySum y gtkhash (para Linux)

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.
Y 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 linea 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.

Podré un ejemplo habitual:
Cree un fichero de imágen 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 linea 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!

12 julio, 2012

Crear un arranque de inicio boot (booteable) para sistemas DOS (Windows 95/98/ME) en un dispositivo USB o pendrive: Virtual Floppy Drive y HP Disk Storage Format Tool

Si queremos poder realizar un arranque de inicio booteable para cualquiera utilidad/herramienta para Windows, ya sea un Batch-proceso por lotes (.bat) o bootear cualquier contenido en el arranque de un equipo que ya tenga o no instalado cualquier tipo de sistema operativo. Y que esto nos puede valer para bootear e intentar recuperar un archivo de una partición de un Windows 95/98/ME, actualizar la BIOS, o dar soporte de CD-ROM bajo DOS. Podremos hacerlo de la siguiente manera.

Nos haría falta un pendrive de cualquier tamaño, en mi caso utilizé uno de 1 GB.
Después tendremos que hacer uso de dos tools:
Virtual Floppy Drive - (website oficial) (compatible solo para 95/98/ME y XP). NOTA: Aunque la página web oficial de descarga dice que es compatible la ejecución en Windows 7, lo e testeado en un Windows 7 Ultimate y Enterprise (x86 ambos) y no funciona correctamente, ni ejecutándolo en "modo compatibilidad para Windows 7".
HP Disk Storage Format Tool (siempre intento buscar websites oficiales, pero en este caso no la encontré ya que HP no da soporte a esta aplicación. Esta herramienta ya la había comentado en su día)

La idea de todo esto es la siguiente:
Si quiero hacer booteable un USB, por ejemplo, para la instalación de un Windows Vista/7, la cuestión está en generar un MBR para ese USB, de que forma? Muy fácil. Copiando el fichero BOOTSECT.EXE con el parámetro /NT60 a la letra de unidad del dispositivo USB a bootear y este ya genera el arranque para ese USB si su contenido después es la consecuente instalación de Windows Vista/7.
Pero esto no es así si se trata de versiones anteriores a Windows Vista/7 o si se trata de herramientas y/o procesos batch arcaicos que tienen la opción de poder manejarlos después de un booteo ya sea por un menú batch o lo que fuese.

Para lograr bootear un USB con esas características, lo lógico sería crear un disco de arranque de Windows 98 o similar.,(yo "soy joven", pero aun me acuerdo de como se hacía esto). Muchos recordareis que hace años para instalar Windows 95/98 había que bootear el sistema con un diskette y después proceder a la instalación de Windows mendiante un dispositivo de disco compacto óptico, como es un CD.

Pasos a seguir:

[1] - Descargamos y descomprimimos la aplicación:
Virtual Floppy Drive - (website oficial) (compatible solo para Windows 95/98/XP). 
[2] - Ejecutamos el fichero vfdwin.exe. Se nos abrirá una la ventana de la tool. 
[3] - En la pestaña "Driver", sin hacer nada, clicamos sobre el botón "Install" y después sobre "Start". Esto iniciará el controlador que emulará una unidad virtual Floppy.



[4] - Después, en la pestaña "Drive 0", pulsamos en el botón "Change", se nos abrirá una ventana llamada 'Drive Letter', en esta seleccionamos una letra de unidad para la Floppy virtual que creamos anteriormente, seleccionar la letra B: (por estandar, ya que está correspondería a una segunda unidad de diskettes), comprobar que está marcado el chekbox "Persistent/Global".
[5] - Luego pulsamos sobre "Open/Create", se nos abrirá otra ventana y en la que SOLO daremos clic en el botón "Create", NO tocaremos nada más y NO cerraremos la ventana de la herramienta de "VFD Control Panel". (Ya que puede que se nos demonte la unidad virtual y perdamos las configuraciones realizadas).



[6] - Ahora procederemos a dar formato a la unidad virtual montanda en el equipo. Para dar un formato con los archivos necesarios para un boot, marcaremos el checkbox: "Crear un disco de inicio de MS-DOS" y pulsaremos en iniciar. Se nos crearán los ficheros necesarios para el arranque de inicio del equipo.


[7] - Nos queda pasar estos archivos a un dispositivo USB, para ello haremos uso de otra herramienta llamada:
HP Disk Storage Format Tool. La descargamos e instalamos normalmente.

[8] - La ejecutamos con el pendrive "pinchado" en el equipo, y está nos detectará los dispositivos conectados. Seleccionamos el pendrive en cuestión y en la selección del sistema de ficheros aconsejo formatearlo en FAT32 aunque sea inferior a una capacidad de 128MB.
Aclaro que para la elección de NTFS esto NO funionará ya que no es un sistema de ficheros que no es soportado por DOS.
Al menos que quieras iniciar algo más viejo que un Windows 95, lo cual es raro ya que un equipo que tenga un sistema operativo anterior a Windows 95 es dificil que tenga puertos USB, pero igualmente en ese caso y por temas de incompatibilidad marcaremos un sistema de ficheros FAT (o FAT16).

[9] - Por último, marcamos los checkbox: "Quick  Format" (para formato rápido) y "Create a DOS startup disk" usando sistemas de ficheros locales, que son los que cargaremos de la unidad virtual floppy (los ficheros de arranque-boot). Especificaremos el path: B:\ ya que era la letra asignada para la unidad de diskettes virtual.
Si después de realizar este formateo nos vamos a ver el interior del dispositivo USB y que datos contienen, veremos estos:
- MSDOS.SYS: Contiene las rutinas de los procesos que ejecutan los servicios estándares de un sistema operativo DOS, sería el propio sistema operativo DOS en si. Y que nos permitirá manipular los archivos del disco, así como: crear, borrar, mover, formatear, y todas las funciones disponibles.
- IO.SYS: (Input/Output) Este fichero procesa la entrada y salida de datos que se establecen en el fichero MSDOS.SYS para que estos sean interpretados por la máquina.
- COMMAND.COM: Que no es más que el intérprete de comandos de los sistemas operativos DOS, como son: Windows 95/98/ME de arquitecturas de 16/32 bits.

Conjuntamente el fichero IO.SYS y MSDOS.SYS cargan el fichero COMMAND.COM

Puede que también existan otros dos ficheros, o más bien abría que crearlos con los mismos nombres y cada fichero configurarlos o modifcarlos para su funcionamiento, en el caso de querer personalizar en arranque y hacer que se inicie con un propio menú personalizado y programado de forma como si fuese un proceso de lotes (batch, como ya comentara al principio de la entrada), en internet se pueden encontrar multitud de guías de ejemplo de como programar estos ficheros y que sintaxis tienen.
O si lo que deseemos conseguir, en caso de querer hacer por ejemplo, otro arranque para la instalación de algún OS Windows 95/98/ME, podremos copiarlos y pegarlos "a pelo" de los cuales están en la unidad virtual (B:\) del disco de arranque, creado anteriormente.

Dichos ficheros son dos: CONFIG.SYS y AUTOEXEC.EXE

- CONFIG.SYS: Contiene parametros de inicialización y configuración para el sistema, hace posible el uso de aplicaciones o utilidades bajo DOS. También es editable y con posibilidad de cargar ciertos comandos y funcionalidades en las que podremos instalar controladores de los dispositivos u otros detalles.
Si estás interesado en profundidad sobre:
¿Como editar config.sys, te aconsejo mirar esta guía?:
http://doblev.files.wordpress.com/2008/03/config.pdf

- AUTOEXEC.BAT: Este inicia y carga los manejadores o controladores (Drivers) de los dispositivos, utilidades (a bajo nivel) y establece variables de entorno antes de que se ejecute la interfaz gráfica de Windows. También define el prompt inicial del sistema, define paths o rutas y carga cualquier tipo de programa residente en memoria TSR (Terminate and Stay Resident - Termina y Permanece Residente).

Estos ficheros son los necesarios para bootear nuestro dispositivo USB.


[10] - Ahora solo restaría copy/paste al pendrive de los ficheros que queremos usar después del boot.

[11] - Finalmente, ya podemos cerrar el Virtual Floppy Drive de la siguiente manera, para desmontar la unidad virtual:
Para desactivarlo por completo: Nos situamos en la pestaña "Drive0" pulsamos sobre "Close" al mesaje de advertencia le decimos que "No. Luego en la pestaña "Driver" pulsamos primero en "Stop" y luego en "Uninstall". Ahora ya podremos cerrar la la herramienta.

Nota IMPORTANTE: Si tenemos otro dispositivo USB o pendrive y queremos crear una copia, NO podremos copiar/pegar los archivos "a pelo", aunque copiemos los archivos de booteo esenciales. Ya que para cada dispositivo USB, dependiendo Marca/Modelo (aún sean idénticos), cada componente tiene su propio IDs y un cojunto de varias generan un ID único del fabricante. Por lo tanto habría que hacer este proceso para todos los dispositivos USB que queremos hacer iguales o booteables en estos casos.
Entradas Relacionadas