Immagine ISO

Confronto delle immagini ISO

Confronto delle immagini ISO
Al fine di configurare e mantenere i dispositivi informatici, i distributori Linux forniscono regolarmente immagini ISO per le loro versioni release. Ciò semplifica l'aggiornamento dei nostri sistemi con l'aiuto di una raccolta completa di software che si adatta effettivamente insieme, in circostanze ideali.

Immagina di avere molte di queste immagini ISO memorizzate localmente. Come si fa a capire 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 permette di vedere cosa potrebbe essere cambiato tra due build o versioni disponibili.

Formati immagine

Il formato delle immagini disco ha una 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 per identificare un file immagine (copia clonata).

Il formato ISO 9660 originale presenta una serie di limitazioni come 8 livelli di directory e la lunghezza dei nomi dei file. Queste limitazioni sono state ridotte dall'introduzione di una serie di estensioni come Rock Ridge [13] (conservazione dei permessi POSIX e nomi più lunghi), Joliet [14] (memorizzazione dei nomi Unicode in UCS-2) e le 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:

.Listato 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),
settore di partenza 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),
settore di partenza 11688, 4928 settori $

Verifica dei file ISO scaricati

I fornitori di software affidabili ti offrono sempre due cose per il download: l'immagine ISO effettiva e il relativo checksum dell'immagine per eseguire 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 che nulla è andato storto durante il download. In caso di errore durante il download, il file locale è danneggiato e può causare problemi casuali durante l'installazione [16].

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

.Listato 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
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.iso
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-desktop-amd64.iso
$

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

.Listato 3: Confronta i checksum forniti

$ sha256sum --controlla sha256sum.txt xubuntu-18.04.3-desktop-amd64.iso: OK
$

Confronto di due file ISO archiviati localmente

Può succedere che tu abbia scaricato due file ISO e vorresti capire se sono completamente uguali. Il comando 'sha256sum' è di nuovo utile e ti consigliamo di incapsulare questo controllo in uno script di shell. Nel listato 4 vedi uno script bash che combina i quattro comandi "sha256sum", "cut", "uniq" e "wc" per separare la prima colonna per tutte le righe di output, unirli nel caso siano identici e conta il numero di righe rimaste. Se i due (o più) file ISO sono uguali, i suoi checksum sono identici, rimarrà solo una singola riga e lo script bash visualizzerà il messaggio "i file sono gli stessi", eventualmente:

.Listato 4: confronto automatico dei checksum dei file ISO usando 'sha256sum'

#!/bin/bash
 
