User Agents... agentes, mas não tão usuários.
Uma das informações disponíveis em registros de servidores web e registros de aplicativos do servidor web é o Agente do Usuário.
O user agent é o software responsável pelo envio das requisições web do cliente para o servidor web. Esta informação que diz ao servidor qual software o usuário (ou não) está usando para acessar a página da Web. Esta informação é visualizada no log de acesso do servidor, quando configurado. Aqui um simples nome de agente de usuário:
"Mozilla/5.0 (X11; x86_64 Linux; rv:60.0) Gecko/201001 Firefox/60.0"
As informações do user agent são encontradas nos registros do servidor web. Normalmente, todos os logs do servidor web terão o agente do usuário configurado. E este é um exemplo de um registro de log básico do servidor web com o user agent.
10.1.0.10 - [20/Jul/2018:13:38:10-0500] "GET /animatedcollapse.js
HTTP/1.1" 304 - "http://10.2.0.101/" "Mozilla/5.0 (X11;
x86_64 Linux; rv:60.0) Gecko/201001 Firefox/60.0" (Obtenha mais
informações sobre registros do servidor web aqui).
Então, qual é o problema dos agentes de usuário? Nenhum. Eles funcionam e são úteis na análise de log. A questão é que eles podem ser alterados ou criados durante a solicitação ao servidor web. Há muitas maneiras de fazer isso. Alterar o user agent real por outro é conhecido como "user agent spoofing". Esta é uma forma comum de evitar as regras de bloqueio básicas durante ataques.
Aqui eu vou mostrar uma maneira fácil de fazê-lo para comprovar esta teoria. Esta forma usa comando Linux wget. Neste exemplo, o nosso Linux tem o IP: 10.1.0.10 e o servidor web tem o IP: 10.2.0.110.
A primeira requisição usando o wget:
$wget 10.2.0.110
O servidor web irá mostrar este registro de log, destacado o user agent:
10.1.0.10 -
[18/Jul/2020:10:28:07 -0400] "GET / HTTP/1.1" 200 28067 "-"
"Wget/1.20.3 (linux-gnu)"
Vamos forçar o agente do usuário a mudar. Nosso user agent será: i’m a firefox browser (eu sou um navegador firefox – em tradução livre). Verifique o comando e os registros do servidor web abaixo:
$wget -U "eu sou um navegador firefox"
10.2.0.110
10.1.0.10 -
[18/Jul/2020:10:28:34 -0400] "GET / HTTP/1.1" 200 28067 "-"i'm
a firefox browser"
No próximo cenário usaremos um user agent comum nos navegadores Firefox. Você pode encontrar uma boa lista de user agents aqui.
$wget -U
"Mozilla/5.0 (X11; x86_64 Linux; rv:68.0) Gecko/20100101
Firefox/68.0" 10.2.0.110
10.1.0.10 -
[18/Jul/2020:10:29:39 -0400] "GET /favicon.ico HTTP/1.1" 200 3638
"-"Mozilla/5.0 (X11; x86_64 Linux; rv:68.0) Gecko/20100101
Firefox/68.0"
Este último user agent é o mesmo que vemos ao usar o navegador Firefox. A diferença seria o número de requisições feitas para o servidor Web. Wget só executar um GET, enquanto o navegador Firefox realizaria um GET request e tentaria baixar todo o conteúdo para mostrar a página da Web. Para entender esta diferença olhe este post.
Alguns user agents são usados por softwares conhecidos para executar tarefas automaticamente, como varreduras de vulnerabilidade. Alguns agentes de usuário de scanners de vulnerabilidade são:
-
- Nikto:
"Mozilla/5.00 (Nikto/2.1.6) (Evasions:None) (Test:Port Check)"
- - OpenVas: "Mozilla/5.0 [en] (X11, U; OpenVAS-VT
11.0.0)"
Uma pergunta seria: por que alguém está escaneando minha rede?
Times de segurança ofensiva (Red Teams) e auditores costumam automatizar
as varreduras de vulnerabilidades. Entretanto, atacantes também costuma utilizar
ferramentas para agilizar seus ataques. Então é melhor ficar atento.
Quais são as coisas mais importantes sobre as informações dos agentes de usuário?
- Se você detectar um user agent estranho, você deve investigar. Isso é verdade porque a maioria dos usuários não usa agentes estranhos.
- Se você não detectar um user agent estranho, você deve olhar para o registro cuidadosamente. Isso pode ser uma solicitação benigna ou uma solicitação maliciosa com um falso agente de usuário.
Entender os registros durante uma investigação de incidente é realmente importante. A investigação de aplicativos web pode usar os registros do servidor web e o agente do usuário é uma informação importante. Tome cuidado com suas conclusões quando vir as informações do agente do usuário.
Veja os testes realizados neste post no vídeo.