Sunday, July 19, 2020

Secops - User Agents e o user agent spoofing (PT-BR)


User Agents... agentes, mas não tão usuários.

 (EN-USVeja os testes realizados neste post no vídeo.

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)"

 Verifique este site  para saber mais sobre outros scanners de vulnerabilidade

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.

SecOps - The user agent and user agent spoofing

User agents... agents but not so user.

(PT-BR) Check this video to see the tests used to create this post.

One of the information available on web server logs is the User Agent. What are user agents?

User agents are the software's that make requests from the client to the web server. User agent is an information that tells to the server which software the user (or not) is using to access the web page. So whenever you access a web page, the server will know with software you are using to navigate. Here a simple user agent name:

“Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0”

The user agent information is found on web server logs. Usually all web server logs will have user agent on configured. And this is an example of a basic web server log with the 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; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" (Get more information about web server logs here.

So, what is the problem of user agents? None. They work and are useful on log analysis.

The point is that they can be faked or crafted during the web request. There are many ways to do it. Changing the real user agent for some other is called "user agent spoofing". This is a common way to avoid basic attack detections.  Here I will show an easy way to do it. It uses Linux wget command. In this example. our Linux machine has the IP 10.1.0.10 and the web server has the IP: 10.2.0.110.

The first wget request:

$wget 10.2.0.110

The web server will show this log and the user agent from the request:

10.1.0.10 - - [18/Jul/2020:10:28:07 -0400] "GET / HTTP/1.1" 200 28067 "-" "Wget/1.20.3 (linux-gnu)"

Let’s force the user agent to change. Our user agent will be: i’m a firefox browser. Check the command and the web server logs bellow.

$wget -U "i'm a firefox browser" 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"

The next scenario we will use a user agent that is common on Firefox browsers. You can find a good list of user agents here.

$wget -U "Mozilla/5.0 (X11; Linux x86_64; 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; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

This last user agent is the same of the one that we saw if using the Firefox browser. The difference would be the number of requests. Wget only perform a GET, while Firefox browser would perform a GET Request and try to download all content to show the web page. You can see this on this video.

Some user agents are used by well-known software’s to perform automatically tasks like vulnerability scan. Some user agents from vulnerability scanners are:

-          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)"

Check this web site to learn about others vulnerability scanners

The question would be: Why someone is scanning my network? Red Teams, security auditors usually scan the web pages. Also attacker do it too. So, its better to identify. 

What are the most important things about user agent information?

-          If you see a weird user agent, you should investigate. This is true because mostly users will not use weird agents.

-          If you do not see a weird agent, you should look to the log carefully. This can be a benign request or a malicious request with a fake user agent.

Understand the logs during an incident investigation is really important. Web application investigation can use the web server logs and user agent is an important information. Take care about your conclusions when you see the user agent information.

Check this video to see the tests used to create this post.