Aggiornamento automatico eseguibile del client

3

Scenario

Attualmente sto sviluppando un'applicazione che dovrebbe aggiornarsi automaticamente (se applicabile) ogni volta che viene eseguita. L'aggiornamento comporterebbe la sostituzione di main.exe e di eventuali risorse in una cartella risorse .

La mia attuale logica di progettazione per "MyApplication" è;


La mia domanda riguarda la subroutine update.exe , ovvero;

problema
La mia preoccupazione è che il processo possa essere ridotto al recupero di un eseguibile da un URL. Sono un po 'cauto con la sicurezza di questo a) tutti gli aggiornamenti sono distribuiti a tutti i client b) il download è un eseguibile e attualmente' presunto 'non deve essere temporizzato.

Se il mio sito web è stato violato, qualsiasi eseguibile potrebbe essere indirizzato e scaricato, causando danni non quantificati a tutti i client. Non sono preoccupato per l'autenticazione dei client, ma per autenticare la risposta del server come autentica.

Soluzioni

  • È una preoccupazione, come penso sia?
  • Quali misure del lato client e / o lato server dovrei implementare?

Se è rilevante, ho accesso a 2 (o più) server web, back-end a database MySQL e controllo completo sui contenuti lato client e server.


Grazie per l'aiuto, posso chiarire gli aspetti se non ha senso!

    
posta Benjy1996 31.01.2016 - 13:07
fonte

1 risposta

3

Hai essenzialmente due problemi nel tuo processo: fornire l'aggiornamento e averlo installato.

Autenticazione server

In primo luogo, sì, è necessario autenticare il server. Ciò significa che la comunicazione con il server deve avvenire su un canale crittografato sicuro. Assicurati di prendere il tempo necessario per capire gli attacchi su SSL, quindi non utilizzare qualcosa che è scaduto . Spedisci il certificato con la tua app e cripta tutti gli scambi. Spedisci una chiave pubblica extra per la verifica delle firme, diversa da quella utilizzata per proteggere il canale.

Aggiorna architettura di distribuzione

In secondo luogo, devi assicurarti che i clienti possano fidarsi di ciò che viene loro servito. Supponendo il peggio, il tuo server potrebbe effettivamente essere compromesso. Puoi prendere due passaggi per attenuarlo. In primo luogo, assicurarsi che il server utilizzato per gli aggiornamenti sia dedicato. Non affidarti a quell'API su un server Web che ospita il tuo blog personale. Esegui solo l'API di aggiornamento e pensa attentamente a come gestisci questo server e ti connetti ad esso. Tienilo aggiornato. Chiedi a un tester di penetrazione di romperlo per te.

In secondo luogo, (grazie a Steffen-Ullrich per avermelo ricordato), assicurati che il server distribuisca solo il contenuto che hai convalidato. Quando pubblichi una versione software, devi firmare il tuo rilascio tarball / binary con una chiave privata (quella per cui hai spedito la chiave pubblica) e rilasciare la firma insieme al tarball. Pertanto, il processo prevede il caricamento di firma e binario sul server di aggiornamento e quindi i client che lo recuperano dal server. Se il tuo server è compromesso, i client non riceveranno più aggiornamenti ma almeno non riceveranno falsi / eseguibili malevoli.

Sostituzione del file binario sul sistema operativo

Sorpresa sorpresa. Questo è il 2016, non si limitano a sostituire gli eseguibili a livello di sistema su un sistema operativo senza il permesso dell'utente. Dovrai guidare i tuoi utenti attraverso una finestra di dialogo di autorizzazione UAC ogni volta che vuoi cambia il file binario . Questo ovviamente sarà noioso per loro.

Se ritieni che i tuoi clienti abbiano assolutamente bisogno dell'ultimo aggiornamento ogni volta che viene rilasciato (e supponendo che non sia possibile installare la tua app con un livello di integrità come fanno i fornitori di browser), potrebbe essere più trasparente e piacevole per i tuoi utenti per aggiornare la tua app tramite l'app store di Microsoft (dicendo "potrebbe" perché non ho mai inviato un'app lì e sono incerto su questo punto).

    
risposta data 31.01.2016 - 13:26
fonte

Leggi altre domande sui tag