[GTER] Criptografia WhatsApp

Patrick Tracanelli eksffa at freebsdbrasil.com.br
Wed Apr 6 11:36:13 -03 2016


> 
> On 05/04/2016, at 13:18, Douglas Fischer <fischerdouglas at gmail.com> wrote:
> 
> Acho que todo mundo tá recebendo mensagens sobre criptografia fim-a-fim no
> WhatsApp.
> 
> Isso está gerando um burburinho lascado por aqui.
> 
> E aí, quanto os colegas estão sabendo?
> --
> gter list    https://eng.registro.br/mailman/listinfo/gter

A iniciativa e intenção são boas né? Mas quanto a implementação é que ficam as dúvidas. Eu dei uma olhada no whitepaper e fiz alguns testes. No whitepaper fica claro que usa o signal protocol na implementação de referência da OWS, numa arquitetura de 4 fases (1) registro/criação de usuário/id/chaves, (2) início da sessão entre os interlocutores, (3) validação da sessão entre os interlocutores, (4) troca de mensagens/anexos/etc. A etapa 1 é permanente, uma vez por usuário, a etapa 2 o paper não informa se é permanente ou se expira a informação de sessão entre os interlocutores (mas pelos meus testes não expira). Na etapa 4 existem promessas de chave única por mensagem/anexo (a Message Key). A arquitetura base achei legal, as decisões de algoritmo, bom, é AES-256 e ta ai desde 2010 o Daniel Dantas livre e com processos caducados enquanto PF/ABIN/FBI tentaram por anos… só pra ilustrar. Outro ponto bem legal, usaram Curve25519 do DJB pra ECDH. O próprio DJB no entanto hoje ja ve problemas no Curve25519 e propõe melhorias com o PQC (post-quantum crypto), ou seja teria espaço pra melhorar mas já está bem acima do padrão normalmente implantado por ai.

Bom mas a teoria quase sempre na prática é outra. Nos testes que eu fiz o WhatsApp não faz Cert Pinning ainda, então MITM ainda é plenamente viável, mas claro o payload é criptografado no padrão acima. Também é possível com DPI identificar as 4 etapas acima, sem ser intrusivo (sem interceptar o SSL, apenas inspecionando de fora) e determinar na etapa 4 quando é mensagem e quando é anexo (na lista do nDPI o Luca Deri e o Robert Jefferson - não o nosso do mensalão kkk - estão discutindo e jaja deve sair um update pra lib). 

O que mais me preocupa são as promessas na fase 4. Não parece implementado como diz no paper. Testando um cenário de MITM, da pra fazer ataque de replay e ataque de interceptação. O que não seria uma divergência com o whitepaper se não o fosse. A gente consegue ver a sessão sendo negociada a primeira vez que enviamos uma mensagem pra um contato com whatsapp atualizado, tudo como previsto, não existe nova negociação depois mas até ai ok. Não da pra “ver” a message key negociada mas da pra saber o momento, e portanto da pra copiar e preparar um replay. Mas não precisa. Se copiar uma mensagem transmitida, da pra retransmitir ela a qualquer momento de novo (replay) mesmo depois de um tempo sem se comunicar com aquele contato (até desligando o celular), e principalmente da pra replay a mensagem fora da ordem esperada, depois de interceptar. Então o teste seguinte claro foi interceptar e retransmitir algo ja transmitido, e eis que o intercept pattern e o replay são totalmente possíveis. Alias mais que possíveis, nunca falhou em todos meus testes, sempre passou.

Portanto a parte chave da etapa 4 não é cumprida:

	"The Message Key changes for each message transmitted, and is ephemeral, such that the Message Key used to encrypt a message cannot be reconstructed from the session state after a message has been transmitted or received.”

Tão pouco a promessa de segredo perfeito (PFS).

Testei com ferramentas conhecidas, mitmproxy, mitmdump, plugins do OWASP pra eles inclusive o de scriptar os interception patterns, ndpi inspect, webmitm, nada do submundo nem “minhas próprias tools que ninguém sabe ninguém viu”, tudo plenamente acessível.

