$HOME
dr3zk 一 定要记得清理日志
apt1

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.

Sumário - XMPP

O que é XMPP
Questões de segurança operacional (OPSEC)
Hands on (Chega de teoria)

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 de código aberto 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.

Você pode ver essa linha do tempo aqui -> XMPP History


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
RFC 6120 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.
RFC 6121 XMPP Instant Messaging and Presence Especifica as funcionalidades básicas de mensagens instantâneas e presença (online, offline, ocupado, etc.).
RFC 7622 XMPP Address Format Padroniza o formato do JID (Jabber ID), definindo a estrutura usuário@domínio/recurso.
RFC 7590 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.
RFC 7395 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).

Os XEP nos permitem
  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
XEP-0045 Multi-User Chat Salas de conversação em grupo, similares a canais de IRC.
XEP-0384 OMEMO Encryption Criptografia de ponta-a-ponta moderna, baseada no protocolo Signal.
XEP-0363 HTTP File Upload Permite o compartilhamento de arquivos mesmo quando o destinatário está offline.
XEP-0030 Service Discovery Permite que clientes descubram os recursos e extensões suportados por um servidor ou outro cliente.
XEP-0234 Jingle Framework para comunicação em tempo real, como chamadas de voz e vídeo.

Existem diversos outros XEP, basta verificar -> xmpp.org/extensions


Como o XMPP funciona

Ideia Central

O XMPP e sua ideia central:

Pontos Positivos do XMPP (em questões de privacidade)

Descentralizado/S2S

O protocolo XMPP é descentralizado por padrão
  • 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).

Estrutura Descentralizada

┌─────────────────────────────────────────────┐
│          Estrutura Descentralizada          │
└─────────────────────────────────────────────┘

     Server A                   Server B
  ┌─────────────┐    S2S    ┌─────────────┐
  │             │ ◄────────►│             │
  │ user1@A.org │           │ user2@B.com │
  │             │           │             │
  └─────────────┘           └─────────────┘
         ▲                         ▲
         │                         │
         │ C2S                     │ C2S
         │                         │
   ┌─────┴──────┐            ┌─────┴──────┐
   │  Client 1  │            │  Client 2  │
   └────────────┘            └────────────┘
C2S - CLIENT TO SERVER
S2S - SERVER TO SERVER
Vantagens de ter seu próprio servidor
  • 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)

Jabber ID

O protocolo XMPP usa um formato de endereçamento de entidades muito simples, semelhante ao e-mail.
  • Você pode ter uma conta no Gmail e conversar com quem tem uma conta no Outlook
  • user1@meuserver.dot -> user2@serverrandomico.dot2

JabberID

          ┌──────────────┐
          │JabberID (JID)│
          └──────────────┘

       usuário@domínio/mobileX
       ───┬─── ───┬─── ───┬───
    ┌─────┘       │       └────┐
    │             │            │
    ▼             ▼            ▼
┌───────┐   ┌───────────┐   ┌──────┐
│Usuário│   │Domain/FQDN│   │Client│
└───────┘   └───────────┘   └──────┘
Usuário
  • Seu nickname, escolhido na hora de criar sua conta em um servidor Jabber/XMPP
Domain
  • NameSystem do servidor, usado para identificação do servidor do usuário/entidade
Client
  • 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

Lembre-se: tudo depende das políticas do servidor XMPP que você irá utilizar.

Conexão via Tor

Baseado em XML

Mitos a respeito do protocolo XMPP

Recomendo que você dê uma olhada sobre os Mitos a respeito do protocolo XMPP


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

Server

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

Recomendado para uso diário, conversas com amigos, familiares e etc. (conversas comuns, sem conteúdo sensivel)
  • É 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

Recomendado para conversas sensiveis (denuncias, crimes e etc.)
  • 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 CLIENTS

Já utilizei esses clients, nessas plataformas
  • 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/XMPP


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

Antes de seguir os próximos passos você irá precisar do serviço TOR rodando na sua máquina

sudo apt install tor
sudo systemctl enable tor
sudo systemctl start tor
Synchronizing state of tor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable tor
Saida esperada se o TOR estiver rodando

  1. Agora vá em Advanced e coloque o Global Proxy como Tor
