domingo, 24 de novembro de 2013

Wireshark na Análise de Tráfego e Protocolos em Redes

Olá Pessoal.

Esse é mais um artigo que escrevi atendendo a pedido de leitores do blog e temos, dessa vez, como temática da discussão o software Wireshark, uma ferramenta extremamente poderosa que deve fazer parte do arsenal técnico de todo profissional da área de redes de computadores. O Wireshark é um analisador de pacotes que, para tanto, tem capacidade de interceptar "todos" os pacotes que trafegam nas redes e de exibir detalhes das suas informações de controle (cabeçalhos) e conteúdo (payload). O software é gratuito, está disponível para Linux/Windows e pode ser baixado no link http://www.wireshark.org, sendo que o guia do usuário pode ser baixado aqui.


É claro que em  um artigo é impossível esgotar todas as funcionalidades dessa ferramenta fantástica, por isso esse artigo tem três objetivos principais: (i) contextualizar a operação do software, (ii) delinear algumas características técnicas do arranjo topológico físico/lógico da rede que podem interferir no processo de captura dos pacotes a serem analisados e (iii) trazer dois exemplos de interpretação das saídas de pacotes capturados.

1) Operação do Software Wireshark

Um primeiro conceito importante que o leitor deve ter em mente antes de começar a operar esse software é que seu objetivo é trazer informações detalhadas sobre pacotes que foram previamente capturados em um ambiente em que exista uma rede de computadores. A ação de capturar/interceptar pacotes caracteriza uma atividade de escuta dos dados que trafegam na rede, por isso seu uso deve ser realizado por pessoal autorizado para fazê-lo no ambiente em operação, seja para simples monitoramento de conteúdo (a exemplo de conversas telefônicas via VoIP) ou mesmo para a identificação de problemas na rede para fins de otimização do seu desempenho. Esses são os propósitos do software e ele não deve ser utilizado sem autorização como sniffer de rede, o que caracteriza um ataque passivo de interceptação ao conteúdo da rede de computadores.

Normalmente há muito tráfego que chega nas interfaces de uma rede por meio de broadcast (ou outras tecnologias de transmissão) e que não são de interesse de uma interface específica, por isso o comportamento padrão é que somente o tráfego de interesse das interfaces é aceito, de forma que todos os demais pacotes são descartados. Esse é um comportamento padrão baseado na confiança que pode ser alterado através de um método que coloca as interfaces em modo promíscuo, um estado em que elas passam a receber e processar todos os pacotes entrantes/saintes.

O Wireshark organiza as informações de controle contidas nos cabeçalhos dos pacotes para facilitar o processo de leitura e análise técnica, no entanto é necessário que esses pacotes sejam previamente capturados em alguma interface de rede. Para fazê-lo o software utiliza bibliotecas que são responsáveis por colocar as interfaces de rede em modo promíscuo.

2) Características Técnicas do Arranjo Topológico da Rede

Logo nas primeiras aulas de redes de computadores os alunos estudam conceitualmente os principais dispositivos de interconexão onde são apresentadas as principais diferenças entredois dispositivos concentradores: (i) HUB e (ii) Switch. Nessa ocasião os alunos aprendem que mesmo ambos os dispositivos sendo elementos centrais (concentradores) que criam uma topologia física de estrela, o modo de operação entre eles é distinto implicando em diferentes topologias lógicas, conforme pode ser observado na figura abaixo.


O HUB cria uma topologia lógica de barramento porque eletronicamente todas as suas portas estão ligadas em um mesmo barramento físico, o que implica na existência de um único dominío de colisão compartilhado entre todas as portas. Ele é um simples dispositivo repetidor que (i) recebe sinal em uma porta de entrada, (ii) amplifica esse sinal e (iii) despacha esse sinal para todas as demais portas de saída. Como ele é um dispositivo de camada física, não possui inteligência para analisar os cabeçalhos dos quadros.

Uma vez que a topologia lógica do HUB é de barramento, o sinal recebido em uma porta é retransmitido para TODAS as demais portas, o que é ruim do ponto de vista de desempenho e segurança. Por causa disso é muito simples interceptar o tráfego/conteúdo dessa rede através de algum software sniffer, já que todo sinal entre quaisquer máquinas é propagado para todas as portas. 