Também achei um tiro no pé o alarde das mensagens entre os usuários, um mero cadeadinho aberto/fechado ao lado do nome do interlocutor na janela seria o bastante. Claro o alarde é barulho provavelmente proposital pra “dar o que falar” mas claro que sai pela culatra, não consideraram direito o usuário final, uma mera mensagem “Agora você está mais seguro, melhor criptografia disponível com o último update, preste atenção ao cadeado. Saiba mais” uma única vez, provavelmente seria o bastante. O alarde exagerado causou reações, minha noiva por exemplo perguntou “o que você está testando comigo dessa vez?” hehehe e outros perguntaram “o que é isso? ataque?” ou seja se algo que é pra segurança alguém pensa que pode ser ataque, algo não deu certo com a mensagem hehe.

Outras informações estão sendo “vendidas” de forma errada também, tem um blog técnico de boa circulação que afirma que ao scanear o QRCode do seu amigo “pessoalmente” você cria um par único de chaves entre os aparelhos baseado na chave aleatória apresentada no QR. Quando na verdade o QRCode apenas valida um fingerprint, que inclusive pode ser validado visualmente, os números são reais e são o fingerprint da chave do seu interlocutor (não é uma mera ilustração), até a mensagem sobre isso é clara. E não é uma validação de confidencialidade daquela mensagem, é apenas o fingerprint da chave do interlocutor. Infelizmente não fica “salvo” que ja foi validado, nem gera par entre as partes. Ou seja nada parecido por exemplo com o que o Wickr faz ao validar o interlocutor que é mais parecido com a ideia do PGP, de Keysign e aparentemente recria mesmo um par de chaves único entre as partes como uma camada extra de criptografia.

Outra coisa que os “sites especializados” estão vendendo é que a comunicação é fim-a-fim, “a informação é transmitida de Alice para Bob e nunca passa por outros servidores”. Gente, claro isso está totalmente errado, é importante que se dissemine a ideia verdadeira. A comunicação não é fim a fim, não tem uma porta alta sendo negociada nem via porta 443 existe comunicação entre os aparelhos. Tudo continua centralizado, passando, estagiando e CERTAMENTE sendo ARMAZENADO por muito tempo (talvez permanentemente) nos servidores do WhatsApp (e do Telegram, provavelmente do Wickr, pra ser justo). O que é fim-a-fim é apenas a criptografia. Ou seja A manda pro servidor centralizado W que relay (retransmite) pra B, e esperançosamente apenas B consegue descriptografar o que recebeu de W em nome de A. Ou seja é A-W-B e não A-B (simplificando ao extremo).

Sobre as questões legais, bom, não precisa ser expert e não é difícil convencer um juiz sem muito conhecimento técnico, que de fato o WhatsApp salva e tem cópia do conteúdo trafegado. Em uma perícia de um caso envolvendo uma prefeitura aqui em MG eu tive que “demonstrar” de “forma não técnica” que as mensagens existem de fato nos servidores do WA. A forma de demonstrar é bem trivial e óbvia pra todos nos, voce ativa o WA web mantém o celular ligado, conta (eu contei via ipfw count e também resenhando contador de dados do iphone) quanta informação sai do seu celular e quanta você recebe no WA Web. Intercepta com tcpdump e mostra que do browser so vem informação do CIDR registrado em nome do Jan (criador do WhatsApp), mostra que do seu celular foi feito upload de X bytes e no browser recebeu 20*X bytes (literalmente, meus números são 2.7MB de upload do celular pra 689MB de conteúdo no browser), recupera mensagens de 1 semana atrás incluindo videos e fotos, bastando o celular estar online que na prática é um requisito de controle de acesso e autorização, diferente do que se afirma que é “sincronia entre o celular e a versão web”. É só ping, só autorização, com timeout (um boot rápido no seu celular nem vai impedir que o WA Web continue funcionando até da mensagem amarela de alerta alterna pra vermelha, que o celular ta offline). Se sobe X e volta 20X obviamente não tem nada de sincronia. Sem falar nas considerações mais obvias ainda, quando vc encaminha um video enorme e um audio, sabe que não é feito upload de novo, tudo esta no servidor, etc. Pra um usuário final isso não é tão óbvio mas é fácil demonstrar.

Bom isso também nao mudou com a nova criptografia. Claro por requisito de interoperabilidade eles certamente testaram muito pra garantir que isso não quebrasse. A session key é gerada também no browser e é salva no local storage do browser. Aparentemente é a mesma chave e a derivação deve ser com uma das chaves iniciais populadas na criação da conta. Agora aqui tem duas coisas importantes, como eu disse, aparentemente é a mesma chave, o que pode expor o segredo que ta no local storage do browser enquanto a aba está aberta. Isso tem que ser melhor estudado e testado. Uma coisa porém, eu testei fazer replay do post do pacote do WA Web no iPhone e falhou. Tentei replay do pacote do iPhone no WA Web e falhou. Embora o replay desordenado funcione normalmente no iphone e no browser como eu descrevi acima. Isso pra mim foi inconclusivo e provavelmente eu estou deixando passar algo, tem que olhar com mais calma num fim de semana hehehe :-)

