Capitulo 9788575225936

Page 1

Jessey Bullock • Jeff T. Parker

Novatec


All rights reserved. This translation is published under license with the original publisher John Wiley & Sons, Inc. Copyright © 2017 by John Wiley & Sons, Inc., Indianapolis, Indiana. Todos os direitos reservados. Tradução autorizada da edição em inglês intitulada Wireshark® for Security Professionals: Using Wireshark and the Metasploit® Framework, publicada pela John Wiley & Sons, Inc. Copyright © 2017 por John Wiley & Sons, Inc., Indianapolis, Indiana. Nenhuma parte deste livro pode ser reproduzida, armazenada ou transmitida em qualquer formato ou por qualquer meio, eletrônico, físico e etc., sem a autorização por escrito do titular original do copyright, John Wiley & Sons, Inc. http://www.wiley.com/go/permissions © Novatec Editora Ltda. 2017. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-593-6 Histórico de impressões: Julho/2017

Primeira edição

Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec


capítulo 1

Introdução ao Wireshark

Bem-vindo ao Wireshark para profissionais de segurança. Este capítulo introdutório aborda três tópicos amplos. Na primeira parte, discutiremos a finalidade do Wireshark e quando usá-lo. A segunda parte deste capítulo apresenta a GUI (Graphic User Interface, ou Interface Gráfica de Usuário) popular do Wireshark. A GUI pode parecer cheia de informações à primeira vista, portanto devemos rapidamente adquirir familiaridade com o seu layout. Dividiremos as diferentes áreas da interface, veremos como elas se relacionam umas com as outras e buscaremos compreender o raciocínio que justifica a necessidade de cada área. Também discutiremos como e quando cada parte da interface ajudará você a maximizar o seu uso do Wireshark. Na terceira parte deste capítulo, discutiremos como o Wireshark filtra os dados apresentados na interface. Ter familiaridade com a interface do Wireshark ajudará você a apreciar todos os dados apresentados, porém o volume de dados ainda poderá causar apreensão. O Wireshark oferece maneiras de filtrar ou de separar os dados de que você precisará dentre tudo mais que lhe for apresentado. A última parte diz respeito aos diferentes tipos de filtros e descreve como é possível personalizá-los. O Wireshark pode parecer uma ferramenta complicada, mas, no final deste primeiro capítulo, esperamos que você se sinta muito mais à vontade com o propósito da ferramenta, sua interface e a capacidade de apresentar aquilo que você deseja ver.

O que é o Wireshark? O Wireshark, no sentido mais básico, é uma ferramenta para compreender os dados que você capturar de uma rede. Os dados capturados são interpretados e apresentados na forma de pacotes individuais para análise, tudo dentro do Wireshark. Como você provavelmente já sabe, pacotes são porções de streaming de dados em 22


Capítulo 1 ■ Introdução ao Wireshark

23

uma rede. (Tecnicamente, de acordo com o nível do contexto em que os dados são interpretados no sistema, essas porções são chamadas de frames, datagramas, pacotes ou segmentos, mas usaremos simplesmente “pacotes” por enquanto.) O Wireshark é uma ferramenta de análise de rede e de protocolos que pode ser baixada gratuitamente e usada em diversas plataformas, incluindo muitas variantes de Unix e de Windows. O Wireshark inicialmente captura os dados de uma interface de rede e então divide a captura em frames, segmentos e pacotes, entendendo em que ponto eles começam e terminam. Em seguida, o Wireshark interpreta e apresenta esses dados no contexto de endereçamento, protocolos e dados. Você pode analisar as capturas imediatamente ou salvá-las para que sejam carregadas mais tarde e compartilhadas com outras pessoas. Para que o Wireshark visualize e capture todos os pacotes, e não apenas aqueles que envolvam o sistema efetuando a captura, a interface de rede é colocada em modo promíscuo (também chamado de modo monitor) no contexto de captura em uma rede wireless. Por fim, a capacidade de analisar pacotes no Wireshark deve-se aos dissecadores (dissectors). Todos esses elementos básicos serão discutidos com mais detalhes no Capítulo 4, no contexto de “sniffing” ou de captura de dados, e veremos como esses dados capturados são interpretados.

Qual a melhor hora para usar o Wireshark? O Wireshark é uma ferramenta extremamente potente, com uma boa quantidade de funcionalidades detalhadas e complexas. Essa ferramenta é capaz de tratar uma ampla variedade de protocolos conhecidos (e desconhecidos). Contudo, apesar de a variedade de funcionalidades ser ampla, a maior parte delas visa a um único propósito: capturar pacotes e analisá-los. Ser capaz de obter os bits e bytes e apresentá-los em um formato organizado, conhecido e legível aos seres humanos é o que leva as pessoas a pensar em usar o Wireshark. Antes de iniciar o Wireshark, é importante entender quando devemos e quando não devemos usá-lo. É evidente que é uma ótima ferramenta, mas, como qualquer ferramenta, será mais bem utilizada quando for adequada para o trabalho. Eis alguns cenários em que é ideal usar o Wireshark: • procurar a causa-raiz de um problema conhecido; • procurar um determinado protocolo ou um stream entre dispositivos; • analisar timings específicos, flags de protocolos ou bits transmitidos.


