No mundo atual da tecnologia, os sistemas antifraude estão a tornar-se cada vez mais sofisticados. Para além da utilização do Canvas, parâmetros como o agente do utilizador e a capacidade de memória do browser são amplamente utilizados para identificar os utilizadores de forma exclusiva e detetar actividades fraudulentas. Vamos analisá-los mais detalhadamente. #### História e objetivo do User-Agent O User Agent é uma cadeia de caracteres enviada por um browser para um servidor num pedido HTTP que contém informações sobre o tipo de dispositivo, sistema operativo, browser e respectiva versão. Introduzido no início da era da Internet, o User Agent era utilizado para adaptar o conteúdo da Web a diferentes dispositivos. Atualmente, é utilizado não só para apresentar páginas Web, mas também em sistemas antifraude. ###### Onde o User Agent é utilizado - Tópico principal do browser:** A cadeia de caracteres User Agent está disponível em navigator.userAgent. É frequentemente analisada para identificação do dispositivo principal. - Web-Workers:** Nas threads de trabalho, o acesso ao User Agent é limitado, mas APIs como navigator.userAgentData permitem a recuperação de informações da plataforma. - Trabalhadores de serviço Semelhante aos Web-Workers, os Service Workers podem trabalhar indiretamente com o User Agent, mas é necessária uma thread principal para análise direta. - Pedidos HTTP:** O processamento do lado do servidor do User Agent permite-lhe identificar dispositivos e verificar se correspondem a outros parâmetros. ###### Problemas do User Agent e spoofing Os atacantes podem modificar o User Agent através das definições do browser ou utilizar browsers anti-deteção. Isto cria dificuldades de identificação, mas os sistemas antifraude modernos utilizam a correlação com outros parâmetros (por exemplo, endereços IP ou impressões digitais Canvas e WebGL). Vejamos exemplos do aspeto da cadeia de caracteres do agente do utilizador. Vamos abrir a página browserleaks.com/ip no nosso navegador:  Agente do utilizador: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como o Gecko) Chrome/131.0.0.0.0 Safari/537.36 ###### Que dados são utilizados para formar a cadeia de caracteres do User Agent? Formato geral de acordo com a especificação: User Agent: Product/Version (Informações sobre o sistema e o browser) Engine/Version (Informações sobre o motor) Browser/Version 1. **Produto/Versão** - identificador do produto de software e respectiva versão Exemplo: Mozilla/5.0 1. **Informações adicionais sobre a plataforma** Exemplo: (Windows NT 10.0; Win64; x64) - Tipo de plataforma - identificador do sistema operativo Exemplo: Windows NT 10.0 - Arquitetura - informações sobre a arquitetura do sistema Exemplo: Win64; x64 3. **Motor/Versão** - ID e versão do motor de renderização Exemplo: AppleWebKit/537.36 4. **Informações de compatibilidade** Exemplo: (KHTML, como o Gecko) 5. **Informações do navegador** - ID/Versão do navegador Exemplo: Chrome/131.0.0.0.0 6. **Marcador de compatibilidade/versão** com a qual é reivindicada a compatibilidade - Informações sobre a compatibilidade com outros navegadores Exemplo: Safari/537.36 É este o aspeto da cadeia de caracteres do agente do utilizador no navegador Chrome num dispositivo móvel:  Note-se que a cadeia de caracteres do agente do utilizador é a principal informação para os sistemas antifraude. Uma grande quantidade de dados recolhidos a partir do browser do utilizador utilizando outras API é comparada para verificar a consistência com as informações obtidas na cadeia de caracteres do agente do utilizador. Vimos acima um exemplo de obtenção do User Agent a partir de cabeçalhos http transmitidos. Os sistemas antifraude também obtêm informações do browser utilizando o JavaScript. Vamos abrir a página browserleaks.com/javascript/ e ver as informações obtidas do nosso navegador:  Nesta página, o site obtém informações sobre o browser e o sistema do utilizador utilizando duas APIs diferentes: a API Navigator antiga e a API User Agent Client Hints moderna. Vamos comparar as informações obtidas dos navegadores Chrome (esquerda) e Firefox (direita):  A partir deste exemplo, podemos ver que existem diferenças significativas entre os dois navegadores: a quantidade de informação devolvida, o formato da informação e as limitações do suporte da API User Agent Client Hints no navegador Firefox. Podemos concluir que os sistemas antifraude podem facilmente detetar uma incompatibilidade entre a cadeia de caracteres do User Agent e o motor do browser. Vejamos um exemplo dessa substituição, comparando as informações do navegador Firefox (à esquerda) e do navegador anti-deteção baseado no Chromium (à direita):  Após a substituição, os valores BuildID e oscpu não correspondem no navegador anti-deteção e, ao contrário do navegador Firefox, há suporte para a API User Agent Client Hints. Esta substituição será rapidamente detectada pelos sistemas antifraude. Vamos abrir a nossa página de teste test-webapi.tech/ua no navegador Chrome e ver que outras formas de obter o User Agent podem ser utilizadas pelos sistemas antifraude:  Neste exemplo, obtemos informações sobre o User Agent e o browser do utilizador a partir dos cabeçalhos http, no fluxo principal do browser, no Web Worker e no Service Worker e comparamos os resultados:  Juntamente com o User Agent do browser do utilizador, os sistemas antifraude podem obter informações sobre se o dispositivo é móvel, o número de núcleos lógicos do processador, a quantidade de RAM do dispositivo e o número de pontos de contacto simultâneos suportados pelo dispositivo. Vamos analisar mais detalhadamente estes parâmetros na nossa página de teste:  Na secção Main Thread Data, vamos prestar atenção a: **“sec-ch-ua-mobile”**: “?0” - informação derivada dos cabeçalhos http, indicando que estamos a utilizar um browser de ambiente de trabalho “maxTouchPoints": 0 - indica que o nosso dispositivo não suporta Touch **"hardwareConcurrency ”**: 12 - indica o número de núcleos de processador lógico disponíveis para o browser **"deviceMemory ”**: 8 - quantidade aproximada de RAM em Gigabytes. **mobile “**: false - a informação obtida através da API User-Agent Client Hints indica que o nosso dispositivo não é móvel. #### Memória do browser. ###### Memória atribuída e sua medição Os parâmetros de memória do navegador (deviceMemory, performance.memory) fornecem informações sobre a memória disponível do dispositivo. Por exemplo: - navigator.deviceMemory devolve a quantidade de memória em gigabytes. - performance.memory na thread principal fornece informações precisas sobre a utilização atual da memória. ###### Como é utilizada a memória no antifrod 1. **Identificação do dispositivo:**. Dispositivos diferentes alocam memória de forma diferente. Por exemplo, os dispositivos móveis têm frequentemente menos memória do que os computadores de secretária. 2. **Testes de troca:** A comparação da memória reivindicada com a utilização efectiva ajuda a detetar a adulteração de parâmetros. ###### Métodos de falsificação de memória - Ocultação de valores reais:** Os atacantes podem utilizar extensões do browser para alterar o valor deviceMemory. - **Distorção de dados de desempenho:** Por exemplo, devolvendo valores que parecem plausíveis mas não correspondem aos parâmetros reais do dispositivo. Vamos verificar a nossa página de teste para obter informações sobre: - **jsHeapSizeLimit** - Tamanho máximo de memória que pode ser alocado para JavaScript - **totalJSHeapSize** - Tamanho total da memória alocada - usedJSHeapSize** - O tamanho da memória efetivamente utilizada.  Na secção principal **Thread Data - memoryAnalysis** verificamos o tamanho da memória no browser e este teste é pedido 3 vezes em pequenos intervalos. Vamos tentar passar este teste num dispositivo móvel:  Podemos notar que o browser móvel arredonda os valores dados. Vamos repetir o teste no browser anti-deteção utilizando o perfil de dispositivo móvel:  O browser anti-deteção substituiu corretamente apenas os valores de uma propriedade jsHeapSizeLimit, o formato dos valores das outras propriedades permaneceu semelhante ao formato do browser para computador. Este conjunto de valores pode ser um fator de ativação para os sistemas antifraude. Note-se que a propriedade performance.memory não é suportada em todos os navegadores e a deteção bem sucedida de tais propriedades ao substituir o User Agent por um navegador que não suporta estas propriedades também levanta suspeitas entre os sistemas antifraude. ###### User Agent no exemplo da Amazon Utilizando o exemplo do site amazon.com, vamos considerar que informações sobre o User Agent são recebidas pelo site. Consideremos as informações transmitidas nos cabeçalhos http:  O site obtém as seguintes informações sobre o dispositivo do utilizador a partir dos cabeçalhos http: device-memory: 8 sec-ch-device-memory: 8 sec-ch-ua: “Google Chrome”;v=“131”, “Chromium”;v=“131”, “Not_A Brand”;v="24” sec-ch-ua-mobile: ?0 sec-ch-ua-plataforma: “Windows” sec-ch-ua-platform-version: “10.0.0” user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/131.0.0.0.0 Safari/537.36 Agora vamos verificar quais informações relacionadas ao User Agent o site obteve usando JavaScript:  O site obtém informações detalhadas sobre o navegador, a versão do navegador, o fornecedor do navegador, a plataforma, o tamanho da memória, o suporte de toque no dispositivo, o número de núcleos de CPU que utilizam diferentes API. #### Conclusão O agente do utilizador e a memória do programa de navegação são parâmetros-chave para a exclusividade do utilizador em sistemas antifraude. A sua utilização em combinação com outros factores, como a impressão digital do Canvas e outras API, permite criar algoritmos fiáveis para detetar actividades fraudulentas. *Bannykh M.V.*