Onde este artigo começa

A história da família sem fio cobre o WEP e a lição que ele ensinou, que foi a de que a falha não estava na cifra, e sim em como o protocolo a usava. Este artigo é o que veio depois, porque a mesma frase acaba descrevendo tudo o que se seguiu.

O WPA2 substituiu o WEP em 2004 e segurou a linha por treze anos. Seu aperto de mão de quatro vias - a troca em que um cliente e um ponto de acesso, ambos já de posse da chave derivada da senha da rede, acordam uma chave de sessão nova - fora examinado por criptógrafos e tinha provas formais de segurança por trás. A declaração de um fabricante durante a divulgação de 2017 disse com todas as letras: o aperto de mão fora matematicamente provado seguro pela comunidade científica.

Fora mesmo. E quebrou.

O que o aperto de mão faz, e o que o KRACK fez com ele

Quatro mensagens. O ponto de acesso manda um número aleatório; o cliente manda o seu e uma prova de que conhece a chave compartilhada; o ponto de acesso confirma e, na mensagem três, manda o cliente instalar a chave de sessão que agora derivou; o cliente confirma na mensagem quatro.

A falha está no que acontece quando a mensagem quatro se perde. Rádio não é confiável, então o ponto de acesso retransmite a mensagem três, e o cliente - corretamente, segundo a especificação - a aceita e instala a chave de novo. É esse o ataque inteiro. Mathy Vanhoef, do grupo imec-DistriNet da KU Leuven, mostrou que um atacante ao alcance do rádio e posicionado entre os dois podia bloquear a mensagem quatro de propósito, forçar a retransmissão, e fazer o cliente reinstalar uma chave que já estava usando.

Reinstalar zera os contadores associados - o número de pacote de transmissão, que é o nonce, e o contador de repetição de recepção - de volta aos valores iniciais. E reutilizar nonce sob a mesma chave é a única coisa que a cifragem por baixo jamais pode fazer. Reutilize e o fluxo de chave pode ser recuperado.

O impacto dependia da cifra em uso, e a distinção importa operacionalmente. Contra o -CCMP, um atacante podia repetir e decifrar pacotes, mas não forjá-los - o bastante para sequestrar um fluxo TCP e injetar nele. Contra -TKIP e GCMP, na palavra dos próprios pesquisadores, o impacto era catastrófico: os pacotes podiam ser repetidos, decifrados e forjados. A mesma técnica também quebrou o aperto de mão de chave de grupo, o PeerKey e o de transição rápida do 802.11r, e recebeu dez identificadores distintos.

E havia o achado de implementação, que era pior que o de protocolo. Clientes Android e Linux usando certas versões do wpa_supplicant não reinstalavam a chave verdadeira quando enganados - instalavam uma chave só de zeros. Contra esses aparelhos o atacante não precisava recuperar fluxo de chave nenhum.

Por que uma prova não impediu isso

Esta é a parte que vale levar a qualquer conversa sobre verificação formal, e é a versão sem fio do argumento que o artigo sobre código perfeito faz com o ScreenOS da Juniper.

As provas do aperto de mão de quatro vias eram provas sobre o aperto de mão: que um atacante que observa a troca não consegue derivar a chave de sessão, e que as duas partes terminam concordando na mesma. Tudo isso continuou verdadeiro. O que as provas não modelavam era a máquina de estados em volta do aperto de mão - o que uma implementação deveria fazer quando uma mensagem chega duas vezes. A especificação não proibia reinstalar uma chave, porque ninguém tinha feito a pergunta, e uma prova responde apenas à pergunta que lhe foi dada.

A conclusão correta não é que análise formal seja inútil. É que uma prova tem um escopo, que o escopo em geral é o protocolo e não o comportamento da implementação ao longo do tempo, e que a distância entre os dois é onde a indústria não para de achar coisas.

A divulgação, que deu certo

