NT-2026.10.09 DOSSIÊ

CHANGEDETECTION.IO: MONITORAMENTO DE ALTERAÇÕES PARA OSINT

Aprenda a instalar e configurar o Changedetection.io com Docker, proteger o dashboard, criar monitoramentos, usar o Playwright para conteúdo dinâmico e integrar notificações em investigações OSINT.

Capa editorial CHANGEDETECTION.IO MONITORAMENTO OSINT

Introdução

Em investigações OSINT, o sinal muitas vezes está na alteração, não no conteúdo estático. Uma mudança em uma página de golpe, a atualização de um perfil social ou a remoção de um documento público pode indicar atividade maliciosa ou movimentação de alvos. Verificar essas alterações manualmente não escala. O Changedetection.io resolve esse problema ao permitir o monitoramento automático de páginas web, notificando sempre que algo muda.

O que é Changedetection.io?

Changedetection.io é uma ferramenta de monitoramento auto-hospedada de alterações de sites que faz polling periódico das URLs configuradas, compara a captura atual com a última salva e notifica quando detecta diferenças. Ele suporta screenshots, diff visual, browser steps para conteúdo que requer interação (como login ou aceitação de cookies) e integração com diversos canais de notificação, incluindo webhooks, Telegram e email.

Por que o Changedetection.io importa para OSINT

Para OSINT, a ferramenta é valiosa porque:

  • Permite monitorar sites que não expõem feeds RSS ou API, transformando qualquer URL em um feed observável.
  • Lida com conteúdo renderizado por JavaScript através do container opcional Playwright, que roda um headless Chromium para capturar o DOM renderizado.
  • Rastreia alterações por trás de autenticações usando browser steps, permitindo monitoramento em fóruns gated, páginas de produtos após aceitação de cookie banners e outros conteúdos dinâmicos.
  • Isso amplia significativamente o alcance do investigador, tornando possível observar centenas de alvos sem inspeção manual.

Requisitos de instalação

Para implantar o Changedetection.io em modo de produção, os seguintes requisitos são necessários:

  • Um VPS com pelo menos 2 GB de RAM (1 GB para o Changedetection, 1 GB de folga para o navegador Playwright ao buscar ativamente).
  • Um domínio ou subdomínio apontando para o VPS (ex: watch.seudominio.com).
  • Docker e Docker Compose instalados.
  • Portas 80 e 443 abertas.
  • Opcional: provedor de identidade para autenticação forte (Cloudflare Access, Authelia, Authentik) ou Tailscale/WireGuard.

Instalação com Docker Compose

A instalação segue os passos documentados oficialmente:

  1. Preparação do ambiente:
  2.    sudo mkdir -p /opt/changedetection
       sudo chown -R $USER:$USER /opt/changedetection
       cd /opt/changedetection
  1. Criação do arquivo docker-compose.yml:
  2.    services:
         changedetection:
           image: ghcr.io/dgtlmoon/changedetection.io:latest
           container_name: changedetection
           restart: unless-stopped
           volumes:
             - changedetection-data:/datastore
           environment:
             - BASE_URL=https://watch.yourdomain.com/
             - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000?stealth=1
           ports:
             - "127.0.0.1:5000:5000"
           networks:
             - watch
    
         playwright-chrome:
           image: dgtlmoon/sockpuppetbrowser:latest
           container_name: playwright-chrome
           restart: unless-stopped
           environment:
             - SCREEN_WIDTH=1920
             - SCREEN_HEIGHT=1024
             - SCREEN_DEPTH=16
           networks:
             - watch
    
       volumes:
         changedetection-data:
    
       networks:
         watch:
  1. Inicialização:
  2.    docker compose up -d
  1. Verificação:
  2.    docker compose ps

Deve mostrar os contêineres (changedetection e playwright-chrome) em estado “Up”.

  1. Acesso inicial:

Abra um navegador e vá para https://watch.yourdomain.com/ (o Caddy fará o proxy reverso e terminará o TLS).

Infraestrutura Docker Compose do Changedetection com Caddy reverse proxy
Figura: Arquitetura da stack Changedetection + Caddy + Playwright no VPS