24

Wireshark para profissionais de segurança

Embora não seja ideal, o Wireshark também pode ser usado para: • descobrir quais dispositivos ou protocolos são os top talkers (que mais conversam); • ter uma visão geral do tráfego de rede; • seguir uma conversa entre dois dispositivos. Deu para ter uma ideia? O Wireshark é ideal para determinar a causa-raiz de um problema compreendido. Embora não seja ideal para navegar pelo tráfego de rede ou fazer julgamentos de alto nível sobre a rede, o Wireshark tem alguns recursos para mostrar essas estatísticas. Contudo o Wireshark não pode nem deve ser a primeira ferramenta em que devemos pensar inicialmente para descobrir um problema. Uma pessoa que abrir o Wireshark para percorrer rapidamente a lista de pacotes a fim de avaliar a saúde de uma rede logo se sentirá apreensiva. Em vez disso, o Wireshark é apropriado para quem resolve problemas, isto é, para os detetives que já conhecem bem os seus suspeitos.

Evitando se sentir apreensivo A maioria das pessoas que se afasta do Wireshark o faz porque se sente apreensiva depois de algumas poucas experiências iniciais. Rotular o Wireshark como uma ferramenta que cause apreensão, porém, é um engano. O que realmente paralisa os novos usuários é o tráfego ou a lista de pacotes passando, e não a funcionalidade da aplicação. E, sejamos justos, depois que você inicia uma captura e os pacotes rolam pela tela em tempo real, definitivamente, é intimidador. (Mas é para isso que servem os filtros!) Para evitar se sentir apreensivo, considere dois aspectos do Wireshark antes de mergulhar de cabeça na ferramenta: • a interface – como ela está organizada e por quê; • filtros – como eles funcionam para revelar o que você deseja. Após uma apreciação rápida da interface da ferramenta e de como escrever um filtro, o Wireshark logo parecerá intuitivo e mostrará a sua eficácia, sem o fator medo. E é nisso que nos concentraremos no restante deste capítulo. As próximas seções apresentam os aspectos mais importantes com os quais você precisará se sentir à vontade quando usar o Wireshark. Se você já tem familiaridade com o Wireshark bem como com os filtros, sinta-se à vontade para passar os olhos


Capítulo 1 ■ Introdução ao Wireshark

25

rapidamente por este capítulo como lembrete para ter certeza de que estaremos no mesmo nível para compreender o restante do livro.

Interface de usuário do Wireshark Começaremos com a GUI rica do Wireshark, repleta de recursos. Apresentaremos uma visão geral dos locais que você deverá observar para começar a ver alguns dados de pacotes. Após abordar a captura de pacotes, discutiremos em seguida os recursos mais eficazes do Wireshark, começando pelos dissecadores (dissectors). No Wireshark, os dissecadores fazem parse de um protocolo e o decodificam para apresentá-lo na interface. Eles permitem que o Wireshark apresente algum contexto para o streaming de bits e bytes brutos sendo transmitidos, exibindo-os de modo um pouco mais significativo ao analista humano. Então concluiremos o capítulo discutindo os vários filtros disponíveis, que ajudarão a limitar e a enfocar somente os dados de rede que forem de seu interesse. A tela inicial aparece quando você abre o Wireshark. Nessa tela, há atalhos que podem ser usados para iniciar uma nova captura ou abrir um arquivo de captura anterior. Para a maioria dos iniciantes em Wireshark, o botão Capture (Captura), de cor viva, é a opção mais atraente. Iniciar uma captura resulta em uma grande quantidade de pacotes rolando na tela; isso deixa os iniciantes apreensivos. Vamos retornar, porém, à tela inicial. Há também links para documentação online que podem ser usados para descobrir como executar determinada tarefa. Na parte superior da tela, como vemos na Figura 1.1, está a barra de menu no formato clássico, com a qual, provavelmente, você já tem familiaridade. Esses menus têm configurações e outros recursos, como estatísticas, que podem ser acessados quando for necessário. (Não se preocupe – não estamos realmente preocupados com estatísticas.) Abaixo desses menus encontra-se a barra de ferramentas principal, com ícones para acesso rápido às funcionalidades que serão mais usadas quando você analisar o tráfego de rede. Esses ícones incluem tarefas como iniciar ou interromper uma captura, além de vários botões de navegação para transitar pelos pacotes capturados. Os botões dos ícones geralmente estarão desabilitados caso não sejam aplicáveis ou utilizáveis – por exemplo, se não houver nenhuma captura ainda. Os ícones mudam com o tempo, de versão para versão. Quando este livro foi escrito, a barbatana de tubarão azul iniciava uma captura e o quadrado vermelho a interrompia. A barbatana de tubarão estará desabilitada até a interface de rede ser escolhida; discutiremos esse assunto em breve. Observe também que a área dessa


26

Wireshark para profissionais de segurança

barra de ferramentas apresenta uma indicação visual do processo de captura. Novamente, muitas opções estão desativadas na Figura 1.1 porque ainda não estamos capturando dados ou não temos uma captura concluída. À medida que avançar neste capítulo, preste atenção nessa área para entender como ela muda e reflete os diversos estados de uma captura. Em vários aspectos, o Wireshark proporciona uma experiência de usuário intuitiva.

