Інститут повільного і болісного з'ясування напрочуд очевидних речей

Reflections on trusting trust

За матеріалами (с) Sean Brian Townsend про те, як написати “ідеальний” бекдор.
“Я думаю, что коллеги программисты помнят замечательную статью Кена Томпсона “Reflections on trusting trust”. В ней описывается очень интересный фокус, связанный с компиляцией компиляторов. В языке Си специальные символы, переводы строки, табуляции записываются специальными последовательностями, такими как “\n”.
Как мог бы выглядеть код компилятора? ЕСЛИ (текущий_символ = ‘\’, а следющий ‘n’), то вернуть “\n” Кода перевода строки 10 нет нигде в исходниках. Компилятор должен быть собран дважды. В первом “поколении” if (c == ‘n’) return 10; а в следующем уже if (c == ‘n’) return ‘\n’; Компилятор “обучен” новой последовательности.
По-умному, называется bootstrapping, чем-то напоминает попытку вытянуть себя за волосы из болота. Turtles all the way down. Попытайтесь, к примеру, реализовать новый тип struct без структур и вы поймёте о чем я. Ричард Гебриел не зря говорил, что Юникс и Си – особенно зловредный вирус, паразитирующий на человечестве.
И вот этот нехитрый фокус, можно использовать для того, чтобы вставить в софт троянского коня. Нужно только подправить компилятор, следующим образом – ЕСЛИ мы видим код сравнивающий пароли, ТО вставить сравнение с предустановленным паролем. И никакая проверка и вычитка исходных кодов, ни компилятора, ни программы контролирующей доступ не выявит нарочно вставленную уязвимость. Меня поражает до сих пор.
А на скриншоте оригинальная статья, написанная лейтенантом и майором американских ВВС, из которой идею подобрал Томпсон. 1974 год. Я потом напишу еще один пост, чуть более понятный, про вирусы, лямбда исчисление, формальные языки, иерархию Хомского, смешные примеры и того и другого, а пока просто листаю раритет – https://seclab.cs.ucdavis.edu/projects/history/papers/karg74.pdf” (PDF)

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.