Confrontare le immagini ISO

Confrontare le immagini ISO
Al fine di configurare e mantenere i dispositivi di elaborazione, i distributori Linux forniscono regolarmente le immagini ISO per le loro versioni. Ciò semplifica il mantenimento dei nostri sistemi aggiornati con l'aiuto di una compilazione completa di software che si adatta effettivamente, in circostanze ideali.

Immagina di avere molte di queste immagini ISO memorizzate a livello locale. Come si capisce che le immagini ISO recuperate sono autentiche? In questo articolo ti mostriamo come verificare l'integrità e l'autenticità di un'immagine ISO che è stata scaricata in precedenza e come capire quali sono le differenze tra il contenuto effettivo di due immagini ISO. Questo ti aiuta a verificare il processo di costruzione per l'immagine ISO e ti consente di vedere cosa potrebbe essere cambiato tra due build o le versioni disponibili.

Formati di immagine

Il formato delle immagini del disco ha la sua storia [11]. Lo standard comune è ISO 9660 [12] che descrive il contenuto di un disco ottico nel suo insieme. In uso è l'estensione del file .ISO al fine di identificare un file di immagine (copia clonata).

Il formato ISO 9660 originale viene fornito con una serie di limitazioni come 8 livelli di directory e la durata dei nomi dei file. Queste limitazioni sono state ridotte dall'introduzione di una serie di estensioni come Rock Ridge [13] (conservazione delle autorizzazioni POSIX e nomi più lunghi), Joliet [14] (archiviazione di nomi Unicode in UCS-2) e estensioni Apple ISO 9660 [15] che ha introdotto il supporto HFS.

Per ottenere maggiori dettagli su un file di immagine utilizzare il comando "file" seguito dal nome del file di dati come segue:

.Elenco 1: Visualizzazione dei dettagli per un file ISO

$ file *.iso
Debian-10.1.0-AMD64-Netinst.ISO: settore di avvio DOS/MBR;
Partizione 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63),
Stargector 3808, 5664 settori
XUBUNTU-18.04.3-Desktop-AMD64.ISO: settore di avvio DOS/MBR;
Partizione 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63),
Stargector 11688, 4928 settori $

Verificare i file ISO scaricati

I provider di software affidabili ti offrono sempre due cose per il download: l'immagine ISO effettiva e il checksum in base all'immagine per fare un controllo di integrità per il file scaricato. Quest'ultimo ti consente di confermare che il tuo file locale è una copia esatta del file presente sui server di download e nulla è andato storto durante il download. In caso di errore durante il download, il file locale è corrotto e può attivare problemi casuali durante l'installazione [16].

Inoltre, nel caso in cui l'immagine ISO sia stata compromessa (come è accaduto con Linux Mint all'inizio del 2016 [17]) i due checksum non corrisponderanno. È possibile calcolare i checksum utilizzando "MD5SUM" (deprecato, non più consigliato) e "sha256sum" come segue:

.Elenco 2: calcolo del checksum per i file ISO

$ md5sum *.iso
B931EF8736C98704BCF519160B50FD83 Debian-10.1.0-AMD64-Netinst.iso
0C268A465D5F48A30E5B12676E9F1B36 XUBUNTU-18.04.3-Desktop-AMD64.iso
$ sha256sum *.iso
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e1e0834ff233818dc6f301e debian-10.1.0-AMD64-Netinst.iso
3C9E537EE1CF64088251E56B4CA1694944AD59126F298F24A78CD43AF152B5B3 XUBUNTU-18.04.3-Desktop-AMD64.iso
$

È possibile invocare il confronto tra il file di checksum fornito e l'immagine ISO memorizzata localmente come visualizzato nell'elenco 3. L'uscita di OK alla fine di una linea segnala che entrambi i checksum sono uguali.

.Listato 3: confronta checksums fornito

$ sha256sum --ckeck sha256sum.txt xubuntu-18.04.3-Desktop-AMD64.ISO: OK
$

Confrontare due file ISO memorizzati localmente

Può succedere che tu abbia scaricato due file ISO e desideri capire se sono completamente gli stessi. Il comando "sha256sum" è di nuovo utile, e ti consigliamo di incapsulare questo check in uno script di shell. Nell'elenco 4 si vede uno script bash che combina i quattro comandi "sha256sum", "taglio", "uniq" e "wc" per separare la prima colonna per tutte le righe di output, unisce nel caso in cui siano identici e conta il numero di righe che rimangono. Se i due (o più) file ISO sono uguali, i suoi checksum sono identici, rimarrà solo una singola riga e lo script bash emetterà il messaggio "I file sono gli stessi", eventualmente:

.Elenco 4: confronto automatico dei checksum dei file ISO utilizzando "sha256sum"

#!/Bin/Bash
Se ['sha256sum *.iso | Cut -d "-f1 | uniq | wc -l 'eq 1]
Poi
Echo "I file sono gli stessi"
altro
echo "i file non sono identici"
fi