Figura 1.1 – A tela inicial do Wireshark.

A barra de ferramentas Filter (Filtro), abaixo da barra de ferramentas principal, é uma parte essencial da UI do Wireshark. Em breve você se apaixonará por essa pequena caixa, pois, com frequência, você vai se ver afogando-se em uma torrente de tráfego. A barra de ferramentas Filter permite remover qualquer dado que não seja interessante para a tarefa em mãos e apresentará apenas o que você estiver procurando (ou removerá o que você não estiver buscando). Você pode fornecer filtros de exibição na caixa de texto Filter (Filtro), o que ajudará a explorar melhor quaisquer pacotes vistos no painel Packet List (Lista de pacotes). Discutiremos os filtros em detalhes mais adiante neste capítulo, mas, por ora, simplesmente confie em mim: eles serão seus melhores amigos a partir de agora.


Capítulo 1 ■ Introdução ao Wireshark

27

Painel Packet List A parte maior no meio da interface está reservada para a lista de pacotes. Essa lista mostra todos os pacotes capturados, juntamente com informações úteis como IP de origem e de destino e a diferença de tempo entre a recepção dos pacotes. O Wireshark oferece suporte para usar código de cores em diversos pacotes a fim de facilitar a ordenação do tráfego e a resolução de problemas. Você pode acrescentar cores personalizadas nos pacotes de seu interesse, e as colunas no painel Packet List (Lista de pacotes) exibem informações úteis como protocolo, tamanho do pacote e outras informações específicas do protocolo (veja a Figura 1.2).

Figura 1.2 – O painel Packet List (Lista de pacotes).

Essa janela apresenta uma visão geral da rede sujeita ao sniffing ou da captura de pacotes que você carregar no Wireshark. A última coluna, chamada de “Info” por padrão, apresenta um resumo rápido do que o pacote contém. É claro que essa informação depende do pacote, mas pode ser o URL de uma requisição HTTP ou o conteúdo de uma consulta DNS, o que é realmente útil para compreender rapidamente a importância do tráfego em sua captura.


28

Wireshark para profissionais de segurança

Painel Packet Details Abaixo do painel Packet List (Lista de pacotes) está o painel Packet Details (Detalhes do pacote). O painel Packet Details mostra informações do pacote selecionado no painel Packet List. Esse painel contém muitas informações, inclusive o que são os diversos bytes no pacote. Informações como o endereço MAC de origem e de destino estão incluídas nesse local. A próxima linha contém informações sobre IP. A linha seguinte mostra que o pacote está enviando dados na porta UDP 58351. A próxima revela quais informações estão contidas nesse pacote UDP. Essas linhas estão ordenadas de acordo com os cabeçalhos, conforme são ordenados quando dados são enviados na rede. Isso significa que elas estão sujeitas a mudanças caso você esteja capturando dados em um tipo de rede diferente, por exemplo, uma rede wireless, que tem cabeçalhos diferentes. A coluna DNS, que contém os dados de aplicação encapsulados no UDP, está expandida na Figura 1.3. Observe como o Wireshark permite facilmente extrair informações, como a consulta DNS propriamente dita feita nesse pacote DNS. É isso que faz do Wireshark a ferramenta de análise eficaz que ela é. Você não precisa memorizar o protocolo DNS para saber quais bits e bytes em qual offset se traduzem em uma consulta de DNS.

Figura 1.3 – O painel Packet Details (Detalhes do pacote).


Capítulo 1 ■ Introdução ao Wireshark

29

Subárvores Como os detalhes poderiam causar apreensão caso fossem todos mostrados de uma só vez, as informações são organizadas e podem ser recolhidas em seções. As seções, chamadas de subárvores, podem ser recolhidas e expandidas para exibir somente o que for necessário. (Na Figura 1.2, as subárvores estão recolhidas; na Figura 1.3, estão expandidas.) NOTA

Talvez você tenha ouvido falar da mensagem enviada entre dispositivos ser referenciada como um frame de dados ou um pacote. Mas qual é a diferença? Ao referenciar a mensagem na camada 2 do modelo OSI (a camada de link [ou de enlace] de dados, na qual o endereço MAC é usado), a mensagem completa é chamada de frame. Quando nos referimos à mensagem na camada 3 do modelo OSI (a camada de rede, por exemplo, que usa o endereço IP), a mensagem é chamada de pacote.

Se já tiver familiaridade com o modo como o frame de dados está estruturado, você reconhecerá como as subárvores com os detalhes dos pacotes estão subdivididas. Os detalhes estão estruturados em subárvores conforme os cabeçalhos do frame de dados. Você pode recolher/expandir uma subárvore clicando na seta ao lado da seção relevante. A seta apontará para a direita se a subárvore estiver recolhida. Depois de clicar na seta para expandir essa subárvore, você verá a seta apontar para baixo (veja a Figura 1.3). E, é claro, sempre há a opção de expandir ou recolher todas as subárvores clicando com o botão direito do mouse em qualquer lugar no painel Packet Details para iniciar o menu pop-up. Nas Figuras 1.2 e 1.3, o pacote número 7 está selecionado. O pacote que estiver selecionado no painel Packet List será o pacote apresentado nos painéis abaixo. Nesse caso, é o pacote número 7 que está sendo exibido no painel Packet Details. NOTA

