O especialista David A. Wheeler propôs a técnica Diverse Double-Compiling (DDC) para resolver um problema crítico de segurança: o ataque Trusting Trust em compiladores.
O problema: ataque Trusting Trust
Ken Thompson descreveu esse ataque em 1984: um compilador comprometido pode inserir backdoors em programas compilados e até contaminar novos compiladores, mesmo quando o código-fonte parece limpo.
Isso cria uma situação perigosa: o binário final está adulterado, mas o código fonte não evidencia o ataque de forma direta.
A solução: DDC (compilação dupla diversificada)
A DDC valida se o executável final realmente corresponde ao código-fonte.
Fluxo resumido:
- Compile o fonte do compilador A com o próprio compilador A e gere X.
- Compile o mesmo fonte com um compilador B confiável e tecnicamente diverso,
gerando Y.
- Use Y para recompilar o mesmo fonte e gerar Z.
- Compare X e Z bit a bit.
Se X == Z, o resultado é consistente. Se diferirem, existe sinal de adulteração no caminho de compilação.
Exemplo prático com script Bash
#!/bin/bash
# Verificacao DDC simples
SOURCE="compilador_A.c"
SUSPECT_COMPILER="./gcc-bad"
TRUSTED_OUTPUT="./output-from-trusted-path"
echo "Iniciando verificacao DDC..."
# 1. Gera binario com compilador suspeito
$SUSPECT_COMPILER -o bin_suspeito $SOURCE
# 2. Compara hashes SHA-256
HASH_A=$(sha256sum bin_suspeito | cut -d ' ' -f 1)
HASH_Z=$(sha256sum $TRUSTED_OUTPUT | cut -d ' ' -f 1)
if [ "$HASH_A" = "$HASH_Z" ]; then
echo "SUCESSO: hashes coincidem."
else
echo "ALERTA: divergencia detectada."
diffoscope bin_suspeito $TRUSTED_OUTPUT
fi
Ferramentas úteis
- diffoscope: compara binários em profundidade e mostra diferenças reais.
https://diffoscope.org/ - disorderfs: ajuda a encontrar fontes de não determinismo na build.
https://salsa.debian.org/reproducible-builds/disorderfs
Projetos de referência
- Bootstrappable Builds
https://bootstrappable.org/ - GNU Mes
https://www.gnu.org/software/mes/ - Reproducible Builds (Debian, Fedora, Arch e outros
https://reproducible-builds.org/ - Trabalhos de David Wheeler sobre DDC
https://dwheeler.com/dwheeler.html
A DDC aumenta a confiança na cadeia de compilação ao validar compiladores com diversidade de ferramentas. O custo de ataques invisíveis sobe e a auditoria da supply chain fica muito mais robusta.
Este post está licenciado sob CC BY-NC.
Comentários
Participe da discussão abaixo.
Comentários ainda não configurados. Adicione as opções do Cusdis em /assets/json/config/blog-comments-config.json.