Nel caso in cui lo script restituisca che i due file siano diversi, potresti essere interessato alla posizione esatta della disuguaglianza. Un confronto di ordine di byte può essere eseguito utilizzando il comando "CMP" che emette il primo byte che differisce tra i file:

.Elenco 5: vedere le differenze tra due o più file usando "CMP"

$ cmp *.iso
Debian-10.1.0-AMD64-Netinst.ISO XUBUNTU-18.04.3-Desktop-AMD64.ISO Differ: byte 433, linea 4
$

Confrontando il contenuto effettivo

Finora abbiamo fatto un confronto di ordine di byte, e ora avremo uno sguardo più attento all'interno - al contenuto effettivo dei file ISO da confrontare tra loro. A questo punto entrano in riproduzione di numerosi strumenti che aiutano a confrontare singoli file, interi strutture di directory, nonché archivi compressi e immagini ISO.
Il comando "diff" aiuta a confrontare una directory usando i due switch "-r" (abbreviazione di "-recursive") e "-q" (abbreviazione di "brief") seguiti dalle due directory da confrontare tra loro. Come visto in

Elenco 6, differenne "Diff" In quali file sono univoci per la directory e se un file con lo stesso nome è cambiato.

.Elenco 6: confronto con due directory usando "diff"

$ diff -qr t1/ t2/
Solo in t1/: blabla.conf.
I file T1/NSSwitch.conf e t2/nsswitch.conf è diverso.
Solo in T2/: PWD.conf.
$

Al fine di confrontare due immagini ISO semplicemente montare i due file di immagine per separare le directory e andare da lì.
Un output più colorato sulla linea di comando è fornito dagli strumenti "Colordiff" [1,2] e "Icdiff" [18,19]. La Figura 1 mostra l'output di "Icdiff" in cui le differenze tra i due file di "NSSwitch.conf 'sono evidenziati in verde o rosso.

Figura 1: confronto con due directory usando 'Icdiff'

Gli strumenti grafici per un confronto delle directory includono "Fldiff" [5], "XXDIFF" [6] e "Didiff" [7]. "xxdiff" è stato ispirato da "fldiff", ed è per questo che sembrano piuttosto simili. Le voci che hanno un contenuto simile sono dotate di uno sfondo bianco o grigio e le voci che differiscono sono invece con uno sfondo giallo chiaro. Le voci con uno sfondo giallo o verde brillante sono uniche per una directory.

Figura 2: confronto con due directory usando "Fldiff"

'xxdiff' visualizza le differenze di file in una finestra separata facendo clic su una voce (vedere la Figura 3).

Figura 3: confronto con due directory usando "xxdiff"

Il prossimo candidato è "Dirdiff". Si basa sulla funzionalità di "xxdiff" e può confrontare fino a cinque directory. I file esistenti in entrambe le directory sono contrassegnati con una x. È interessante notare che la combinazione di colori che è in uso per la finestra di output è la stessa di "ICDIFF" (vedi Figura 4).

Figura 4: confronto con due directory usando "Dirdiff"

Confrontare gli archivi compressi e intere immagini ISO è il prossimo passo. Mentre il comando "Adiff" dal pacchetto "Atool" [10] potrebbe essere già noto a te, daremo invece un'occhiata al comando "Diffoscope" [8,9]. Si descrive come "uno strumento per arrivare in fondo a ciò che rende diversi file o directory. Dispone in modo ricorsivo archivi di molti tipi e trasforma vari formati binari in forme più leggibili umane per confrontarli ". L'origine dello strumento è il progetto di build riproducibile [19,20] che è "una serie di pratiche di sviluppo del software che creano un percorso in modo indipendente dall'origine al codice binario". Tra gli altri, supporta i seguenti formati di file:

* File APK Android e immagini di avvio
* File di database Berkeley DB
* Immagini del filesystem CoreBoot CBFS
* Debian .buildinfo e .modifica i file
* Pacchetti di fonti debian (.DSC)
* Binari degli elfi
* Repository git
* Immagini CD ISO 9660
* Binari macos
* OpenSsh Public Keys
* Archivi pacchetti OpenWRT (.IPK)
* Messaggi firmati/crittografati PGP
* Documenti PDF e PostScript
* RPM Archives Cipolla

La Figura 5 mostra l'output di "Diffoscope" quando si confrontano due diverse versioni dei pacchetti Debian: vedrai esattamente le modifiche che sono state apportate. Ciò include sia i nomi di file che i contenuti.

Figura 5: confronto con due pacchetti Debian usando "Diffoscope" (estratto)

L'elenco 7 mostra l'output di "Diffoscope" quando si confrontano due immagini ISO con una dimensione di 1.9g ciascuno. In questo caso le due immagini ISO appartengono a Linux Mint Release 19.2 mentre un file di immagine è stato recuperato da un server francese e l'altro da un server austriaco (da cui le lettere "fr" e "at"). In pochi secondi il "diffope" afferma che i due file sono del tutto identici.

.Elenco 7: confronto con due immagini ISO usando "Diffoscopio"

$ Diffoscope LinuxMint-19.2-xfce-64bit.fr.ISO LinuxMint-19.2-xfce-64bit.A.iso
| ##Com ### | Tempo al 100%: 0:00:00
$

