Компилятор Thompson Trojan

Я пытаюсь понять лучшее понимание Thompson Trojan Compiler (обсуждалось в его речах 1984 года ACM Turing Award) Размышления о доверии Trust), и до сих пор я так понимаю:

"Оригинальная программа входа в систему для Unix будет принимать любые логины и пароль, на которые он указал root. Он будет принимать только определенный пароль, известный только человеку, который написал систему. Это может позволить ему войти в систему как корень".

Это правильная концепция? Я не уверен на 100%, если понимаю всю концепцию.

Если кто-то может сделать это более ясным, это поможет.

(См. также Bruce Schneier Противодействие "Trusting Trust" )

Ответ 1

Оригинальная программа входа в систему принимает совпадающие пары имени и пароля из файла.

Модификация заключается в добавлении супермощного пароля, скомпилированного в программу входа в систему, что позволяет получить доступ root. Чтобы убедиться, что этот код не отображается при чтении программы входа в систему, есть изменение в компиляторе, чтобы распознать этот раздел программы входа в систему, его исходную форму и скомпилировать в супермощный двоичный пароль. Затем, чтобы скрыть существование этого кода в компиляторе, должно произойти другое изменение в компиляторе, который распознает раздел компилятора, что первое изменение было добавлено и вывело измененную форму.

Как только измененный код компилятора существует, вы можете скомпилировать компилятор и установить его в стандартном месте, а затем вернуть исходный код как для программы входа, так и для компилятора в свою немодифицированную форму. Затем установленный компилируемый компилятор принимает неизменную логинную программу и выводит небезопасную форму. Аналогично, установленный компилятор будет компилировать исходный код немодифицированного компилятора в коварный вариант. Любой, кто проверяет исходный код для одного, согласен с тем, что в них нет ничего необычного.

Конечно, он работает только до тех пор, пока исходный код для любой программы не будет развиваться настолько далеко, что модифицированный компилятор больше не узнает об этом. Поскольку измененный исходный код компилятора больше не присутствует, его нельзя поддерживать, и (если предположить, что компилятор и логин продолжают развиваться), он в конечном итоге прекратит выдавать небезопасный вывод.

Ответ 3

Да, это правильная концепция. Там больше; модифицированный компилятор должен также скомпилировать немодифицированный источник компилятора с аналогичной измененной копией самого себя. Это включает в себя тривиальные вариации этого источника, что в основном означает, что модифицированный компилятор должен быть способен решить, например. проблема с остановкой.