Os pacotes geralmente são numerados de acordo com o horário em que são recebidos, embora isso não seja garantido. A biblioteca de captura de pacotes (pcap) determina como ordenar os pacotes.

Se você der um clique duplo nesse pacote, uma janela separada será apresentada para exibir os detalhes do pacote. Esse recurso será conveniente quando você quiser comparar visualmente dois pacotes diferentes de forma rápida. A área Packet Details na Figura 1.3 mostra diversas linhas com informações que podem ser expandidas ou recolhidas.


30

Wireshark para profissionais de segurança

Capturando detalhes suficientes A primeira linha contém metadados relacionados ao pacote, por exemplo, o número do pacote, quando e em qual interface foi capturado e o número de bytes capturados versus o número de bytes que estavam sendo transmitidos. Essa última parte pode soar um pouco estranha. Você não iria sempre capturar todos os bytes que são transmitidos? Não necessariamente. Algumas ferramentas de captura de rede permitem capturar somente um subconjunto dos bytes que estão realmente sendo transmitidos. Esse recurso será útil se você quiser simplesmente ter uma ideia dos tipos de pacote que estão passando pelos fios, mas não dos dados propriamente ditos que esses pacotes contêm, o que pode reduzir enormemente o tamanho da captura de pacotes. A desvantagem, é claro, é que você terá apenas uma quantidade limitada de informações. Se o espaço em disco não for um problema, sinta-se à vontade para capturar tudo. Apenas esteja ciente de que você estará capturando e armazenando todo o tráfego que passar por esse cabo de rede, quantidade essa que pode se tornar rapidamente significativa. Há maneiras de limitar o tamanho da captura. Por exemplo, em vez de dados de pacote truncados, capture somente tipos específicos de pacotes, e não o tráfego todo. Se alguém quiser lhe enviar uma captura, ou se você quiser ver um tráfego específico, poderá fazer o Wireshark capturar somente o tráfego que você quer, economizando espaço. Tudo é feito usando-se os filtros corretos – e essa seção será apresentada em breve!

Painel Packet Bytes Após o painel Packet Details (Detalhes do pacote), temos o painel Packet Bytes (Bytes do pacote). Esse painel está na parte inferior da tela e merece o prêmio de ser o menos intuitivo. À primeira vista, a tela simplesmente parece conter vários dados sem nexo. Acompanhe-me por mais alguns parágrafos – logo tudo fará sentido.

Offsets, hexa e ASCII Você pode notar que o painel Packet Bytes (Bytes do pacote) está dividido em três colunas. A primeira coluna mais à esquerda tem apenas um contador incremental: 0000, 0010, 0020, e assim sucessivamente. É o offset (em hexadecimal) do pacote selecionado. Nesse caso, offset simplesmente significa o número de bits a partir do início – mais uma vez, contando em hexadecimal (em que 0 x 0010 = 16 em decimal). A coluna do meio mostra informações que estão nesse offset, em hexadecimal. A coluna mais à direita exibe as mesmas informações, porém em ASCII.


Capítulo 1 ■ Introdução ao Wireshark

31

Por exemplo, a quantidade total de informações desde o início (offset 0000) até o offset 0010 é de 16 bytes. A coluna do meio mostra cada um dos 16 bytes em hexa. A coluna à direita exibe cada um dos 16 bytes em caracteres ASCII. Quando um valor hexadecimal não pode ser traduzido para um caractere ASCII que possa ser exibido, somente um “.” (ponto) é mostrado. Desse modo, o painel Packet Bytes, na verdade, apresenta os dados brutos do pacote, conforme vistos pelo Wireshark. Por padrão, os dados são exibidos em bytes hexa. Clicar no painel com o botão direito do mouse fornecerá a você a opção para converter os bytes hexa em bits, que é a representação mais pura possível dos dados, embora, com frequência, talvez não seja tão intuitiva quanto a representação hexa. Outro recurso conveniente é que qualquer linha que você selecionar no painel Packet Details fará os dados correspondentes no painel Packet Bytes serem destacados. Esse recurso poderá ser útil quando você estiver resolvendo problemas com os dissecadores do Wireshark, pois lhe permitirá ver exatamente os bytes que o dissecador está vendo nos pacotes.

Filtros Ao iniciar sua primeira captura de pacotes, provavelmente haverá muita coisa acontecendo no painel Packet List (Lista de pacotes). Os pacotes passam pela tela de forma rápida demais para que possamos compreender qualquer dado significativo. Felizmente é nessa hora que os filtros podem ajudar. Os filtros são a melhor maneira de chegar rapidamente às informações que são mais importantes durante suas sessões de análise. A engine de filtragem do Wireshark permite restringir os pacotes da lista de modo que fluxos de comunicação ou determinadas atividades dos dispositivos de rede se tornem prontamente evidentes. O Wireshark aceita dois tipos de filtro: filtros de exibição (display filters) e filtros de captura (capture filters). Os filtros de exibição dizem respeito somente ao que você vê na lista de pacotes; os filtros de captura atuam na captura e descartam pacotes que não correspondam às regras fornecidas. Observe que a sintaxe dos dois tipos de filtro não é a mesma. Os filtros de captura usam uma sintaxe de baixo nível chamada BPF (Berkeley Packet Filter, ou Filtro de Pacotes de Berkeley), enquanto os filtros de exibição utilizam uma sintaxe lógica que você reconhecerá das linguagens de programação mais populares. Outras três ferramentas de captura de pacotes – TShark, Dumpcap e tcpdump – também usam BPF para filtros de captura, pois é rápido e eficiente. Tanto o TShark quanto o Dumpcap são ferramentas de linha de comando para


