MailExtension de segurança para Thunderbird 115+. Análise local de mensagens — nada sai da máquina.
- Fase 1 — Anti-phishing: implementada
- Headers: SPF / DKIM / DMARC, DKIM-Signature ausente, Reply-To / Return-Path / Sender em domínios diferentes, Received ausente, Date no futuro
- URLs: IP cru, punycode, encurtadores, texto do link diferente do destino
- Domínios: lookalike de marcas (Itaú, Bradesco, Nubank, gov.br, PayPal, Google, etc.), IDN, free-mail se passando por empresa
- Scoring: agrega em
safe/warn/danger, badge no botão de mensagem - Banner injetado em mensagens
warnoudanger - Notificação desktop para
dangerna chegada
- Fase 2 — Anexos: implementada
- Listas: executáveis, scripts, Office com macros, containers, web carriers, scripting Unix
- Detecção de extensão dupla (
fatura.pdf.exe) - Hash SHA-256 calculado sob demanda (ou sempre, opcional)
- Identificação de tipo real via magic bytes — flag se EXE/ELF/Mach-O se passa por PDF/DOC etc
- VirusTotal opcional (lookup de hash, sem upload) — habilitar em Opções
- Lista de anexos no popup com hash copiável e badge VT por arquivo
- Fase 3 — Auditoria de regras e contas: implementada (usa Experiment API, pode quebrar em TB futuros)
- Contas IMAP/POP3/NNTP: detecta sem TLS, STARTTLS opcional, auth em texto puro
- Servidores SMTP: mesmos critérios
- Identidades: mismatch entre domínio do e-mail e domínio do SMTP (informativo)
- Regras de filtro: forward automático (sinal de comprometimento), regra que esconde mensagens com palavras sensíveis (boleto/pix/senha), regra silenciosa (mark-read + move)
- Resultado em Opções → seção "Auditoria do sistema"
- Fase 4 — Auditor de OpenPGP/S-MIME: implementada (parcial — limitada pela API)
- Detecção por mensagem: identifica
multipart/encrypted(PGP/S-MIME) emultipart/signedno Content-Type — adiciona finding info - Auditoria de identidades: lista chaves OpenPGP configuradas, certificados S/MIME (assinatura e criptografia)
- Detecta: identidade sem cripto alguma, chave PGP configurada mas sem assinar por padrão, S/MIME só de criptografia (sem assinatura)
- Não substitui o gerenciador de chaves nativo do Thunderbird — só audita o estado atual
- Detecção por mensagem: identifica
- Tools → Developer Tools → Debug Add-ons (
about:debugging#/runtime/this-thunderbird) - Load Temporary Add-on…
- Selecione
manifest.jsonemD:\dev\_projects\thunderbird-guardian\ - Abra uma mensagem qualquer — o ícone do Guardian aparece na barra do leitor com o veredito
A extensão fica carregada até o Thunderbird ser fechado.
pwsh ./tools/build-xpi.ps1Gera dist/thunderbird-guardian-{version}.xpi. O arquivo é um ZIP com manifest.json na raiz.
Limitação importante: Thunderbird Release (estável) recusa extensões não assinadas. Opções:
- Submeter à ATN (addons.thunderbird.net) — passa por revisão. Caminho oficial.
- Thunderbird Daily / Developer Edition — em
about:config, mudexpinstall.signatures.requiredparafalse. Funciona só nos canais não-release. - Continuar usando Load Temporary Add-on — caminho atual, perde a extensão no restart, mas funciona em qualquer canal.
Para uso pessoal sem submeter à ATN, o caminho 3 é o mais simples. Pra automatizar, dá pra criar atalho que recarrega após o TB abrir, mas é gambiarra.
thunderbird-guardian/
├── manifest.json
├── background.js # orquestra análise + listeners
├── src/
│ ├── lib/
│ │ ├── log.js
│ │ ├── utils.js # parsing de endereços, domínios, Levenshtein, IDN
│ │ ├── store.js # cache de vereditos em storage.local
│ │ └── brands.js # marcas monitoradas e encurtadores
│ ├── analyzers/
│ │ ├── headers.js # SPF/DKIM/DMARC, mismatches
│ │ ├── urls.js # extração e validação de URLs
│ │ ├── domains.js # lookalike, IDN, free-mail corporativo
│ │ └── score.js # agregação em veredito
│ └── ui/
│ ├── banner.js # script injetado no leitor de mensagem
│ ├── banner.css
│ ├── popup.html # popup do botão do leitor
│ ├── popup.js
│ └── popup.css
└── icons/ # SVG (escudo + estados)
Edite src/lib/brands.js. Cada item de monitored tem name (display) e domains (lista de domínios oficiais). O detector marca como suspeito qualquer domínio com Levenshtein ≤ 2 do base name ou que contenha o nome da marca sem ser o oficial.
Em about:debugging → Inspect ao lado da extensão abre o devtools do background. Os logs vêm com prefixo [Guardian]. Habilite debug com:
Guardian.config = { debug: true };no console do background.
| Permissão | Por quê |
|---|---|
messagesRead |
ler corpo e headers das mensagens |
messagesModify |
reservado p/ fase 3 (tags / mover) |
messagesTags |
reservado p/ tag de "suspeito" |
accountsRead |
reservado p/ fase 3 (auditoria de contas) |
storage |
cachear vereditos |
notifications |
alertar na chegada de mensagens perigosas |
Nenhuma permissão de rede. Toda análise é local.