No
L'attacco, come descritto in origine, non è mai stato una minaccia. Mentre un compilatore potrebbe teoricamente farlo, in realtà eseguire l'attacco richiederebbe di programmare il compilatore
- Riconosci quando il codice sorgente da compilare è di un compilatore e
- Scopri come modificare il codice sorgente arbitrario per inserire l'hack in esso.
Ciò implica capire come funziona il compilatore dal suo codice sorgente, in modo che possa modificarlo senza rotture.
Ad esempio, immagina che il formato di collegamento memorizzi le lunghezze dei dati o l'offset del codice macchina compilato da qualche parte nell'eseguibile. Il compilatore dovrebbe capire da sé quale di questi deve essere aggiornato e dove, quando si inserisce il payload dell'exploit. Le versioni successive del compilatore (versione innocua) possono modificare arbitrariamente questo formato, quindi il codice di exploit dovrebbe effettivamente comprendere questi concetti.
Questa è una programmazione auto-diretta di alto livello, un grave problema di intelligenza artificiale (ultimo controllo, lo stato dell'arte stava generando un codice che è praticamente determinato dai suoi tipi). Guarda: pochi umani possono persino farlo; dovresti imparare il linguaggio di programmazione e capire prima la base di codice.
Anche se il problema dell'IA è risolto, le persone noterebbero se la compilazione del loro piccolo compilatore si traduce in un binario con un'enorme libreria AI collegata.
Analogo attacco: bootstrap di fiducia
Tuttavia, una generalizzazione dell'attacco è rilevante. Il problema di base è che la tua catena di fiducia deve iniziare da qualche parte, e in molti settori la sua origine potrebbe sovvertire l'intera catena in un modo difficile da rilevare.
Un esempio che potrebbe essere facilmente realizzato nella vita reale
Il tuo sistema operativo, ad esempio Ubuntu Linux, garantisce la sicurezza (integrità) degli aggiornamenti controllando i pacchetti di aggiornamento scaricati rispetto alla chiave di firma del repository (utilizzando la crittografia a chiave pubblica). Ciò garantisce l' autenticità degli aggiornamenti solo se è possibile dimostrare che la chiave di firma è di proprietà di una fonte legittima.
Dove hai preso la chiave di firma? La prima volta che hai scaricato la distribuzione del sistema operativo.
Devi fidarti che la fonte della tua catena di fiducia, questa chiave di firma, non è il male.
Chiunque può MITM la connessione Internet tra te e il server di download di Ubuntu — questo potrebbe essere il tuo ISP, un governo che controlla l'accesso a Internet (ad esempio la Cina) o il provider di hosting di Ubuntu — avrebbe potuto dirottare questo processo:
- Rileva che stai scaricando l'immagine del CD di Ubuntu. Questo è semplice: vedi che la richiesta sta andando a uno qualsiasi dei mirror Ubuntu (elencati pubblicamente) e chiede il nome del file dell'immagine ISO.
- Servire la richiesta dal proprio server, dandoti un'immagine del CD contenente la chiave pubblica e la posizione del repository dell'aggressore invece di quella di Ubuntu.
Da quel momento in poi, riceverai gli aggiornamenti in modo sicuro dal server dell'attaccante. Gli aggiornamenti vengono eseguiti come root, quindi l'attaccante ha il pieno controllo.
Puoi prevenire l'attacco assicurandoti che l'originale sia autentico. Tuttavia, ciò richiede la convalida dell'immagine del CD scaricato utilizzando un hash ( poche persone lo fanno effettivamente ) e l'hash deve essere scaricato in modo sicuro, ad esempio tramite HTTPS. E se il tuo aggressore può aggiungere un certificato sul tuo computer (comune in un ambiente aziendale) o controlla un'autorità di certificazione (ad esempio la Cina), anche HTTPS non fornisce alcuna protezione.