32

Wireshark para profissionais de segurança

captura de pacotes e oferecem recursos para análise; o primeiro é a contrapartida de linha de comando do Wireshark. O TShark será apresentado no Capítulo 4 e discutido com mais detalhes com um exemplo de saída. A terceira ferramenta – o tcpdump – serve estritamente para captura de pacotes. Geralmente você usará filtros de captura quando quiser limitar o volume de dados de rede a ser processado e salvo; utilize filtros de exibição para explorar apenas os pacotes que você quiser analisar depois que os dados tiverem sido processados.

Filtros de captura Ao capturar tráfego de rede, haverá ocasiões em que será possível limitar o tráfego desejado de antemão; em outras ocasiões, você precisará fazer isso porque os arquivos de captura crescerão muito rapidamente se você não começar a filtrar os dados. O Wireshark permite filtrar o tráfego na fase de captura. De certo modo, é semelhante aos filtros de exibição, sobre os quais você lerá mais adiante neste capítulo, mas há menos campos que podem ser usados para a filtragem, e a sintaxe é diferente. É muito importante entender que um filtro de captura verifica os pacotes antes que estes sejam capturados. Um filtro de exibição, porém, verifica quais pacotes salvos serão exibidos. Desse modo, um filtro de captura restritivo implica que seu arquivo de captura será pequeno (e, portanto, haverá um número menor de pacotes exibidos também). Contudo, não usar nenhum filtro de captura significa que todos os pacotes serão capturados e, portanto, teremos um arquivo de captura grande no qual filtros de exibição poderão ser usados a fim de restringir a lista de pacotes exibidos. Embora faça sentido que o Wireshark capture tudo por padrão, na verdade, filtros de captura default são utilizados em alguns cenários. Se você estiver usando o Wireshark em uma sessão remota, por exemplo, durante um Remote Desktop ou um SSH, a captura de todos os pacotes incluirá muitos pacotes transmitindo o tráfego de sessão. Na inicialização, o Wireshark verifica se uma sessão remota está em uso. Em caso afirmativo, um filtro de captura para filtrar o tráfego de sessão remota estará em uso, por padrão. Os blocos de construção de um filtro de captura são: protocolo, direção e tipo. Por exemplo, tcp dst port 22 captura somente pacotes TCP com uma porta de destino igual a 22. Os tipos possíveis são: • host • port


Capítulo 1 ■ Introdução ao Wireshark

33

• net • portrange A direção pode ser definida usando src ou dst. Como você deve suspeitar, src é usado para capturar dados de um endereço de origem especificado, enquanto dst pode determinar o endereço de destino. Se nada for especificado, ambos serão levados em consideração. Além de especificar uma direção, os modificadores de direção combinados a seguir podem ser usados: src or dst e src and dst. De modo semelhante, se um tipo não for especificado, um tipo host será pressuposto. Observe que você deve especificar pelo menos um objeto com o qual será feita a comparação; o modificador host não será pressuposto se você especificar apenas um endereço IP como filtro, e resultará em um erro de sintaxe. A direção e o protocolo podem ser omitidos para corresponder a um tipo, tanto na origem quanto no destino, em todos os protocolos. Por exemplo, dst host 192.168.1.1 mostrará somente o tráfego para o IP especificado. Se dst for omitido, o tráfego desse e para esse endereço IP será exibido. Os protocolos de BPF a seguir são os mais comumente usados: • ether (filtragem de protocolos Ethernet); • tcp (filtragem de tráfego TCP); • ip (filtragem de tráfego IP); • ip6 (filtragem de tráfego IPv6); • arp (filtragem de tráfego ARP). Além dos componentes-padrão, há um conjunto de primitivas que não se enquadra em nenhuma das categorias: • gateway (faz a correspondência se um pacote tiver usado o host especificado como gateway); • broadcast (para tráfego broadcast, e não unicast); • less (menor que, seguido de um tamanho); • greater (maior que, seguido de um tamanho). Essas primitivas podem ser combinadas com os demais componentes. Por exemplo, ether broadcast fará a correspondência para todo o tráfego de broadcast Ethernet.


34

Wireshark para profissionais de segurança

Expressões para filtros de captura podem ser encadeadas usando operadores lógicos. Novamente, podemos usar tanto a notação em inglês quanto a notação lógica: • and (&&) • or (||) • not (!) Por exemplo, eis alguns filtros para sistemas chamados alpha e beta: • host beta (captura todos os pacotes do e para o sistema alpha); • ip6 host alpha and not beta (captura todos os pacotes IP entre alpha e qualquer host, exceto beta); • tcp port 80 (captura todo o tráfego TCP que passe pela porta 80).

