TECNOLOGIA

Como funciona o Axis

O que observa, quando age e o que guarda. Os números desta página são os valores por defeito do código em execução; cada servidor pode ajustá-los no painel.

axis · valores por defeito
Subsistemas
8
Camadas na verificação
15
Corte do anti-nuke
4 ações em 10 s
Nuke lento
24 ações em 15 min
Travão de raids
8 entradas em 10 s
Registo
SHA-256 encadeado
Assinatura pública
Ed25519
IPs
scrypt · 16 MB por cálculo
Cópias de segurança
AES-256-GCM
ARQUITETURA

De um evento do Discord a uma resposta

O Axis escuta o gateway do Discord: cada entrada do registo de auditoria, cada membro que entra, cada mensagem e cada interação. O ONYX distribui o evento por oito subsistemas, que decidem se é preciso agir. O que se decide fica escrito no registo.

DISCORDONYXRESPOSTARegisto de auditoriaEntradasMensagensInteraçõesRetirar cargosBanir ou expulsarFechar a entradaApagar mensagensAvisar a equipaGATEPortaSHIELDEscudoSURGEVagaFILTERFiltroLEDGERRegistoRECALLRestauroTRACERastoRELAYLigaçãoTudo fica no registo: encadeado com SHA-256 e assinado com Ed25519
DISCORDRegisto de auditoriaEntradasMensagensInterações
ONYXGATESHIELDSURGEFILTERLEDGERRECALLTRACERELAY
RESPOSTARetirar cargosBanir ou expulsarFechar a entradaApagar mensagensAvisar a equipa
GATEPortaVerifica quem entra e reconhece quem volta com outra conta.
SHIELDEscudoTrava quem apaga, bane ou distribui permissões em massa, mesmo sendo administrador.
SURGEVagaDeteta contas que entram ao mesmo tempo e fecha a entrada.
FILTERFiltroSpam, links, menções em massa e golpes nas mensagens.
LEDGERRegistoCada ação, encadeada com hashes e com cópia do que foi apagado.
RECALLRestauroCópias cifradas de canais, cargos e permissões, e o seu restauro.
TRACERastoO processo de um membro: quem o convidou, multicontas, nomes e sanções.
RELAYLigaçãoInventário e limpeza de webhooks, e vigilância dos que se criam.
ANTI-NUKE · SHIELD

Quanto pesa cada ação

Um nuke é uma rajada de ações destrutivas. O Axis soma o peso do que cada conta faz numa janela de 10 segundos e trava-a ao chegar a 4. Apagar pesa mais do que criar e editar pesa pouco, para que reorganizar o servidor não dispare nada.

Ilustração
Uma conta com permissões de administrador
  1. Apaga #geral+1
  2. Cria um webhook+0,75
  3. Apaga o cargo @Moderação+1
  4. Renomeia #regras+0,25
  5. Apaga #anúncios+1
0limiar 4
Travada: perde os cargos com permissões
AçãoPeso
Apagar um canal, cargo, emoji ou sticker; banir, expulsar ou podar; mudar os cargos de um membro1
Criar um webhook0,75
Criar um canal ou cargo; apagar um webhook0,5
Editar canais, cargos, permissões ou o servidor; criar emojis ou stickers; desbanir0,25
Pôr slowmode ou fechar permissões, que é o que faz um bloqueio durante um raid0
Nuke lento24 ações com peso em 15 minutos também travam, para quem apaga devagar e espera entre elas.
Um teto para todosNem a equipa de confiança passa de 20 ações em 10 segundos.
Bots que atacamSão banidos; se o Discord não o permitir, expulsos; se nem isso, o cargo deles fica sem permissões.
Desfazer danosRecria canais e cargos com as suas permissões e devolve cada cargo a quem o tinha.
As primeiras 48 horasAs regras sobre edições só avisam enquanto o Axis aprende como o servidor trabalha. As destrutivas agem desde o primeiro minuto.
RAIDS · SURGE

Um raid nota-se pelo ritmo de entrada

8 contas que entram em 10 segundos fecham a entrada: o servidor sobe o nível de verificação e as contas novas esperam. Uma janela lenta de 2 horas apanha os raids que entram aos poucos, e um canal armadilha apanha os bots que escrevem onde nenhuma pessoa escreveria.

Ilustração
Entrada fechada
8 / 10 s · 2 em espera
VERIFICAÇÃO · GATE

15 camadas para reconhecer quem volta

Um banido volta com outra conta, outro IP e às vezes outro navegador. Cada camada olha para uma coisa diferente. Nenhuma chega sozinha, e os sinais fracos só contam quando vários coincidem.