Bom voltando a parte jurídica, continua sendo verdadeiro a presunção que suas mensagens existem nos servidores do WA. Porém agora existe mais margem pro WA de fato afirmar que não é possível disponibilizar mesmo sob ordem judicial, esse conteúdo, por ser criptografado fim a fim. O Juiz porém pode determinar que seja disponibilizado mesmo criptografado e tentar “resolver do seu lado”, por exemplo se numa forense tiver sido possível recuperar as chaves do browser ou do aparelho, ter o conteúdo criptografado pode ser de interesse da justiça ainda assim numa investigação que justifique o desgaste. Lembrando que, FBI vs Apple e Achismo vs Privacidade a parte, estamos em um pais soberano onde existe uma constituição, uma lei (Marco Civil) e o provedor de serviço passa a ter obrigações quando notificado judicialmente, ou seja a partir do momento X se a interceptação de conteúdo for decretada, mesmo que criptografado, bom, nossa lei é objetiva.

Outro ponto que vale a pena discutir é sobre a telemetria, que é diferente do acesso ao conteúdo de fato. Fazendo uma analogia a comunicação convencional que é tratada constitucionalmente, uma coisa é o sigilo da comunicação, outra é o grampo / interceptação. Quando os terroristas passaram a usar o Telegram pra combinar suas ações, e os Russos todos pomposos de sua segurança e privacidade começou a rastrear os terroristas e fechar os grupos onde eles discutiam, IMHO, foi um tiro no pé. Apensar de não expor nada que possa em alguma hipótese sugerir que não houvesse privacidade entre os terroristas, ficou claro que era possível determinar “quem é quem”, “quem fala com quem” e “quando/como - que grupo” ao ponto de bloquear e os loucos do estado islâmico reagirem dando a entender que realmente os russos fecharam os grupos. Ou seja a telemetria ta la.

Com base no white paper de criptografia do WhatsApp fica muito evidente e agora formal (advogados interessados salvem o whitepaper pra uso futuro caso saia do ar kkk) fica evidente que existe um identificador entre os interlocutores, que essa identificador é permanente e serve pra identificar as chaves, temporárias ou permanentes. Fica claro que esse identificador é linkado a algum outro identificador exposto aos usuários finais, e o que é exposto é o numero do telefone. Ou seja não é mais hipótese, é fato evidente baseado na arquitetura documentada que A fala com B e A tem seu ID tal qual B, únicos, previsíveis e que identificam não apenas A e B mas as chaves que B deve usar pra saber que A não é A2 nem A3 e criptografar pro interlocutor correto. 

Portanto pra mim é evidente que existe telemetria plena, e provavelmente (mas muito provavelmente mesmo) saber exatamente quem fala com quem, e quando, é trivial. Já saber o que é dito ai sim, tem a criptografia fim a fim na jogada e tudo o mais discutido. Ou seja sigilo, é uma coisa, interceptação do conteúdo é outra. Com algum tempo e vontade da pra provar com base na observação da comunicação entre as pontas que a telemetria existe e é armazenada por muito tempo permitindo recuperação de mensagens antigas, seja via WA Web seja via restore no seu iPhone novo ou recém formatado e acesso a histórico de conversas e até conteúdo multimídia (video/fotos/audio) com base em identificações única entre os interlocutores, acompanhada de timestamp e provavelmente ID único de cada mensagem propriamente dita.

Agora que melhorou melhorou, quem fez MITM no WA antes lembra que as mensagens eram criptografadas mas os anexos não, em base64 (video, foto, audio) ou seja só existia a comunicação TLS/HTTPS de camada de segurança (portanto não existia nada hehe).

https://owtf.github.io/
http://dutzi.github.io/tamper/
https://github.com/mitmproxy/mitmproxy
https://pqcrypto.org/
https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf
https://cr.yp.to/ecdh/curve25519-20060209.pdf
http://www.nytimes.com/live/paris-attacks-live-updates/messaging-app-telegram-closes-isis-channels-after-russian-founders-rant-calling-french-socialists-responsible-for-attacks/

--
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 at sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"




More information about the gter mailing list