A WebGL (Web Graphics Library) é uma poderosa tecnologia de renderização de gráficos 3D em navegadores que utiliza o poder da unidade de processamento gráfico (GPU). Ao contrário do Canvas, o WebGL não só permite trabalhar com gráficos 2D, como também abre novos horizontes de renderização 3D e computação GPU para os programadores Web. Devido à sua capacidade de gerar resultados únicos, o WebGL encontrou a sua aplicação em sistemas antifraude, onde as suas capacidades ajudam a localizar e identificar os dispositivos dos utilizadores através de impressões digitais únicas. #### História da criação e objetivo do WebGL O WebGL foi desenvolvido como uma extensão do Canvas e foi introduzido pela primeira vez pela organização Khronos Group em 2011. Enquanto norma aberta para a renderização de gráficos em páginas Web, o WebGL permitiu eliminar plug-ins de terceiros, como o Flash ou o Java, melhorando consideravelmente o desempenho e a segurança das aplicações Web. O WebGL ampliou as capacidades do HTML5 e do JavaScript, adicionando suporte para renderização 3D e melhor interação com a GPU. Isto torna-o útil não só para jogos, visualização e investigação científica, mas também para sistemas antifraude, em que o WebGL pode ajudar a identificar de forma única os dispositivos dos utilizadores através de uma “impressão digital gráfica”. #### Capacidades tecnológicas do WebGL O WebGL oferece aos desenvolvedores uma série de ferramentas exclusivas para a criação de gráficos complexos: - Trabalhar com gráficos 3D. O WebGL suporta o desenho de modelos e texturas 3D complexos usando aceleração de hardware. Isso permite criar objetos visuais realistas que oferecem alto desempenho. - Acesso a shaders. O WebGL utiliza shaders (programas executados pela GPU) que permitem a renderização detalhada de objectos, criando efeitos de textura complexos e gráficos de maior qualidade. - Animação e interatividade. As capacidades do WebGL permitem-lhe construir aplicações Web dinâmicas, visualizar dados científicos e criar modelos complexos, como mundos virtuais e simulações interactivas. Estas caraterísticas fazem do WebGL uma ferramenta numa variedade de domínios e uma ajuda útil em sistemas antifraude para proporcionar exclusividade e proteção contra fraudes. #### WebGL em sistemas antifraude: proteção contra fraudadores Os sistemas antifraude modernos usam a impressão digital gráfica do WebGL para identificar dispositivos. Ao contrário do Canvas, a impressão digital WebGL não se baseia apenas na renderização de pixels, mas também depende da GPU e dos recursos suportados pelo navegador. Isto ajuda os sistemas antifraude a criar impressões digitais únicas para cada dispositivo e a identificar actividades suspeitas. ##### Como é que o WebGL ajuda a identificar o utilizador? Ao renderizar objetos no WebGL, diferentes dispositivos podem produzir pequenas diferenças na imagem devido a recursos de hardware de GPUs, shaders e drivers. Os fatores que afetam os resultados de renderização incluem: - GPU - diferentes modelos de GPU processam objetos 3D e texturas de forma diferente. - Shaders e extensões suportados - O conjunto de shaders suportados, bem como suas especificações e precisão, variam de acordo com o dispositivo. ##### Definições do navegador e funcionalidades de renderização. Os sistemas antifraude usam esses recursos para criar uma impressão digital exclusiva, detectando diferenças no nível gráfico e de recursos, como tamanhos de textura e valores máximos de variáveis uniformes. Estes parâmetros combinam-se para criar uma impressão digital gráfica que, quando combinada com outros dados, ajuda a identificar o utilizador. ##### Métodos de falsificação de impressões digitais **WebGL** Os fraudadores utilizam uma variedade de métodos para falsificar as impressões digitais gráficas WebGL e contornar os sistemas antifraude. Entre eles estão: - Imitação de shader e textura. Os atacantes podem modificar shaders e texturas com ruído adicional, o que ajuda a modificar a impressão digital WebGL. - Implementação de impressões digitais pré-salvas. Alguns programas são capazes de falsificar impressões digitais, produzindo resultados pré-gravados de outros dispositivos, tornando-os difíceis de detetar. ##### Que informações um recurso da Web pode recuperar de um navegador usando WebGL? A lista completa de propriedades e valores do WebGL para o navegador pode ser vista na página de teste https://test-webapi.tech/webglfull. Vamos considerar os parâmetros mais importantes para sistemas antifraude em detalhes, mas primeiro vamos verificar como a sobreposição de ruído funciona no WebGL. No artigo, explicámos em pormenor como são formados os valores quando se tira uma impressão, agora vamos fazer um pequeno teste, vamos ver a impressão WebGL do navegador Chrome e do antidetect-browser sem ruído e com ruído, vamos abrir a página https://browserleaks.com/webgl em cada um deles. Navegador Chrome: Vamos anotar estes valores: Hash de relatório WebGL: af7f2acd5c7ab718eb78ab2d368860bd Hash de imagem WebGL: 3151260603d8157a55323d306cc161fb49 Fornecedor não identificado: Google Inc. (NVIDIA) Renderizador não mascarado: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) Navegador anti-deteção sem ruído: Navegador anti-deteção usando ruído: Hash de relatório WebGL: af7f2acd5c7ab718eb78ab2d368860bd Hash da imagem WebGL: 3151260603d8157a55323d306cc161fb49 Fornecedor não identificado: Google Inc. (NVIDIA) Renderizador não mascarado: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) Hash de relatório WebGL: 251d629a393c4f10bfffe3b506696fdd Hash da imagem WebGL: 61b18870e8f14f00f0058bc5533468c685c Fornecedor não identificado: Google Inc. (NVIDIA) Renderizador não mascarado: ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11) A partir dos resultados do teste, podemos ver que os valores mudaram quando o ruído é sobreposto, e podemos concluir que o navegador anti-deteção está a falsificar com sucesso a nossa impressão digital WebGL. ##### Como os sistemas antifraude detectam a falsificação da impressão digital WebGL? Os sistemas antifraude usam métodos para reconhecer a falsificação da impressão digital WebGL: - Verificação de desvios. O sistema analisa e compara a impressão digital WebGL com os parâmetros do dispositivo, como o número máximo de variáveis uniformes e as extensões suportadas. Se os valores não corresponderem às especificações reais do dispositivo, isso pode indicar uma falsificação. - Distorção da renderização. Os sistemas antifraude podem criar imagens e verificar a forma como os dispositivos processam determinados objectos. Por exemplo, se a renderização WebGL num dispositivo não corresponder aos parâmetros padrão, isso pode indicar uma adulteração. - Teste de estabilidade dos parâmetros. Podem existir testes que verifiquem a estabilidade de shaders e texturas no sistema, uma vez que a sua alteração pode revelar uma GPU falsificada. Os parâmetros mais importantes para sistemas antifraude no WebGL são: informações do dispositivo (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2), especificações (maxFragmentUniformVectors, maxTextureSize) e extensões. Vamos ver como os sistemas antifraude podem verificar os parâmetros técnicos: vamos verificar os valores reais de maxFragmentUniformVectors abrindo a nossa página de teste https://test-webapi.tech/webglmaxfr no navegador, que verifica maxFragmentUniformVectors sob carga. Navegador Chrome no computador: O valor real é o indicado nas propriedades do navegador. Uma vez que os dispositivos de secretária têm normalmente um valor maxFragmentUniformVectors de 1024, vamos abrir a mesma página num telemóvel Android no navegador Chrome: No navegador do telemóvel, os dados obtidos a partir das propriedades do navegador são verdadeiros. Agora vamos tentar no browser anti-deteção substituir os valores pelos valores do telemóvel e repetir o teste. Vamos abrir a nossa página de teste: O browser antidetecção com a substituição do valor maxFragmentUniformVectors falhou o teste, e é lógico porque o executamos no nosso computador com o valor maxFragmentUniformVectors:1024 Vamos realizar um teste semelhante para maxTextureSize abrindo nossa página de teste https://test-webapi.tech/webglmaxt em um navegador, que verifica o tamanho máximo da textura sob carga no contexto do Webgl. Navegador Chrome num computador: O valor real é o indicado nas propriedades do navegador. Uma vez que os dispositivos de secretária têm normalmente o maxTextureSize definido para 16384, vamos abrir a mesma página num telemóvel Android no navegador Chrome: No navegador do telemóvel, os dados obtidos a partir das propriedades do navegador também são os mesmos que na realidade. Agora vamos tentar no browser anti-deteção substituir os valores pelos valores do telemóvel e repetir o teste Vamos verificar o valor no site browserleaks.com Vamos abrir a nossa página de teste O browser anti-deteção com substituição do valor maxTextureSize falhou o teste, o nosso teste descobriu que o tamanho da textura 4097 é suportado pelo nosso browser, e é lógico, porque o executamos no nosso computador com o valor maxTextureSize:16384. **Extensões** **WebGL** Vejamos como os sistemas antifraude podem utilizar informações sobre as extensões WebGL para identificar os utilizadores. A lista de extensões difere ao nível dos tipos de dispositivos e fabricantes. Para identificar os utilizadores, os sistemas antifraude podem utilizar sistemas antifraude para verificar se cada uma das extensões conhecidas é suportada no browser do utilizador. Vejamos um exemplo simples de como isto pode ser feito: No exemplo, para simplificar, existem dois números para cada extensão WebGL: o primeiro valor indica se a extensão é declarada ou não nas propriedades do browser e o segundo número indica se a extensão é suportada ou não após a verificação através de testes. Esse grande número de valores pode resultar em um hash bastante exclusivo para cada usuário. #### Testes de desempenho **WebGL** Na página de teste, vamos criar um programa que irá testar o desempenho do dispositivo e calcular o tempo de execução do nosso programa. Resultados para dispositivos desktop: NVIDIA GeForce RTX 3060: 2023,6 ms AMD Radeon RX580: 1132.0ms AMD Radeon™: 1611,2 ms Intel UHD 620: 2576,1 ms Vulkan 1.3.0: 1364,2 ms Resultados para dispositivos móveis: Mali-G77: 3369,3 ms Mali-G76: 5111.1ms Adreno™ 642L: 4534.0 ms Adreno™ 642: 5763,3 ms Adreno™ 618: 9821.0ms De acordo com os resultados dos testes é percetível que os dispositivos móveis levam muito mais tempo para lidar com a tarefa de renderização WebGL, mas uma diferença significativa no tempo de execução pode ser obtida apenas em testes com tarefas complexas, que dificilmente podem ser aplicadas em sistemas antifraude, em testes com tarefas simples é bastante problemático tirar conclusões sobre o desempenho do dispositivo estimando o tempo gasto em tarefas de renderização de gráficos WebGL. ##### **WebGL** **Amazon** **e** **Facebook** como exemplo Vamos dar um exemplo de dois sites e ver que dados obtêm sobre o utilizador utilizando a tecnologia WebGL. Vamos abrir a página inicial da Amazon e, usando as ferramentas de desenvolvedor, procurar nos arquivos de script java por funções que contenham “renderer”, “canvas”, “webgl”, “vendor” e investigar quais dados o site obtém dessas funções. Como resultado, veremos que o site da página inicial da Amazon recolhe informações sobre as propriedades Vendor, Renderer e Extensions. Vamos repetir o teste no site do Facebook. O site do Facebook, na página de login da conta, recolhe informações sobre Vendor, Renderer do browser do utilizador. Podemos concluir que, ao criar novas contas nesses sites, é desejável que as propriedades do WebGL que estão sendo verificadas sejam diferentes entre as contas e que, ao reusar/logar, as propriedades não sejam alteradas dentro do mesmo perfil. **Frames por segundo (FPS)** Este parâmetro mede a frequência com que a imagem é atualizada. O WebGL permite que os desenvolvedores obtenham dados de FPS diretamente no navegador, o que é frequentemente usado em sistemas antifraude. Para o utilizador médio, na grande maioria dos casos, o valor de FPS é igual ou superior a 60, enquanto os programas reduzem frequentemente este valor para 30, a fim de reduzir a carga sobre o hardware durante o funcionamento. Esta variação descendente do FPS para os sistemas antifraude é um indicador importante da utilização da automatização do browser. #### Conclusão Muitos sistemas antifraude em recursos populares utilizam a tecnologia WebGL e não só identificam os dispositivos dos utilizadores através de impressões digitais gráficas únicas, como também fornecem ferramentas para a deteção e prevenção de fraudes. A utilização de spoofing, a análise da estabilidade dos parâmetros e a comparação com as caraterísticas reais do dispositivo melhoram significativamente a eficácia dos sistemas antifraude. A substituição de valores e a utilização de ruído pelos navegadores anti-deteção no WebGL não é uma forma mágica de contornar a proteção de sítios populares. Na conclusão do artigo, apresentamos um possível método de deteção de ruído WebGL: A alteração dos resultados de renderização em WebGL utilizando a sobreposição de ruído baseia-se na substituição dos valores de cor dos pixéis, especificamente a cor dos pixéis semi-transparentes. A abordagem apresentada está a ser testada e não abrange todas as opções de substituição possíveis. Passemos aos testes: Vamos abrir a página https://test-webapi.tech/webgltamper num navegador Chrome normal: Repetir num navegador anti-deteção sem utilizar ruído: Agora vamos testar num navegador anti-deteção com sobreposição de ruído WebGL: Vamos ver como a sobreposição de ruído é calculada nesta abordagem. Em primeiro lugar, obtemos o hexadecimal do buffer WebGL e descodificamo-lo pela ordem inversa da codificação, obtendo assim um valor de cor para cada pixel da imagem. A sequência destas acções é exatamente a mesma que nos sistemas antifraude. No passo seguinte, comparamos a cor do pixel da parte principal da figura desenhada com WebGL (vermelho) e a cor do pixel semitransparente que se encontra na fronteira entre o fundo branco e o triângulo. No nosso caso, comparamos os valores da tonalidade vermelha R e da transparência A, obtendo assim a diferença de valores em percentagem. Em dispositivos normais, a diferença entre a tonalidade vermelha e a transparência de dois desses pixéis deveria ser a mesma (em teoria, a cor do nosso pixel deveria mudar no mesmo valor em que o seu valor de transparência muda), mas quando se impõe ruído trocando as cores de pixéis semi-transparentes, a diferença na tonalidade vermelha e na transparência entre os dois pixéis muda. Nas capturas de ecrã do teste, vemos que a diferença entre os tons vermelhos sem sobreposição de ruído tem um valor de R: 50,20% e a diferença na transparência dos mesmos pixels A: 50,20%, quando o ruído é sobreposto no browser anti-deteção obtemos os seguintes valores R: 48,63% e A: 50,59% Neste artigo, analisámos a forma como os sistemas antifraude podem utilizar a tecnologia WebGL para identificar utilizadores e detetar utilizadores que utilizam a falsificação de impressões digitais. A tecnologia WebGL permite recolher uma grande quantidade de informações para a identificação do utilizador, pelo que é frequentemente utilizada em sistemas antifraude. Simultaneamente, a alteração das informações sobre uma placa de vídeo (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2) dentro da mesma linha de produtos do fabricante da placa de vídeo permite alterar a impressão digital e não levantar suspeitas dos sistemas antifraude. No próximo artigo, continuaremos a análise das tecnologias de navegação utilizadas nos sistemas antifraude. Bannykh M.V._