Come essere sicuri che il file scaricato sia corretto? [duplicare]

0

La scorsa settimana ho letto molto sulla sicurezza. Ho una conoscenza di base su come funzionano le chiavi pubbliche o le chiavi private. Ma ho ancora molte domande che non riesco a trovare una risposta. In questo momento sono interessato a verificare un file eseguibile che ho scaricato. Supponiamo che firmi un file, lo invii all'utente, ma alcuni cattivi in mezzo cambiano il mio file in malware. Quindi, quando l'utente fa doppio clic su scaricato exe, come può essere sicuro di avviare effettivamente un file corretto e non un virus?

Aggiornamento: Supponiamo che l'utente del mio programma sia casalinga e che non sappia nulla sulla riga di comando e che non scarichi programmi speciali per la GUI per il confronto del checksum. E allo stesso tempo, come sviluppatore, voglio essere sicuro che lei esegua il mio programma ma non sia corrotto. Come?

    
posta nikitablack 10.11.2014 - 18:00
fonte

2 risposte

3

Qualsiasi meccanismo di auto-verifica incluso nel file eseguibile potrebbe essere sostituito o rimosso dall'attaccante che intercetta il file. Pertanto, dobbiamo lasciare la verifica della firma a un sistema esterno all'eseguibile scaricato, ad esempio il sistema operativo.

Ci sono tre possibili risultati che un sistema di verifica può produrre:

  1. La firma è sicuramente valida (la firma e i dati corrispondono)
  2. La firma è sicuramente non valida (la firma e i dati non corrispondono)
  3. Non è disponibile alcuna firma (l'eseguibile non è firmato)

In Windows, potresti aver visto finestre di conferma pop-up come questa quando provi a eseguire un eseguibile:

Windows pop-up di conferma eseguibile, con campo

Qui, l'eseguibile è stato firmato e Windows ha entrambi

  1. ha verificato la firma sull'eseguibile e
  2. ha verificato l'identità del pubblico verificando il proprietario della chiave, utilizzando una catena di attendibilità basata su una delle autorità di certificazione attendibili del sistema operativo.

Sappiamo con certezza crittografica che un'entità chiamata WinZip Computing ha firmato questo eseguibile, esattamente come esiste adesso sul nostro disco fisso. Questo è il caso n. 1, sopra.

Ecco come un utente attento alla sicurezza può verificare che qualcosa è definitivamente non modificato dalla sua pubblicazione originale. Allo stesso modo, il sistema operativo può rilevare molto facilmente il caso n. 2: tenta di verificare la firma e trova una mancata corrispondenza anziché una corrispondenza. In tal caso, il sistema operativo può dire severamente all'utente di non eseguire il software perché è incredibilmente inaffidabile.

Tuttavia, vuoi sapere come impedire a un utente di eseguire qualcosa che ha subito modifiche arbitrarie. È facile per un utente malintenzionato generare il caso n. 3 (nessuna firma): basta sostituire il file eseguibile firmato con un file eseguibile modificato non firmato.

Windows pop-up di conferma eseguibile, con campo

In questo caso, spetta all'utente (o una politica molto severa sul sistema operativo) decidere di non eseguire mai alcun software che non ha una firma. L'utente deve aspettarsi una firma per il proprio software ed essere allarmato in sua assenza (o comunque aspettarsi sempre il peggio e diffidare di qualsiasi software non firmato). Non esiste un modo generale per distinguere tra il software che "dovrebbe" avere una firma ma non lo fa e il software che semplicemente non ha mai ricevuto alcuna firma (ad esempio perché l'editore non si è mai preso la briga di farlo). Un attacco non può simulare un eseguibile modificato in modo che corrisponda alla tua firma, ma può produrre un eseguibile modificato senza firma.

Naturalmente, se il tuo metodo trasmissione fornisce integrità (come fa TLS) puoi essere certo che l'eseguibile che arriva sul computer del client è uguale a quello inviato dal server. Se controlli il server e lo distribuisci utilizzando TLS (ad es. Tramite HTTPS), tu (il distributore) puoi essere sicuro che i tuoi clienti ricevono il tuo software originale. Se firmi anche il tuo software, gli utenti attenti alla sicurezza possono essere sicuri che stiano eseguendo il tuo software originale, ma questo non fa nulla per gli utenti che non conoscono la sicurezza, che non comprendono il significato di una firma crittografica.

    
risposta data 10.11.2014 - 21:06
fonte
1

Mi sembra che guardi più all'integrità del file o dei dati effettivi. Quando si tratta di controllare per assicurarsi che non sia infestato da un possibile virus, quello in cui entra in gioco l'antivirus o un UTM sul firewall. Per esempio; un dispositivo Sonicwall Firewall sarebbe in grado di garantire la sicurezza di quel file. ma l'effettiva integrità del file o .exe richiederebbe ciò che è menzionato di seguito.

Questo argomento è stato discusso qui di seguito: How posso verificare l'integrità dei file scaricati?

Fornirò anche la risposta più affidabile di seguito di un altro utente SE: IS

"L'integrità è definita solo relativamente a una fonte autorevole che indica quale sia la sequenza" corretta "di byte. Le funzioni di hash non creano integrità, la trasportano. Fondamentalmente, se si dispone di: un file; un valore hash, presunto corretto; quindi puoi ricalcolare la funzione di hash sul file e vedere se ottieni lo stesso valore di hash. Devi ancora iniziare da qualche parte. Alcuni distributori di software forniscono, insieme al software, un file "checksum" (o "md5sum" o "sha1sum"), che contiene i valori hash. Supponendo di avere il file di checksum corretto, questo ti permette di verificare se hai scaricato il file giusto, fino all'ultimo bit; e questo funziona indipendentemente dal modo in cui hai scaricato il file possibilmente grande (anche se si tratta di una rete peer-to-peer ombreggiata o altro, non puoi imbrogliare le funzioni hash). Ora questo non risolve il problema di integrità; lo riduce al problema di assicurarsi di avere il giusto valore di hash. I valori di hash sono piccoli (32 byte per SHA-256), quindi questo apre molte possibilità. Nel contesto del download di file da sistemi P2P, è possibile ottenere il valore hash da un sito Web HTTPS (HTTPS utilizza SSL che garantisce l'autenticazione del server - si ha la garanzia di parlare con il server che si intende - e l'integrità del trasporto - ciò che ricevi è garantito come ciò che il server ha inviato). Nel contesto dello scambio di chiavi pubbliche PGP con persone, i valori di hash (spesso chiamati "impronte digitali" o "impronte digitali") sono abbastanza brevi da essere trasferiti manualmente (stampati su un biglietto da visita, scritto su telefono ...). Le firme digitali espandono il concetto, ma anch'esse iniziano con le funzioni hash. Tutti gli algoritmi di firma digitale non firmano il messaggio stesso, ma l'hash del messaggio (che è altrettanto valido finché la funzione di hash è sicura, cioè resistente a collisioni e preimmagini). "

    
risposta data 10.11.2014 - 18:21
fonte

Leggi altre domande sui tag