Comparación de imágenes ISO

Comparación de imágenes ISO
Para configurar y mantener dispositivos informáticos, los distribuidores de Linux proporcionan regularmente las imágenes de ISO para sus lanzamientos. Esto simplifica mantener nuestros sistemas actualizados con la ayuda de una compilación completa de software que realmente se ajusta, en circunstancias ideales.

Imagina que tienes varias de estas imágenes ISO almacenadas localmente. ¿Cómo se descubres que las imágenes ISO recuperadas son auténticas?? En este artículo le mostramos cómo verificar la integridad y la autenticidad de una imagen ISO que se ha descargado antes y cómo descubrir cuáles son las diferencias entre el contenido real de dos imágenes ISO. Esto le ayuda a verificar el proceso de construcción de la imagen ISO y le permite ver qué puede haber cambiado entre dos compilaciones o lanzamientos disponibles.

Formatos de imagen

El formato de las imágenes de disco tiene su propia historia [11]. El estándar común es ISO 9660 [12] que describe el contenido de un disco óptico en su conjunto. En uso está la extensión del archivo .ISO para identificar un archivo de imagen (copia clonada).

El formato ISO 9660 original viene con una serie de limitaciones, como 8 niveles de directorio, así como la longitud de los nombres de archivos. Estas limitaciones se han reducido mediante la introducción de una serie de extensiones como Rock Ridge [13] (preservación de permisos POSIX y nombres más largos), Joliet [14] (almacenamiento de nombres de unicodos en UCS-2) y Apple ISO 9660 Extensionsions [15] que introdujo el soporte de HFS.

Para obtener más detalles sobre un archivo de imagen, use el comando 'Archivo' seguido del nombre del archivo de datos de la siguiente manera:

.Listado 1: Mostrar los detalles de un archivo ISO

$ archivo *.Yo asi
Debian-10.1.0-amd64 netinst.ISO: sector de arranque DOS/MBR;
Partition 2: id = 0xef, start-chs (0x3ff, 254,63), chs final (0x3ff, 254,63),
Inicio 3808, 5664 sectores
Xubuntu-18.04.3-desktop-amd64.ISO: sector de arranque DOS/MBR;
Partition 2: id = 0xef, start-chs (0x3ff, 254,63), chs final (0x3ff, 254,63),
Startector 11688, 4928 sectores $

Verificación de archivos ISO descargados

Los proveedores de software confiables siempre le ofrecen dos cosas para descargar: la imagen ISO real, así como la suma de verificación de la imagen, para hacer una verificación de integridad para el archivo descargado. El último le permite confirmar que su archivo local es una copia exacta del archivo presente en los servidores de descarga, y nada salió mal durante la descarga. En caso de un error durante la descarga, el archivo local está dañado y puede activar problemas aleatorios durante la instalación [16].

Además, en caso de que la imagen ISO se haya comprometida (como sucedió con Linux Mint a principios de 2016 [17]), las dos suma de verificación no coinciden. Puede calcular las suma de verificación utilizando 'MD5SUM' (en desuso, ya no recomendado) y 'SHA256SUM' de la siguiente manera:

.Listado 2: Calcular la suma de verificación para archivos ISO

$ md5sum *.Yo asi
B931EF8736C98704BCF519160B50FD83 Debian-10.1.0-amd64 netinst.Yo asi
0C268A465D5F48A30E5B12676E9F1B36 XUBUNTU-18.04.3-desktop-amd64.Yo asi
$ sha256sum *.Yo asi
7915FDB77A0C2623B4481FC5F0A8052330DEFE1CDE1E0834FF233818DC6F301E DEBIAN-10.1.0-amd64 netinst.Yo asi
3C9E537EE1CF64088251E56B4CA1694944AD59126F298F24A78CD43AF152B5B3 XUBUNTU-18.04.3-desktop-amd64.Yo asi
ps

Puede invocar la comparación entre el archivo de suma de verificación proporcionado y la imagen ISO almacenada localmente como se muestra en el Listado 3. La salida de OK al final de una línea indica que ambas sumas de verificación son las mismas.

