È possibile inserire l'hash di un eseguibile nell'eseguibile stesso senza cambiare l'hash risultante? Qual è l'alternativa migliore?

5

Di recente ho pensato a questo problema e in realtà non sembra possibile, ma ho pensato che lo avrei chiesto per ogni evenienza.

Assumi un programma semplice, in pseudocode:

run hash on an executable we think is mimicing the true executable
check the value against the hash that's hard coded into this executable
if it matches, do x
if not, do y

In teoria dovrebbe essere abbastanza sicuro, dal momento che solo il vero eseguibile sarebbe in grado di produrre lo stesso hash codificato nell'eseguibile, ma nel momento in cui l'hash è compilato in quell'eseguibile l'hash cambierebbe.

Pensi che sia persino possibile codificare l'hash risultante in modo realistico?

Attivo alla domanda che ha una risposta più probabile; quale sarebbe il modo più sicuro per assicurarsi che un eseguibile sia di fatto lo stesso eseguibile che è stato distribuito con un programma e non qualche eseguibile impostore che tenta di dirottare il sistema?

    
posta Danger Doug 18.05.2011 - 10:33
fonte

5 risposte

5

what would be the most secure way to make sure that an executable is in fact the same executable that was distributed with a program and not some impostor executable trying to hijack the system?

Questo è stato risolto.

Devi usare un canale separato per la firma.

Qualsiasi canale separato.

Ci sono molte scelte.

La fiducia proviene da più fasi di accordo. Non c'è assoluto nell'affidabilità. In qualsiasi momento (qualunque!) Qualcuno potrebbe interpretarti come falso. Anche se qualcuno ti ha consegnato un DVD sigillato e bloccato con crittografia e password necessarie per montare ed estrarre i binari, la persona che lo prepara potrebbe mentire. Niente è assoluto o finale

Poiché la fiducia richiede più fasi di accordo, è necessario mantenere l'hash separato dall'eseguibile.

Spesso vedi siti con ancora più metadati come dimensioni, timbri data e parole chiave SVN sepolte nell'eseguibile in modo da poter controllare molte cose per convincerti che l'eseguibile è degno di fiducia.

Che è, BTW, isomorfo per fidarsi dell'origine di quell'eseguibile e del canale tra te e la fonte.

Nei tempi antichi usavamo inviare le chiavi di attivazione via fax, mai via email, per assicurarci che stessimo utilizzando un altro canale rispetto a Internet.

    
risposta data 18.05.2011 - 12:08
fonte
6

Se la firma è in bundle all'interno dell'eseguibile, nulla impedisce all'avversario di modificarlo per corrispondere all'eseguibile malevolo. L'unico modo per verificare l'eseguibile è confrontare l'hash recuperato indipendentemente da un'origine diversa o convalidare la firma utilizzando una chiave pubblica verificata.

    
risposta data 18.05.2011 - 10:37
fonte
3

Il modo usuale di incorporare gli hash in un programma consiste nel posizionare il valore hash in una posizione specifica specifica nell'eseguibile, alla fine è più semplice. Crea l'applicazione con un valore fittizio e quindi hash tutto tranne la posizione hash. È quindi possibile aggiornare il valore hash nell'eseguibile senza modificarne il valore.

Qualsiasi metodo di sicurezza basato su un'unica fonte finirà per essere una corsa agli armamenti. Puoi usare questo tipo di hashing per proteggere da curiosità o virus generici, ma chiunque abbia un motivo sarà in grado di romperlo.

    
risposta data 18.05.2011 - 11:38
fonte
2

Pensa innanzitutto al modello di minaccia contro il quale desideri protezione.

Vuoi solo assicurarti che l'eseguibile non sia modificato a caso, ad es. da un virus? È possibile fornire l'hash in un file separato a parte l'eseguibile.

Vuoi assicurarti che non venga modificato durante il download? Fornisci l'hash da un'altra fonte.

Vuoi la migliore protezione possibile, anche contro il malware che si rivolge in modo specifico al tuo eseguibile? Utilizzare una firma crittografica con chiavi firmate da un'autorità di certificazione pubblica.

link

Non dimenticarti di pensare ad un ulteriore passo avanti. Se hai bisogno di uno strumento aggiuntivo per verificare l'integrità e l'hacker conosce il tuo sistema di sicurezza ed è stato in grado di modificare il tuo eseguibile, cosa ti assicura che non ha modificato anche lo strumento per il controllo?

    
risposta data 18.05.2011 - 13:30
fonte
0

quello che stai chiedendo è questo: diciamo che abbiamo una stringa. e hashing f (x) definito come stringa - > codice hash dove il gruppo "codice hash" è sottoinsieme di stringa.

così f (stringa) = segno

quindi otteniamo "firma" come risultato dell'hashing.

ora consente di aggiungere il segno alla stringa (non ci interessa da dove così si assume che l'operatore + gestisca la posizione) e otteniamo

f (string + segno) = totalSign

quindi sappiamo che stiamo cercando quel totale segno da presentare all'altro lato.

tuttavia vogliamo quel segno = totalSign

quando potrebbe accadere? bene, f (stringa) = f (stringa + segno) è facile da sapere senza quel porcino

Dai un'occhiata più da vicino sapremo che f è la stessa cosa

string = mod (stringa + segno)

quando il segno è zero hash per f (x) o mod (segno) sarebbe zero. che funzionerebbe solo per casi speciali.

puoi vedere in ogni altro caso che sarebbe possibile?

    
risposta data 18.05.2011 - 14:06
fonte

Leggi altre domande sui tag