Page cover

🧸XMPP Protocol

Overview

Este paper fornece uma visΓ£o geral do protocolo XMPP (Extensible Messaging and Presence Protocol), com foco em seus aspectos de descentralizaΓ§Γ£o, privacidade e anonimato.

  • Abordarei como o protocolo funciona, RFCs, ExtensΓ΅es (XEP) e terminologias.

  • Apresentarei um guia prΓ‘tico para a criaΓ§Γ£o de uma conta e configuraΓ§Γ£o do cliente Gajim com OMEMO e anonimizaΓ§Γ£o via rede Tor.

SumΓ‘rio - XMPP

chevron-rightO que Γ© XMPPhashtag
  • RFCs & Extensions (XEP)

    • RFCs

    • XEPs

  • Como o XMPP funciona

    • Ideia Central

  • Pontos Positivos do XMPP (em questΓ΅es de privacidade)

    • Descentralizado/S2S

    • Jabber ID

    • Sem InformaΓ§Γ΅es

    • ConexΓ£o via Tor

    • Baseado em XML

chevron-rightQuestΓ΅es de seguranΓ§a operacional (OPSEC)hashtag
  • Client

  • Server

chevron-rightHands On (Chega de teoria)hashtag
  • OMEMO

  • OTR

  • CLIENTs

  • Instalando e configurando o Gajim

  • Criando a conta

  • Voltando ao Gajim…

  • OMEMO POR PADRΓƒO

  • Feito!

O que Γ© XMPP

O protocolo XMPP, inicialmente chamado de Jabber, foi iniciado em 1999 e tinha como principal objetivo criar uma alternativa de comunicaΓ§Γ£o open-source e federada/descentralizada. Com o tempo, o protocolo Jabber foi amadurecendo junto com a comunidade e logo foi padronizado, tornando-se XMPP, que Γ© como o conhecemos hoje.

circle-info

VocΓͺ pode ver essa linha do tempo aqui -> XMPP Historyarrow-up-right

RFCs & Extensions (XEP)

Como expliquei anteriormente, com o tempo o protocolo amadureceu e foi padronizado, nascendo assim as RFCs, que sΓ£o documentos de padronizaΓ§Γ£o de protocolos.

RFCs (documentos de padronizaΓ§Γ£o do protocolo)

As RFCs principais do protocolo XMPP sΓ£o:

RFC
TΓ­tulo
DescriΓ§Γ£o

XMPP Core

Define o nΓΊcleo do protocolo, incluindo streams XML, autenticaΓ§Γ£o SASL, estabelecimento de sessΓ£o e mecanismos de comunicaΓ§Γ£o bΓ‘sicos.

XMPP Instant Messaging and Presence

Especifica as funcionalidades bΓ‘sicas de mensagens instantΓ’neas e presenΓ§a (online, offline, ocupado, etc.).

XMPP Address Format

Padroniza o formato do JID (Jabber ID), definindo a estrutura usuΓ‘rio@domΓ­nio/recurso.

Use of TLS in XMPP

Especifica o uso obrigatΓ³rio do TLS para criptografia de todas as conexΓ΅es, garantindo seguranΓ§a na comunicaΓ§Γ£o.

XMPP over WebSocket

Define como XMPP pode ser transportado sobre WebSockets, facilitando sua integraΓ§Γ£o com aplicaΓ§Γ΅es web modernas.

Extensions (XEP)

O protocolo XMPP permite a adiΓ§Γ£o de extensΓ΅es, que sΓ£o conhecidas como: XEPs (XMPP Extension Protocol).

chevron-rightOs XEP nos permitemhashtag
  1. Adicionar criptografia do lado do cliente (E2EE)

  2. Chamadas de voz e vΓ­deo

  3. Compartilhamento de arquivos

  4. Descobrir os recursos que o servidor disponibiliza

  5. Salas em grupo (MUC)

  6. E uma infinidade de outras coisas…

Algumas extensΓ΅es XEP bem conhecidas sΓ£o:

XEP
Nome
DescriΓ§Γ£o

Multi-User Chat

Salas de conversaΓ§Γ£o em grupo, similares a canais de IRC.

OMEMO Encryption

Criptografia de ponta-a-ponta moderna, baseada no protocolo Signal.

HTTP File Upload

Permite o compartilhamento de arquivos mesmo quando o destinatΓ‘rio estΓ‘ offline.

Service Discovery

Permite que clientes descubram os recursos e extensΓ΅es suportados por um servidor ou outro cliente.

Jingle

Framework para comunicaΓ§Γ£o em tempo real, como chamadas de voz e vΓ­deo.

Existem diversos outros XEP, basta verificar -> xmpp.org/extensionsarrow-up-right


