O documento descreve um artigo escrito por Ken Thompson sobre os perigos de se confiar cegamente em compiladores. Thompson demonstra como é possível alterar um compilador para inserir código malicioso que se propague a qualquer software compilado posteriormente, mesmo que o código-fonte original não tenha sido modificado. Isso levanta questões sobre a segurança e integridade de softwares de terceiros.
1. Reflections on Trusting Trust
Ken Thompson (Kenneth Lane Thompson) é um cientista computacional com titulo de
bacharelado e mestre, ambos em engenharia electrotécnica, na UC Berkeley. Em 1969,
enquanto trabalhava nos laboratórios Bell, Thompson e Dennis Ritchie foram os principais
criadores do sistema operacional UNIX. Enquanto Thompson desenvolvia os primórdios do
UNIX, ele decidiu que o UNIX precisava de uma linguagem de programação e também criou
a linguagem de programação B, uma precursora da linguagem C
O texto “Reflections on Trusting Trust” foi escrito por Ken Thompson e foi publicado pela
ACM em algumas de suas publicações. A ACM cujo nome é (Association for Computing
Machinery) que em português significa (Associação para Maquinaria da Computação) é uma
sociedade cientifica da computação. Foi fundada em 1947, como a primeira sociedade cientifica
e educacional dedicada à computação.
A ACM publica várias revistas acadêmicas e também artigos para profissionais da
computação, assim como também distribui vários prêmios, dentre eles o Prêmio Turing que é
considerado o prêmio Nobel da Computação.
O Prêmio Turing foi dado a Ken Thompson e a Dennis Ritchie em 1983 pelo
desenvolvimento da teoria geral de sistemas operacionais e especialmente pela implementação
do sistema operacional UNIX.
No texto “Reflections on Trusting Trust” de Thompson, ele inicia agradecendo a ACM
pelo prêmio e também nos advertindo sobre seu trabalho com o sistema operacional Unix,
alegando que não trabalhava com o sistema há alguns anos e que o estado em que o sistema
operacional Unix estava era resultado do trabalho de um grande número de pessoas e apesar
disso, ele ainda recebia merecidas honras por seus feitos.
Entretanto o artigo cita a segurança de um programa e demonstra através de
explicações que o problema de ter um compilador criado apartir de sua própria linguagem de
programação. Ele usou a linguagem C e demonstrou como é possível criar outro compilador de
linguagem C através de sua própria linguagem, porém um compilador Alterado. Este compilador
alterado como ele mostrou pode conter um cavalo-de-tróia. Demonstrou que o compilador C
pode ser alterado para propagar este comportamento maligno mesmo quando tentar recompilar
o código-fonte (original não alterado) do compilador.
Se a alteração que ele demonstrou for realizada em outro programa e não for deliberada,
poderá ser chamada de "bug" de compilação. Se for, poderá ser chamado de "cavalo de tróia".
O bug implantado no compilador poderia incorporar num comando UNIX de "login". O
código modificado poderia alterar a compilação do comando de modo a aceitar uma senha
intencional ou conhecida. Se esse código for instalado em binário e o binário usado para
compilar o comando de login, poderia entrar no sistema como qualquer usuário.
Como o compilador em si foi um programa compilado, para os usuários seria muito
improvável perceber as instruções de código de máquina que executou essas tarefas
2. Recentemente (Agosto de 2009) foi publicado um ataque utilizando o conceito descrito
por Thompson, um laboratório chamado Sophos Lab encontrou um arquivo infectado com o
vírus W32/Induc-A, este arquivo executava um código que procurava por uma instalação do
compilador Delphi e, caso o encontrasse, o alterava. A partir daí todo código gerado por aquele
compilador passaria a incluir o W32/Induc-A em seu código-fonte.
Felizmente hoje existe um grupo de empresas que criaram o (TCG) Trusting Computing
Group, cujo objetivo inicial era o desenvolvimento de um módulo de computação confiável
(trusting computing module) baseado tanto em hardware como em software, para garantir, a
integridade de código e memória, que apenas código autorizado pudesse rodar na plataforma.
Em 2009 o TCG liberou um conjunto de especificações que descrevem o protocolo para
comunicação com hard-disks auto-encriptáveis.
As empresas que iniciaram o projeto TCG em 2003 são : AMD, Hewlett-Packard, IBM,
Intel e Microsoft, e hoje mais de 130 empresas são promotores, contribuintes, ou adotantes de
TCG especificações.
Comentários
Se um usuário tem a preocupação de que o compilador possa estar comprometido, é
melhor evitar usa-lo por completo ao invés de rever o binário em detalhe usando ferramentas.
Um usuário que não tenha sérias preocupações de que o compilador foi comprometido não pode
ser responsabilizado a assumir o trabalho.
Thompson cita “Não devemos confiar em compiladores que não são de criação própria,
ainda mais de empresas que empregam pessoas como ele”
Referências
http://en.wikipedia.org/wiki/Association_for_Computing_Machinery, visitado em 28/05/2010
http://en.wikipedia.org/wiki/Ken_Thompson , vistado em 28/05/2010
http://en.wikipedia.org/wiki/Reflections_on_Trusting_Trust#Reflections_on_Trusting_Trust,
visitado em 30/05/2010
http://www.acm.org/ , visitado em 30/05/2010
Thomson, K., "Reflections on trusting trust", Communications of the ACM, volume 27, issue 8,
pag. 761 - 763, 1984.