No
El ataque, como se describió originalmente, nunca fue una amenaza. Si bien un compilador teóricamente podría hacer esto, en realidad llevar a cabo el ataque requeriría programar el compilador para
- Reconocer cuándo el código fuente que se está compilando es de un compilador, y
- Descubre cómo modificar el código fuente arbitrario para insertar el hack en él.
Esto implica descubrir cómo funciona el compilador a partir de su código fuente, para poder modificarlo sin romperse.
Por ejemplo, imagine que el formato de enlace almacena las longitudes de datos o el desplazamiento del código de máquina compilado en algún lugar del ejecutable. El compilador tendría que averiguar por sí mismo cuáles de estos deben actualizarse y dónde, al insertar la carga útil de explotación. Las versiones posteriores del compilador (versión inocuo) pueden cambiar arbitrariamente este formato, por lo que el código de explotación necesitaría comprender estos conceptos.
Esta es una programación autodirigida de alto nivel, un problema de IA difícil (la última vez que lo revisé, el estado de la técnica estaba generando código que está prácticamente determinado por sus tipos). Mira: pocos humanos pueden hacer esto; Tendría que aprender el lenguaje de programación y comprender primero el código base.
Incluso si se resuelve el problema de IA, las personas notarían si compilar su pequeño compilador da como resultado un binario con una enorme biblioteca de IA vinculada a él.
Ataque análogo: confianza de arranque
Sin embargo, una generalización del ataque es relevante. El problema básico es que su cadena de confianza tiene que comenzar en alguna parte, y en muchos dominios su origen podría subvertir toda la cadena de una manera difícil de detectar.
Un ejemplo que se podría sacar fácilmente en la vida real.
Su sistema operativo, por ejemplo, Ubuntu Linux, garantiza la seguridad (integridad) de las actualizaciones al comparar los paquetes de actualización descargados con la clave de firma del repositorio (utilizando criptografía de clave pública). Pero esto solo garantiza la autenticidad de las actualizaciones si puede probar que la clave de firma es propiedad de una fuente legítima.
¿De dónde sacaste la clave de firma? Cuando descargó por primera vez la distribución del sistema operativo.
Debe confiar en que la fuente de su cadena de confianza, esta clave de firma, no es mala.
Cualquiera que pueda MITM la conexión a Internet entre usted y el servidor de descarga de Ubuntu, este podría ser su ISP, un gobierno que controla el acceso a Internet (por ejemplo, China) o el proveedor de alojamiento de Ubuntu, podría haber secuestrado este proceso:
- Detecta que estás descargando la imagen del CD de Ubuntu. Esto es simple: vea que la solicitud vaya a cualquiera de los espejos de Ubuntu (que figuran en la lista pública) y solicite el nombre de archivo de la imagen ISO.
- Atienda la solicitud desde su propio servidor, proporcionándole una imagen de CD que contenga la clave pública del atacante y la ubicación del repositorio en lugar de la de Ubuntu.
A partir de entonces, obtendrá sus actualizaciones de forma segura desde el servidor del atacante. Las actualizaciones se ejecutan como root, por lo que el atacante tiene control total.
Puede evitar el ataque asegurándose de que el original sea auténtico. Pero esto requiere que valide la imagen de CD descargada utilizando un hash ( pocas personas realmente hacen esto ), y el hash debe descargarse de forma segura, por ejemplo, a través de HTTPS. Y si su atacante puede agregar un certificado en su computadora (común en un entorno corporativo) o controla una autoridad de certificación (por ejemplo, China), incluso HTTPS no proporciona protección.