Configuração do Caddy (proxy reverso e TLS)

O Caddy fará o proxy reverso e terminará o TLS automaticamente via Let’s Encrypt. Se você não tiver o Caddy instalado:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install -y caddy

Crie ou estenda /etc/caddy/Caddyfile:

watch.yourdomain.com {
    reverse_proxy 127.0.0.1:5000
    encode gzip zstd
}

Valide e recarregue:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Agora o Changedetection estará acessível via HTTPS no seu domínio, com certificado válido gerenciado automaticamente pelo Caddy.

Configuração inicial e segurança do dashboard

Primeiro acesso: após o container subir, acesse o dashboard via https://watch.yourdomain.com. Você será solicitado a definir uma senha de admin. Após isso, é fundamental proteger o acesso ao dashboard com autenticação forte. Algumas opções:

  • Cloudflare Access: se já usar Cloudflare DNS, crie uma policy para restringir o acesso ao subdomínio.
  • IP allowlist em Caddy: se você acessa apenas de IPs fixos, configure o Caddy para permitir somente esses IPs.
  • HTTP Basic Auth em Caddy: para uma senha compartilhada simples (menos segura, mas melhor que nada).
  • Autenticação externa (Authelia, Authentik): para MFA e integração com provedores de identidade.
  • Tailscale/WireGuard: para remover a superfície pública totalmente.

Lembre-se: sua lista de watches é informação sensível sobre o que você está investigando.

Criação de monitoramentos e configuração de alertas

Com o dashboard acessível e seguro, você pode criar suas primeiras watches:

  1. Clique no botão + Add Watch no canto superior esquerdo.
  2. Insira a URL que deseja monitorar.
  3. Defina o intervalo de verificação (ex: 1 hora, 30 minutos, 5 minutos). Intervalos muito curtos podem gerar carga desnecessária e aumentar a chance de bloqueio pelo site alvo.
  4. Opcionalmente, clique em Select Element para escolher um seletor CSS se você só se importa com uma parte da página (ex: um preço, um campo de bio).
  5. Na aba Notifications, configure um ou mais canais: webhook (com URL secreta), Telegram (bot token e chat ID), email (SMTP) ou outros.
  6. Salve a watch. O Changedetection fará a primeira captura imediatamente e começará o agendamento.

Você pode editar, pausar ou excluir watches a qualquer momento a partir da lista principal.

Configuração de notificações Apprise no Changedetection (ntfy, Telegram, Discord, webhook)
Figura: Settings → Notifications com múltiplos canais configurados

Monitoramento com navegador e Playwright

Muitos sites modernos renderizam seu conteúdo via JavaScript após o carregamento inicial HTML. Um simples fetcher HTTP vê apenas um “casco vazio”, enquanto o conteúdo real só aparece após a execução de scripts. Para esses casos, o Changedetection oferece um container opcional companion que roda o Playwright (headless Chromium).

Quando você habilita Use Browser nas settings de uma watch, o sistema:

  1. Instancia um navegador headless via o container Playwright.
  2. Carrega a página e aguarda o carregamento completo (incluindo execução de JS).
  3. Captura o DOM renderizado e, se solicitado, um screenshot.
  4. Executa o diff contra a última captura, tanto a nível de texto quanto visual (se screenshots estiverem ativados).

Isso permite monitorar single-page applications, dashboards dinâmicos, páginas protegidas por Cloudflare que exigem JS para exibir conteúdo, e qualquer site onde o conteúdo relevante só aparece após interação.

Configuração do Playwright como fetcher padrão:

Settings → General → Fetching → Default fetcher → Playwright. Salve.

Isso aplica a todos os novos watches automaticamente.

Configuração do Playwright como fetcher padrão no Changedetection
Figura: Settings → General → Fetching → Default fetcher definido como Playwright
Interface de Browser Steps do Changedetection para automação de login
Figura: Configuração de Browser Steps para conteúdo por trás de autenticação

Casos práticos de investigação OSINT