Depurando filtros de captura Os filtros de captura atuam em um nível baixo dos dados de rede capturados. Eles são compilados para opcodes do processador (linguagem do processador) a fim de garantir um alto desempenho. O BPF compilado pode ser exibido usando o operador -d no tcpdump, no Dumpcap ou no TShark, e no menu Capture Options (Opções de captura) na GUI. Esse recurso será útil ao depurar um problema em que seu filtro não esteja fazendo exatamente o que você esperava. A seguir apresentamos um exemplo da saída de um filtro BPF: localhost:~$ dumpcap -f "ether Capturing on 'eth0' (000) ld [8] (001) jeq #0x2030405 (002) ldh [6] (003) jeq #0x1 (004) ld [2] (005) jeq #0x2030405 (006) ldh [0] (007) jeq #0x1 (008) ret #65535 (009) ret #0

host 00:01:02:03:04:05" -d

jt 2 jf 4 jt 8 jf 4 jt 6 jf 9 jt 8 jf 9


Capítulo 1 ■ Introdução ao Wireshark

35

Conforme mencionamos antes, o uso do operador -d fará o código BPF do filtro de captura ser exibido. E, conforme usado no exemplo anterior, o operador -f mostrará a sintaxe de filtro da libpcap. A seguir, apresentamos uma explicação linha a linha do BPF: • A linha 0 carrega o offset da segunda parte do endereço de origem. • A linha 1 compara o pacote no offset com 2030405 e faz um jump para a linha 2 caso haja correspondência, ou para a linha 4, caso contrário. • As linhas 2 e 3 carregam o offset da primeira parte do endereço de origem e o compara com 0001. Se também houver uma correspondência, o valor 65535 poderá ser devolvido para capturar esse pacote. • As linhas de 4 a 7 fazem o mesmo que as linhas de 0 a 3, mas para o endereço de destino. • As linhas 8 e 9 contêm instruções para retornar. Você pode usar esse método para analisar o filtro passo a passo a fim de conferir em que lugar há algo errado acontecendo.

Filtros de captura para testes de invasão Suspeitamos que você já saiba, mas acrescentaremos essa informação, somente por garantia: “pentesting” é a forma reduzida de penetration testing (testes de invasão), e é a arte de testar um computador, uma rede ou uma aplicação em busca de vulnerabilidades. Qualquer pentester que estiver lendo este livro terá familiaridade com o conceito de que você acabará sendo acusado por todos os problemas que ocorrerem na rede, mesmo que não estiver conectado a ela na ocasião. Desse modo, capturar dados em um teste de invasão será conveniente se você tiver de provar aos clientes irritados que não teve genuinamente nada a ver com o fato de o switch ter morrido ou um sistema SCADA crítico aos negócios ter explodido. Também será útil quando você tiver de analisar suas capturas de pacote para coletar informações em geral ou fazer análises e gerar relatórios após o teste. O comando a seguir capturará todo o seu tráfego de saída para servir como um registro de log de suas ações na rede. Somente o tráfego proveniente de sua placa de rede identificada pelo endereço MAC será capturado e será salvo separadamente em vários arquivos com timestamps prefixados por pentest. Observe que o Dumpcap foi usado nesse caso no lugar da GUI ou do TShark. dumpcap -f "ether src host 00:0c:29:57:b3:ff" -w pentest -b filesize:10000


36

Wireshark para profissionais de segurança

Você pode executar esse comando em segundo plano, pois executar uma instância completa do Wireshark consumiria muitos recursos do sistema. Salvar apenas o tráfego de saída não será de muita serventia para análise de testes de invasão. Para capturar todo o tráfego da e para a sua máquina de testes, em conjunto com o tráfego de broadcast, utilize o comando a seguir: dumpcap -f "ether host 00:0c:29:57:b3:ff or broadcast" -w pentest -b filesize:10000

Como podemos ver, somente a diretiva src foi removida, e uma expressão de broadcast foi combinada com a expressão de Ethernet usando a instrução or. O comando de teste de invasão mostrado a seguir também pode ser usado para capturar tráfego de e para uma lista de endereços IP; por exemplo, todos os IPs que estiverem no escopo de seu teste de invasão. Isso se aplica a casos em que você estiver usando várias máquinas virtuais e, portanto, endereços MAC, mas quiser fazer log de todo o tráfego relevante. dumpcap -f "ip host 192.168.0.1 or ip host 192.168.0.5"

A lista de hosts poderia ficar um pouco extensa demais para digitar manualmente, portanto será mais conveniente armazenar os alvos de seu escopo em um arquivo hosts.txt e utilizá-lo. Para gerar o filtro propriamente dito, use o comando de linha única apresentado a seguir e remova o último or: cat hosts.txt | xargs -I% echo -n "ip host % or "

Filtros de exibição Para iniciar a discussão sobre filtros de exibição, começaremos com uma rápida explicação sobre a sintaxe e os operadores disponíveis, seguida da descrição de um uso típico, que deverá servir como um ponto de partida rápido para você. A sintaxe do filtro de exibição é baseada em expressões que devolvem true ou false usando operadores de comparação. Essas podem ser combinadas com operadores lógicos booleanos com o objetivo de combinar diversas expressões para que você possa realmente explorar seus resultados. Veja a Tabela 1.1, que apresenta os operadores de comparação mais comuns.