LigaçãoIP · IPv6 /64O mesmo IP ou o mesmo bloco de rede. Em IPv6 compara-se o /64 inteiro, porque rodar dentro dele não custa nada.
Redes anónimasTor · VPN · proxySaídas de Tor, VPN e proxies de centros de dados.
Impressão do dispositivocanvas · WebGL · GPUReconhece o aparelho mesmo que a ligação mude.
Cookie de segurançamarca persistenteUma marca no navegador que sobrevive a uma mudança de IP e de impressão.
Contas ligadasSteam · SpotifyA mesma conta de Steam ou Spotify ligada a duas contas do Discord. Só se o servidor o ativar.
Prova de trabalhodificuldade adaptativaUm cálculo no navegador que fica mais difícil quando há sinais de risco. Encarece as quintas de bots.
Quem convidouconfiança de quem convidaUma conta convidada por alguém que já trouxe um grupo de contas recentes.
Convitesritmo · vanityPicos de convites e mudanças de URL personalizada antes de um raid.
Redes partilhadasCGNAT · escolas · empresasDados móveis ou o wifi de uma escola: aí o IP não chega para ligar contas, e o Axis tem isso em conta.
Cargo de verificadosó o Axis o dáSe alguém der o cargo à mão para saltar a porta, não conta.
ComportamentopontuaçãoO que a conta faz ao entrar: a quem escreve, que links envia e a que ritmo.
Idade da contacontas recentesSozinha não prova nada. Somada a outros sinais, pesa.
Impressão por partessemelhança parcialCompara-se peça a peça: mudar de navegador ou de ecrã não chega para parecer outra pessoa.
Coerêncialigação face ao navegadorUm IP de Amesterdão com o relógio, o idioma e o teclado de Madrid indica uma VPN instalada no próprio computador.
Telefoneverificação do DiscordExigir um telefone verificado no Discord. Um número custa dinheiro; um IP não.

As coincidências fortes, como o cookie ou o mesmo dispositivo numa rede que não é partilhada, retêm a conta. As fracas abrem uma revisão para a equipa. Dados móveis, o mesmo modelo de telemóvel ou o wifi de uma escola nunca chegam sozinhos.

REGISTO · LEDGER

Um registo que não se pode reescrever sem se notar

Cada ação encadeia-se com o hash SHA-256 da anterior: mudar uma linha parte tudo o que vem depois. A raiz de uma árvore de Merkle (RFC 6962) é assinada com Ed25519 e publicada, por isso reescrever a história inteira também não passa despercebido.

Ilustração
evento #1041ChannelDelete #generalprev 0000000000…hash 1e7d0ebe3f…
evento #1042MemberRoleUpdate -Adminprev 1e7d0ebe3f…hash 65c26df9b3…
evento #1043ChannelCreate #generalprev 65c26df9b3…hash b32d4c6672…
evento #1044MemberBanAdd 8xx…prev b32d4c6672…hash d3e850978c…
Raiz de MerkleAssinada · Ed25519753d48f7f30d3f9cecaa7c…
RecibosQuem recebe uma sanção pode comprovar que a decisão estava no registo nessa data, com uma prova de inclusão e sem ver o resto.
Cópia do que foi apagadoAs mensagens apagadas e os seus ficheiros ficam no registo do servidor.
Acesso do operadorSe a equipa do Axis abrir os dados de um servidor, fica escrito no registo desse servidor e a equipa dele é avisada.
DADOS

O que o Axis guarda e o que não guarda

Guarda

  • O IP, só como hash scrypt (16 MB de memória por cálculo) com uma chave que não está na base de dados.
  • A impressão do navegador, só como HMAC-SHA256.
  • Os registos de verificação, durante 90 dias; os de contas sancionadas, enquanto durar a sanção.
  • As cópias do servidor, cifradas com AES-256-GCM e uma chave derivada com scrypt para cada cópia.
  • Os relatórios de incidentes, durante 180 dias.

Não guarda

  • O IP em claro.
  • Mensagens privadas entre membros: um bot não as pode ler.
  • O texto das mensagens que o automod revê e deixa passar.
  • Dados de pagamento: são tratados pela Lemon Squeezy.
  • O que a IA analisa: só se guarda o veredicto, nunca quem o publicou.
INFRAESTRUTURA

Dois nós e nenhuma porta aberta

O Axis corre num nó principal e noutro de reserva, num fornecedor diferente. Se o principal deixar de responder, o de reserva assume com a configuração replicada. O servidor web só escuta em 127.0.0.1: chega-se a ele por um túnel da Cloudflare, com a sua firewall à frente.

NavegadorCloudflare · WAFTúnelNó principal127.0.0.1Nó de reservabatimento
Navegador
Cloudflare · WAF
Túnel
Nó principal · 127.0.0.1Nó de reservabatimento
CSP por pedidoCada página pública leva uma política de segurança de conteúdo com um nonce novo em cada visita.
Limites de ritmoPor IP em todas as rotas, e mais apertados no portal de verificação e na API.
Estado públicoDisponibilidade em tempo real e histórico de 90 dias em /status.
LIMITES

O que o Axis não pode fazer

Tirar poder ao dono do servidorO Discord não o permite. Se essa conta for roubada, o Axis avisa, mas não a pode travar. O mesmo acontece com qualquer cargo acima do do Axis: por isso o cargo dele vai para o topo, e o painel avisa se não estiver.
Garantir que nenhuma multiconta passaUma conta comprada, um telemóvel novo e dados móveis podem passar a porta. A verificação por telefone do Discord é o que a encarece de verdade.
Recuperar o que aconteceu antesSó pode restaurar o que guardou. As mensagens apagadas antes de adicionar o Axis não voltam.
Ler mensagens privadasNão as lê nem as pode ler.

Adiciona o Axis e confirma tu mesmo

A documentação explica cada ajuste. O estado do serviço é público.

Estado do serviço →