.Listado 3: Compare las sumas de verificación proporcionadas

$ sha256sum -check sha256sum.txt xubuntu-18.04.3-desktop-amd64.ISO: OK
ps

Comparación de dos archivos ISO almacenados localmente

Puede suceder que haya descargado dos archivos ISO, y le gustaría averiguar si son completamente iguales. El comando 'sha256sum' es útil, nuevamente, y le recomendamos que encapsule esta verificación en un script de shell. En el Listado 4, ves un script de acuerdo de Bash que combina los cuatro comandos 'Sha256sum', 'Cut', 'Uniq' y 'WC' para separar la primera columna para todas las líneas de salida, fusionarlos en caso de que sean idénticos y contar el número de líneas que permanecen. Si los dos (o más) archivos ISO son los mismos, entonces sus sumas de verificación son idénticas, solo permanecerá una sola línea y el script bash generará el mensaje "Los archivos son los mismos", eventualmente::

.Listado 4: Comparando automáticamente las suma de verificación de los archivos ISO usando 'SHA256SUM'

#!/bin/bash
Si ['sha256sum *.ISO | cortar -d "-f1 | uniq | wc -l 'eq 1]
entonces
echo "Los archivos son los mismos"
demás
echo "Los archivos no son idénticos"
FI

En caso de que el script devuelva que los dos archivos sean diferentes, puede estar interesado en la posición exacta de la desigualdad. Se puede hacer una comparación de orden de byte utilizando el comando 'CMP' que genera el primer byte que difiere entre los archivos:

.Listado 5: consulte las diferencias entre dos o más archivos usando 'CMP'

$ cmp *.Yo asi
Debian-10.1.0-amd64 netinst.ISO Xubuntu-18.04.3-desktop-amd64.ISO difiere: byte 433, línea 4
ps

Comparando el contenido real

Hasta ahora, hicimos una comparación de orden de byte, y ahora tendremos una mirada más cercana al interior, en el contenido real de los archivos ISO que se compararán entre sí. En este punto, entran en juego una serie de herramientas que ayudan a comparar archivos individuales, estructuras completas de directorio, así como archivos comprimidos e imágenes ISO.
El comando 'diff' ayuda a comparar un directorio usando los dos interruptores '-r' (abreviatura de '-cursivo') y '-q' (abreviatura de '-Brief') seguido de los dos directorios que se compararán entre sí. Como se vio en

Listado 6, informes 'diff' qué archivos son exclusivos de cualquier directorio, y si un archivo con el mismo nombre ha cambiado.

.Listado 6: Comparación de dos directorios usando 'Diff'

$ diff -qr t1/ t2/
Solo en T1/: Blabla.confusión.
Los archivos T1/NSSwitch.conf y t2/nsswitch.conf son diferentes.
Solo en T2/: PWD.confusión.
ps

Para comparar dos imágenes ISO, simplemente monte los dos archivos de imagen para separar los directorios, y vaya desde allí.
Las herramientas 'colordiff' [1,2] y 'ICDiff' [18,19] proporcionan una salida más colorida en la línea de comandos. La Figura 1 muestra la salida de 'ICDIFF' en la que las diferencias entre los dos archivos de 'NSSwitch.conf 'se destacan en verde o rojo.

Figura 1: Comparación de dos directorios usando 'ICDiff'

Las herramientas gráficas para una comparación de directorios incluyen 'fldiff' [5], 'xxdiff' [6] y 'dirdiff' [7]. 'xxdiff' se inspiró en 'fldiff', y es por eso que se ven bastante similares. Las entradas que tienen un contenido similar vienen con un fondo blanco o gris, y las entradas que difieren vienen con un fondo de color amarillo ligero. Las entradas con un fondo de color amarillo brillante o verde son exclusivas de un directorio.

Figura 2: Comparación de dos directorios usando 'Fldiff'

'xxdiff' muestra las diferencias de archivo en una ventana separada haciendo clic en una entrada (ver Figura 3).