Como o XMPP funciona

Ideia Central

O XMPP e sua ideia central:

  • X β€” eXtensible: Feito para se adaptar a mudanΓ§as ao longo do tempo.

  • M β€” Messaging: Mensagens instantΓ’neas, rΓ‘pidas e eficientes entre os clientes.

  • P β€” Presence: A presenΓ§a de uma entidade no servidor: Online, Offline, Ocupado etc. Indica se vocΓͺ estΓ‘ pronto para receber uma mensagem ou nΓ£o.

  • P β€” Protocol: Γ‰ um protocolo extensΓ­vel, com conjunto de padrΓ΅es definidos, que permite a comunicaΓ§Γ£o entre servidores e clientes.

Pontos Positivos do XMPP (em questΓ΅es de privacidade)

Descentralizado/S2S

chevron-rightO protocolo XMPP Γ© descentralizado por padrΓ£ohashtag
  • VocΓͺ pode rodar seu prΓ³prio servidor na sua casa, ele nΓ£o depende de um servidor central ΓΊnico.

  • A principal vantagem da descentralizaΓ§Γ£o Γ© a liberdade de escolha do usuΓ‘rio, tendo em vista que o usuΓ‘rio pode criar seu prΓ³prio servidor (se ele tiver experiΓͺncia), ou usar servidores seguros/privados (o que torna o uso muito mais simples).

  • Os servidores funcionam em um modo chamado server-to-server (S2S), ou seja, os servidores se comunicam entre si, desde que ambos estejam rodando e aceitando comunicaΓ§Γ΅es via XMPP.

  • Isso significa que o usuΓ‘rio pode criar um servidor em casa! Se esse servidor rodar o protocolo XMPP, ele pode se comunicar com todos os outros!

chevron-rightVantagens de ter seu prΓ³prio servidorhashtag
  • VocΓͺ gerencia seu servidor (quem pode se comunicar ou o que, E2EE e assim por diante)

  • VocΓͺ gerencia sua privacidade (quem pode te enviar mensagem, o que as pessoas podem ver)

  • VocΓͺ gerencia a forma como a comunicaΓ§Γ£o Γ© feita (adicionando criptografia Γ  conexΓ£o ou nΓ£o, vocΓͺ escolhe!)

  • VocΓͺ gerencia os logs (o que o servidor vai armazenar de ΓΊtil)

  • Mas mesmo se vocΓͺ nΓ£o possuir um servidor, ainda existem servidores gratuitos e β€œconfiΓ‘veis” que estΓ£o disponΓ­veis 24/7, e vocΓͺ pode se registrar criando um JabberID para se comunicar com outros usuΓ‘rios!

  • VocΓͺ tambΓ©m pode usar criptografia E2EE (OMEMO) para proteger suas mensagens, impedindo que o servidor tenha acesso ao conteΓΊdo.

Jabber ID

chevron-rightO protocolo XMPP usa um formato de endereΓ§amento de entidades muito simples, semelhante ao e-mail.hashtag
  • porque semelhante a um endereΓ§o de e-mail? porque no e-mail vocΓͺ pode ter uma conta no Gmail e conversar com quem tem uma conta no Outlook, sacou?

  • user1@meuserver.dot -> user2@serverrandomico.dot2

chevron-rightUsuΓ‘riohashtag
  • Seu nickname, escolhido na hora de criar sua conta em um servidor Jabber/XMPP

chevron-rightDomainhashtag
  • NameSystem do servidor, usado para identificaΓ§Γ£o do servidor do usuΓ‘rio/entidade

chevron-rightClienthashtag
  • Usado para especificar o cliente/dispositivo que o usuΓ‘rio estΓ‘ utilizando (/mobile2 /laptopHome /gajim.DeskTOP12345)

  • Um usuΓ‘rio pode estar conectado simultaneamente em uma mesma conta, porΓ©m em diversos dispositivos diferentes, e Γ© essa parte que identifica em qual dispositivo ele estΓ‘ conectado.

Sem InformaΓ§Γ΅es

  • VocΓͺ nΓ£o precisa dar informaΓ§Γ΅es pessoais (e-mails, nΓΊmero de telefone, ou coisas do tipo) ao criar seu JabberID. Basta ter um usuΓ‘rio e uma senha!

  • A coleta de informaΓ§Γ΅es varia de servidor para servidor. Pela essΓͺncia do protocolo XMPP, a grande maioria dos servidores evita armazenar informaΓ§Γ΅es (IPs, mensagens etc.) por muito tempo! Basta ver as especificaΓ§Γ΅es de privacidade do servidor em que vocΓͺ irΓ‘ se registrar para verificar essas informaΓ§Γ΅es.

