Protezione di un programma di aggiornamento automatico

0

Scenario

Hai un programma di avvio per alcuni software, ti permette di eseguire il software ma ti permetterà anche di cambiare versione e aggiornare a nuove versioni.

Quando il programma di avvio viene eseguito, scarica un file manifest da un URL specifico (integrato nel programma di avvio) per recuperare l'elenco corrente di versioni. Se c'è una versione più recente, l'utente viene avvisato e può aggiornarsi. Se decidono di aggiornare alla nuova versione, estrarrà un altro manifest dallo stesso host di prima, questo è il manifest per la versione specifica.

Questo file contiene un elenco di nomi di file contenuti in questa versione e i rispettivi hash SHA1. Il patcher si connetterà nuovamente allo stesso host per scaricare i file con hash che non corrispondono alle copie locali.

Tutti i file manifest e gli oggetti file per ogni versione sono memorizzati in un singolo bucket S3 in questo esempio. Tutte le richieste vengono effettuate su HTTPS in file compressi con gzip.

difetto?

Penso che questo sarebbe aperto agli attacchi a causa del download semi-automatico di file eseguibili. Non so dove possa entrare un aggressore. Dovrebbero essere firmati tutti i file sul server remoto? O sarà sufficiente verificare il contenuto del file con gli hash SHA1 forniti dal server?

C'è qualcosa che posso fare per mantenerlo al sicuro, o questo tipo di tecnica dovrebbe essere evitata completamente?

    
posta Olical 25.10.2013 - 12:52
fonte

4 risposte

2

Devi considerare cosa può fare un attaccante. Può prendere il tuo file di aggiornamento, iniettarlo con malware, calcolare un hash SHA, consegnarlo a uno dei tuoi clienti e infettarli. Il loro computer non lo rifiuterà se guarda solo hash.

Se la tua app accetta solo i file firmati, non può infettarli.

Tuttavia, il controllo dei singoli file potrebbe non essere sufficiente, a seconda del codice. Se si prova solo il codice come una versione completa, l'utente malintenzionato potrebbe trovare un bug di interazione mescolando una versione precedente di uno dei moduli con il codice più recente. Dovresti prendere in considerazione la possibilità di firmare una raccolta di moduli nello stesso gruppo che desideri testare e implementare a. In questo modo, distribuisci solo il cambiamento testato nel suo insieme, mai frammentario.

Questo tipo di attacco è stato perpetrato contro Microsoft Update. Qualcuno potrebbe scaricare l'elenco dei moduli ma poi interferire con il download dei moduli effettivi.

Non solo questo approccio potrebbe ridurre il tuo impatto sugli attacchi, ma potrebbe servire a migliorare l'esperienza dell'utente finale assicurando che stiano installando pacchetti completi che sono esattamente ciò che hai testato. Potrebbe anche aiutare a tenerli fuori da "DLL inferno".

    
risposta data 25.10.2013 - 14:38
fonte
2

Probabilmente firmerei i file con una chiave non accessibile a Internet o al server di aggiornamento e installerò solo i file firmati da quella chiave. Questo impedisce a un compromesso del tuo server di essere in grado di compromettere i tuoi clienti.

SSL dovrebbe aiutare a garantire che i tuoi client non si connettono a un server degli hacker, ma non proteggerà i tuoi client se il tuo server è compromesso. L'unico modo per proteggerli è assicurarsi che il server non possa pubblicare un file che il programma di aggiornamento accetterà.

    
risposta data 25.10.2013 - 15:55
fonte
1

Questo approccio mi suona bene.

Poiché la comunicazione è protetta con SSL, non è prontamente possibile che un utente malintenzionato inserisca un file dannoso. Certo, il protocollo SSL ha alcuni problemi, ma se un utente malintenzionato può rompere l'SSL, può fare tutti i tipi di cose brutte.

Naturalmente ti stai fidando del fornitore del software. Potrebbero inserire il codice dannoso in un aggiornamento. Ma poi, devi fidarti di loro comunque - potrebbero aver fatto scivolare il codice dannoso nella versione iniziale che stai già utilizzando. Inoltre, se non mantengono i loro sistemi protetti, una terza parte potrebbe entrare e distribuire aggiornamenti dannosi.

    
risposta data 25.10.2013 - 15:30
fonte
0

Gli aggiornamenti dovrebbero essere sicuramente firmati. Basta spedire la chiave pubblica con l'app e firmare gli aggiornamenti con la chiave privata corrispondente. Se la firma non corrisponde, l'aggiornamento non viene da te e non viene installato.

Puoi fare in modo che GPG faccia il lavoro pesante. Questa tecnica è estremamente comune.

    
risposta data 26.10.2013 - 03:54
fonte

Leggi altre domande sui tag