Capítulo 1 ■ Introdução ao Wireshark

37

Tabela 1.1 – Operadores de comparação Inglês

Estilo C

Descrição

eq

==

Igual

ne

!=

Diferente de

gt

>

Maior que

lt

<

Menor que

ge

>=

Maior ou igual a

le

<=

Menor ou igual a

Contains

Verifica se o campo do filtro contém um dado valor

Matches

Testa um campo em relação a uma expressão regular em estilo Perl

Fonte: http://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html

Se você já usou qualquer linguagem de programação moderna, a sintaxe deverá ser conhecida. Para compor uma expressão útil, você deverá fazer a correspondência entre esses operadores em relação às variáveis do pacote. Isso é possível no Wireshark acessando variáveis agrupadas de acordo com o protocolo. Por exemplo, ip.addr conterá o endereço de destino e de origem. A instrução a seguir filtra todo o tráfego indo ou vindo do endereço IP fornecido: ip.addr == 1.2.3.4. Isso funciona fazendo a correspondência em relação ao cabeçalho tanto do endereço de destino quanto do endereço de origem no pacote IP, de modo que true será devolvido para os pacotes nas duas direções. NOTA

Tenha em mente que a expressão testará os dois valores da variável especificada caso ela ocorra mais de uma vez no pacote. Por exemplo, eth.addr será comparado tanto com a origem quanto com o destino. Isso pode resultar em um comportamento inesperado se as expressões forem agrupadas incorretamente. Essa condição será especialmente verdadeira em expressões que apresentem negação, por exemplo, eth.addr != 00:01:02:03:04:05. Essa expressão sempre devolverá true.

No exemplo anterior com operadores de comparação, um endereço IP foi comparado com a variável ip.addr para que mostrasse somente o tráfego de e para esse IP. Se você tentasse comparar a mesma variável com google.com, o Wireshark apresentaria uma mensagem de erro, pois a variável não é um endereço IP. As variáveis disponíveis para uso em expressões são tipadas. Isso significa que a linguagem espera que um objeto de determinado tipo seja comparado somente com uma variável do mesmo tipo. Para ver as variáveis disponíveis e seus tipos, acesse a página Display Filter


38

Wireshark para profissionais de segurança

Reference (Exibir referência de filtros) do Wireshark em http://www.wireshark.org/ docs/dfref/. Na prática, você também poderá ver os valores que o Wireshark espera para cada elemento do pacote inspecionando-o no painel Packet Details (Detalhes do pacote). Os nomes das variáveis podem ser encontrados na parte inferior à esquerda da tela na barra de status ou poderão ser consultados na referência. A barra de status lista o campo de filtro para a linha selecionada no painel Packet Details. Como exemplo disso, veja a Figura 1.4. Um pacote é capturado, e um byte está em destaque no painel Packet Details. A parte com um byte representa a versão de IP. Veja a parte inferior à esquerda da aplicação, na barra de status: “Version (ip.version), 1 byte”.

Figura 1.4:  Informação de campo na barra de status.

Uma boa maneira de filtrar os pacotes disponíveis é definindo uma expressão inspecionando um pacote que seja de seu interesse. É mais fácil ver os marcadores que fazem a diferenciação entre os pacotes que você quer ver comparando os campos no painel Packet Details. Como podemos ver na Figura 1.5, cada campo no pacote ARP está listado com um valor legível (hexa no painel Packet Details), seguido do valor bruto (do lado direito do painel Packet Details). Ambos os valores podem ser usados de modo geral em uma expressão, pois o Wireshark transforma o formato legível no formato bruto correspondente para sua conveniência. Por exemplo, se você quisesse ver somente requisições ARP no painel Packet List, o filtro seria arp.opcode == 1. Nesse caso, digitar request não funcionaria, pois essa não é uma representação nomeada do mesmo dado. (O número 1 poderia ter muitos significados.) Com endereços MAC, nomes de protocolo e assim por diante, a versão nomeada pode ser usada.


Capítulo 1 ■ Introdução ao Wireshark

39

Figura 1.5 –  Opcode de um pacote ARP.

Geralmente uma única expressão não é específica o suficiente para restringir o stream de pacotes que você esteja procurando ao lidar com capturas de pacote maiores, como é o caso na Figura 1.5. Para localizar o conjunto exato de pacotes que você quer ver, combine expressões usando operadores lógicos. A Tabela 1.2 mostra os operadores disponíveis. O símbolo e o operador representado pela palavra em inglês podem ser usados de forma intercambiável, conforme a preferência pessoal. Tabela 1.2 – Operadores lógicos Inglês

Estilo C

Descrição

and

&&

AND lógico. Devolve true se ambas as expressões forem verdadeiras.

or

||

OR lógico. Devolve true se uma ou ambas as expressões forem verdadeiras.

xor

^^

Exclusive OR lógico. Devolve true se apenas uma das duas expressões for verdadeira.

not

!