Exemplos de como o Changedetection.io pode ser usado em investigações reais:

  • Monitoramento de infraestrutura de golpes: acompanhe landing pages de esquemas de fraude para detectar quando eles trocam o endereço de carteira de criptomoedas, mudam o número de contato ou atualizam depoimentos falsos. Use seletores CSS para focar apenas no conteúdo relevante (ex: .wallet-address, .contact-info) e ignorar menus de navegação e banners de cookies.
  • Integridade de artigos: para fact-checking, faça watch no corpo de artigos de notícias ou relatórios para detectar edições stealth (quando uma saída é modificada sem aviso de correção). Um diff lateral é uma prova forte de que o conteúdo foi alterado. Defina um intervalo inicial de 30 minutos (a maioria das edições stealth ocorre nas primeiras horas) e aumente para 6 horas após o primeiro dia.
  • Perfis sociais: monitoramento das páginas de perfil de alvos no Twitter/X, Telegram, LinkedIn ou Facebook para capturar mudanças na biografia, localização ou links destacados, que muitas vezes antecedem mudanças de conteúdo.
  • Registro de empresas: monitorar páginas de consulta de CNPJ ou registros comerciais para observar quando uma empresa muda seu status, endereço ou representantes legais.
  • Documentos públicos: watch em portais de transparência, diários oficiais ou repositórios de licitações para detectar publicação de novos editais ou alteração de valores.
  • Marketplace e listagens: use a detecção nativa de preço e restock em páginas de produtos. Para OSINT contra mercados paralelos e mirrors de dark markets: monitore páginas de vendedores por novos anúncios (atividade operacional), itens específicos por quedas de preço ou remoção (urgência para liquidar ou possível apreensão), e páginas de reputação por avaliações negativas súbitas (frequentemente antecedem o vendedor desaparecer).
  • Monitoramento com sock puppet: se você identificou contas alvo em uma plataforma, configure watches nas páginas de perfil. Use o fetcher Playwright com Browser Steps se necessário para logar via sock puppet primeiro. Monitore bio, contagem de seguidores, contagem de posts e indicadores de “última atividade”. Mudanças na bio são frequentemente o sinal antecedente de um alvo movendo operações para nova plataforma ou rebranding.
  • Endpoints JSON como watches estruturados: se um site alvo possui uma API JSON (mesmo que não documentada, usada pelo próprio frontend), faça watch no endpoint diretamente com filtro JSONPath. Confiável, baixo consumo de banda, e você recebe dados estruturados em vez de diffs HTML. Particularmente útil para exploradores de blockchain, páginas de status de exchanges e qualquer site comercial com API de backend.
  • Encadeamento de notificações via webhooks: conecte uma notificação webhook genérica ao n8n ou sua própria automação. Quando uma watch dispara, acione ações downstream: snapshot da página no ArchiveBox para registro permanente, consulta de domínio no VirusTotal, envio de resumo estruturado para suas anotações de caso. Isso transforma o Changedetection de um sistema de notificação em um pipeline OSINT orientado a eventos.
Configuração de proxy por watch no Changedetection
Figura: Aba Request de uma watch com proxy residencial configurado
Exemplo de diff visual lateral no Changedetection mostrando alteração em artigo
Figura: Diff lateral demonstrando edição stealth em artigo de notícias
Extração baseada em regex no Changedetection para dados estruturados
Figura: Regex extraction para capturar campos específicos do JSON/HTML
Monitoramento de marketplace com detecção de preço e restock no Changedetection
Figura: Price detection e restock alerts em páginas de produtos

Manutenção e backup