Lembre-se: tudo depende das polΓ­ticas do servidor XMPP que vocΓͺ irΓ‘ utilizar.

ConexΓ£o via Tor

  • Atualmente a maioria dos clientes suporta conexΓ΅es feitas via Tor

  • Isso anonimiza seu dispositivo e sua conexΓ£o, ou seja, o servidor nΓ£o terΓ‘ acesso ao seu endereΓ§o IP real.

  • Isso acaba impedindo os servidores de obterem informaΓ§Γ΅es laterais que possam chegar atΓ© vocΓͺ (localizaΓ§Γ£o baseada no IP, ou identidade real baseada em footprinting).

Baseado em XML

  • O protocolo Γ© totalmente baseado em XML, o que permite extensΓ΅es personalizadas.

  • Isso Γ© bom para novas features.

  • Exemplo disso Γ© o XEP!

chevron-rightMitos a respeito do protocolo XMPPhashtag

Recomendo que vocΓͺ dΓͺ uma olhada sobre os Mitos a respeito do protocolo XMPParrow-up-right


QuestΓ΅es de seguranΓ§a operacional (OPSEC)

O protocolo XMPP, por ser descentralizado e Open Source, Γ© muito acolhedor para aqueles usuΓ‘rios que gostam de seguranΓ§a operacional.

Diferente de protocolos proprietΓ‘rios, cujo usuΓ‘rio nΓ£o pode fazer configuraΓ§Γ΅es adequadas e deve confiar cegamente na instituiΓ§Γ£o centralizada.

No XMPP Γ© possΓ­vel configurar seu prΓ³prio ambiente de comunicaΓ§Γ£o, com boas prΓ‘ticas vocΓͺ pode criar um ambiente protegido e privado.

Client

  • Escolha um bom cliente, que suporte a maioria das extensΓ΅es e criptografias, e que tambΓ©m permita conexΓ΅es via PROXY/SOCKS5

  • Dependendo do cliente que vocΓͺ utilizar, vocΓͺ pode fazer muitas configuraΓ§Γ΅es

  • Com XMPP o usuΓ‘rio poderΓ‘ implementar criptografia end-to-end, o que significa que vocΓͺ criptografa a mensagem no cliente, e depois envia ao servidor, dessa forma o servidor nΓ£o poderΓ‘ ver sua mensagem criptografada, somente o usuΓ‘rio destinatΓ‘rio.

Server

  • Existem muitos servidores pΓΊblicos que fornecem boas prΓ‘ticas de seguranΓ§a atualmente.

  • E mesmo que nΓ£o forneΓ§a, vocΓͺ pode implementar criptografia nas suas mensagens, e o servidor nΓ£o terΓ‘ acesso ao conteΓΊdo delas!

  • Isso jΓ‘ deixa muitos outros mensageiros no chinelo

Hands on (Chega de teoria)

Vamos Γ‘ prΓ‘tica! abordarei os dois protocolos extensivos de criptografia mais utilizados com XMPP. Fica a seu critΓ©rio qual vocΓͺ irΓ‘ utilizar.

OMEMO

chevron-rightRecomendado para uso diΓ‘rio, conversas com amigos, familiares e etc. (vocΓͺ pode usar para conversas sensiveis, sem problemas, basta usar OMEMO!)hashtag
  • Γ‰ mais versΓ‘til e atual

  • CompΓ‘tivel com + de 1 dispositivo

  • Possui negaΓ§Γ£o fraca

  • Suporta conversas em Grupo (MUC)

  • Γ‰ assincrono, o que permite receber mensagens offline

OTR

chevron-rightRecomendado para conversas sensiveis (denuncias, crimes e etc.)hashtag
  • OTR Γ© mais antigo, porΓ©m possui uma negaΓ§Γ£o muito forte.

  • Ambos clientes devem estar online para se comunicarem

  • A cada nova conversa, uma nova chave criptografica! (Isso Γ© bom pois, as chaves antigas nΓ£o sΓ£o atreladas a vocΓͺ)

  • Se um dia te julgarem em um tribunal, Γ© possivel negar!

Ambos sΓ£o seguros, mas sΓ£o utilizados para prΓ³positos diferentes!

CLIENTs

Existe uma lista enorme de clients que podem ser utilizados, e vocΓͺ pode encontrar aqui: XMPP CLIENTSarrow-up-right

chevron-rightJΓ‘ utilizei esses clients, nessas plataformashashtag
  • Gajim (Linux/Windows) -> Suporte a OMEMO

  • Pidgin (Linux/Windows) -> Suporte a OTR

  • Conversations (Android) -> Suporte a OMEMO

Instalando e configurando o Gajim

Como eu utilizo o linux, irei guiar esse tutorial em uma mΓ‘quina linux!