Por outro lado o Switch cria uma topologia lógica de estrela porque eletronicamente possui uma matriz (denominada matriz crossbar) que permite o chaveamento de circuitos ponto-a-ponto entre duas portas específicas, o que implica em um domínio de colisão para cada porta. Paraestabelecer esses circuitos entre duas portas os switches são dispositivos da camada de enlace e possuem inteligência para analisar os cabeçalhos dos quadros, motivo pelo qual eles utilizam o endereço físíco das interfaces (MAC) no processo de encaminhamento.

É comum o uso de softwares de interceptação de quadros/pacotes em redes de computadores para fins de monitoramento e análise da "saúde" da rede. O problema de utilizar esses softwares nas redes que possuem switch (diga-se de passagem quase todas atualmente), é que ao conectar o computador monitorador em uma porta qualquer do switch ele não será capaz de "escutar" nenhum tráfego entre os circuitos fechados nas demais portas. Por exemplo, uma comunicação entre dois computadores ligados nas portas 1 e 2 de um switch não será transmitida na porta 3 (nem em qualquer outra). 

É para resolver esse problema que existem as tecnologias de port-mirroring. Essa tecnologia de espelhamento consiste em configurar uma determinada porta do switch para espelhar todo o tráfego entre os circuitos das demais portas, daí no nome espelhamento. Ou seja, essa porta irá se tornar o "dedo-duro" da rede replicando todo o tráfego como se fosse um HUB. Naturalmente essa porta será aquela em que o computador monitorador estará executando o software de interceptação (sniffer). Essa discussão sobre port-mirroring já foi apresentada em outro artigo do blog intitulado "Configuração de Espelhamento de Portas em Switch", onde o leitor pode encontrar exemplos de configuração baseados em tecnologias Cisco.

3) Interpretação de Pacotes Capturados

Uma vez apresentados ao leitor os principais conceitos relacionados ao Wireshark, essa última parte do artigo tem por objetivo trazer dois exemplos de como as saídas geradas pelo software podem ser interpretadas para mostrar o que acontece nos "bastidores" de uma rede de computadores. Para fazê-lo estarei utilizando dois exemplos clássicos com vocês, ambos baseados no processo de resolução de endereços MAC do IPv4 (através do ARP) e do IPv6 (através do NDP/ICMPv6).

O procedimento para verificar a descoberta do endereço físico (MAC) de uma interface de rede é bastante simples com o uso do Wireshark. Uma vez que a ferramenta faz a captura dos pacotes das redes, bem como a ordenação dos mesmos por categoria de protocolos, fica fácil identificar toda a comunicação oriunda dos protocolos ARP (no IPv4) e NDP (no IPv6).

Através das opções "Capture | Interfaces | Start" do Wireshark é possível iniciar a captura dos pacotes que estão trafegando na rede. O software irá organizar a saída da maneira apresentada nas figuras abaixo. Observem que a parte superior da tela traz várias linhas (entradas) que representam pacotes individuais e na parte inferior existe o detalhamento das informações dos cabeçalhos e payload desses pacotes, dispostos em conformidade com as camadas do TCP/IP. Quando o usuário clica em qualquer uma das linhas/entradas da parte superior, então a tela inferior muda seu detalhamento.

3.1 Protocolo ARP na Resolução de Endereços IPv4 em MAC

Aqui cabe uma revisão relâmpago acerca do ARP e do processo de resolução de endereços físicos no contexto do IPv4. Quando uma máquina quer se comunicar com outra ela conhece, a princípio, apenas o endereço lógico (IP) do destino, no entanto é necessário saber seu endereço físico (MAC) para que as interfaces de rede possam se comunicar na camada de enlace (tecnologia de rede).

Os sistemas operacionais armazenam uma tabela com as associações entre endereços MAC e IP (chamada Tabela ARP) e quando não existe uma correspondência nessa tabela, então o protocolo ARP (Address Resolution Protocol) entra em ação, conforme pode ser observado na figura abaixo. Na primeira comunicação para um dado destino, a máquina envia uma mensagem de broadcast para toda a rede local perguntando qual é o endereço físico da máquina que possui um determinado IP. Todas as máquinas da rede irão receber e processar essa requisição, no entanto somente a máquina que possuir o endereço IP procurado irá responder com a informação do seu endereço físico.


