Sto sviluppando update4j , un aggiornamento basato su Java e framework di avvio. Recentemente ho avuto una piccola controversia con un altro collaboratore e voglio chiarire le cose.
Ho poche parole possibili; c'è un aggiornamento lato client che legge un file di "configurazione" remoto. Quel file contiene tutte le informazioni necessarie per scaricare i file dell'applicazione.
Inoltre, esiste una funzione di attivazione per firmare i file e verificare ogni download con una chiave pubblica. Ciò dovrebbe impedire agli hacker di modificare i file nella configurazione o modificare i file dell'applicazione remota effettivi. Nella configurazione, accanto a ciascun file, viene aggiunto un campo signature
che viene utilizzato dal programma di aggiornamento sul lato client per verificare la presenza di una chiave pubblica nota fornita durante l'installazione.
Ora, ho considerato l'opt-in dello sviluppatore se il certificato / chiave pubblica è utilizzato nell'updater quando si richiede di eseguire un aggiornamento. Altrimenti, il programma di aggiornamento ignora completamente il campo signature
. Ma sostengono che se la configurazione contiene le firme, questo di per sé è considerato opt-in e dovrebbe costringere l'updater a verificare, e se l'updater non è mai stato a conoscenza di alcuna chiave pubblica e non l'ha mai richiesto, dovrebbe fallire.
No local certificate provided
If the config contains signatures (so the provider intends to secure the update), but no local certificate is provided, update4j downloads the configuration, the files and runs it. In my opinion, this is not secure. See
src/test/java/org.update4j.integration.SigningTest.noCertificateWithSignatureTest()
Dal mio punto di vista questo non è necessario. Il "provider" è solitamente lo stesso team di sviluppo del programma di aggiornamento sul lato client (almeno hanno deciso come impostare l'aggiornamento). Se un hacker può accedere ai file o alla configurazione stessa e modificarla, il "provider" non cerca più sicurezza. Se cambiano le cose consapevolmente che l'aggiornamento non richiede mai alcuna firma, perché nel mondo questo hacker aggiungerà il campo signature
? Inoltre, rende davvero difficile aggiungere sicurezza solo per alcune installazioni (ad esempio una funzione di test) poiché dovresti aggiungere una firma, ma ora farà esplodere i vecchi client.
L'unico caso in cui potrei essere d'accordo non sarebbe sicuro è dove la config stessa non è stata compromessa, solo i file remoti. Qui il provider vorrebbe comunque verificare i file. Ma ricorda, il team di sviluppo non ha mai cercato sicurezza perché non ha configurato l'aggiornamento per controllare le firme.
Come gestiresti un caso del genere?