È stato pubblicato il rilascio del framework TUF 1.0 (The Update Framework), che offre strumenti per il controllo sicuro della disponibilità e del download degli aggiornamenti. L'obiettivo principale del progetto è proteggere i client da attacchi tipici alle repository e alle infrastrutture, compresa la lotta contro la promozione di aggiornamenti falsi da parte di malintenzionati, creati dopo l'accesso alle chiavi per la generazione di firme digitali o la compromissione della repository. Il progetto è sviluppato sotto l'egida della Linux Foundation ed è utilizzato per aumentare la sicurezza nella distribuzione degli aggiornamenti in progetti come Docker, Fuchsia, Automotive Grade Linux, Bottlerocket e PyPI (l'inclusione della verifica dei download e dei metadati in PyPI è attesa a breve). Il codice della referenza di implementazione di TUF è scritto in Python e distribuito sotto la licenza Apache 2.0.
Il progetto sviluppa una serie di librerie, formati di file e utility che possono facilmente integrarsi nei sistemi esistenti di aggiornamento delle applicazioni, garantendo protezione nel caso di compromissione delle chiavi da parte degli sviluppatori software. Per utilizzare TUF, è sufficiente aggiungere nella repository i metadati necessari e integrare nel codice client le procedure fornite da TUF per il download e la verifica dei file.
Il framework TUF si occupa delle funzioni di verifica della disponibilità degli aggiornamenti, download degli aggiornamenti e verifica della loro integrità. Il sistema di installazione degli aggiornamenti non si sovrappone ai metadati aggiuntivi, la cui verifica e download sono gestiti da TUF. Per l'integrazione con applicazioni e sistemi di installazione degli aggiornamenti, è disponibile un'API a basso livello per accedere ai metadati e una realizzazione dell'API client di alto livello ngclient, pronta per essere integrata con le applicazioni.
Tra gli attacchi contro cui TUF può tutelarsi, vi è la sostituzione di versioni precedenti come aggiornamenti al fine di impedire la correzione delle vulnerabilità nel software o il rollback dell'utente a una vecchia versione vulnerabile, nonché la promozione di aggiornamenti dannosi, correttamente firmati con chiavi compromesse, e l'esecuzione di attacchi DoS sui client, come il riempimento del disco con aggiornamenti infiniti.
La protezione contro la compromissione dell'infrastruttura del fornitore di software viene raggiunta tramite il mantenimento di registrazioni verificabili separate sullo stato del repository o dell'applicazione. I metadati TUF verificabili includono informazioni su chiavi fidate, hash crittografici per valutare l'integrità dei file, firme digitali aggiuntive per la legitimazione dei metadati, informazioni sulle versioni e dati sul tempo di vita delle registrazioni. Le chiavi utilizzate per la verifica hanno una limitata durata e richiedono continui aggiornamenti per proteggere contro la formazione di firme con chiavi obsolete.
La riduzione del rischio di compromissione dell'intero sistema viene attuata attraverso un modello di separazione dei poteri, in cui ciascuna parte è limitata solo all'area di cui è direttamente responsabile. Il sistema utilizza una gerarchia di ruoli con le proprie chiavi; ad esempio, il ruolo radice firma le chiavi per i ruoli responsabili dei metadati nel repository, delle informazioni sul tempo di generazione degli aggiornamenti e delle build target. A sua volta, il ruolo responsabile delle build firma i ruoli associati alla legitimazione dei file consegnati.

Per proteggere contro la compromissione delle chiavi, viene utilizzato un meccanismo di revoca e sostituzione operativa delle chiavi. Ogni singola chiave concentra solo i poteri minimi necessari, e per le operazioni di legitimazione è necessario l'uso di più chiavi (la fuga di una singola chiave non consente di attaccare immediatamente il cliente, mentre per compromettere l'intero sistema è necessario catturare le chiavi di tutti i partecipanti). Il cliente può accettare solo file creati successivamente a quelli già ricevuti, e i dati vengono caricati solo in base alla dimensione specificata nei metadati verificati.
La versione TUF 1.0.0 pubblicata offre un'implementazione di riferimento completamente riscritta e stabilizzata della specifica TUF, che può essere utilizzata come esempio pronto nella creazione delle proprie implementazioni o per l'integrazione nei propri progetti. La nuova implementazione contiene sostanzialmente meno codice (1400 righe invece di 4700), è più facile da mantenere e può essere facilmente estesa, ad esempio, in caso di necessità di aggiungere supporto per stack di rete specifici, sistemi di archiviazione o algoritmi di crittografia.
Fonte: opennet.ru
