Reflections on Trusting Trust

folclore

segurançaprogramação

A demonstração de Ken Thompson, em 1984, de que um compilador pode esconder um backdoor auto-propagante invisível no código-fonte.

Em sua palestra do Prêmio Turing, Thompson descreveu como ensinar um compilador a inserir um backdoor de login e a reinseri-lo sempre que compilasse um novo compilador, de modo que a malícia sobrevivia mesmo sem nenhum código-fonte contê-la. A lição - não se pode confiar plenamente em código que não se escreveu, até o nível das ferramentas - ainda sustenta a segurança de cadeia de suprimentos.

A palestra do Prêmio Turing de Ken Thompson, em 1984, Reflections on Trusting Trust, descreve um ataque que segue genuinamente perturbador quarenta anos depois. Ele explica como colocar uma porta dos fundos num compilador que insere uma porta dos fundos no programa de login, e então o segundo movimento: ensinar o compilador a inserir as duas portas ao compilar uma nova versão de si mesmo.

A consequência é o que o torna famoso. Depois disso, o código malicioso pode ser apagado por completo do fonte do compilador. O fonte fica limpo, auditável, e comprovadamente não contém nada ruim, e o binário segue reproduzindo o ataque para sempre, porque cada geração é compilada pela anterior. Você não consegue encontrá-lo lendo o código, porque não sobrou código para encontrar.

A conclusão que Thompson tirou é a parte desconfortável: você não pode confiar em código que não criou inteiramente sozinho e, como ninguém escreve o próprio compilador, núcleo e firmware, a confiança precisa se apoiar em algum ponto que você não consegue verificar. A dupla compilação diversa oferece resposta parcial, usando um compilador independente para detectar a discrepância, e as compilações reprodutíveis atacam o mesmo problema por outro ângulo. Nenhuma elimina o ponto, que é o de a confiança em software ser, no fim, social, e não técnica.

Também conhecido como: the Thompson hack, trusting trust, compiler backdoor

Todos os verbetes do glossário