Como montar um pipeline de moderação contra CSAM gerado por IA

Como montar um pipeline de moderação contra CSAM gerado por IA

Quando li a reportagem do Sapo.pt sobre a Meta ter veiculado dezenas de anúncios com imagens de abuso infantil geradas por IA entre novembro de 2025 e agosto de 2026, a primeira coisa que me veio à cabeça não foi o escândalo — foi a pergunta técnica. Como um sistema de revisão publicitária de uma empresa que gasta bilhões em moderação deixou passar isso? A resposta é mais simples e mais perturbadora do que parece.

O que de fato aconteceu, segundo o Sapo.pt

O Tech Transparency Project (TTP) descobriu, vasculhando a própria biblioteca pública de anúncios da Meta, dezenas de campanhas pagas que circulavam com material de abuso sexual infantil sintetizado por IA. Os anúncios rodaram no Facebook, Instagram, Threads e Messenger. Muitos continham links para aplicativos projetados para “despir” pessoas via algoritmos generativos. Segundo o Sapo.pt, só foram removidos depois que os pesquisadores denunciaram publicamente. Ou seja: passaram meses ativos.

Esse é o ponto-chave. Não foi um vazamento, não foi uma brecha explorada por hackers. Foi o pipeline de aprovação de anúncios — uma máquina que a Meta opera em escala planetária — engolindo conteúdo que viola não só os próprios termos de uso, mas também leis federais nos EUA, na UE e no Brasil (onde o ECA e o Marco Civil da Internet são explícitos).

Por que o pipeline de moderação da Meta falhou (e por que isso importa para você, dev)

Trabalho há anos com sistemas que processam conteúdo gerado por usuários e anúncios. Quando você olha de dentro, percebe que a moderação em big tech funciona em três camadas sobrepostas:

  • Pré-filtragem automatizada: hashing perceptual (pHash), classificadores NSFW, modelos de embedding e cruzamento com bases como PhotoDNA e NCMEC.
  • Revisão humana: times de moderadores treinados para casos limítrofes, especialmente quando há denúncia ou sinalização.
  • Pós-veiculação: usuários denunciam, sistemas reavaliam, o conteúdo sai do ar.

O problema é que imagens geradas por IA vivem em um vácuo entre essas camadas. PhotoDNA e NCMEC foram desenhados para detectar CSAM real — fotos produzidas por câmeras, com metadados EXIF, muitas vezes já vistas em outras investigações. Uma imagem sintetizada por Stable Diffusion ou por um modelo fine-tunado não existe nesses bancos. Ela é nova. É única. É literalmente uma variação estatística que nunca existiu antes.

Já o classificador NSFW tradicional foi treinado majoritariamente em fotos reais. Modelos como o do Yahoo (Open NSFW) ou o NSFWJS do Gant Laborde aprendem padrões de pele, anatomia, composição. Conteúdo gerado por IA com prompts específicos — por exemplo, “teen”, “nude”, “softcore” — frequentemente escapa porque os artefatos visuais confundem o classificador. Pele sintética demais, sem poros, com simetria perfeita demais. Para o olho humano é perturbador; para o modelo, às vezes é “outlier”, não “violação”.

Na Prática: como montar um pipeline de detecção que não cegaria para CSAM sintético

Vamos supor que você esteja construindo uma plataforma com UGC ou anúncios pagos. Não dá para terceirizar a responsabilidade inteira para “o time de segurança do Facebook”. Quando implementei um pipeline desses em um produto anterior, montei em três estágios. Vou te mostrar o esqueleto funcional em Python:

# pipeline_moderacao.py
# Estágio 1: Hash perceptual + cruzamento com base conhecida
import imagehash
from PIL import Image

def perceptual_hash(img_path: str) -> str:
    img = Image.open(img_path)
    return str(imagehash.phash(img, hash_size=16))

# Estágio 2: Classificador NSFW robusto (multi-modelo evita blind spots)
import onnxruntime as ort
import numpy as np

class NSFWEnsemble:
    def __init__(self):
        # Carrega modelo CLIP-based + Vision Transformer fine-tunado
        self.session_clip = ort.InferenceSession("models/clip_nsfw.onnx")
        self.session_vit = ort.InferenceSession("models/vit_nsfw.onnx")
    
    def predict(self, image_tensor: np.ndarray) -> dict:
        clip_score = self.session_clip.run(None, {"input": image_tensor})[0][0]
        vit_score = self.session_vit.run(None, {"input": image_tensor})[0][0]
        # Voto ponderado + flag para divergência (sinal de adversarial)
        avg = (clip_score * 0.4 + vit_score * 0.6)
        return {
            "score": float(avg),
            "divergencia": abs(clip_score - vit_score),
            "flag_adversarial": abs(clip_score - vit_score) > 0.3
        }

# Estágio 3: Modelo de IA-generativa detector (essencial em 2026)
from transformers import pipeline

gen_detector = pipeline("image-classification", model="AIvsReal/ai-image-detector-v2")

def detecta_sintetico(img_path: str) -> bool:
    resultado = gen_detector(img_path)
    return resultado[0]["label"] == "artificial" and resultado[0]["score"] > 0.75

def pipeline_completo(img_path: str) -> dict:
    h = perceptual_hash(img_path)
    nsfw = NSFWEnsemble()
    # ... pré-processamento da imagem ...
    img_tensor = preprocess(img_path)
    nsfw_result = nsfw.predict(img_tensor)
    sintetico = detecta_sintetico(img_path)
    
    if nsfw_result["score"] > 0.7 or sintetico:
        return {
            "acao": "BLOCK",
            "motivo": "Possível material sensível ou sintético suspeito",
            "requer_revisao_humana": True,
            "score_nsfw": nsfw_result["score"],
            "sintetico_detectado": sintetico
        }
    return {"acao": "OK", "score_nsfw": nsfw_result["score"]}