Por exemplo, nas próximas duas figuras, extraídas do Wireshark, o leitor pode observar que as linhas destacadas são pacotes do protocolo ARP (request e reply), onde faço alguns destaques importantes que mostram ao leitor como interpretar essas informações para compreender a operação do protocolo. Aproveitem essa oportunidade para fazer sua análise das figuras abaixo, comparando as informações trazidas pelo software com a explicação anterior. Veja que as informações procedem, por isso o Wireshark é um software importante também para convencer os alunos e facilitar o entendimento dos protocolos que operam nas redes de computadores.



3.2 Protocolo NDP na Resolução de Endereços IPv6 em MAC

Uma mudança significativa da operação do IPv6 diz respeito ao processo de resolução dos endereços físicos, já que não existe o protocolo ARP no IPv6. No IPv6 a funcionalidade de resolução de endereços lógicos em endereços físicos é responsabilidade do NDP (Neighbor Discovery Protocol), por meio de mensagens ICMPv6 Tipo 135 NS (Neighbor Solicitation) e ICMPv6 Tipo 136 NA (Neighbor Advertisement). Cabe aos sistemas operacionais manterem uma tabela de vizinhança com as associações entre os endreços IPv6 <> MAC.


Com base na figura acima, quando o Host-A deseja se comunicar com o Host-B (2001:db8:cafe:1::1), ele envia uma mensagem a um "grupo" de máquinas para descobrir o endereço MAC da interface configurada com esse IPv6. Para tanto, a mensagem é destinada ao endereço multicast-solicited-node respectivo que, nesse exemplo, é o endereço ff02::1:ff00:1. O formato do endereço solicited-node é ff02::1:ffXX:XXXX, onde X representa os últimos 24 bits do IPv6 do destino.

O campo target do cabeçalho é preenchido com o endereço IPv6 a ser resolvido, o que evita a ambiguidade em caso de duas ou mais máquinas terem os mesmos 24 bits finais no seu endereço. Além disso, existe um campo de opções chamado source-link-layer-address, que é preenchido com o endereço MAC da origem para evitar que o destino, ao receber a mensagem, tenha que refazer esse processo de resolução de endereços para obter o MAC do vizinho antes de respondê-lo.


Na segunda etapa, assim que recebe uma NS com seu endereço IPv6 no campo target, o Host-B envia uma mensagem NA com o seu endereço MAC no campo target-link-layer-address (00:00:00:00:AA:00), destinado unicamente ao Host-A (origem da NS anterior). Quando a mensagem NA chega ao Host-A, já é capaz de criar uma nova associação na sua tabela de vizinhança e, portanto, aprendeu o endereço MAC 00:00:00:AA:00 do IPv6 2001:db8:cafe:1::1.


Caso o leitor tenha dúvidas a respeito do modus operandi do IPv6, recomendo a leitura do meu livro intitulado "IPv6 - O Novo Protocolo da Internet". As explicações trazidas nesse artigo tinham por objetivo subsidiar o entendimento de como interpretar as saídas do Wireshark, por isso não houve aprofundamento teórico.

Abraço.

Samuel.

sábado, 16 de novembro de 2013

Anúncio de Prefixos IPv6 em Roteadores Linux

Olá Pessoal.

Em outra oportunidade escrevi um artigo no blog intitulado "Autoconfiguração de Endereços IPv6 (SLAAC)" explicando como é possível que as redes IPv6 sejam automaticamente configuradas sem que o administrador tenha que realizar nenhuma configuração nas máquinas. Utilizei a figura abaixo para descrever que o processo de autoconfiguração dos endereços consiste basicamente em duas etapas: (i) configuração do prefixo e (ii) configuração do sufixo de host. A primeira etapa é possível porque os hosts aprendem o prefixo da rede através das mensagens ICMPv6 Tipo 134 (RA) anunciadas pelos roteadores.


Recentemente também escrevi alguns artigos explicando como manipular o comportamento padrão dos sistemas operacionais para formação do seu sufixo de host. Pois bem, agora chegou a vez de darmos destaque ao processo de configuração do roteador para permitir o anúncio dos prefixos que serão utilizados pelas máquinas para formar seu endereço através do mecanismo SLAAC.

