Ghost Font: a tecnologia que impede a leitura por inteligência artificial
Conheça o Ghost Font, um experimento baseado em movimento que desafia e engana modelos avançados como GPT Sol 5.6 Ultra e Claude Fable.
Descubra como uma alteração no motor V8 a partir do Chromium 148 permite rastrear o sistema operacional real dos usuários com cálculos de tangente hiperbólica.
A descoberta recente realizada pela equipe de segurança da Scrapfly Engineering revelou um novo e silencioso vetor de rastreamento de sistemas operacionais oculto nas últimas casas decimais de cálculos matemáticos no navegador. A partir do Chromium 148, o motor de execução JavaScript V8 alterou a forma como resolve operações de tangente hiperbólica através da instrução Math.tanh, expondo uma discrepância de bits que permite diferenciar com precisão se o host executa Linux, macOS ou Windows. O problema afeta diretamente as versões estáveis do Chrome 148, 149 e 150, quebrando as barreiras de privacidade de ferramentas que tentam mascarar o cabeçalho User-Agent para evitar o monitoramento de identidade online.
O vazamento ocorre de maneira rápida e imperceptível, exigindo apenas que um script de rastreamento execute o comando simples Math.tanh(0.8) para obter uma assinatura de software exclusiva do sistema operacional. No Linux, que utiliza a biblioteca padrão de matemática do sistema glibc, o retorno exato é 0.6640367702678491; no macOS, por meio da biblioteca nativa libsystem_m da Apple, o resultado computado é 0.664036770267849; enquanto no Windows, rodando o ambiente UCRT (Universal C Runtime), o valor exibido é 0.6640367702678489. Essa discrepância sutil contradiz qualquer tentativa de forjar o sistema operacional de origem, pois o software de rastreamento pode validar instantaneamente se o motor matemático subjacente condiz com a identidade declarada pelo navegador.
Até o lançamento do Chrome 147, esse canal lateral de identificação não existia porque o motor V8 processava funções transcendentais de forma isolada do ambiente do sistema hospedeiro, utilizando uma versão interna e portada da tradicional biblioteca de matemática de ponto flutuante fdlibm. Contudo, o commit de código c1486295ae5 no repositório oficial do V8 substituiu essa rotina empacotada estaticamente pela função nativa std::tanh da linguagem C++, que faz chamadas de execução direta às bibliotecas matemáticas fornecidas pelo sistema operacional. O código de atualização foi integrado inicialmente na versão 14.8.57 do V8, tornando o vazamento permanente para todos os navegadores derivados da árvore de desenvolvimento do Chromium 148 em diante.
Para compreender por que o mesmo cálculo matemático resulta em números ligeiramente diferentes em cada plataforma, é necessário recorrer ao padrão internacional de representação de ponto flutuante de dupla precisão IEEE 754. Embora o padrão defina com absoluta precisão o armazenamento e operações básicas de números decimais, ele não exige que os fornecedores de sistemas de software implementem arredondamentos perfeitamente corretos para funções transcendentais como sin, cos, tanh ou exp. Como o arredondamento ideal exige um custo de processamento de CPU excessivamente alto, cada fornecedor de sistema distribui sua própria versão de biblioteca de matemática (libm) que otimiza o desempenho em detrimento de variações microscópicas de arredondamento.
Essa diferença de precisão é quantificada sob a métrica de 1 ULP (Unit in the Last Place), que denota o menor incremento possível entre dois valores numéricos adjacentes na codificação de dupla precisão. Na prática, a biblioteca glibc do Linux e a biblioteca libsystem_m da Apple divergem em aproximadamente 25% de todos os valores de entrada de dados, apresentando essa sutil diferença de precisão de 1 ULP. O componente UCRT do Windows (através de sua DLL de execução do sistema ucrtbase.dll) diverge de ambos em uma frequência menor, de apenas alguns pontos percentuais, mas na entrada específica de Math.tanh(0.8) as três plataformas se dividem e entregam resultados completamente distintos.
A equipe de engenharia de dados da Scrapfly realizou varreduras completas no comportamento do navegador Chrome 150 para classificar as diferentes respostas obtidas no console de desenvolvimento. A chamada para Math.tanh(0.5) resulta na resposta uniforme de 0.46211715726000974 nas três plataformas de forma idêntica, tornando esse valor inútil como indicador de fingerprinting. Por outro lado, a chamada Math.tanh(0.7) expõe unicamente o Linux com um valor distinto de 1 ULP em relação ao macOS e Windows, e o teste com Math.tanh(0.9) isola com sucesso o ambiente Windows com o resultado final de 0.7162978701990244, provando a eficácia do mapeamento.
A primeira grande armadilha técnica identificada ao tentar corrigir essas discrepâncias numéricas do navegador diz respeito ao fato de que o interpretador JavaScript do Chromium não expõe de forma uniforme todas as rotinas para as bibliotecas do hospedeiro. O motor V8 incorpora e compila internamente as bibliotecas de código aberto llvm-libc para gerenciar funções como Math.exp, Math.pow e Math.atan, enquanto recorre a uma rotina derivada de dbl-64 da própria glibc para computar Math.sin e Math.cos. Consequentemente, tentar emular o comportamento do macOS reescrevendo de forma indiscriminada todas as respostas matemáticas do motor causa inconsistências graves de representação, já que apenas Math.tanh aponta para o sistema de destino no JavaScript desde o Chrome 148.
O segundo obstáculo para uma camuflagem eficiente reside na diferença de caminhos de execução do interpretador de código matemático das folhas de estilo CSS em relação ao JavaScript controlado pelo motor V8. Funções matemáticas declaradas no layout de páginas como sin(), cos() e atan2() não compartilham nenhuma linha de código com Math.sin, pois o motor de layout Blink converte e reduz o ângulo expresso em graus para radianos antes de repassar a execução para a rotina nativa do sistema hospedeiro std::sin. Devido a essa separação de arquitetura de software, todas as sete funções trigonométricas disponíveis nativamente no interpretador de CSS revelam os bits característicos da biblioteca libm do sistema operacional real.
O terceiro problema é exclusivo do ecossistema de hardware da Apple, que possui duas bibliotecas de matemática independentes nos chips Apple Silicon e que geram bits de saída conflitantes. O sistema operacional da Apple possui a biblioteca escalar convencional de sistema libsystem_m instalada em paralelo com o framework de alta performance Accelerate, que utiliza rotinas vetoriais otimizadas conhecidas como vvsin e vvtanh. Essas duas rotinas fornecidas pelo próprio sistema divergem em uma taxa surpreendente que varia de 10% a 89% dependendo das primeiras entradas, com o cálculo de cosseno clássico de zero retornando exatamente 1.0 na biblioteca escalar e 0.9999999999999999 no ecossistema do framework Accelerate.
Os testes detalhados revelaram que o navegador Chrome no macOS delega a execução de Math.tanh, das rotinas do CSS e dos cálculos de compressão de áudio para a biblioteca escalar padrão libsystem_m. Simultaneamente, as rotinas de processamento de sinais de áudio do Web Audio, as transformadas rápidas de Fourier (FFT) e os filtros biquad de alta performance são direcionados para o framework Accelerate por meio de macros do compilador definidas em arquivos como fft_frame_mac.cc e vector_math_mac.h. Essa fragmentação interna cria uma assinatura de chamadas complexa e altamente sensível a qualquer erro mínimo de emulação.
A quarta armadilha é representada pelas variações introduzidas diretamente pelas arquiteturas físicas das unidades de processamento central, divididas no mercado moderno entre processadores ARM e processadores com arquitetura de conjunto de instruções de computadores de uso geral x86. As diferenças entre microarquiteturas de chips de fabricantes distintos alteram a forma como operações aritméticas complexas como a multiplicação e soma fundidas (conhecidas pela sigla FMA) e a propagação de sinalização de valores indefinidos de erro NaN são interpretadas pelo hardware. Isso gera pequenos desvios de bits entre a execução compilada originalmente em chips ARM e a sua emulação em servidores com arquitetura x86 típica de infraestruturas de nuvem.
A alternativa de simulação mais robusta contra esse rastreamento consiste na reprodução matemática idêntica dos polinômios e tabelas exponenciais do sistema alvo, traduzindo-os em linguagem de programação portátil C para que operem de forma determinística em qualquer computador. Engenheiros da Scrapfly extraíram os coeficientes minimax e as constantes de interpolação diretamente de binários da biblioteca libsystem_m da Apple para replicar com fidelidade absoluta de bits o mesmo comportamento da plataforma oficial, inclusive para dados em que a rotina original arredonda os números de forma errônea. Um dos coeficientes reais obtidos diretamente da biblioteca de seno da Apple inclui, por exemplo, o valor de representação exata em hexadecimal 0x1.111111110f7d0p-7.
Para assegurar a reprodutibilidade bit a bit desse código reproduzido, é necessário desativar otimizações agressivas de compilação por meio da flag de controle do compilador Clang e GCC -ffp-contract=off. Esse parâmetro impede que a ferramenta unifique operações matemáticas de forma arbitrária durante a geração do código binário, garantindo consistência em processadores com diferentes estágios de hardware FMA. Essa técnica de engenharia de software equipara os resultados de emulação de software aos de hardware físico, eliminando qualquer desvio numérico que pudesse ser usado por algoritmos de detecção de robôs.
Nos cenários em que o desenvolvimento de engenharia reversa das rotinas de matemática nativas se mostra excessivamente longo, a segunda abordagem mais eficaz envolve o mapeamento dinâmico em memória da biblioteca original do Windows ucrtbase.dll executando em servidores baseados na plataforma Linux. Ao carregar o arquivo binário legítimo do ambiente Windows diretamente no espaço de endereçamento de um binário Linux de 64 bits, é possível expor ponteiros de chamadas diretas para funções transcendentais idênticas às executadas por computadores pessoais, gerando um retorno matemático autêntico sem a necessidade de simulação de software complexa.
Contudo, a transição de contexto de chamadas entre um executável Linux nativo e uma biblioteca compilada para o ambiente Windows apresenta desafios na interface binária de aplicação (ABI) que precisam ser tratados em nível de compilador. Devido às divergências estruturais de passagem de parâmetros e de controle de registradores da convenção Windows x64 ABI, desenvolvedores devem usar a declaração explícita do modificador de convenção de chamada ms_abi para evitar que gravações de dados corrompam o fluxo lógico do programa. Adicionalmente, chamadas indiretas a bibliotecas dinâmicas não registradas em mecanismos de verificação estrita de segurança causam interrupções críticas do tipo SIGILL, requerendo o uso do atributo [[clang::no_sanitize("cfi-icall")]] nos wrappers de tradução.
Além das configurações de barreira de compilação, o carregamento do binário UCRT do Windows exige o tratamento específico de uma instrução lógica que afeta diretamente os bits de retorno das funções matemáticas. No início de cada função da biblioteca Windows, o código nativo executa uma rotina representada por mov eax, [rip+disp32] para ler os sinalizadores de CPU e decidir se utilizará as instruções otimizadas de aceleração de hardware FMA ou caminhos legados. Como um mapeamento limpo de DLL em memória não inicializa essa flag de despacho por padrão, as respostas aritméticas de rotinas como ucrt_tanh sofrem desvios de precisão, exigindo que o emulador extraia o endereço da flag e force o chaveamento manual para o caminho correto.
O desempenho temporal da execução das funções matemáticas simula outro fator crucial de conformidade, já que uma emulação perfeitamente exata que execute em velocidade reduzida cria uma anomalia de tempo facilmente mensurável por softwares de segurança. As implementações de teste que utilizavam emulação matemática puramente baseada em software apresentaram velocidades de processamento de 2,5 a 6 vezes inferiores ao desempenho do hardware real, uma lacuna que pode ser revelada ao comparar as métricas de tempo de execução entre chamadas do sistema como Math.tanh e Math.sin. O uso de flags que ativam aceleração de hardware corrigiu essa anomalia de latência, posicionando a emulação de software no mesmo nível das bibliotecas do sistema.
Para garantir que nenhuma regressão de bits atinja os sistemas de raspagem de dados e análise de mercado, o ciclo de compilação conta com uma extensa suíte de validação automatizada de integridade projetada para testar 871.000 cenários de entrada de dados diferentes. Essa suíte monitora comportamentos em limites numéricos estritos de dupla precisão, abrangendo amostras em redes densas de coordenadas decimais, limites de overflows, infinitos de representação, manipulações de sinais na representação do zero numérico e condições especiais do tipo NaN. Dois alicerces de hardware real balizam a validação de forma empírica: um computador Mac real rodando o framework Accelerate e a biblioteca de controle escalar, e uma instância do navegador Chrome de produção comandada remotamente por protocolos de instrumentação.
As análises do comportamento de código indicam ainda que a tecnologia de execução segura de módulos baseados em WebAssembly (WASM) constitui uma zona segura livre desse vetor de vazamento de informações de sistema. Como a especificação padrão do WASM não prevê instruções numéricas nativas de conversão transcendental de alta precisão, todo cálculo complexo executado dentro deste contêiner de compilação utiliza as bibliotecas numéricas que o desenvolvedor empacotou juntamente com a sua aplicação web. Essa restrição de projeto limita o escopo aritmético do WASM exclusivamente a chamadas básicas tratadas diretamente pelo hardware hospedeiro como as instruções de ponto flutuante f64.sqrt e f64.mul, evitando vazamentos.
A descoberta do vetor de vazamento matemático introduzido pelas modificações estruturais da versão Chromium 148 ilustra a vulnerabilidade contínua de privacidade em face da integração de componentes nativos de baixo nível em navegadores web. Enquanto técnicas tradicionais de ocultação concentram sua atuação em APIs visíveis como canvas de renderização gráfica, fontes instaladas de sistema e drivers de áudio de alta complexidade, os canais colaterais matemáticos representam uma ferramenta poderosa para detecção avançada de bots. A busca contínua por paridade bit a bit com os arredondamentos das rotinas das plataformas macOS e Windows emerge, portanto, como uma das fronteiras mais complexas de desenvolvimento de sistemas robustos e de integridade de dados na web moderna.
Conheça o Ghost Font, um experimento baseado em movimento que desafia e engana modelos avançados como GPT Sol 5.6 Ultra e Claude Fable.
Entenda o impacto técnico do sequestro de IPs domésticos por robôs de inteligência artificial e as contramedidas de segurança de portais independentes.
Nova trava de segurança nos óculos inteligentes da Meta desativa a câmera caso o indicador de LED seja violado, em meio a fortes polêmicas sobre dados e IA.