if [ '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 sono diversi potresti essere interessato alla posizione esatta della disuguaglianza. È possibile eseguire un confronto dell'ordine dei byte utilizzando il comando 'cmp' che restituisce il primo byte che differisce tra i file:

.Listato 5: Guarda 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 differire: byte 433, riga 4
$

Confrontando il contenuto reale

Finora, abbiamo fatto un confronto dell'ordine dei byte e ora daremo un'occhiata più da vicino all'interno - al contenuto effettivo dei file ISO da confrontare tra loro. A questo punto entrano in gioco una serie di strumenti che aiutano a confrontare singoli file, intere strutture di directory così come 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

Listato 6, "diff" riporta quali file sono univoci per entrambe le directory e se un file con lo stesso nome è cambiato.

.Listato 6: confronto di due directory utilizzando 'diff'

$ diff -qr t1/ t2/
Solo in t1/: blabla.conf.
I file t1/nsswitch.conf e t2/nsswitch.conf sono diversi.
Solo in t2/: pwd.conf.
$

Per confrontare due immagini ISO, monta semplicemente i due file di immagine in directory separate e vai da lì.
Un output più colorato sulla riga 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 in rosso.

Figura 1: confronto di due directory utilizzando 'icdiff'

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

Figura 2: confronto di due directory utilizzando 'fldiff'

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

Figura 3: confronto di due directory utilizzando 'xxdiff'

Il prossimo candidato è 'dirdiff'. Si basa sulla funzionalità di "xxdiff" e può confrontare fino a cinque directory. I file che esistono in entrambe le directory sono contrassegnati con una X. È interessante notare che lo schema di colori utilizzato per la finestra di output è lo stesso utilizzato da 'icdiff' (vedi Figura 4).

Figura 4: confronto di due directory utilizzando 'dirdiff'

Il prossimo passo è confrontare archivi compressi e intere immagini ISO. Mentre il comando 'adiff' dal pacchetto 'atool' [10] potrebbe essere già noto, daremo un'occhiata al comando 'diffoscope' [8,9], invece. Si descrive come "uno strumento per andare a fondo di ciò che rende i file o le directory diversi. Decomprime ricorsivamente archivi di molti tipi e trasforma vari formati binari in forme più leggibili dall'uomo per confrontarli”. L'origine dello strumento è The Reproducible Builds Project [19,20] che è "un insieme di pratiche di sviluppo software che creano un percorso verificabile in modo indipendente dal codice sorgente al codice binario". Tra gli altri, supporta i seguenti formati di file:

* File APK Android e immagini di avvio
* File database Berkeley DB
* Immagini del filesystem Coreboot CBFS
* Debian .buildinfo e .cambia file
* Pacchetti sorgenti Debian (.dsc)
* Binari ELF
* Repository Git
* Immagini CD ISO 9660
* Binari MacOS
* Chiavi pubbliche OpenSSH
* Archivi dei pacchetti OpenWRT (.ipk)
* Messaggi firmati/crittografati PGP
* Documenti PDF e PostScript
* Archivi RPM erba cipollina

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

Figura 5: confronto di due pacchetti Debian utilizzando 'diffoscope' (estratto)

Il Listato 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 "diffoscope" afferma che i due file sono completamente identici.

.Listato 7: confronto di due immagini ISO utilizzando "diffoscope"

$ diffoscope linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.a.iso
|################################################ ###| 100%    Ora: 0:00:00
$

Per guardare dietro le quinte, è utile chiamare "diffoscope" con le due opzioni "-debug" e "-text -" per un output più dettagliato sul terminale. Questo ti permette di imparare cosa sta facendo lo strumento. Il Listato 8 mostra l'output corrispondente.

.Listato 8: Dietro le quinte di "diffoscope"

$ 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.principale: Avvio diffoscope 78
2019-10-03 13:45:51 D: diffoscope.locale: normalizzazione locale, fuso orario, ecc.
2019-10-03 11:45:51 D: diffoscope.principale: Iniziare il confronto
2019-10-03 11:45:51 D: diffoscope.progresso: registrazione < diffoscope.progress.ProgressBar object at 0x7f4b26310588> come osservatore del progresso
2019-10-03 11:45:52 D: diffoscope.comparatori: 50 classi comparatore caricate a 64 bit.fr.iso ETA:  --:--:--
2019-10-03 11:45:52 D: diffoscope.comparatori.utilità.specializzazioni: file non identificato. Magic dice: settore di avvio DOS/MBR; partizione 2: ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startector 652, 4672 settori
2019-10-03 11:45:52 D: diffoscope.comparatori.utilità.specializzazioni: file non identificato. Magic dice: settore di avvio DOS/MBR; partizione 2: ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startector 652, 4672 settori
2019-10-03 11:45:52 D: diffoscope.comparatori.utilità.confrontare: confronto 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.utilità.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.utilità.confrontare: has_same_content_as restituito True; saltando ulteriori confronti
|################################################ ###| 100% Tempo: 0:00:01
2019-10-03 11:45:53 D: diffoscope.file temporanei: pulizia di 0 file temporanei temp
2019-10-03 11:45:53 D: diffoscope.tempfiles: pulizia di 0 directory temporanee
$

Bene, finora, tutto bene. I prossimi test sono stati eseguiti su immagini di diverse versioni e con diverse dimensioni di file. Tutti hanno provocato un errore interno che risale al comando 'diff' che ha esaurito la memoria interna internal. Sembra che ci sia un limite di dimensione del file di circa 50 M. Ecco perché ho creato due immagini più piccole di 10 M ciascuna e le ho passate a "diffoscope" per un confronto. La figura 6 mostra il risultato. L'output è una struttura ad albero contenente il file 'nsswitch.conf' con le differenze evidenziate.

Figura 6: confronto di due immagini ISO utilizzando 'diffoscope'

Inoltre, può essere fornita una versione HTML dell'output. La Figura 7 mostra l'output come file HTML in un browser web. È realizzabile tramite l'interruttore

'--output html.html'.

Figura 7: confronto di due immagini ISO utilizzando 'diffoscope' (output HTML)

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

Conclusione

Trovare differenze tra due directory o anche intere immagini ISO è un po' complicato. Gli strumenti mostrati sopra ti aiutano a padroneggiare questo compito. Quindi, buon hacker!

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

Link e riferimenti

* [1] colordiff
* [2] colordiff, pacchetto Debian,
* [3] diffutils
* [4] diffutils, pacchetto Debian,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] diffoscope
* [9] diffoscope, pacchetto Debian
* [10] atool, pacchetto Debian
* [11] Breve introduzione di alcuni formati di file immagine comuni
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Estensioni Apple ISO 9660, Wikipedia
* [16] Come verificare le immagini ISO, Linux Mint
* [17] Fai attenzione alle ISO violate se hai scaricato Linux Mint il 20 febbraio!
* [18] icdiff
* [19] icdiff, pacchetto Debian
* [20] Il progetto delle build riproducibili
* [21] Il progetto Reproducible Builds, Debian Wiki

Il pulsante centrale del mouse non funziona in Windows 10
Il tasto centrale del mouse ti aiuta a scorrere lunghe pagine web e schermate con molti dati. Se si ferma, finirai per usare la tastiera per lo scorri...
Come cambiare i pulsanti sinistro e destro del mouse su PC Windows 10
È abbastanza normale che tutti i mouse dei computer siano progettati ergonomicamente per gli utenti destrimani. Ma sono disponibili dispositivi mouse ...
Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...