Figura 3: Comparación de dos directorios usando 'xxdiff'

El próximo candidato es 'dirdiff'. Se basa en la parte superior de la funcionalidad de 'xxdiff', y puede comparar hasta cinco directorios. Los archivos que existen en cualquier directorio están marcados con una x. Curiosamente, el esquema de color que se usa para la ventana de salida es el mismo que 'ICDiff' (ver Figura 4).

Figura 4: Comparación de dos directorios usando 'Dirdiff'

Comparar archivos comprimidos e imágenes ISO completas es el siguiente paso. Si bien el comando 'ADIFF' del paquete 'Atool' [10] podría ser ya conocido por usted, veremos el comando 'Diffoscopio' [8,9], en su lugar. Se describe a sí mismo como "una herramienta para llegar al fondo de lo que hace que los archivos o directorios sean diferentes. Recursivamente desempaqueta archivos de muchos tipos y transforma varios formatos binarios en formas más legibles humanas para compararlos ". El origen de la herramienta es el proyecto Reproducible Builds [19,20], que es "un conjunto de prácticas de desarrollo de software que crean una ruta independientemente variable desde el código binario". Entre otros, admite los siguientes formatos de archivo:

* Archivos APK de Android e imágenes de arranque
* Archivos de base de datos Berkeley DB
* Imágenes del sistema de archivos CoreBoot CBFS
* Debian .buildInfo y .Cambios de archivos
* PACONES DE SOURCE DEBIAN (.DSC)
* Binarios de elfo
* Repositorios GIT
* Imágenes de CD ISO 9660
* Binarios de MacOS
* Cayos públicos de OpenSsh
* Archivos de paquetes OpenWrt (.IPK)
* Mensajes firmados/encriptados PGP
* Documentos PDF y PostScript
* RPM Archivos Cebras

La Figura 5 muestra la salida del 'difoscopio' al comparar dos versiones diferentes de los paquetes Debian: verá exactamente los cambios que se han realizado. Esto incluye ambos nombres de archivo y contenidos.

Figura 5: Comparación de dos paquetes de Debian usando 'difoscopio' (extracto)

El listado 7 muestra la salida de 'difoscopio' al comparar dos imágenes ISO con un tamaño de 1.9G cada uno. En este caso, las dos imágenes ISO pertenecen a Linux Mint Release 19.2 mientras que un archivo de imagen se recuperó de un servidor francés, y el otro de un servidor austriaco (de ahí las letras 'fr' y 'at')). En cuestión de segundos, el 'difoscopio' establece que los dos archivos son completamente idénticos.

.Listado 7: Comparación de dos imágenes ISO usando 'Diffoscopio'

$ Diffoscope LinuxMint-19.2-xfce-64bit.fría.ISO LinuxMint-19.2-xfce-64bit.en.Yo asi
| ############################################# ### | 100% Tiempo: 0:00:00
ps

Para mirar detrás de escena, ayuda a llamar a 'difoscopio' con las dos opciones '-debug' y '-text-' para ambos resultados más detallados al terminal. Esto le permite aprender qué está haciendo la herramienta. El listado 8 muestra la salida según.

.Listado 8: Detrás de escena de 'difoscopio'

