A história de como acabei esbarrando na vulnerabilidade das chaves fracas do Debian
- Em março de 2008, o autor estava trabalhando na Engine Yard (EY)
- Na época, a EY ajudava o GitHub oferecendo infraestrutura gratuita
- À medida que o GitHub crescia, surgiu um problema de lentidão no tempo de login via SSH
- O GitHub gerenciava chaves SSH usando o arquivo padrão
~/.ssh/authorized_keys
- Quando um usuário se conecta, o SSH abre esse arquivo e faz uma busca linear por uma chave que corresponda à apresentada pelo usuário
- Normalmente isso não é um problema porque há só algumas chaves, mas, quando o número de usuários cresce como no GitHub, isso fica lento
Decisão de usar um banco de dados MySQL em vez do arquivo authorized_keys
- Depois de avaliar várias alternativas, decidiram aplicar um patch no OpenSSH para que a busca de chaves fosse feita em um banco de dados MySQL
- Foi uma decisão tomada com cautela, e houve muito esforço para não comprometer a segurança
- A mudança foi aplicada no começo de abril de 2008 e resolveu o problema de velocidade no login via SSH
Algo estranho aconteceu
- Um mês depois, no começo de maio, surgiu um problema em que alguns usuários conseguiam acessar via SSH os repositórios de outros usuários
- A investigação mostrou que usuários diferentes estavam usando chaves com a mesma impressão digital
- Isso não deveria acontecer, a menos que estivessem compartilhando a mesma chave
- Os usuários disseram que não se conheciam e não sabiam como suas chaves poderiam ter vazado
- O mesmo problema foi encontrado em outros pares de usuários
- O único ponto em comum era que todos usavam sistemas Debian ou Ubuntu
Identificando a causa
- Em 13 de maio de 2008, a divulgação do DSA-1571-1 deixou tudo claro
- Um mantenedor do Debian, ao limpar o código de geração de números aleatórios do OpenSSL, reduziu por engano o número de chaves possíveis para cerca de 32.000
- Muitas pessoas se cadastraram no GitHub e, seguindo as boas práticas, geraram novas chaves, o que levou às colisões
- Depois disso, o autor acabou se envolvendo ainda mais com esse problema, inclusive usando chaves fracas já conhecidas para encontrar autoridades certificadoras afetadas
Opinião do GN⁺
- Para descobrir uma vulnerabilidade tão importante assim, é preciso ter tempo e energia para pensar “isso está estranho” e investigar com persistência. Normalmente não temos essa folga, então é preciso contar com sorte.
- A maioria das pessoas está tão ocupada no dia a dia que é difícil ir até a causa raiz de um problema. Recuperar esse espaço no nosso setor é uma tarefa importante.
- O OpenSSL é uma das bibliotecas de criptografia mais usadas no mundo, então o impacto de uma vulnerabilidade dessas é enorme. Isso mostra bem os pontos fortes e fracos do open source.
- Para prevenir vulnerabilidades assim, é preciso reforçar revisão de código e auditorias de segurança, e analisar com ainda mais cuidado mudanças em partes críticas. Mesmo assim, não existe método perfeito.
- Ainda assim, o open source tem a vantagem de permitir que especialistas examinem diretamente o código e encontrem problemas. Em programas fechados, isso nem sequer é possível.
1 comentários
Comentários do Hacker News
~/.ssh/authorized_keyspouqusando GCD também foi interessante