Unixtopia

main/ artigos/

Confiança confiável

Em segurança de computadores, confiança confiável se refere à observação, e um tipo de ataque que a explora, de que não se pode confiar 100% na tecnologia que não foi criada do zero, mesmo um compilador completamente livre como o gcc com código verificável não malicioso, que foi compilado por si só e que está sendo executado em hardware 100% livre e não malicioso ainda pode conter recursos maliciosos se uma tecnologia não confiável já esteve envolvida na criação do compilador no passado, porque tal tecnologia maliciosa pode ter inserido um código malicioso autorreplicante que está se escondendo e se propagando apenas nos binários executáveis. Parecia que esse tipo de ataque era extremamente difícil de detectar e combater, mas um método para fazer exatamente isso foi apresentado em 2009 em uma tese de doutorado chamada Fully Countering Trusting through Diverse Double-Compiling. O problema foi introduzido no artigo de Ken Thompson de 84 chamado Reflections on Trusting Trust.

Imagine que o software livre acabou de ser inventado e não há compiladores C livres, apenas um proprietário, potencialmente malicioso, propC. Decidimos escrever o primeiro compilador C livre chamado freeC, em C. O código freeC não conterá nenhum recurso malicioso, é claro. Depois de escrevermos freeC, temos que compilá-lo com algo e o único compilador disponível é o proprietário, propC. Então temos que compilar freeC com propC, fazendo isso, mesmo que o código-fonte freeC seja completamente não malicioso, propC pode furtivamente inserir código malicioso, com uma backdoor ou telemetria, no binário freeC que ele gera, e também pode inserir um código malicioso autorreplicante nele que continuará se replicando em qualquer coisa que esse binário freeC malicioso compilar.

Mesmo se compilarmos freeC com o binário freeC, infectado, o recurso autorreplicante malicioso permanecerá, não importa quantas vezes recompilarmos freeC sozinho. Tenha em mente que este princípio pode ser usado até mesmo em níveis muito baixos, como o de compiladores de montagem, e pode ser extremamente difícil de detectar. Para pessoas pouco retardadas, podemos talvez imaginar isso com robôs criando outros robôs. Digamos que criamos planos para um robô servo completamente legal, não malicioso e bem comportado que pode se replicar, criar novos robôs legais e comportados. Alguém tem que fazer o primeiro robô, se deixarmos algum robô potencialmente maligno fazer o primeiro robô legal de acordo com nossos planos, o robô malicioso pode adicionar um pequeno recurso malicioso a este robô legal, que ele espionará seu dono, e ele também pode fazer com que o robô legal passe esse recurso para outros robôs que ele fizer. A menos que façamos nosso primeiro robô legal manualmente, é muito difícil saber se nossos robôs legais não possuem, de fato, recursos maliciosos.


Impulsionado por nada. Todo conteúdo é disponível sob CC0 1.0 domínio público. Envie comentários e correções para Mr. Unix em victor_hermian@disroot.org.