Criando a conta

Primeiro vocΓͺ precisa de um jabberID, entΓ£o procure um servidor confiΓ‘vel e crie sua conta

Lista de Servidores Jabber/XMPParrow-up-right

  • Essa parte Γ© simples, basta escolher um servidor e criar sua conta lΓ‘. (nΓ£o irei desenvolver essa parte)

  • Salve sua senha em um lugar seguro. (KeePassXC)

  • Servidores XMPP em sua grande maioria nΓ£o permitem a troca de senha, e aqueles que permitem precisam de alguma informaΓ§Γ£o pra confirmar sua identidade (e-mail ou coisa do tipo)


Voltando ao Gajim…

Agora que vocΓͺ possui um jabberID em um Servidor, vamos logar usando o Gajim!

Antes de logar na sua conta Jabber, a primeira coisa que iremos fazer Γ© ir nas configuraΓ§Γ΅es do Gajim, e configurar umas coisas bΓ‘sicas!


  1. Clique no icone de configuraΓ§Γ£o na parte inferior esquerda.

Entre nas configuraΓ§Γ΅es do Gajim
Entre nas configuraΓ§Γ΅es do Gajim

Antes de seguir os prΓ³ximos passos vocΓͺ irΓ‘ precisar do serviΓ§o TOR rodando na sua mΓ‘quina

  • Instale o TOR

  • Habilite e inicie

  • Saida do terminal esperada

  • Verifique se estΓ‘ rodando

Saida esperada se o TOR estiver rodando
Saida esperada se o TOR estiver rodando
  • Tudo certo atΓ© aqui…


  1. Agora vΓ‘ em Advanced e coloque o Global Proxy como Tor

Colocando o TOR como conexΓ£o global do Gajim
Colocando o TOR como conexΓ£o global do Gajim
  • Feche o Gajim e abra novamente

  1. Vamos logar na nossa conta agora

  • Configuramos o Global proxy para fazer todas as conexΓ΅es via TOR, mas….

  • Para maior anonimizaΓ§Γ£o no lado do servidor, recomendo fazer essa etapa com uma VPN ativa, caso o Global proxy nΓ£o funcione na primeira conexΓ£o!

  • Isso vai preservar seu IP no Servidor!

  • Use riseup VPN!

  • Ative a VPN

  • Agora logue na sua conta

Logando na conta Jabber
Logando na conta Jabber

VocΓͺ pode selecionar Adavanced Settings e selecionar o TOR para conexΓ£o (jΓ‘ configuramos isso antes, mas se vocΓͺ Γ© paranoico assim como eu, faΓ§a!), fica ao seu critΓ©rio


  1. Agora Γ© hora de configurar sua conta Jabber no Client Gajim!

  • Volte as configuraΓ§Γ΅es

Volte as configuraΓ§Γ΅es
Volte as configuraΓ§Γ΅es
  • Selecione sua conta Jabber

Selecione su conta Jabber
Selecione su conta Jabber
  • Agora a gente vai configurar o Proxy da conta especifica

  • Clique em Connection

Selecione o TOR como proxy default
Selecione o TOR como proxy default
  • Selecione TOR como padrΓ£o

    • Assim a conta jabber que vocΓͺ configurou, irΓ‘ se conectar atrΓ‘ves do TOR, sempre! (faΓ§a o teste desligando o TOR e ligando, veja se a conexΓ£o do gajim caiu)

  • Verifique tambΓ©m se vocΓͺ estΓ‘ usando conexΓ£o sem criptografia

Desabilite a conexΓ£o sem criptografia
Desabilite a conexΓ£o sem criptografia
  • Deixe as opΓ§Γ΅es dessa forma, assim toda vez que uma conexΓ£o sem criptografia for feita, vocΓͺ irΓ‘ precisar verificar e confirmar!

Pronto!

  • Agora vamos colocar criptografia OMEMO por padrΓ£o!

OMEMO POR PADRÃO

  • Essa etapa Γ© muito simples, basta ir em Privacy e colocar a criptografia padrΓ£o como OMEMO

Selecione o OMEMO
Selecione o OMEMO

Feito!

  • Agora vocΓͺ pode conversar de forma segura

  • Agora vocΓͺ pode adicionar pessoas novas, e apresentar o XMPP as pessoas, livrando elas das instituiΓ§Γ΅es centralizadas!!!

  • Agora vocΓͺ pode me adicionar: dbg@pwned.life


Bom o paper acabou, se vocΓͺ leu atΓ© aqui obrigado por ter tirado um tempo para visitar essa joΓ§a! Se encontrou algum erro tΓ©cnico ou de portuguΓͺs, sinta-se Γ  vontade para me adicionar no XMPP e me enviar.

Atualizado