Firma del codice lato server

5

Attualmente sto implementando un paio di miglioramenti della sicurezza in un sito web di criptovaluta che gestisce tutti i dati sul lato client e utilizza un approccio di file statico.

Una delle cose che mi è stato chiesto di fare era aggiungere un meccanismo per consentire agli utenti di verificare se la pagina era stata modificata da un lato server di terze parti. Tieni presente che non mi sto riferendo a server < - > eve < - > manomissione di tipo client, poiché CSP, HSTS e altre protezioni sono a posto.

Il mio primo approccio a questo è stato firmare ogni file con una chiave privata (che non entra mai nei prod) e distribuire la chiave pubblica usando un canale diverso. L'hash firmato verrebbe quindi ospitato nella stessa directory del file, con il nome del file simile a .key. In alternativa, tutti i file possono essere sottoposti a hash e firmati in blocco. I controlli dovrebbero essere eseguiti manualmente dall'utente (questo non è un problema).

So che un watchdog del server può essere utilizzato per verificare la presenza di modifiche ai file, ma da quello che ho capito le condizioni di hosting sono estremamente volatili.

Infine, non sono autorizzato a creare un'app standalone per questo.

È ragionevole? C'è qualche soluzione proposta per questa richiesta?

    
posta J. Doe 19.11.2016 - 01:44
fonte

1 risposta

1

Questo diventa un problema difficile a causa dei due requisiti simultanei che un utente malintenzionato può controllare il server e il contenuto che viene servito (ovvero le pagine generate dall'applicazione) non sono finiti e statici (presumo).

Se hai solo pochi file da ospitare, puoi distribuire un file di checksum fuori banda o nello stesso canale ma firmato con una chiave PGP attendibile. Questo è abbastanza comune con gli installer distribuiti attraverso un CDN o mirror. Ma vuoi verificare che il codice che genera dinamicamente i file offerti sia costante.

Se l'utente sta eseguendo il codice sul proprio computer, è possibile scaricare il codice sorgente (eventualmente firmato come sopra o con il supporto git gpg o simile) e compilarlo autonomamente. Ma nella tua situazione devono fidarsi di un'intera infrastruttura di servizi di rete controllata da un avversario.

È facile per qualcuno che controlla il server aggiungere un MitM intermedio che modifica le richieste per l'app o semplicemente chiedere all'app di fare una firma per qualsiasi cosa l'aggressore abbia già generato. Sto iniziando a pensare ai metodi per combatterli (ok, firmiamo ogni richiesta da parte dell'utente, e l'app verificata lo controlla prima di emettere una risposta), ma saranno tutti fori di collegamento - e complessi sistemi di sicurezza sono vulnerabilità. Mi sembra molto più onesto non provare a fare questa affermazione ai tuoi utenti.

    
risposta data 19.11.2016 - 17:09
fonte

Leggi altre domande sui tag