Sto scrivendo uno strumento di auto-aggiornamento che viene eseguito con le autorizzazioni di amministratore. Il suo compito è scaricare e installare file da un archivio tat.
Il problema è risolto al punto in cui posso verificare l'identità del file con la firma ecdsa. Tuttavia non c'è nulla che impedisca la modifica del file dopo che la firma è stata verificata ma prima che venga letta.
Una soluzione è leggere il file in memoria e quindi verificare la firma di quei dati. Tuttavia, i file di aggiornamento possono essere di diverse centinaia di MB e vorrei evitare di consumare così tanta RAM.
Un'altra soluzione a cui posso pensare è di cambiare i permessi (almeno scrivere) per essere accessibile solo da admin. Non sono sicuro se apre comunque un altro vettore di attacco.
Tuttavia, un'altra soluzione è quella di rilevare se il file è stato modificato dopo la verifica della firma ma prima della lettura completa dei dati. Non so se il SO fornisca un metodo affidabile e affidabile per farlo.
Il mio updater funzionerà su Windows e OSX.
Aggiorna
A quanto pare, la modifica del proprietario o dell'autorizzazione file non è di aiuto se l'autore dell'attentatore ha già aperto il file.
UPDATE 2 Vengo con la seguente soluzione:
L'archiviazione:
- Per ogni file archiviato viene memorizzata anche la sua firma ecdsa del digest sha256
- Insieme all'archivio archivia la sua firma ecdsa del suo digest sha256
Estrazione:
- Apri archivio, verifica la sua firma
- Senza chiuderlo, inizia l'annullamento dell'archiviazione
- Crea una directory temporanea con accesso rwx solo da root / administrator. Vieta a tutti gli altri utenti
- Estrai il file in quella directory, verifica la sua firma, installalo nella posizione di destinazione. Ripeti per ogni file
- Elimina la directory temporanea