Uma vez que uma tela é fotografada ou capturada e compartilhada para fora, os dados já saíram. A única pergunta significativa que resta é: quem produziu isto? Sem essa resposta, o incidente vira um enigma insolúvel — e a falta de conclusão torna-se, por si só, um incentivo para o próximo vazamento.
A resposta tradicional — marcas d'água visíveis em que o nome do usuário aparece na tela — funciona como dissuasão. Mas recortar a imagem na parte sem marca d'água ou fotografá-la de modo a removê-la a elimina. O usuário sabe disso; o valor dissuasivo se erode com o tempo.
A detecção de origem moderna requer duas camadas. Uma marca visível que faça o usuário sentir que é identificável, mais um rastro invisível embutido nos dados reais de pixel para sobreviver aos ataques óbvios contra a marca visível. O ZeroLeak adiciona ambos: a marca visível dissuade os vazamentos fáceis, o rastro invisível pega os cuidadosos.
Ambas as camadas de marca d'água são aplicadas no mesmo ponto: no visualizador noVNC que o navegador do usuário recebe. Nenhuma camada vive no DOM da aplicação web protegida, então nenhum site pode interferir nelas e nenhuma política de front-end pode removê-las. A camada visível é configurada por serviço protegido; a identidade de rastreio invisível é gerada por sessão.
O nome de usuário, o ID de sessão ou um texto personalizado são sobrepostos à página renderizada usando mix-blend-mode — de modo que permaneçam visíveis tanto sobre conteúdo claro quanto escuro. O usuário sabe que é pessoalmente identificável em cada tela que vê — uma dissuasão constante e forte contra a captura de tela fácil.
Nos dados reais de pixel de cada quadro que o usuário vê, é escrito um padrão específico da sessão. Esse padrão foi projetado para resistir a recorte, redimensionamento, recompressão JPEG e refotografia. Quando uma captura de tela surge depois, a identidade embutida identifica a sessão que a produziu — mesmo que a marca d'água visível tenha sido removida por recorte.
A marca d'água visível suporta até três camadas independentes; cada uma tem seu próprio texto, posição, rotação, fonte, opacidade e tamanho de mosaico. Quando um nome de usuário diagonal, um ID de sessão ao centro e um carimbo de data e hora no canto são usados juntos, fica muito mais difícil recortar e remover a marca visível sem perder área útil da tela.
Recortar para remover a marca d'água visível, reduzir a imagem para um aplicativo de mensagens, fotografar o monitor com o telefone — a identidade de rastreio invisível sobrevive a todos eles, porque é parte dos próprios dados de pixel, não uma sobreposição. Decodificar a identidade de rastreio da imagem recuperada identifica a sessão.
Cada item abaixo é configurável de forma independente por serviço protegido. Para conteúdo de baixa sensibilidade em que a dissuasão basta, use apenas a camada visível; para conteúdo de alta sensibilidade em que a detecção de origem precisa ser possível, use as duas camadas em conjunto.
O texto da marca d'água visível é composto pela identidade do usuário autenticada no início da sessão, pelo ID de sessão, pelo carimbo de data e hora ou por qualquer combinação escolhida no momento pela política. A marca d'água na tela não é um logotipo genérico, mas reflete a pessoa específica que está visualizando.
A marca d'água usa mix-blend-mode, que se inverte conforme a cor do fundo. Uma marca d'água que normalmente seria invisível em uma página preta ou branca permanece legível em todos os lugares — o olho vê uma marca consistente independentemente do que a página mostre por baixo.
Juntas, são configuráveis em até três camadas visíveis. Cada camada tem seu próprio texto, cor, opacidade, fonte, rotação, tamanho de mosaico e posição. As camadas podem ser repetidas na diagonal, centralizadas ou fixadas no canto — recortar a captura de tela para remover uma camada ainda deixa as outras.
Nos quadros renderizados que o usuário vê é embutido um padrão de rastreio específico da sessão. O processo de embutimento foi projetado para resistir aos ataques comuns de vazamento de tela — recorte, redução de tamanho para aplicativos de mensagens, recompressão JPEG e refotografia do monitor com a câmera do telefone; todos deixam padrão suficiente para recuperar o ID de sessão.
Quando uma imagem vazada é encontrada, o operador a passa pelo decodificador. O decodificador lê o padrão de rastreio embutido e retorna o ID de sessão que o produziu. O operador pesquisa a sessão na trilha de auditoria para encontrar a identidade do usuário, o carimbo de data e hora e o serviço protegido relacionado.
Ambas as camadas de marca d'água são aplicadas no visualizador noVNC que o navegador do usuário recebe — não no DOM da aplicação protegida. A aplicação protegida não tem conhecimento da marca d'água e não pode interferir nela. Frameworks de front-end, políticas de HTML confiável, extensões de navegador na aplicação protegida — nenhum deles consegue acessar a marca.
Diferentes canais de vazamento degradam a imagem vazada de formas diferentes. A identidade de rastreio invisível foi projetada contra ataques realistas; é honesta sobre o que consegue e o que não consegue recuperar.
Um atacante recorta a captura de tela até a região de dados que deseja e remove todo o texto da marca d'água visível. A identidade de rastreio invisível é distribuída por todo o quadro e sobrevive ao recorte — recuperar uma região de tamanho razoável do quadro original basta para decodificar a identidade.
A maioria dos aplicativos de mensagens reduz as imagens compartilhadas e as recomprime como JPEG. O padrão de rastreio foi projetado com redundância para resistir às taxas comuns de redução e aos artefatos de compressão JPEG.
Um atacante que não quer deixar rastro no sistema de arquivos aponta o telefone para a tela e tira uma foto. O padrão de rastreio foi projetado para resistir à captura óptica — as fotos da câmera do telefone preservam informação de frequência espacial suficiente para que o decodificador ainda encontre o ID de sessão.
Um atacante que vaza apenas uma porção muito pequena da tela — uma única frase, um único número — reduz a quantidade de padrão de rastreio disponível. O decodificador relata baixa confiança para regiões pequenas; no limite, o rastro torna-se impossível de decodificar. Um limite honesto — nem todo vazamento é detectável.
Um atacante que passa a imagem vazada por um Gaussian blur pesado, por um filtro de imagem de IA generativa ou que redesenha à mão o conteúdo visível pode destruir o padrão de rastreio junto com grande parte da informação original. Nesse ponto, a imagem vazada já não é uma cópia fiel do que estava na tela — a detecção de origem não é a única coisa perdida.
Documentos pré-IPO, materiais de fusão e aquisição, posições de investimento — informação de alto valor lida por muitas pessoas antes de ser divulgada publicamente. Quando um vazamento aparece na imprensa, detectar de qual sessão veio é a diferença entre um incidente irresolúvel e uma investigação acionável.
A equipe de saúde lê dados de pacientes na tela de forma legítima. Quando um registro de paciente vazado aparece fora, a marca d'água visível dissuade os vazamentos fáceis, e a identidade de rastreio invisível identifica a sessão caso um vazamento ocorra — apoiando a responsabilização da HIPAA para funções com permissão apenas de visualização.
Mesas de analistas em que várias pessoas veem o mesmo conteúdo classificado. As marcas por usuário concretizam a responsabilização individual; a identidade de rastreio invisível torna possíveis as investigações quando um vazamento aflora em inteligência de fonte aberta.
Partes externas que recebem permissão apenas de visualização ao seu ambiente. A marca visível por usuário em cada tela que veem lhes lembra que são identificáveis; a marca invisível torna a situação comprovável quando um vazamento aparece em suas próprias sub-redes.
Veja a marca d'água forense do ZeroLeak em uma demonstração ao vivo. Abrimos uma sessão, tiramos a captura de tela, recortamos, reduzimos, fotografamos do monitor — e a cada vez decodificamos a identidade de rastreio de volta para a sessão.