A manutenção é mínima após a configuração inicial, mas alguns pontos merecem atenção:

  • Atualização de contêineres: execute periodicamente docker compose pull && docker compose up -d. A cada duas ou três semanas é suficiente. O projeto evolui em ritmo constante e atualizações raramente quebram watches existentes.
  • Higiene de watches: revise periodicamente watches antigos. Alvos são arquivados, golpes desmontam, investigações terminam. Watches obsoletos ainda consomem slots de fetch e adicionam ruído ao dashboard.
  • Memória do container do navegador: a memória do container Playwright tende a aumentar com uso intenso. Um docker compose restart playwright-chrome semanal via cron reinicia o estado. Não é estritamente necessário, mas mantém o ambiente limpo.
  • Backups: seu volume de dados do Changedetection (changedetection-data) contém todo o histórico de watches, configurações e configurações de notificação. Vale a pena fazer snapshot para armazenamento fora do host periodicamente. O ponto de montagem dentro do container é /datastore, e todo o conteúdo é útil para backup.
  • Verificação de logs: docker compose logs --tail 100 changedetection e docker compose logs --tail 100 playwright-chrome para diagnosticar falhas de fetch, erros de Playwright ou problemas de conectividade.
  • Diagnóstico de problemas comuns:

– *Watch não atualiza*: verifique se o fetcher está correto (Playwright para sites JS), se o seletor CSS ainda existe na página, e se o site não está bloqueando o IP.

– *Screenshots falham*: confirme que o container playwright-chrome está saudável (docker compose ps) e que a memória não está esgotada.

– *Notificações não chegam*: valide a URL Apprise no dashboard (teste ntfy, Telegram, Discord) e verifique logs do Changedetection para erros de entrega.

– *TLS/SSL*: se o Caddy não renovar o certificado, verifique se a porta 80 está acessível para o desafio HTTP-01 do Let’s Encrypt, ou use certificado Cloudflare Origin com tls no Caddyfile (validade de 15 anos).

Limitações e boas práticas

Apesar de suas vantagens, algumas limitações devem ser observadas:

  • Dependência da disponibilidade do site: se o alvo estiver fora do ar, nenhuma alteração será detectada até que ele volte online.
  • Falsos positivos: alterações insignificantes como timestamps, contadores de acesso ou anúncios rotativos podem disparar alertas. Use seletores CSS para focar nas partes relevantes da página e considere ignorar elementos conhecidamente voláteis.
  • Consumo de armazenamento: cada captura de tela e histórico de diff ocupa espaço. Em longos períodos, o diretório de storage pode crescer significativamente; implemente rotina de limpeza ou arquivamento.
  • Complexidade de browser steps: configurar sequências de clique e preenchimento para conteúdo por trás de login ou formulários exige teste cuidadoso; mantenha documentação das etapas.

Boas práticas de uso seguro:

  • Defina intervalos adequados ao tipo de alvo (ex: 1h para páginas estáticas, 15min para feeds ativos).
  • Limite o número de watches simultâneas para evitar sobrecarga de recursos.
  • Sempre proteja o dashboard com autenticação forte antes de expor em domínio público.
  • Mantenha o Changedetection e o Docker atualizados para corrigir vulnerabilidades.
  • Revise periodicamente as notificações para ajustar seletores e reduzir ruído.
  • Nunca coloque credenciais reais nos campos de configuração; use variáveis de ambiente ou secrets externos se precisar autenticar dentro das browser steps.

Fontes e referências

Links oficiais e relevantes consultados na produção deste artigo:

  • Documentação oficial Changedetection.io: https://docs.changedetection.io/
  • Repositório oficial (GitHub): https://github.com/dgtlmoon/changedetection.io
  • Documentação Caddy (proxy reverso): https://caddyserver.com/docs/
  • Documentação Apprise (notificações): https://github.com/caronc/apprise
  • Imagem sockpuppetbrowser (Playwright): https://github.com/dgtlmoon/sockpuppetbrowser
  • Docker Compose reference: https://docs.docker.com/compose/

Conclusão

Changedetection.io traz o sinal de alteração para investigações OSINT de forma escalável, permitindo monitorar centenas de URLs com pouco esforço. Quando configurado com autenticação adequada e uso responsável, torna-se uma peça fundamental da caixa de ferramentas do investigador, complementando outras abordagens ao invés de substituí-las completamente.

Com configuração adequada, manutenção regular e compreensão de suas limitações, o Changedetection.io pode servir como uma base sólida para operações de monitoramento de mudanças em investigações OSINT.