Normalmente nos roteadores do tipo "caixa", a exemplo de roteadores Cisco, as mensagens ICMPv6 Tipo 134 (RA) são periodicamente enviadas para todos os nós através do endereço ff02::1 (multicast-all-nodes) com o anúncio dos prefixos configurados nas interfaces desses roteadores, o que torna desnecessária qualquer configuração para ter as funcionalidades básicas em operação.

No entanto, é importante ter em mente que máquinas executando o Linux, mesmo que tenham a capacidade de roteamento, não se comportam como roteadores por padrão. Ou seja, o Linux não permite o encaminhamento de tráfego entre sub-redes nem emite as mensagens RA para informar aos hosts que ele é o gateway da rede. No entanto, é possível instruir seu kernel a permitir o roteamento por meio da seguinte linha de comando:

root@Router:/# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

Isso mesmo, sei que os leitores familiarizados com a configuração de roteadores baseados em Linux devem ter percebido que esse é o comando correspondente ao seguinte comando que era utilizado no IPv4 para permitir o encaminhamento de tráfego entre sub-redes (roteamento):

root@Router:/# echo "1" > /proc/sys/net/ipv4/ip_forward

Como exemplo do processo de configuração de um roteador Linux para fazer o anúncio dos prefixos IPv6 para toda uma rede local (link), estarei utilizando como base o cenário da figura abaixo. Reparem que o roteador possui duas interfaces de rede (eth0 e eth1), cada uma em sua respectiva sub-rede, sendo que a interface eth0 possui o endereço 2001:db8:cafe:1::1/64, ou seja, faz parte da sub-rede 2001:db8:cafe:1::/64 (verde). Nesse exemplo não estamos preocupados com a sub-rede da interface eth1 (azul) e, para verificar se as configurações estão corretas, nossa referência será a máquina n4 que também é membro da sub-rede 2001:db8:cafe:1::/64 (verde).



Quanto a configuração do anúncio periódico das mensagens RA no roteador Linux, primeiro é necessário instalar o serviço RADVD (Router Advertisement Daemon) e, depois, configurá-lo utilizando o arquivo que normalmente fica localizado em /etc/radvd.conf. Para instalar o RADVD em distribuições baseadas no Debian basta entrar com o comando "sudo apt-get install radvd". Feito isso, é necessário configurar o arquivo radvd.conf, ativar o roteamento IPv6 e inicializar o serviço radvd para que o Linux faça o anúncio periódico do prefixo IPv6 através das mensagens RA (134). O leitor pode observar todas essas configurações na figura abaixo:



Se tudo estiver correto com a configuração do roteador Linux, então as máquinas da rede já estarão recebendo os anúncios do(s) prefixo(s) IPv6 e serão capazes de autoconfigurar seus endereços. A figura abaixo traz a saída das configurações de rede da máquina n4, fazendo um comparativo do antes e depois da configuração do radvd no roteador Linux. Reparem que, depois de configurado e habilitado o serviço radvd, a máquina passa a autoconfigurar um endereço IPv6 com o prefixo 2001:db8:cafe:1::/64. Seu endereço final fica 2001:db8:cafe:1:200:ff:feaa:2, lembrando que seu sufixo 200:ff:feaa:2 foi formado pela função EUI-64, a partir do seu endereço MAC 00:00:00:aa:00:02.



Para encerrar esse artigo trago uma amostra da captura de pacotes realizada na interface de rede da máquina n4 para que o leitor possa observar a presença das mensagens ICMPv6 Tipo 134 (RA) chegando em meio aos demais pacotes trafegados na rede. Reparem que o endereço de origem é o link-local (fe80) do roteador Linux e o endereço de destino é o grupo multicast ff02::1.


Abraço.

Samuel.

quarta-feira, 13 de novembro de 2013

Marco Civil da Internet e Neutralidade da Rede

Olá Pessoal.

Em época de atenção constante ao Marco Civil da Internet, legislação que discorre sobre direitos e deveres dos usuários e empresas no ambiente digital da Internet, achei por bem que seria importante deixar minha contribuição sobre o assunto para os leitores do blog. 