Per guardare dietro le quinte aiuta a chiamare "Diffoscope" con le due opzioni "-debug" e "-text-" per entrambi più output verbosio nel terminale. Ciò ti consente di imparare cosa sta facendo lo strumento. La lista 8 mostra l'output secondo.

.Elenco 8: dietro le quinte di "Diffoscopio"

$ Diffoscope -DEBUG --Text -LinuxMint -19.2-xfce-64bit.fr.iso
LinuxMint-19.2-xfce-64bit.A.iso
2019-10-03 13:45:51 D: Diffoscope.Main: avvio del diffoscopio 78
2019-10-03 13:45:51 D: Diffoscope.locale: normalizzare il locale, il fuso orario, ecc.
2019-10-03 11:45:51 D: Diffoscope.Principale: confronto iniziale
2019-10-03 11:45:51 D: Diffoscope.Progressi: registrazione < diffoscope.progress.ProgressBar object at 0x7f4b26310588> Come osservatore di progresso
2019-10-03 11:45:52 D: Diffoscope.Comparatori: carichi 50 Classi di comparatore 64BIT.fr.ISO ETA:-:-:--
2019-10-03 11:45:52 D: Diffoscope.Comparatori.utils.Specializzato: file non identificato. Magic dice: settore di avvio DOS/MBR; Partizione 2: ID = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63), settori di starge 652, 4672
2019-10-03 11:45:52 D: Diffoscope.Comparatori.utils.Specializzato: file non identificato. Magic dice: settore di avvio DOS/MBR; Partizione 2: ID = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63), settori di starge 652, 4672
2019-10-03 11:45:52 D: Diffoscope.Comparatori.utils.Confronta: confrontare LinuxMint-19.2-xfce-64bit.fr.ISO (Filesystemfile) e LinuxMint-19.2-xfce-64bit.A.ISO (FilesystemFile)
2019-10-03 11:45:52 D: Diffoscope.Comparatori.utils.File: binario.has_same_content: < LinuxMint-19.2-xfce-64bit.fr.iso> < LinuxMint-19.2-xfce-64bit.A.iso>
2019-10-03 11:45:53 D: Diffoscope.Comparatori.utils.Confronta: HAS_SAME_CONTENT_AS è stato restituito vero; Saltare ulteriori confronti
| ##Com ### | Tempo al 100%: 0:00:01
2019-10-03 11:45:53 D: Diffoscope.TEMPFILI: pulire i file di temperatura 0
2019-10-03 11:45:53 D: Diffoscope.TEMPFILI: pulizia 0 directory temporanei
$

Bene, finora, tutto bene. I prossimi test sono stati eseguiti su immagini da diverse versioni e con dimensioni di file diverse. Tutti hanno provocato un errore interno che risale al comando "Diff" che si esaurisce dalla memoria interna. Sembra che ci sia un limite di dimensioni del file di circa 50m. Ecco perché ho costruito due immagini più piccole di 10 m ciascuna e l'ho consegnato a "Diffoscoppe" per un confronto. La Figura 6 mostra il risultato. L'output è una struttura ad albero contenente il file 'nswitch.conf 'con le differenze evidenziate.

Figura 6: confronto con due immagini ISO usando "Diffoscopio"

Inoltre, è possibile fornire una versione HTML dell'output. La Figura 7 mostra l'output come file HTML in un Webbrowser. È realizzabile tramite lo switch

'-HTML output.html '.

Figura 7: Confronto di due immagini ISO usando "Diffoscope" (output HTML)

Nel caso in cui non ti piaccia lo stile di output o desideri abbinarla all'identità aziendale della tua azienda, puoi personalizzare l'output con il tuo file CSS utilizzando lo stile Switch -css.CSS 'che carica lo stile dal file CSS referenziato.

Conclusione

Trovare differenze tra due directory o anche intere immagini ISO è un po 'complicato. Gli strumenti mostrati sopra ti aiutano a padroneggiare questa attività. Quindi, felice hacking!

Grazie
L'autore desidera ringraziare Axel Beckert per il suo aiuto durante la preparazione dell'articolo.

Collegamenti e riferimenti

* [1] Colordiff
* [2] Colordiff, pacchetto Debian,
* [3] Diffutili
* [4] Diffutili, pacchetto Debian,
* [5] Fldiff
* [6] xxdiff
* [7] Dirdiff
* [8] Diffoscopio
* [9] Diffoscope, pacchetto Debian
* [10] ATOOL, pacchetto Debian
* [11] https: // www.Winiso.com/articoli/formatori di file-image.HTML (attualmente offline)
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Estensioni di Apple ISO 9660, Wikipedia
* [16] Come verificare le immagini ISO, Linux Mint
* [17] Fai attenzione agli ISOS hackerati se hai scaricato Linux Mint il 20 febbraio!
* [18] Icdiff
* [19] Icdiff, pacchetto Debian
* [20] Il progetto di build riproducibile
* [21] The Reproducible Builds Project, Debian Wiki