Esse pipeline tem três pontos que a Meta — por incrível que pareça — aparentemente não aplicou de forma coordenada nos anúncios de novembro de 2025 a agosto de 2026:

  1. Ensemble de classificadores em vez de modelo único, exatamente porque modelos isolados têm pontos cegos complementares.
  2. Detector de IA-generativa como camada separada. Se o conteúdo é sintético E tem alto score NSFW, a chance de abuso sobe exponencialmente.
  3. Flag de divergência adversarial: quando dois modelos discordam fortemente, isso é, na minha experiência, um sinal fortíssimo de manipulação intencional.

Erros Comuns que devs cometem ao montar moderação

Já revisei código de moderação em startups, scale-ups e em produtos corporativos. Esses são os tropeços que mais vejo:

  • Achar que hash MD5/SHA-256 resolve. Não resolve nada para imagens modificadas ou geradas. Você precisa de hash perceptual (pHash, dHash, aHash) e, idealmente, embedding visual via CLIP.
  • Confiar em um único modelo NSFW. Modelos únicos falham sistematicamente em casos adversariais. Ensemble + revisão humana para casos de fronteira (score entre 0,4 e 0,7).
  • Tratar anúncios como conteúdo orgânico. Não são. O fluxo de aprovação publicitário tem SLA de minutos; conteúdo orgânico tem SLA de horas. Atacantes sabem disso e usam o canal de anúncios justamente por ele ser mais rápido.
  • Não treinar o classificador com CSAM sintético. Como desenvolvedor, você não pode nem deve armazenar CSAM real. Mas pode treinar o classificador com amostras sintéticas legalizadas (geradas em ambiente controlado para benchmarking) e com transfer learning a partir de datasets públicos de NSFW sintético, como o Synthetic NSFW Dataset publicado pelo LAION em 2024.
  • Esquecer do vetor de metadados. Às vezes o conteúdo em si passa, mas a landing page do anúncio (com link para app “undressing”) é a violação. Crawle a URL de destino, classifique o destino também.

O que muda para quem está construindo produtos com IA em 2026

Se você está integrando modelos generativos no seu produto — seja para e-commerce, marketing ou criação de conteúdo — três lições saem direto desse caso:

  1. Pre-prompt filtering: filtre os prompts do seu usuário antes de gerar. Bloqueie termos que combinem menores + nudez, ou aplique um classificador de intenção em texto (BERT fine-tunado) antes de invocar a API generativa.
  2. Post-generation moderation: nunca publique o output do modelo sem passar por um classificador NSFW. Nunca. Mesmo que o prompt pareça inofensivo.
  3. Audit trail: log de prompt, modelo, parâmetros, hash da imagem. Em caso de incidente, esse log é o que separa você de um processo criminal.

A Meta tem equipes de milhares de engenheiros, orçamento bilionário e ferramentas de moderação que a maioria de nós só sonha. Mesmo assim, falhou por meses. Quando li essa reportagem, a reflexão que tive foi: se eles falham, qual é a desculpa da sua startup que está terceirizando toda a moderação para “denúncias dos usuários”?

Perguntas Frequentes

Por que o pHash tradicional falha em detectar imagens geradas por IA?

Porque o pHash foi projetado para encontrar duplicatas e quase-duplicatas visuais. Ele compara estrutura da imagem, não semântica. Duas imagens sintéticas com prompts ligeiramente diferentes têm pHash completamente distintos, mesmo representando o mesmo abuso. Para detectar similaridade semântica em conteúdo gerado, você precisa de embeddings (CLIP, DINOv2) combinados com distância de cosseno.

Quais APIs comerciais são mais eficazes contra CSAM sintético em 2026?

Na minha experiência, as três com melhor taxa de detecção em produção são Hive Moderation, AWS Rekognition Content Moderation (com o módulo de IA-generativa) e o Sightengine. Nenhuma é bala de prata — todas precisam de ensemble e revisão humana para casos limítrofes. Para projetos menores, NSFWJS rodando localmente + um detector de IA-generativa como o do Hugging Face resolve 80% dos casos.

Como evito o “vazio legal” entre conteúdo real e sintético?

Você não evita do ponto de vista jurídico — a lei trata como equivalente. Do ponto de vista técnico, você preenche o vácuo adicionando o detector de IA-generativa como uma camada separada que, quando positiva, dispara revisão humana obrigatória. Em outras palavras: não delegar a decisão final para a máquina quando há suspeita de síntese.

Qual é a responsabilidade legal de um dev que constrói a plataforma?

No Brasil, a responsabilidade é objetiva em muitos casos (Marco Civil, art. 21). Nos EUA e na UE, a tendência em 2026 é clara: provedores que lucram com anúncios e não implementam moderação razoável perdem a proteção de “porto seguro”. O dev não é o único responsável, mas é o elo técnico que a promotoria vai usar para demonstrar negligência.

Vale a pena construir meu próprio modelo de detecção ou usar API?

Depende do volume. Abaixo de 100 mil imagens/dia, API comercial compensa mais. Acima disso, ou se você lida com dados sensíveis que não podem sair do seu servidor, fine-tune um modelo próprio (ViT ou EfficientNet) com datasets públicos + transfer learning. Eu já fiz os dois caminhos. Ambos funcionam, mas o segundo exige um time de ML dedicado, senão vira mais um sistema legado mal mantido.

Fonte: Sapo.pt — reportagem de 06 de agosto de 2026 sobre a Meta e anúncios com CSAM gerado por IA.

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto. Se quiser, posso publicar um repositório com o pipeline completo de moderação que mostrei aqui — incluindo o ensemble NSFW e o detector de IA-generativa plug-and-play.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.