Backdoor-ul din compilatorul lui Ken Thompson: hack-ul care nu poate fi niciodată reparat
1984
În 1984, Ken Thompson, co-creatorul UNIX și al limbajului C, a susținut discursul său la decernarea premiului Turing, intitulat „Reflections on Trusting Trust.” În el, a descris un hack atât de elegant și terifiant încât a schimbat permanent modul în care cercetătorii în securitate gândesc despre încredere.
Montajul: Thompson a modificat compilatorul C pentru a recunoaște când compila programul de login al UNIX. Când detecta acest lucru, insera în secret un backdoor, o parolă ascunsă care i-ar fi dat lui Thompson acces la orice sistem UNIX. Codul sursă al login-ului părea curat. Doar binarul compilatorului conținea hack-ul.
Dar iată partea genială: ce se întâmplă dacă cineva recompilează compilatorul din cod sursă curat? Răspunsul lui Thompson: a modificat și compilatorul pentru a recunoaște când se compila pe sine. Când detecta acest lucru, insera ambele hack-uri în noul binar al compilatorului. Compilatorul murdar se reproduce din cod sursă curat.
Acest lucru înseamnă că hack-ul este invizibil. Poți citi fiecare linie din codul sursă al compilatorului și nu vei găsi nimic suspect. Dar binarul compilat conține codul backdoor-ului și se va insera în orice compilator nou compilat cu el. Singurul mod de a-l detecta ar fi examinarea directă a binarului, o sarcină mult mai grea.
Ideea lui Thompson nu era că ar fi implementat efectiv acest atac (deși unii cred că ar putea să o fi făcut). Ideea sa era filosofică: „Nu poți avea încredere în cod pe care nu l-ai creat în totalitate tu însuți.” Niciun fel de revizuire a codului sursă nu te poate proteja de un compilator compromis. Și tu nu ți-ai scris compilatorul. Și nici nu ai scris compilatorul care ți-a compilat compilatorul. Lanțul de încredere merge mai înapoi decât poate verifica orice individ.
Acesta a devenit cunoscut drept atacul „trusting trust.” Este o problemă fundamentală în securitatea computerelor, fără o soluție perfectă. Abordările moderne includ „compilarea dublă diversificată” (compilarea cu două compilatoare independente și compararea rezultatelor) și build-urile reproductibile (asigurarea că aceeași sursă produce întotdeauna același binar).
Atacul are relevanță practică și astăzi. Atacurile asupra lanțului de aprovizionare (în care hackerii compromit instrumentele de build, managerii de pachete sau pipeline-urile CI/CD) sunt echivalentul modern. Hack-ul SolarWinds (2020) a compromis un sistem de build pentru a injecta backdoor-uri în software folosit de mii de organizații, inclusiv guvernul SUA.
Discursul lui Thompson din 1984 rămâne una dintre cele mai importante lucrări de securitate scrise vreodată. Lecția sa este simplă și tulburătoare: la un moment dat, trebuie să ai încredere în cineva. Întrebarea este cum să minimizezi acea încredere și să detectezi când este încălcată.