$ Diffoscope - -debug - -text -LinuxMint -19.2-xfce-64bit.fría.Yo asi
LinuxMint-19.2-xfce-64bit.en.Yo asi
2019-10-03 13:45:51 D: Diffoscopio.Principal: Difoscopio inicial 78
2019-10-03 13:45:51 D: Diffoscopio.localización: normalización local, zona horaria, etc.
2019-10-03 11:45:51 D: Difoscopio.Principal: comparación inicial
2019-10-03 11:45:51 D: Difoscopio.Progress: registrando < diffoscope.progress.ProgressBar object at 0x7f4b26310588> Como observador de progreso
2019-10-03 11:45:52 D: Difoscopio.Comparadores: cargadas 50 clases de comparación64bit.fría.ISO ETA:-:-::--
2019-10-03 11:45:52 D: Difoscopio.comparadores.tensiones.Especializar: archivo no identificado. Magic dice: sector de arranque de DOS/MBR; Partition 2: id = 0xef, start-chs (0x3ff, 254,63), chs final (0x3ff, 254,63), inicio 652, 4672 sectores
2019-10-03 11:45:52 D: Difoscopio.comparadores.tensiones.Especializar: archivo no identificado. Magic dice: sector de arranque de DOS/MBR; Partition 2: id = 0xef, start-chs (0x3ff, 254,63), chs final (0x3ff, 254,63), inicio 652, 4672 sectores
2019-10-03 11:45:52 D: Difoscopio.comparadores.tensiones.Comparar: Comparación de LinuxMint-19.2-xfce-64bit.fría.ISO (FileSystemFile) y LinuxMint-19.2-xfce-64bit.en.ISO (FileSystemFile)
2019-10-03 11:45:52 D: Difoscopio.comparadores.tensiones.Archivo: binario.has_same_content: < LinuxMint-19.2-xfce-64bit.fría.ISO> < LinuxMint-19.2-xfce-64bit.en.ISO>
2019-10-03 11:45:53 D: Diffoscopio.comparadores.tensiones.comparar: has_same_content_as devuelto verdadero; omitiendo más comparaciones
| ############################################# ### | 100% Tiempo: 0:00:01
2019-10-03 11:45:53 D: Diffoscopio.Tempfiles: limpieza 0 archivos temperados
2019-10-03 11:45:53 D: Diffoscopio.Tempfiles: limpieza 0 directorios temporales
ps

Bueno, hasta ahora, todo bien. Las siguientes pruebas se han realizado en imágenes de diferentes versiones y con diferentes tamaños de archivo. Todos ellos dieron como resultado un error interno que se remonta al comando 'diff' que se agota la memoria interna. Parece que hay un límite de tamaño de archivo de aproximadamente 50 m. Es por eso que he construido dos imágenes más pequeñas de 10 m cada una, y las entregué a 'difoscopio' para una comparación. La Figura 6 muestra el resultado. La salida es una estructura de árbol que contiene el archivo 'nsswitch.conf 'con las diferencias resaltadas.

Figura 6: Comparación de dos imágenes ISO usando 'difoscopio'

Además, se puede proporcionar una versión HTML de la salida. La Figura 7 muestra la salida como un archivo HTML en un webbrowser. Se puede lograr a través del interruptor

'-Salida de HTML.html '.

Figura 7: Comparación de dos imágenes ISO usando 'Diffoscopio' (salida HTML)

En caso de que no le guste el estilo de salida, o le gustaría que coincida con la identidad corporativa de su empresa, puede personalizar la salida por su propio archivo CSS utilizando el estilo Switch '-CSS.CSS 'que carga el estilo del archivo CSS referenciado.

Conclusión

Encontrar diferencias entre dos directorios o incluso imágenes ISO completas es un poco complicado. Las herramientas que se muestran anteriormente lo ayudan a dominar esta tarea. Entonces, feliz piratería!

Gracias
El autor desea agradecer a Axel Beckert por su ayuda mientras prepara el artículo.

Enlaces y referencias

* [1] Colordiff
* [2] Colordiff, paquete Debian,
* [3] Diffutils
* [4] Diffutils, paquete Debian,
* [5] Fldiff
* [6] xxdiff
* [7] Dirdiff
* [8] difoscopio
* [9] Diffoscope, paquete Debian
* [10] Atool, paquete Debian
* [11] https: // www.Winiso.com/artículos/formatos de archivo de imagen común.HTML (actualmente fuera de línea)
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Apple ISO 9660 Extensiones, Wikipedia
* [16] Cómo verificar las imágenes ISO, Linux Mint
* [17] Cuidado con los ISO pirateados si descargaste Linux Mint el 20 de febrero!
* [18] ICDIFF
* [19] ICDIFF, paquete Debian
* [20] El proyecto reproducible construye
* [21] El proyecto Reproducible Builds, Debian Wiki