Le firme digitali dei file PDF sono affidabili?

Alcuni ricercatori hanno provato a modificare il contenuto di un file PDF firmato senza invalidare la firma.

Praticamente non c’è nessuna azienda o ente pubblico che non usi file PDF. Spesso, per garantire l’autenticità di questi documenti, ci si avvale della firma digitale. Quando si apre un file firmato su un qualsiasi lettore di PDF, il programma avverte della presenza della firma, indicando chi lo ha firmato e dando accesso al menu di convalida della firma.

Un team di ricercatori provenienti da diverse università tedesche hanno messo alla prova la sicurezza delle firme PDF. Vladislav Mladenov, dell’Università della Ruhr a Bochum ha mostrato i risultati del team in occasione del Chaos Communication Congress (36C3).

Il compito dei ricercatori era semplice: modificare il contenuto di un documento PDF firmato senza invalidarne la firma. In teoria, i cybercriminali potrebbero fare lo stesso per aggiungere false informazioni o contenuti dannosi al file firmato. I clienti che ricevono da una banca un documento firmato si fideranno ciecamente e cliccheranno su tutti i link che contenga.

Il team ha selezionato 22 lettori PDF tra i più conosciuti e per diverse piattaforme, per nutrire sistematicamente i risultati dell’esperimento.

Struttura del file PDF

Struttura file PDF. Fonte

Innanzitutto, spendiamo qualche parola sul formato PDF. I file sono composti da quattro parti principali: header (che mostra la versione PDF), il corpo (che mostra il contenuto principale visualizzato dall’utente), la sezione Xref (una directory che elenca gli oggetti all’interno del corpo e la loro ubicazione, per visualizzare il contenuto) e la sezione trailer (con il quale i lettori PDF leggono il documento). Il trailer comprende due importanti parametri che indicano al programma da dove cominciare per gestire il file e dove inizia la sezione Xref.

Nel formato si integra un aggiornamento incrementale che consente all’utente, per esempio, di sottolineare parti del testo e di scrivere commenti.  Da un punto di vista tecnico, tale funzione aggiunge altre tre sezioni: aggiornamenti per il corpo, una nuova directory Xref e una nuova sezione trailer. È Ciò consente di modificare la visualizzazione degli oggetti da parte dell’utente e di aggiungere nuovi contenuti. In sostanza, una firma digitale di un file PDF non è altro che un aggiornamento incrementale, che aggiunge un altro elemento al file e le sezioni corrispondenti.

Incremental saving attack (ISA)

Aggiungere un aggiornamento incrementale. Fonte

In primo luogo, il team ha aggiunto sezioni extra al file con un altro aggiornamento incrementale, utilizzando un editor di testo. In senso stretto, non si tratta di un attacco al file PDF vero e proprio, il team di ricercatori ha semplicemente utilizzato una funzionalità implementata da chi ha creato il formato. Quando l’utente apre un file modificato in questo modo, il lettore PDF di solito mostra un messaggio in cui si afferma la validità della firma ma si avverte che il documento è stato modificato. Un messaggio non proprio chiaro, soprattutto per un utente non esperto. In uno dei lettori PDF (LibreOffice), questo avviso non compare neanche.

L’esperimento successivo riguardante la sicurezza dei file PDF si è poi dedicato all’eliminazione delle due sezioni finali (ovvero, aggiungendo un aggiornamento al corpo ma senza il nuovo Xref e il nuovo trailer). Alcune app non hanno potuto lavorare con un file di questo tipo. Per due lettori PDF mancano queste sezioni e le hanno aggiunte automaticamente senza avvisare l’utente riguardo il cambio di contenuto. Gli altri tre lettori hanno aperto il file senza porre obiezioni.

Successivamente,  i ricercatori si sono chiesti cosa sarebbe successo se avessero semplicemente copiato la firma digitale nel loro aggiornamento “manuale”. Altri due lettori non hanno superato la prova, Foxit e MasterPDF.