O artigo foi submetido a revisão em 19 de maio de 2017. O CERT/CC notificou os fabricantes em 28 de agosto. A pesquisa veio a público em 16 de outubro, e o artigo foi apresentado na conferência da ACM em Dallas no começo de novembro. Quando veio a público, já havia correções para os principais sistemas operacionais, firmwares de roteador e conjuntos de chips, lançadas mais ou menos ao mesmo tempo.

Dois detalhes valem ser guardados. O próprio Vanhoef observou que, na publicação, os achados já tinham vários meses e que ele desde então encontrara técnicas mais fáceis que as do artigo - a versão publicada era, de propósito, não a mais afiada disponível. E a correção era retrocompatível: os clientes foram corrigidos para recusar reinstalar uma chave já em uso, o que significa que um cliente corrigido está seguro num ponto de acesso não corrigido. Essa propriedade é a razão de a resposta ter funcionado, e nem sempre está disponível.

O WPA3, e o ano que ele durou

A Alliance anunciou o em 2018. Sua melhoria central era substituir o aperto de mão de chave pré-compartilhada pelo Simultaneous Authentication of Equals, conhecido como Dragonfly - uma troca de chaves autenticada por senha, projetada para que um atacante que capture um aperto de mão não possa levá-lo embora e rodar um ataque de dicionário offline contra ele. Era uma correção real e importante para uma fraqueza real e importante.

Em abril de 2019 Vanhoef, então na NYU Abu Dhabi, publicou de novo, com Eyal Ronen, da Universidade de Tel Aviv e da KU Leuven. O artigo, Dragonblood, achou várias classes de problema: ataques de rebaixamento contra o WPA3 em modo de transição, em que uma rede que aceita clientes WPA2 e WPA3 pode ser empurrada de volta ao aperto de mão antigo; um rebaixamento contra o próprio SAE; negação de serviço contra o ponto de acesso; contornos de autenticação em toda implementação do EAP-pwd relacionado que testaram; e, como resultado principal, canais laterais de tempo e de cache no método de codificação de senha que vazam o suficiente para permitir exatamente o ataque de dicionário offline que o projeto existia para impedir.

Dois detalhes são quase perfeitos demais. A sobrecarga de negação de serviço que exploraram era causada pelas defesas contra canais laterais de tempo conhecidos - uma contramedida criando um problema novo. E a avaliação deles sobre o processo, citada na cobertura, era que um processo de projeto mais aberto teria impedido ou esclarecido a possibilidade dos ataques de rebaixamento. As correções foram adotadas na norma.

O que um profissional deve tirar disso

Três gerações, três falhas, nenhuma delas na cifra. A falha do WEP estava em como usava uma cifra de fluxo. O era uma máquina de estados aceitando uma retransmissão. O Dragonblood era uma codificação de senha vazando por tempo. A criptografia nunca foi a parte fraca, o que é boa razão para desconfiar de qualquer discussão de segurança que passe o tempo em comprimento de chave.

O modo de transição é onde o ataque mora. O WPA3 em modo de transição - aceitando clientes WPA2 para nada quebrar - é rebaixável, exatamente como os ataques nomeados ao TLS mostram para todo protocolo que manteve uma opção mais fraca por compatibilidade. Se o parque de fato não tem aparelhos só WPA2, a configuração é WPA3 apenas; se tem, a posição honesta é que a rede está protegida no nível do WPA2 e deve ser planejada assim.

Corrigir o cliente foi o controle que importou. O KRACK era primordialmente uma correção do lado do cliente. Numa empresa, a população que nunca foi corrigida é a que se deve inventariar: coletores de mão, equipamentos médicos, controles prediais, impressoras, qualquer coisa cujo fabricante parou de lançar . É a mesma população que a era dos worms não para de identificar.

E o processo funcionou, devagar e em público. Um pesquisador achou, divulgou por um órgão coordenador, os fabricantes corrigiram antes da publicação, as correções entraram na norma, e o mesmo pesquisador então fez de novo com o substituto. Isso não é uma falha do sistema. É o sistema, e a alternativa - falhas achadas por gente que não publica - é do que trata o resto deste catálogo.

Fontes