No
L'attacco, come originariamente descritto, non è mai stato una minaccia. Mentre un compilatore teoricamente potrebbe fare ciò, in realtà il ritiro dell'attacco richiederebbe la programmazione del compilatore in
- Riconoscere quando il codice sorgente che si sta compilando è di un compilatore e
- Scopri come modificare il codice sorgente arbitrario per inserire l'hack in esso.
Ciò significa capire come funziona il compilatore dal suo codice sorgente, in modo che possa modificarlo senza interruzioni.
Ad esempio, immagina che il formato di collegamento memorizzi le lunghezze dei dati o l'offset del codice macchina compilato da qualche parte nel file eseguibile. Il compilatore dovrebbe capire da solo quali di questi devono essere aggiornati, e dove, quando si inserisce il carico utile di exploit. Le versioni successive del compilatore (versione innocua) possono cambiare arbitrariamente questo formato, quindi il codice exploit dovrebbe effettivamente comprendere questi concetti.
Questa è una programmazione auto-diretta di alto livello, un problema di intelligenza artificiale difficile (l'ultima volta che ho controllato, lo stato dell'arte stava generando codice che è praticamente determinato dai suoi tipi). Guarda: pochi umani possono persino farlo; dovresti imparare il linguaggio di programmazione e capire prima il codice base.
Anche se il problema di intelligenza artificiale è risolto, le persone si accorgerebbero se compilando i loro piccoli risultati del compilatore in un file binario con un'enorme libreria di IA collegata in esso.
Attacco analogo: trust di avvio
Tuttavia, una generalizzazione dell'attacco è pertinente. Il problema di base è che la tua catena di fiducia deve iniziare da qualche parte, e in molti domini la sua origine potrebbe sovvertire l'intera catena in un modo difficile da rilevare.
Un esempio che potrebbe essere facilmente rimosso nella vita reale
Il tuo sistema operativo, ad esempio Ubuntu Linux, garantisce la sicurezza (integrità) degli aggiornamenti controllando i pacchetti di aggiornamento scaricati contro la chiave di firma del repository (utilizzando la crittografia a chiave pubblica). Ma questo garantisce solo autenticità degli aggiornamenti se puoi provare che la chiave di firma è di proprietà di una fonte legittima.
Dove hai preso la chiave per la firma? Quando hai scaricato per la prima volta la distribuzione del sistema operativo.
Devi credere che la fonte della tua catena di fiducia, questa chiave di firma, non sia malvagia.
Chiunque sia in grado di MITM la connessione Internet tra te e il server di download di Ubuntu, questo potrebbe sii il tuo ISP, un governo che controlla l'accesso a Internet (ad esempio la Cina) o il provider di hosting di Ubuntu potrebbe aver dirottato questo processo:
- Rileva che stai scaricando l'immagine del CD di Ubuntu. Questo è semplice: verifica che la richiesta sia indirizzata a uno dei mirror di Ubuntu (elencati) e richieda il nome file dell'immagine ISO.
- Fornisci la richiesta dal proprio server, fornendo un'immagine del CD contenente la chiave pubblica e la posizione del repository dell'utente malintenzionato invece di Ubuntu.
Da quel momento in poi, riceverai i tuoi aggiornamenti in modo sicuro dal server dell'attaccante. Gli aggiornamenti vengono eseguiti come root, quindi l'autore dell'attacco ha il controllo completo.
Puoi prevenire l'attacco assicurandoti che l'originale sia autentico. Ma ciò richiede che tu convalidi l'immagine del CD scaricato usando un hash ( poche persone lo fanno effettivamente ) - e l'hash deve essere scaricato in modo sicuro, ad es. su HTTPS. E se l'utente malintenzionato può aggiungere un certificato sul computer (comune in un ambiente aziendale) o controlla un'autorità di certificazione (ad esempio, Cina), anche HTTPS non fornisce alcuna protezione.