Come viene garantita l'autenticità dei pacchetti Debian?


8

Quali sistemi e processi di sicurezza sono in atto per impedire a terze parti maligne di hackerare / compromettere la sicurezza del codice nei mirror Debian o per verificare che i pacchetti che otteniamo siano in realtà quelli che i manutentori pensano di essere?

Risposte:


14

Verifica dei pacchetti

Il contenuto dei mirror è firmato mediante chiavi PGP, direttamente o indirettamente. A partire dalla "radice" di una distribuzione Debian:

  • Release, firmato con una firma distaccata in Release.gpg, contiene gli hash (MD5, SHA1, SHA256) di tutti gli indici dei pacchetti e gli hash di installazione ( InReleaseora combina i due);
  • gli indici dei pacchetti ( ad es . binary-amd64) contengono gli hash (MD5 e SHA256) dei pacchetti.

Gli hash e le firme sono controllati da strumenti come l' apt-getuso delle chiavi PGP memorizzate nel sistema (gestito da apt-key). Finché il sistema di ricezione è valido, per impostazione predefinita nessun pacchetto può essere installato dagli archivi Debian se non è stato firmato (indirettamente) dalla chiave PGP dell'archivio. Eventuali intrusi sui mirror non sarebbero in grado di sostituire i binari se non avessero anche il controllo della chiave PGP pertinente.

Controllo degli specchi

Ciò significa che compromettere l'archivio non è sufficiente per compromettere effettivamente i sistemi dell'utente finale; dovresti anche scendere a compromessi con una chiave PGP di cui quei sistemi già si fidano. (Un corollario di questo è che l'aggiunta di una chiave a un sistema Debian non è qualcosa da prendere alla leggera.) Questo in qualche modo affronta la tua prima domanda, dato che la sicurezza dell'archivio non ha molta importanza. Tuttavia, i sistemi critici (dove avviene la firma) sono strettamente monitorati e supervisionati e pochissime persone hanno accesso ad essi.

Aspettative del manutentore

Garantire che i pacchetti siano "in effetti quelli che i manutentori pensano di essere" è un po 'più coinvolto. Questo è il percorso seguito da un pacchetto:

  • il pacchetto è preparato da un manutentore e firmato con una chiave nel portachiavi Debian ( cioè una chiave appartenente a un Debian Developer in carica, o un Maintainer Debian, caricata sul server portachiavi Debian e unita dal team di manutenzione del portachiavi);
  • il pacchetto firmato viene caricato nell'archivio, dove viene verificato (tra l'altro, le chiavi utilizzate devono essere nell'attuale portachiavi e non devono essere scadute, le firme devono essere valide e se il pacchetto è stato firmato da un DM, che DM deve disporre delle autorizzazioni pertinenti per il pacchetto);
  • tutti i file binari caricati vengono spinti nell'archivio finale così com'è (sto semplificando un po 'qui, ma questo è l'effetto);
  • tutti i binari mancanti vengono creati da un buildd e firmati dalla chiave PGP del buildd e inviati all'archivio finale (che conosce quali chiavi buildd sono valide e verifica i file rispetto a quelli);
  • tutti questi aggiornamenti vengono infine inviati alla rete mirror, con gli aggiornamenti dell'indice appropriati (che sono firmati come descritto sopra).

Se il manutentore carica i binari insieme alla fonte del pacchetto, questi sono i file che finiscono per essere serviti (per il momento). Poiché il caricamento dei file binari è ora facoltativo, è sempre più comune ignorarli e, alla fine, i file binari caricati verranno eliminati. (Questo è sempre stato il caso di Ubuntu.) Il fatto che gli altri binari corrispondano alle aspettative del manutentore dipende dalla rete buildd; quindi i buildd sono anche sistemi critici, sotto stretta supervisione e con scarso accesso umano. Poiché tutti gli artefatti sono firmati, è sempre possibile verificare l'integrità dei file: prima contro la chiave del manutentore, poi contro le chiavi dei buildd e infine contro la chiave dell'archivio.

Come sottolineato da plugwash , le firme originali non sono disponibili sui mirror e qualsiasi DD può caricare un binario mancante. Le firme originali possono essere recuperate dagli archivi debian-devel-changes .

In sintesi , mentre il sistema attuale non è perfetto, fornisce tracciabilità per tutti i file che è possibile scaricare dai mirror. Ci sono una serie di sforzi per migliorare la situazione: build riproducibili (che consentiranno la verifica indipendente della corrispondenza dei binari con la fonte pubblicata), eliminando i binari forniti dal manutentore ...


Ammirevolmente comprensibile, ma potresti anche aver ragionevolmente detto al poster di andare via e leggere la documentazione. :-)
Faheem Mitha,

@FaheemMitha ho esitato, ma quale documentazione? C'è wiki.debian.org/SecureApt ma non copre tutto ... Mettere tutto insieme è piuttosto complesso, a meno che non ci sia altra documentazione di cui non sono a conoscenza!
Stephen Kitt,

Quindi i sistemi operativi debian eseguiti dagli utenti hanno pre-embedded chiavi PGP pubbliche - che sono accoppiate alle chiavi private sui sistemi critici (dove avviene la firma) - e apt-getverifica i pacchetti usando queste chiavi pre-embedded locali, perché si fida di loro?
the_velour_fog

1
@the_velour_fog sì, è (quasi) giusto; le chiavi pubbliche vengono spedite nel debian-archive-keyringpacchetto. apt-getverifica i Releasefile utilizzando tali chiavi e i pacchetti utilizzando gli hash contenuti nei file Releasee Packages.
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.