Aggiornerò regolarmente il mio sistema ogni volta che mi notifica aggiornamenti software. Questa è una di quelle cose di cui mi fido per funzionare senza conoscere i dettagli, ma recentemente sono diventata curiosa:come faccio a saperlo
- il processo di verifica degli aggiornamenti mostrerà solo gli aggiornamenti legittimi?
- gli aggiornamenti che ricevo e installo non sono dannosi?
So di avere una serie di fonti software che mi specificherò tramite URL e che se mi fido di tali fonti è una mia decisione. Ma cosa succede una volta che ho specificato quegli URL?
Da ciò che è comune in questi giorni, sospetterei che l'autenticità di quelle fonti sia verificata con qualcosa sulla falsariga di HTTPS / SSL, i. e. Ho alcuni certificati verificati rispetto a qualche autorità, il che significa che ho bisogno di certificati radice affidabili installati da qualche parte (probabilmente vengono forniti con il sistema).
Inoltre, suppongo che i pacchetti siano firmati crittograficamente, come con GPG o simili.
Sono ipotesi corrette? Dove posso ispezionare chiavi/certificati utilizzati? Come posso verificare se sono quelli giusti? Come posso verificare che siano effettivamente utilizzati? Esistono opzioni di configurazione che rendono il processo più o meno prudente e quali sono le impostazioni predefinite? Ci sono attacchi noti o si sono verificate vulnerabilità di recente? Mi sembra di ricordare che Windows ha avuto un problema del genere non molto tempo fa.
Sono il 12.04, ma presumo che si possa rispondere in modo più generale.
Risposta accettata:
Questa è un'ottima domanda. La risposta è (ovviamente) abbastanza complessa, ma lasciami provare a scomporla per te. Diamo prima un'occhiata ai processi tecnici:
La catena della fiducia
Non utilizziamo SSL per proteggere APT, utilizziamo hash crittografici (SHA256, al giorno d'oggi) e firme OpenPGP. Ciò consente di fidarsi dei mirror non attendibili ed evita di doversi fidare di CA PKI.
Quando aggiungi un repository a sources.list
di APT , devi anche aggiungere la sua chiave PGP al portachiavi fidato di APT, con la apt-key
comando. Il portachiavi viene fornito con le chiavi per i repository di Ubuntu incluse. E quando usi apt-add-repository
comando per aggiungere un PPA, aggiunge la chiave (ottenuta da Launchpad su SSL) per te.
La catena di fiducia è:
- Ogni
sources.list
punti di ingresso APT a unRelease
file nel repository, con unRelease.gpg
firma (oppure possono essere combinati comeInRelease
file). Questo file descrive il repository e deve essere firmato da una chiave nel portachiavi del tuo APT. - Il
Release
contiene gli hash crittografici di tutti iPackages
eSources
File. Questi elencano tutti i pacchetti e le versioni disponibili nel repository. - I
Packages
eSources
i file contengono gli hash crittografici di ogni pacchetto. - I pacchetti stessi non sono firmati. Non è necessario, c'è una catena di fiducia per loro, dal file di rilascio, firmato dal mirror. Tuttavia, i pacchetti sorgente, usati per costruire i pacchetti binari sono firmati PGP, dallo sviluppatore che li ha caricati.
Puoi leggere di più sul formato del repository sul wiki di Debian.
Questa catena significa che non dobbiamo fidarci di alcun mirror intermediario, possiamo fidarci che il pacchetto che installiamo è identico a quello presente al momento della firma del file Release.
Puoi ispezionare il portachiavi di APT eseguendo sudo apt-key finger
.
Verifica delle chiavi di archivio di Ubuntu
Come fai a sapere cosa dovrebbe esserci? Se non ti fidi del tuo computer, non puoi fidarti di nessun programma su di esso per non mentirti (come apt-key
), e questo esercizio è inutile. Quindi supponiamo che sia solo per interesse accademico e verifichiamo il contenuto del portachiavi dal pacchetto sorgente definitivo, che è firmato PGP dallo sviluppatore che lo ha caricato.
Scarica il ubuntu-keyring
pacchetto sorgente e guarda cosa dovrebbe esserci:
$ apt-get source ubuntu-keyring
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 20.0 kB of source archives.
Get:1 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (dsc) [1542 B]
Get:2 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (tar) [18.5 kB]
Fetched 20.0 kB in 0s (0 B/s)
dpkg-source: info: extracting ubuntu-keyring in ubuntu-keyring-2012.05.19
dpkg-source: info: unpacking ubuntu-keyring_2012.05.19.tar.gz
$ gpg --verify ubuntu-keyring_2012.05.19.dsc
gpg: Signature made Sat May 19 03:33:12 2012 SAST
gpg: using RSA key 0x393587D97D86500B
gpg: Good signature from "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
$ gpg --no-default-keyring --keyring ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg --fingerprint
ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg
-------------------------------------------------------------
pub 1024D/0x40976EAF437D05B5 2004-09-12
Key fingerprint = 6302 39CC 130E 1A7F D81A 27B1 4097 6EAF 437D 05B5
uid Ubuntu Archive Automatic Signing Key <[email protected]>
sub 2048g/0x251BEFF479164387 2004-09-12
pub 1024D/0x46181433FBB75451 2004-12-30
Key fingerprint = C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451
uid Ubuntu CD Image Automatic Signing Key <[email protected]>
pub 4096R/0x3B4FE6ACC0B21F32 2012-05-11
Key fingerprint = 790B C727 7767 219C 42C8 6F93 3B4F E6AC C0B2 1F32
uid Ubuntu Archive Automatic Signing Key (2012) <[email protected]>
pub 4096R/0xD94AA3F0EFE21092 2012-05-11
Key fingerprint = 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
uid Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>
So che quella è in realtà la firma di Colin Watson, poiché l'ho incontrato diverse volte e ci siamo verificati l'identità dell'altro e ci siamo firmati le chiavi dell'altro. Se hai una chiave nel set forte del PGP, dovresti essere in grado di trovare un percorso di fiducia per lui. So anche che posso fidarmi di lui per caricare il corretto ubuntu-keyring
pacchetto.
Per Debian, c'è un pacchetto (debian-keyring
) contenente le chiavi PGP di tutti gli sviluppatori Debian e puoi usarlo per verificare le firme del pacchetto sorgente. Ubuntu non ha un equivalente, ma molti sviluppatori Ubuntu sono anche sviluppatori Debian e tutte le chiavi PGP dei nostri sviluppatori sono disponibili sui loro profili in Launchpad.
Le altre domande
Come faccio a sapere che gli aggiornamenti non sono dannosi?
Si tratta di fiducia. Devi fidarti completamente di ogni repository che usi. Stai dando ai manutentori di ogni repository il permesso di eseguire le cose come root sulla tua macchina.
I pacchetti Ubuntu possono essere caricati solo da sviluppatori Ubuntu a cui sono stati concessi i diritti di caricamento dal Developer Membership Board (di cui attualmente servo). Per richiedere i diritti di caricamento devi essere sostenuto da diversi sviluppatori Ubuntu esistenti che hanno lavorato con te e fidati delle tue capacità di lavorare da solo. Senza diritti di caricamento, i caricamenti devono essere sponsorizzati da sviluppatori che ne detengono i diritti (che dovrebbero includere la revisione del caricamento).
Per gli aggiornamenti successivi al rilascio, Ubuntu ha politiche rigorose sui contenuti degli aggiornamenti. Dovrebbero contenere solo patch minime per correggere bug noti. Le patch vengono esaminate dai membri dei team SRU/Security prima di essere accettate.
Ovviamente, i PPA e i repository di terze parti non hanno tutte queste restrizioni. Devi fidarti dei proprietari di PPA per essere ragionevoli.
Tutti i pacchetti Ubuntu e PPA hanno il sorgente disponibile, quindi possono essere ispezionati da chiunque.
Esistono opzioni di configurazione che rendono il processo più o meno prudente e quali sono le impostazioni predefinite?
Puoi disattivare la verifica della firma in APT, ma ovviamente è attiva per impostazione predefinita. Quando provi a installare qualcosa da un repository non firmato/non attendibile, apt ti fa confermare che vuoi davvero farlo.
Ci sono attacchi noti o si sono verificate delle vulnerabilità di recente?
Ne ricordo uno, il bug Debian 499897. Debian risolve questo problema dando ai file di rilascio una data di scadenza, dopo la quale non ci si può fidare. Ubuntu non lo supporta ancora.
Correlati:come cercare il nome dell'area di lavoro corrente?