One (Thread) Can Keep a (PRNG) Secret, but not Two
Este artigo apresenta o primeiro ataque criptanalítico explorando uma condição de corrida no PRNG do IPv6 Fragment ID do kernel XNU para prever números de sequência e permitir o spoofing off-path de tráfego TCP e UDP, uma vulnerabilidade agora corrigida pela Apple como CVE-2024-27823.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine que você está enviando uma carta grande e importante para um amigo. Como a carta é grande demais para um único envelope, o correio (a rede) a divide em pedaços menores, ou fragmentos. Para garantir que as peças sejam colocadas de volta na ordem correta, cada pedaço recebe um número de ticket único (chamado de ID de Fragmento).
O artigo que você pediu descreve uma maneira inteligente pela qual um hacker pode adivinhar esses números de ticket antecipadamente, permitindo que ele substitua uma parte da sua carta por uma falsa sem que você ou seu amigo percebam.
Aqui está a divisão do ataque, explicada de forma simples:
1. A Máquina de Tickets Secreta (O PRNG)
Os computadores da Apple (macOS e iOS) usam uma "máquina de tickets" especial dentro de seu cérebro (o kernel) para gerar esses números de ticket aleatórios. A máquina deveria ser imprevisível, como lançar um dado. Se os números forem verdadeiramente aleatórios, ninguém consegue adivinhar o próximo ticket.
No entanto, os pesquisadores encontraram uma falha na forma como essa máquina funciona quando está ocupada.
2. O Problema "Duas Pessoas, Uma Máquina" (A Condição de Corrida/Race Condition)
Imagine um balcão de tickets movimentado onde duas pessoas (duas threads de computador) tentam pegar um ticket exatamente no mesmo milissegundo.
- Normalmente: A máquina dá um ticket para a Pessoa A, depois um ticket diferente para a Pessoa B.
- A Falha: Como a máquina não é "segura para threads" (ela não possui um bloqueio para impedir que as pessoas peguem ao mesmo tempo), ambas podem pegar o mesmo número inicial. Elas executam o cálculo, mas como começaram com o mesmo número e deram passos ligeiramente diferentes, acabam produzindo um padrão estranho.
O Padrão: Os pesquisadores descobriram que, se você acionar essa "corrida", a máquina produz uma sequência específica de números que é assim: A, B, C, B.
Observe que o B aparece duas vezes, separado pelo C. Esse "B-C-B" é a prova do crime. Isso diz ao atacante: "Ei! A máquina acabou de sofrer uma condição de corrida! Agora eu posso ver como as engrenagens internas da máquina estão girando."
3. Quebrando o Código (Criptoanálise)
Uma vez que o atacante vê suficientes padrões "B-C-B", ele pode fazer a engenharia reversa da máquina.
- Pense na máquina como um cadeado de combinação. O padrão "B-C-B" dá ao atacante uma pista sobre a posição atual dos discos dentro do cadeado.
- Ao coletar pistas suficientes, o atacante pode descobrir o estado interno completo da máquina.
- Uma vez que ele conhece o estado interno, ele pode prever exatamente quais serão os próximos números de ticket.
4. A Substituição (O Ataque)
Agora que o atacante pode prever os números de ticket, ele pode realizar um truque de "man-in-the-middle" (homem no meio), mas sem estar fisicamente no meio.
- O Cenário: Você está enviando um arquivo grande (como um backup do seu código) para um servidor. O arquivo é dividido em partes.
- A Proteção: A primeira parte do arquivo contém sua senha e assinatura (autenticação). O servidor verifica essa primeira parte primeiro para garantir que você é quem diz ser.
- O Truque: O atacante espera a primeira parte chegar. Então, ele usa a previsão para adivinhar o número de ticket da segunda parte. Ele rapidamente envia uma segunda parte falsa com uma mensagem maliciosa (como um vírus ou um arquivo alterado) que possui o número de ticket correto.
- O Resultado: O servidor recebe a primeira parte genuína (com a senha válida) e a segunda parte falsa (com o vírus). Ele junta as duas, pensa que está tudo bem e salva o arquivo infectado. O atacante burlou a verificação de segurança porque a verificação só ocorreu na primeira parte.
Exemplos do Mundo Real do Artigo
Os pesquisadores testaram isso em duas coisas específicas:
- NFS (Network File System): Eles mostraram como um atacante poderia alterar um arquivo sendo enviado para um backup em um servidor. Por exemplo, eles poderiam injetar um "Cavalo de Troia" em um arquivo de código de computador padrão. Quando um desenvolvedor compila esse código posteriormente, o vírus é executado.
- HTTP (Navegação Web): Eles mostraram como um atacante poderia alterar uma requisição web (como um login ou envio de formulário) enquanto ela viaja pela rede.
Por que Isso Importa
- É Novo: Esta é a primeira vez que alguém usou uma "condição de corrida" (um erro de tempo/timing) para quebrar um gerador de números aleatórios. Normalmente, condições de corrida apenas causam travamentos; aqui, elas foram usadas para roubar segredos.
- É Prático: O ataque funciona em dispositivos Apple reais (chips M1, M2, Macs Intel) rodando várias versões de macOS e iOS.
- A Correção: A Apple já corrigiu isso. Eles atribuíram o ID CVE-2024-27823. A correção envolve tornar a máquina de tickets "segura para threads" (thread-safe), para que duas pessoas não possam pegar o número inicial ao mesmo tempo.
Em resumo: O artigo mostra que, se o gerador de números aleatórios de um computador ficar confuso devido a duas coisas acontecendo ao mesmo tempo, um hacker pode usar essa confusão para prever o futuro, substituir partes dos seus dados e introduzir malware passando pelas suas verificações de segurança.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.