2009-04-23 14 views
11

Próbuję uchwycić lepsze zrozumienie Trojan Compiler Thompsona (omówione w jego 1984 ACM Nagroda Turinga mowy „Reflections On Trusting Trust”), i do tej pory jest to jak ja to rozumiem:Thompsona Trojan Compiler

„pierwotne program do logowania dla Unixa zaakceptowałby wszelkie dane logowania i hasła, których poleciłby root, akceptowałby tylko określone hasło, znane tylko człowiekowi, który napisał system, co pozwoliłoby mu zalogować się do systemu jako root. "

Czy to właściwa koncepcja? Nie jestem w 100% pewien, czy rozumiem całą koncepcję.

Jeśli ktoś mógłby to wyjaśnić, pomógłby.

(Patrz także Bruce Schneier Countering "Trusting Trust")

+0

Powinieneś prawdopodobnie linkować do strony ACM dla On Trusting Trust, no? – dmckee

Odpowiedz

15

Oryginalny program logowanie akceptuje pasujące pary nazwy i hasła z pliku.

Modyfikacja polega na dodaniu super potężnego hasła, skompilowanego do programu logowania, który umożliwia dostęp do konta root. W celu zapewnienia, że ​​ten kod nie jest widoczny podczas odczytu programu logowania, następuje zmiana w kompilatorze, aby rozpoznać tę sekcję programu logowania, i jej oryginalną formę i skompilować go do super potężnego binarnego hasła. Następnie, aby ukryć istnienie tego kodu w kompilatorze, konieczna jest kolejna zmiana w kompilatorze, który rozpoznaje sekcję kompilatora, do której została dodana pierwsza zmiana i wyprowadza zmodyfikowany formularz.

Po zmianie zmodyfikowanego kodu kompilatora można skompilować kompilator i zainstalować go w standardowym miejscu, a następnie przywrócić kod źródłowy programu logowania i kompilatora do ich niezmodyfikowanej postaci. Zainstalowany skompilowany kompilator podejmie niezmieniony program logowania i wyświetli niezabezpieczoną formę. Podobnie zainstalowany kompilator skompiluje niezmodyfikowany kod źródłowy kompilatora do przebiegłego wariantu. Każdy, kto sprawdzi kod źródłowy, zgodzi się, że nie ma w nich nic niezwykłego.

Oczywiście działa tylko do momentu, w którym kod źródłowy programu ewoluuje na tyle, że zmodyfikowany kompilator już go nie rozpoznaje. Ponieważ kod źródłowy zmodyfikowanego kompilatora nie jest już obecny, nie można go utrzymywać i (zakładając, że kompilator i logowanie będą nadal ewoluować) w końcu przestanie wytwarzać niezabezpieczone wyjście.

2

Tak, jest to właściwa koncepcja. Jest w tym coś więcej; zmodyfikowany kompilator musi także skompilować niezmodyfikowane źródło kompilatora do podobnie zmodyfikowanej kopii samego siebie. Obejmuje to trywialne odmiany tego źródła, co zasadniczo oznacza, że ​​zmodyfikowany kompilator musi być w stanie rozwiązać np. problem z zatrzymaniem.

+1

To jest ... zabawne, w niepokojący sposób. Stwierdza coś niemożliwego, ale jest akceptowaną poprawną odpowiedzią. To mogłoby sprawić, że Thompson zniknąłby w chmurze logicznego dymu. – unwind

+0

Trzymałeś mnie, dopóki nie powiedziałeś "problem z zatrzymaniem". – Alex

Powiązane problemy