NOT lógico. Nega a expressão que vem a seguir.

[ ]

Operador de fatia (slice). Com esse operador, uma fatia (substring) da string pode ser acessada. dns.resp.name[1..4] acessa os quatro primeiros caracteres do nome na resposta DNS.

( )

Agrupa expressões.

Fonte: http://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html

Construindo filtros de exibição de modo interativo Para adquirir experiência rapidamente na criação de filtros, você pode usar a interface gráfica do Wireshark e os diversos menus de contexto para construir filtros de forma interativa. Comece clicando com o botão direito do mouse em uma seção


40

Wireshark para profissionais de segurança

de um pacote que seja de seu interesse e, em seguida, selecione Apply as Filter  Selected (Aplicar como filtro  Selecionado) para filtrar a lista de pacotes de acordo com a variável selecionada. Por exemplo, selecionar o campo de endereço IP de origem e aplicar um filtro a ele é uma boa maneira de começar a restringir rapidamente os pacotes em que você está interessado. Após filtrar de acordo com esse endereço IP em particular, você pode querer acrescentar uma porta de destino ao filtro para ver somente o tráfego desse host na porta 80. Isso também pode ser feito na GUI, sem jogar fora o filtro atual, clicando com o botão direito do mouse na porta de origem no painel Packet Details e selecionando Apply as Filter  Selected (Aplicar como filtro  Selecionado) para combinar o novo filtro com o filtro anterior usando and. A GUI também lista outras combinações, como or, not, e assim por diante. Além do mais, podemos usar o menu de contexto Prepare as Filter (Preparar como filtro) para criar o filtro sem realmente aplicá-lo ao seu painel Packet List. A Figura 1.6 mostra um exemplo do código para filtro de exibição após selecionar dois itens: pacotes do protocolo ARP e o endereço MAC de origem.

Figura 1.6 – Resultados do filtro para ARP de um endereço de origem.

Depois de selecionar ARP para ser aplicado como filtro, somente pacotes do protocolo ARP de diversos sistemas foram exibidos no painel Packet List. Após selecionar um MAC de origem (SamsungE_e1:ad:3c) como uma expressão de filtro, o filtro de exibição foi corrigido de modo a se transformar em arp.src.hw_mac == c4:57:6e:e1:ad:3c. A Figura 1.7 mostra como instruções de filtro complexas podem ser criadas usando essa técnica. Como podemos ver na barra de status, o Wireshark pode sugerir o acréscimo de parênteses ou o User Guide (Guia do usuário). Nos capítulos que estão por vir, construiremos e usaremos muitos filtros; isso serve apenas para mostrar que os filtros certamente podem ser expandidos e ter mais que uma ou duas funções.


Capítulo 1 ■ Introdução ao Wireshark

41

Figura 1.7 –  Exemplo de um filtro de exibição complexo.

Podemos sempre usar os menus de contexto para editar o filtro na barra Filter (Filtro) após iniciá-lo. Se estiver criando filtros de modo interativo, certifique-se de estar ciente dos filtros que o Wireshark aplica para você observando a sintaxe inserida na barra Filter. Criar filtros interativamente oferece uma ótima maneira de entender os campos de filtro e os protocolos mais comumente utilizados. Você verá que isso vale a pena quando lidar com casos de uso mais sofisticados do Wireshark no futuro.

Resumo Parabéns por terminar o primeiro capítulo. É um capítulo razoavelmente leve, pois, na verdade, não começamos ainda a trabalhar com a aplicação. Considerando a crença de que novos usuários do Wireshark geralmente ficam surpresos com o número rapidamente crescente de pacotes, o livro tem como objetivo acabar com a apreensão do usuário antes que ela surja. As duas grandes áreas a ser discutidas antes de usar realmente o Wireshark são a GUI e os filtros. Apresentamos uma visão geral da GUI, mantendo o foco em seu layout e nas ideias por trás dele. O layout está dividido em três painéis: Packet List (Lista de pacotes), Packet Details (Detalhes do pacote) e Packet Bytes (Bytes do pacote). Os painéis apresentam dados de pacotes em diferentes níveis de detalhe e servem para ajudar o usuário a explorar os bytes individuais.


42

Wireshark para profissionais de segurança

No capítulo discutiram-se também os dois tipos de filtro do Wireshark. Você pode usar filtros de captura para filtrar os pacotes a ser capturados. Os filtros de captura atuam enquanto uma captura está ocorrendo, verificando o tráfego de rede que deve ser mantido e aquele que será ignorado. Também podemos usar filtros de exibição para filtrar os pacotes a ser apresentados. Os filtros de exibição atuam enquanto uma captura está ocorrendo ou depois que ela tiver sido concluída. O próximo capítulo apresenta opções para executar o Wireshark, particularmente usando ambientes virtuais.

Exercícios 1. Considere os problemas de rede que você poderá ter, para os quais o Wireshark seria útil. (Saber quais são esses problemas poderá ser conveniente nos capítulos mais adiante.) 2. Escreva alguns exemplos de filtros para ajudar no caso do exercício 1. 3. Crie um filtro de exibição que ajudará você a ver o tráfego de requisição e de resposta DHCP quando outra máquina se conectar pela primeira vez à rede.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.