2009-04-23 3 views
11

Estoy tratando de captar una mejor comprensión de Troya compilador de Thompson (discutido en su 1984 discurso ACM Turing Award "Reflections On Trusting Trust"), y hasta ahora así es como yo lo entiendo:Troya compilador de Thompson

"El original El programa de inicio de sesión de Unix aceptaría cualquier nombre de usuario y contraseña que le haya indicado la raíz. Solo aceptaría una contraseña determinada, conocida solo por el hombre que escribió el sistema. Esto podría permitirle iniciar sesión en el sistema como usuario root ".

¿Es este el concepto correcto? No estoy 100% seguro si entiendo todo el concepto.

Si alguien pudiera aclararlo, sería útil.

(Véase también Bruce Schneier Countering "Trusting Trust")

+0

Probablemente deberías acceder a la página de ACM para obtener información sobre Trust Confiando, ¿no? – dmckee

Respuesta

15

El programa de usuario originales acepta los correspondientes pares de nombre y la contraseña de un archivo.

La modificación consiste en agregar una contraseña superpotente, compilada en el programa de inicio de sesión, que permite el acceso a la raíz. Para garantizar que este código no esté visible al leer el programa de inicio de sesión, hay un cambio en el compilador para reconocer esta sección del programa de inicio de sesión, es decir, su forma original y compilarla en el binario superpotente contraseña. Luego, para ocultar la existencia de este código en el compilador, es necesario que haya otro cambio en el compilador que reconozca la sección del compilador al que se agregó el primer cambio y que emita el formulario modificado.

Una vez que existe el código del compilador modificado, puede compilar el compilador e instalarlo en el lugar estándar, y luego revertir el código fuente para el programa de inicio de sesión y el compilador a su forma no modificada. El compilador compilado instalado tomará el programa de inicio de sesión sin modificar y generará el formulario inseguro. De forma similar, el compilador instalado compilará el código fuente del compilador no modificado en la variante desviada. Cualquiera que inspeccione el código fuente de cualquiera de los dos aceptará que no hay nada inusual en ellos.

Por supuesto, solo funciona hasta que el código fuente de cualquiera de los programas evolucione lo suficiente como para que el compilador modificado ya no lo reconozca. Como el código fuente del compilador modificado ya no está presente, no se puede mantener y (suponiendo que el compilador y el inicio de sesión continúen evolucionando) eventualmente dejará de producir el resultado inseguro.

2

sí, es el concepto correcto. Hay más en eso; el compilador modificado también debe compilar la fuente del compilador sin modificar a una copia modificada de manera similar. Esto incluye variaciones triviales de esa fuente, lo que básicamente significa que el compilador modificado debe ser capaz de resolver, p. el problema de detenerse

+1

Esto es ... divertido, de una manera perturbada. Reclama algo imposible, sin embargo, se acepta como la respuesta correcta. Eso parece hacer que el mismo Thompson desaparezca, en una nube de humo lógico. – unwind

+0

Me tenías levantado hasta que dijiste "detener el problema". – Alex