In totale, 11 lettori PDF su 22 si sono rivelati vulnerabili a queste semplici manipolazioni. Inoltre, di questi 11 lettori,  6 non hanno indicato in alcun modo che il documento aperto fosse stato modificato. I 5 restanti, per visualizzare la manipolazione del file PDF, l’utente deve entrare nel menu e verificare manualmente la validità della firma digitale (con la semplice apertura del file non era possibile).

Signature wrapping attack (SWA)

Aggiungere una firma digitale. Fonte

Quando si firma un documento, vengono aggiunti due campi importanti come aggiornamento incrementale al corpo: :/Contents, che contiene la firma, e /ByteRange, che descrive esattamente ciò che è stato firmato. In quest’ultimo campo ci sono quattro parametri (che definiscono l’inizio del file, il numero di byte prima del codice della firma, un byte che determina dove termina il codice della firma e il numero di byte dopo la firma), in quanto la firma digitale non è altro che una sequenza di caratteri generata con mezzi di cifratura a partire dal codice del documento PDF. Ovviamente, la firma non può “firmarsi” a sua volta, per cui la zona dove è custodita è esclusa dal processo di calcolo della firma.

I ricercatori hanno provato ad aggiungere un altro campo /ByteRange subito dopo la firma. I primi due valori sono rimasti immutati ed è stato alterato solo l’indirizzo della fine del codice della firma. Il risultato è che compare uno spazio aggiuntivo nel file che consente di aggiungere qualsiasi oggetto dannoso, così come la sezione Xref che li descrive. In teoria, se il file venisse letto correttamente, il lettore PDF non andrebbe oltre questa sezione. Tuttavia, su 22 lettori 17 sono vulnerabili a questo attacco ai file PDF.

Universal signature forgery (USF)

Per verificare ancor meglio la sicurezza dei file PDF, il team di ricerca ha deciso di sottoporre le applicazioni a uno stress test inerente a un trucco standard di pentesting, provando a sostituire i valori dei campi con altri valori erronei oppure semplicemente eliminando i valori. Lavorando sulla sezione /Contents è emerso che, nel caso in cui la firma reale veniva sostituita dal valore 0x00, due lettore la convalidavano ugualmente.

E se si lascia la firma al suo posto, ma si elimina la sezione  /ByteRange (ovvero, l’¡informazione su ciò che è stato firmato esattamente)? O se si aggiunge uno zero al posto dei valori reali? Ebbene, in entrambi I casi alcuni lettori PDF hanno convalidato la firma.

In totale, in 4 dei 22 programmi sono stati riscontrati errori di implementazione che si potrebbero sfruttare.

Leggendo la tabella riassuntiva dei risultati, ben 21 lettori PDF su 22 potrebbero essere ingannati in un modo o in un altro. Quindi, tranne in un solo caso, con tutti i lettori si può creare un file PDF dal contenuto dannoso o che comprende false informazioni che sembrerebbero valide agli occhi dell’utente.

Tabella riassutiva delle vulnerabilità nei lettori PDF. Fonte

Ironia della sorte, l’unica applicazione che non ha ceduto ai trucchi dei ricercatori è stata Adobe Reader 9. Il problema è che tale applicazione è sensibile alla vulnerabilità RCE; inoltre, è utilizzata solamente dagli utenti Linux e semplicemente perché si tratta della versione più recente.

Conclusioni pratiche

Quali sono le conclusioni a livello pratico che possiamo dedurre? Innanzitutto, non possiamo fidarci ciecamente delle firme digitali dei documenti PDF. Se trovate un bollino verde, non vuol dire necessariamente che la firma sia valida.

In secondo luogo, anche un documento firmato può essere un rischio. Quindi, prima di aprire un qualsiasi file ricevuto online o prima di cliccare sui link che contenga, assicuratevi di avere installata sul computer una soluzione di sicurezza affidabile.

Consigli