Laboratorio: Captura de pacotes HTTP
Laboratório: Captura de pacotes HTTP
- Para este laboratório será utilizado a ferramenta de captura de pacotes wireshark
- Veja no link as instruções para download e instalação do wireshark, bem como as instruções para uso do ferramenta.
- O laboratório deve ser realizado em uma máquina virtual, em virtude da necessidade de conta de administrador para instalar os aplicativos e utilizar o wireshark.
Fonte: [1].
Objetivos
O objetivo deste laboratório é estudar o funcionamento da Aplicação Web e explorar o funcionamento do protocolo HTTP, incluindo as mensagens de pedido (GET) e resposta, formatos de mensagens HTTP, baixando arquivos grandes em HTML, baixando arquivos em HTML com objetos incluídos, e autenticação e segurança HTTP.
Pedido e Resposta HTTP
Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML pequeno, sem objetos incluídos.
- Procedimentos
- Inicie o navegador;
- Inicie o Wireshark e selelcione o filtro http, de tal forma que apenas as mensagens HTTP capturadas serão exibidas na janela de listagem de pacotes. ;
- Inicie a captura de pacotes
- Digite o seguinte URL no navegador http:200.17.101.9/redes/redes1.html;
- Pare a captura de pacotes.
- Análise dos pacotes capturados
- Verifique a mensagem GET (enviada pelo seu navegador para o servidor) e a mensagem de resposta do servidor para o seu navegador;
- Verifique os detalhes da mensagem GET;
- Verifique o encapsulamento dos protocolos, com a mensagem HTTP sendo transportada em um segmento TCP, que é carregado em um datagrama IP, que por sua vez é levado em um quadro Ethernet.
- Perguntas
- O seu navegador executa HTTP 1.0 ou 1.1?
- Qual a versão de HTTP do servidor?
- Quais idiomas o seu navegador indica que pode aceitar ao servidor?
- Qual o endereço IP do seu computador e do servidor?
- Qual o número da porta TCP utilizada no seu computador e pelo servidor?
- Qual o endereço MAC do seu computador?
- É possível veridficar o MAC do servidor?
- Qual o código de status retornado do servidor para o seu navegador?
- Quando o arquivo em HTML que você baixou foi modificado no servidor pela última vez?
- Quantos bytes de conteúdo são baixados pelo seu navegador?
A Interação HTTP GET Condicional/Resposta
A maioria dos navegadores web tem uma memória cache que permite armazenar as últimas páginas acessadas. Desta forma o nagegador realiza um GET condicional quando busca um objeto HTTP a fim de verificar se o objeto em cache é o mesmo que está sendo provido pelo servidor.
- Procedimentos
- Inicie o navegador web;
- Limpe o cache do seu navegador (Firefox: Editar -> Preferências -> Avançado);
- Inicie o Wireshark e selelcione o filtro http, de tal forma que apenas as mensagens HTTP capturadas serão exibidas na janela de listagem de pacotes. ;
- Digite o seguinte URL no navegador http:200.17.101.9/redes/redes1.html;
- Visualize os pacores capturados;
- Pressione o botão “atualizar” no navegador;
- Pare a captura de pacotes.
- Perguntas
- Inspecione o conteúdo da primeira mensagem HTTP GET do seu navegador para o servidor. Você vê uma linha If-Modified-Since?
- Inspecione o conteúdo da resposta do servidor. O servidor retornou explicitamente o conteúdo do arquivo? Como você pode dizer isso?
- Agora inspecione o conteúdo da segunda mensagem HTTP GET do seu navegador para o servidor. Você vê uma linha If-Modified-Since? Caso a resposta seja afirmativa, qual informação segue o cabeçalho If-Modified-Since?
- Qual é o código de status e a frase retornada do servidor na resposta à segunda mensagem HTTP GET? É diferente do código de retorno da primeira mensagem?
- O servidor retornou explicitamente o conteúdo do arquivo? Explique.
- Qual o tamanho da primeira e segunda mensagem de retorno do servidor?
Baixando Documentos Longos
Nos exemplos até agora, os documentos baixados foram simples e pequenos arquivos em HTML. Vamos ver o que acontece quando baixamos um arquivo em HTML grande.
- Procedimentos
- Inicie o navegador web;
- Limpe o cache do seu navegador;
- Inicie o Wireshark;
- Digite o seguinte URL no navegador http:200.17.101.9/redes/redes2.html;
- Pare a captura de pacotes e selecione o filtro http para que apenas as mensagens HTTP seja exibidas.
- Análise dos pacotes capturados
- Verifique a mensagem GET e a resposta do servidor;
- Verifique a carga útil (Content-Length) da resposta HTTP, que é o arquivo HTML completo;
- Verifique que o arquivo HTML é muito grande para caber em um segmento TCP, por isto, a mesma é acomodada em vários segmentos TCP. Note que cada segmento TCP é capturado em um pacote separado pelo Wireshark, veja Reassembled TCP Segments.
- Perguntas
- Quantas mensagens HTTP GET foram enviadas pelo seu navegador?
- Quantos segmentos TCP foram necessários para carregar a resposta?
- Qual é o código de status e a frase associada com a resposta à mensagem HTTP GET?
- No segundo GET realizado, quantos segmentos TCP foram necessários para obtenção da resposta do servidor?
- O que explica a diferença entre a primeira e segunda requisições?
Documentos HTML com Objetos Incluídos
Vamos observar o que acontece quando o seu navegador baixa um arquivo com objetos incluídos, como por exemplo, uma figura.
- Procedimentos
- Inicie o navegador web;
- Limpe o cache do seu navegador;
- Inicie o Wireshark;
- Digite o seguinte URL no navegador http:200.17.101.9/redes/redes3.html;
- Pare a captura de pacotes e selecione o filtro http para que apenas as mensagens HTTP seja exibidas.
- Perguntas
- Quantas mensagens HTTP GET foram enviadas pelo seu navegador?
- Para quais endereços na Internet estas mensagens foram enviadas?
- Você consegue dizer se o seu navegador baixou as duas imagens em sequência, ou se foram baixadas dos dois locais distintos em paralelo? Explique.
Autenticação HTTP
Finalmente, vamos tentar visitar um local na web que é protegido por senha e examinar a seqüência de mensagens HTTP trocadas com este local. O URL http://www.sj.ifsc.edu.br/~odilson/RED29004/Seguro/ é protegido por senha. O usuário é “red29004” (sem as aspas), e a senha é “seguro” (novamente, sem as aspas). Então vamos acessar o local protegido por senha. Faça o seguinte:
- inicie o navegador web;
- limpe o cache do seu navegador;
- inicie o Wireshark;
- digite o URL no navegador http://www.sj.ifsc.edu.br/~odilson/RED29004/Seguro/ seu navegador apresentará um pop up solicitando usuário e senha;
- forneça usuário e senha e o navegador apresentará uma "linda" página já conhecida;
- pare a captura de pacotes, e digite "http" na caixa de texto de especificação de filtro, para que apenas as mensagens HTTP seja exibidas.
Agora vamos examinar a saída do Wireshark. Você pode querer primeiro ler sobre a autenticação HTTP revisando o material fácil de ler (em inglês) HTTP Access Authentication Framework
Responda às seguintes questões:
- Qual é a resposta do servidor (código de status e frase) para a primeiro mensagem HTTP GET do seu navegador?
- Quando o seu navegador envia a mensagem HTTP GET pela segunda vez, qual o novo campo que está incluído na mensagem?
O nome de usuário (red29004) e a senha (seguro) que você digitou foram codificados na cadeia de caracteres (cmVkMjkwMDQ6c2VndXJv) após o cabeçalho “Authorization: Basic” na mensagem HTTP GET (primeira). Parece que o nome e senha estão criptografados, mas na verdade estão simplesmente codificados em um formato denominado Base64. O nome do usuário e a senha não estão criptografados! Para ver isso, vá para https://www.base64decode.org/ e digite o texto cmVkMjkwMDQ6c2VndXJv e pressione DECODE. Voilá! Você traduziu de Base64 para ASCII, e desta forma consegue ver o nome de usuário e a senha! Sabendo que alguém pode baixar o Wireshark e capturar pacotes (não somente os próprios), e alguém pode traduzir de Base64 para ASCII (você acabou de fazê-lo!), deve estar claro para você que o uso de senhas apenas em locais na web não garantem segurança, a não ser que medidas adicionais sejam tomadas. Não tema! Há meios de fazer o acesso WWW ser mais seguro. Contudo, nós claramente precisamos de algo que vá além do framework básico de autenticação HTTP!
HTTPS
Para finalizar, vamos capturar sequências de mensagens HTTPS, somente a título de comparação. Execute os seguintes procedimentos:
- inicie o navegador web;
- limpe o cache do seu navegador;
- inicie o Wireshark;
- digite o URL no navegador https://www.base64decode.org/ seu navegador apresentará um site já apresentado/utilizado;
- pare a captura de pacotes e digite "ssl" na caixa de texto de especificação de filtro, para que apenas as mensagens criptografadas sejam exibidas.
Responda:
- Compare a sequência de troca de mensagens (GET e resposta) entre o HTTP (das seções anteriores) com o ssl, existe alguma similaridade?
- Que tipos de campos são mais presentes nesse tipo de mensagens?
- Você consegue identificar o conteúdo de alguma nas mensagens ssl?
--Evandro.cantu (discussão) 16h36min de 23 de abril de 2015 (BRT)