As discussões sobre o Marco Civil da Internet ganharam notoriedade recentemente no cenário nacional em virtude do escândalo das espionagens praticadas pela NSA, a agência norte-americana de segurança. Por conta disso, o governo brasileiro, mais uma das vítimas dessas investigações, passou a dar mais atenção a esse tema que, na realidade, já vem sendo discutido desde 2009. 


O Marco Civil da Internet é um projeto de lei que estabelece direitos e deveres para o uso da rede Internet no Brasil. Boa parte dos princípios propostos no Marco Civil da Internet teve sua essência originada da Resolução 003/2009 do CGI.br, o Comite Gestor da Internet no Brasil. Essa resolução, amplamente apoiada pela Internet Society (ISOC), entidade que sou membro, prega princípios importantes como a universalização indiscriminatória da Internet, a neutralidade da rede, a privacidade dos usuários, a inimputabilidade da rede, entre outros igualmente importantes. 

A Internet Society e o Marco Civil da Intenet têm por objetivo central defender os interesses dos usuários da Internet porque somos do entendimento de que a Internet é um direito fundamental dos homens, visão compartilhada em declaração da ONU em maio de 2011. Em síntese, o Marco Civil defende a universalização indiscriminatória da Internet e aquilo que chamamos de neutralidade da rede, uma proteção da Internet aos interesses comerciais das grandes operadoras de telecomunicações.  Outro ponto importante é a garantia de que a governança da Internet no Brasil seja multilateral com participação de todos os setores da sociedade, o que já acontece hoje no Brasil através do CGI.br. 

O grande problema desse embate é que as operadoras têm interesse comercial em manipular o conteúdo da Internet para criar pacotes de serviços diferenciados e isso é entregar ao usuário uma experiência diferente do que é realmente a Internet! Isso é dar às teles (operadoras de telecom) o direito de filtrar conteúdo, como acontece nas TVs. O maior potencial da Internet é que ela não possui uma "grade de programação" e qualquer um pode produzir conteúdo, de forma que quem determina seu sucesso ou fracasso são os próprios usuários, ou seja, estamos falando de um ambiente absolutamente democrático.

Outro impacto negativo da não neutralidade é que as teles teriam o direito, por exemplo, de dar tratamento inferior ao tráfego de aplicações de videoconferência (ex.: Skype) para tornar o serviço ruim e forçar o uso dos seus serviços pagos! Seria algo como inserir técnicas de QoS (qualidade de serviço) no CONTEÚDO da Internet para atender os interesses de quem paga mais. Enfim, são vários os impactos negativos caso a rede deixe de ser neutra...

A neutralidade da rede é muito destacada porque defende o tratamento igualitário (indiscriminado) de todo o tráfego da Internet por parte das operadoras de Internet fixa e móvel. Esse princípio, se regulamentado, impedirá que essas empresas vendam pacotes limitados onde o acesso à Internet existe apenas para determinados conteúdos, como algumas redes sociais! Ter acesso apenas a uma rede social ou algum conteúdo específico não é a Internet, trata-se de um modelo de negócios muito parecido com o que temos hoje nas TVs por assinatura... Não é isso que queremos para a Internet, queremos a manutenção da nossa liberdade de expressão e de todo o potencial inovador da Internet!

Por fim, aproveito para compartilhar com vocês o vídeo abaixo que explica a neutralidade da rede com uma abordagem diferente e bem interessante, deixando claro o motivo das grandes operadoras de telecomunicações serem contrárias à neutralidade.


Com os acontecimentos recentes de espionagem no Brasil o assunto ficou "quente" e aumentou o "jogo de interesses" nesse projeto, sendo que recentemente alguns grandes radiodifusores se uniram às grandes operadoras de telecomunicações para fazer pressão no sentido de alterar sua redação original. O projeto já deveria ter sido aprovado nessa semana, mas foi postergado para aprovação na próxima semana. É importante que estejamos atentos para que sua redação original não seja alterada a ponto de que seus princípios fundamentais sejam comprometidos até que tenhamos sua aprovação!!! Enquanto usuários da Internet, temos todos que fazer a nossa parte e por isso precisamos defender a bandeira favorável à aprovação da redação original do Marco Civil da Internet!

Abraço.

Samuel.