Colocando o TOR como conexão global do Gajim
  1. Vamos logar na nossa conta agora
sudo apt install riseup-vpn
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
Selecione su conta Jabber
Selecione o TOR como proxy default
Desabilite a conexão sem criptografia

Pronto!

OMEMO POR PADRÃO

Selecione o OMEMO

Feito!


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.

Lembre-se de colocar as luvas nos pés dos MACAC0S! 🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳

⣠⣤⣄⣀⣤⡤⠤⣤⢄⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢸⣿⣿⣷⣮⡓⢦⡀⠀⠀⠉⠉⠓⠲⠤⢤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢴⣾⣿⣿⣿⣿⣿⣦⣙⠂⠀⠤⡀⠀⠀⠀⠀⠀⠈⠑⠒⠤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠐⢻⣿⣿⣿⢿⣿⣿⣿⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡀⢙⡯⡓⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⢻⣽⣿⣿⣿⠷⠛⠁⠀⠀⠀⠐⠀⠀⠀⠐⠛⠉⣽⣯⡽⠁⠘⢦⣱⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣄⣀⣠⠴⢒⣚⣹⣟⣛⣲⢶⣤⣀⠀⠀⠀
⡘⣻⣷⣽⢿⠏⠙⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠺⢾⣿⢿⣧⣆⠐⠆⣙⣻⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢸⠘⣿⣷⣿⣽⣿⣿⣟⣟⢿⣾⣿⣿⣯⣧⠀
⣤⣸⣿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢭⣭⣭⣿⣿⣗⣻⣿⣿⡦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣿⣽⡀⠸⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⡛⣿⡻⣧
⢹⣯⡿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣤⣶⣾⣿⣿⡯⣛⣷⣯⣿⡺⣿⣮⡳⣄⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⡿⣿⣿⡟⠁⠀⣿⣿⣿⣿⣿⣿⡿⣿⣴⣿⣯⣹⡟⣿
⠘⠻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⠛⢉⣴⣿⣯⣾⢟⡲⢿⣛⢿⡹⣷⣛⣋⠑⡄⠀⠀⠀⠀⡠⠚⠋⠉⠫⢯⣿⣿⣷⡄⢠⣿⣿⣿⣿⣿⡿⣇⣻⣿⣿⣷⢿⣇⢨
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡿⠋⢧⡟⢻⣷⣝⡲⢌⣙⠣⡘⣿⣿⣷⠜⠀⠀⠀⢰⡁⠀⠀⠀⠀⠀⢻⣿⣿⣆⣿⣿⣿⣿⣿⡿⢴⣿⣿⣷⡿⡿⣾⣏⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⢏⣠⣿⣿⣿⣿⣶⣮⣍⣒⢼⡏⠁⠀⠀⠀⠀⠀⠙⢑⡒⠒⠒⠋⢡⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣛⣷⣿⠋⢏⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⡇⢸⡟⣿⡿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠘⠱⢀⣠⢨⣬⣿⣿⣋⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢧⡈⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⠇⠀⠀⠀⠀⢀⣾⣿⣿⡿⠛⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⡿⠛⢻⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣾⣷⡁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡔⣠⣿⣯⢻⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⡽⢰⣸⣿⣾⣿⣿⣿⣿⢿⣿⢿⣿⣿⣿⣿⠟⠁⠀⠙⣿⣿⣷
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣜⡾⠵⣿⠟⣿⣷⣿⣿⢹⣿⠀⣳⣿⣿⣿⣿⡟⣀⠆⠀⡀⣄⠹⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣒⢤⡀⠀⠀⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⡾⡿⢋⣵⣾⡏⢹⣯⣟⣽⡏⠀⠈⣿⣿⠟⣀⣼⠋⠀⢠⣽⣿⣷⣮
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⡝⡄⠀⠸⣿⣿⣇⣛⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⢸⣷⣿⣿⣿⡟⢰⣿⣿⣿⠏⠀⠀⠀⣟⣿⣾⣿⠇⠀⠀⣾⣾⣷⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠈⠛⠿⠿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠘⣿⣿⣿⡿⠀⠀⠉⠉⠀⠀⠀⠀⢠⣿⣿⢻⡟⠀⡆⣿⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠤⠤⢖⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⢻⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⠃⣾⣧⠀⣿⣿⣿⣿⣿⣿⣿