education-paper-ferramentas-analise-trafego

Transcrição

education-paper-ferramentas-analise-trafego
 Education Paper: “Ferramentas de análise de tráfego no Linux: TCPDUMP, IPTraf, EtherApe e WIRESHARK” Junho/2016 Autores: Angela Fernanda Ferreira ­ [email protected] Gustavo Soares de Lima ­ [email protected] O​
estudo da análise de tráfego é fundamental no Linux nos dias atuais, principalmente para quem deseja trabalhar com redes, servidores e por tabela segurança, já que segurança não é mais um tema de luxo, mas necessidade para o administrador de sistemas Linux. Para se ter um conhecimento amplo no entanto é preciso que o estudante leia em profundidade as RFCs relativas aos protocolos. Isto o acostumará com as características e funcionamento de cada protocolo. Uma vez que os protocolos estejam entendidos o que lhes falta são as ferramentas com as quais este irá analisar o tráfego destes protocolos. Ou seja, nós lhe mostraremos as ferramentas aqui, mas os protocolos você deverá buscar, e não tenha dúvida de que isto lhe fará um profissional melhor. No Linux algumas ferramentas se destacam, são elas Tcpdump, Wireshark, e em Copyright Logicus 2016 1 menor escala Etherape e Iptraf, todas elas tratadas aqui. Nós vamos começar o nosso estudo pelo Tcpdump. Tcdump é um dos mais famosos sniffers. Funciona somente através de linha de comando. O principal pré­requisito é o conhecimento básico do protocolo TCP/IP. Por usar a interface no modo promíscuo você precisa executar o “tcpdump” como usuário root. Para capturar pacotes usa a biblioteca Libcap. No Windows usa a biblioteca WinPcap. O TCPdump surgiu já na década de 1980 e os primeiros programadores foram desenvolvedores da Lawrence Berkeley Laboratory Network Research Group. Sobre as arquiteturas suportadas podemos dizer que o TCPdump possui versões para Unix, Linux, Solaris, OS X e Windows. E como realizamos a instalação? Em uma distribuição Debian digite: # apt­get install tcpdump Vejamos seu help: # tcpdump ­­help tcpdump version 4.7.4 libpcap version 1.7.4 OpenSSL 1.0.2g­fips 1 Mar 2016 Usage: tcpdump [­aAbdDefhHIJKlLnNOpqRStuUvxX#] [ ­B size ] [ ­c count ] [ ­C file_size ] [ ­E algo:secret ] [ ­F file ] [ ­G seconds ] [ ­i interface ] [ ­j tstamptype ] [ ­M secret ] [ ­­number ] [ ­Q in|out|inout ] [ ­r file ] [ ­s snaplen ] [ ­­time­stamp­precision precision ] [ ­­immediate­mode ] [ ­T type ] [ ­­version ] [ ­V file ] [ ­w file ] [ ­W filecount ] [ ­y datalinktype ] [ ­z command ] [ ­Z user ] [ expression ] Vejamos um quadro: Copyright Logicus 2016 2 ­i <interface> determina a interface que será escutada ­n não resolve nomes ­w <arquivo> grava em um arquivo ­r <arquivo> lê arquivo gravado ­s <bytes> tamanho da captura em bytes ­X mostra captra em hexadecimal e ASCII Não são tantas opções não é mesmo? Vejamos então seu funcionamento básico. Lembre­se que a menos que esteja utilizando a flag “­c” o “tcpdump” permanecerá capturando até que seja enviado um sinal de interrupção com Ctrl+C ou um sinal de morte do comando kill. Exemplo sem pressionar Crtl+C: # tcpdump ­c1 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes 09:44:47.626788 IP 74.125.21.189.https > 192.168.1.3.33119: Flags [P.], seq 2060354445:2060354698, ack 4135432061, win 661, options [nop,nop,TS val 3310656440 ecr 268125], length 253 1 packet captured 28 packets received by filter 0 packets dropped by kernel Note na saída do comando TCPdump que os campos estão separados por espaços em branco. O primeiro campo é chamado de “timestamp”, ou seja, é o horário em que o pacote foi capturado. Como podemos observar no exemplo acima: 09:44:47.626788. O segundo campo retorna o tipo Copyright Logicus 2016 3 de pacote ethernet que foi capturado. Note que em nosso exemplo foi capturado o tipo IP. O terceiro campo nos informa dois dados: o endereço e a porta de origem. Vejamos: 74.125.21.189.https. O quarto campo informa o sentido do fluxo do pacote. Vejamos que em nosso exemplo é o “>”. O quinto campo nos informa, novamente, dois dados: o endereço e a porta de destino. Vejamos os do nosso exemplo: 192.168.1.3.33119. O sexto campo informa o “bit de controle”. A saída pode retornar uma flag “S” que indica que é um pacote SYN de Synchronize, “R” de Reset, “F” de Finish, “P” de Push, entre outros. Note que no exemplo acima este campo retornou a saída “P”. Assim que você encerra a captura o TCPdump dá algumas informações interessantes na tela para o usuário. São elas: total de pacotes capturados, total de pacotes recebidos pelo filtro e total de pacotes dropados pelo kernel. Veja um exemplo: 9 packets captured 3179 packets received by filter 3140 packets dropped by kernel Você pode usar também a opção para modo verbose. Para visualizar mais informações do cabeçalho do pacote utilize a flag ­v. Exemplos: # tcpdump ­c1 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on wlan0, link­type EN10MB (Ethernet), capture size 262144 bytes 22:20:30.779388 IP 31.13.85.8.https > 192.168.1.6.44026: Flags [P.], seq 103694364:103694956, ack 4219373998, win 2043, options [nop,nop,TS val 1928542335 ecr 3901171], length 592 1 packet captured 79 packets received by filter 11 packets dropped by kernel # tcpdump ­c1 ­v tcpdump: listening on wlan0, link­type EN10MB (Ethernet), capture size 262144 bytes 22:20:55.253568 IP (tos 0x0, ttl 87, id 16490, offset 0, flags [DF], proto TCP (6), length 259) Copyright Logicus 2016 4 31.13.85.8.https > 192.168.1.6.44026: Flags [P.], cksum 0xbf95 (correct), seq 103702578:103702785, ack 4219375657, win 2043, options [nop,nop,TS val 1928566811 ecr 3907385], length 207 1 packet captured 67 packets received by filter 4 packets dropped by kernel Pode parecer que não há diferença, mas vejamos um resumo: ­v o tempo de vida, a identificação, comprimento total e opções em um pacote IP são impressos ­vv os campos adicionais são impressos a partir pacotes de resposta NFS e pacotes SMB ­vvv imprime opções do Telnet E se quisermos especificar um protocolo? Exemplo: # tcpdump ­v arp tcpdump: listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 14:54:56.246177 ARP, Ethernet (len 6), IPv4 (len 4), Request who­has 192.168.0.1 (Broadcast) tell 19 2.168.0.101, length 28 14:54:56.246192 ARP, Ethernet (len 6), IPv4 (len 4), Request who­has 192.168.0.2 (Broadcast) tell 19 2.168.0.101, length 28 Exemplo: Copyright Logicus 2016 5 # tcpdump ­v icmp tcpdump: listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 14:53:51.581862 IP (tos 0x0, ttl 64, id 35304, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.0.101 > gru09s17­in­f46.1e100.net: ICMP echo request, id 6437, seq 1, length 64 Você pode ainda especificar um protocolo e uma porta. Exemplo: # tcpdump udp and src port 53 No entanto muitas vezes vai ser necessário você indicar uma interface em específico. Para saber quais as interfaces você poderá sniffar use a flag ­D. Veja um exemplo: # tcpdump ­D 1.enp2s0 [Up, Running] 2.wlp3s0 [Up, Running] 3.any (Pseudo­device that captures on all interfaces) [Up, Running] 4.lo [Up, Running, Loopback] 5.bluetooth0 (Bluetooth adapter number 0) 6.bluetooth­monitor (Bluetooth Linux Monitor) 7.nflog (Linux netfilter log (NFLOG) interface) 8.nfqueue (Linux netfilter queue (NFQUEUE) interface) 9.usbmon1 (USB bus number 1) 10.usbmon2 (USB bus number 2) Copyright Logicus 2016 6 Como nos exemplos anteriores não determinamos uma interface de rede para o TCPdump monitorar ele apresentou a primeira que encontrou. Como pode ser visto na linha: listening on eth0. Para usar o TCPdump especificando a interface de rede usamos a opção ­i. Exemplo: # tcpdump ­i eth0 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes 09:48:25.123388 IP 192.168.1.3.50347 > 74.125.196.120.https: Flags [P.], seq 3858467886:3858468623, ack 2959449790, win 42, options [nop,nop,TS val 323417 ecr 2771645377], length 737 09:48:25.124001 IP 192.168.1.3.39725 > 192.168.1.1.domain: 55789+ PTR? 120.196.125.74.in­addr.arpa. (45) 09:48:25.321505 IP 74.125.196.120.https > 192.168.1.3.50347: Flags [P.], seq 1:51, ack 737, win 670, options [nop,nop,TS val 2771647526 ecr 323417], length 50 09:48:25.321538 IP 192.168.1.3.50347 > 74.125.196.120.https: Flags [.], ack 51, win 42, options [nop,nop,TS val 323467 ecr 2771647526], length 0 09:48:25.322360 IP 74.125.196.120.https > 192.168.1.3.50347: Flags [P.], seq 51:84, ack 737, win 670, options [nop,nop,TS val 2771647526 ecr 323417], length 33 09:48:25.322369 IP 192.168.1.3.50347 > 74.125.196.120.https: Flags [.], ack 84, win 42, options [nop,nop,TS val 323467 ecr 2771647526], length 0 ^C09:48:25.589815 IP 74.125.21.189.https > 192.168.1.3.33119: Flags [P.], seq 2060383657:2060383711, ack 4135447205, win 661, options [nop,nop,TS val 3310874402 ecr 323194], length 54 7 packets captured 53 packets received by filter 16 packets dropped by kernel Lembre­se que o TCPdump irá colocar sua interface no modo promíscuo a não ser que indique a flag ­p. Se quiser que o TCPdump monitore todas as interfaces ao mesmo tempo utilize o valor any. Exemplo: tcpdump ­i any. Exemplo: # tcpdump ­i any ­v ­c1 tcpdump: listening on any, link­type LINUX_SLL (Linux cooked), capture size 262144 bytes 13:38:28.945964 IP (tos 0x0, ttl 64, id 25154, offset 0, flags [DF], proto TCP (6), length 52) Copyright Logicus 2016 7 192.168.0.101.44398 > gru09s17­in­f3.1e100.net.https: Flags [F.], cksum 0x204a (correct), seq 10 61776716, ack 537407544, win 229, options [nop,nop,TS val 1635168 ecr 1469376276], length 0 1 packet captured 18 packets received by filter 11 packets dropped by kernel Mas e se não quisermos traduzir o nome de hosts e de portas? Para não fazer resolução de nomes de hosts e de portas usa­se a opção ­n. Exemplo: # tcpdump ­c3 ­n tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 13:41:15.876686 IP 216.58.222.46.443 > 192.168.0.101.33852: Flags [.], ack 2614246115, win 350, opti ons [nop,nop,TS val 1469771296 ecr 1676879], length 0 13:41:15.926710 IP 216.58.222.46.443 > 192.168.0.101.53334: UDP, length 568 13:41:15.927793 IP 192.168.0.101.53334 > 216.58.222.46.443: UDP, length 57 3 packets captured 3 packets received by filter 0 packets dropped by kernel Note que a saída ficou mais rápida. Podemos também utilizar a flag ­n indicando a interface de rede. Exemplo: # tcpdump ­c3 ­ni enp2s0 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 13:42:49.860547 IP 192.168.0.101.45662 > 216.58.222.46.443: UDP, length 420 13:42:49.860576 IP 192.168.0.101.45662 > 216.58.222.46.443: UDP, length 1350 13:42:49.860585 IP 192.168.0.101.45662 > 216.58.222.46.443: UDP, length 924 Copyright Logicus 2016 8 3 packets captured 3 packets received by filter 0 packets dropped by kernel Já a opção ­N é utilizada para não mostrar o domínio de host se houver resolução de nomes. Exemplo: # tcpdump ­i enp2s0 ­N ­c3 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 13:44:45.455287 IP 192.168.0.101.50664 > gru09s17­in­f14.https: UDP, length 1350 13:44:45.455537 IP 192.168.0.101.50664 > gru09s17­in­f14.https: UDP, length 1011 13:44:45.455714 IP 192.168.0.101.19339 > google­public­dns­a.domain: 43244+ PTR? 46.222.58.216.in­ad dr.arpa. (44) 3 packets captured 18 packets received by filter 9 packets dropped by kernel Ok! Então significa que posso tornar a captura mais rápida enxugando a sua saída. Isso mesmo! E para encutar mesmo a saída você pode usar a opção “­q”. Exemplo: # tcpdump ­c2 ­q ­i enp2s0 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 13:45:55.148973 IP6 fe80::4997:d6ca:f3d8:b0d7.50359 > ff02::c.1900: UDP, length 146 13:45:55.149439 IP 192.168.0.101.53828 > google­public­dns­a.google.com.domain: UDP, length 90 2 packets captured 18 packets received by filter 10 packets dropped by kernel Copyright Logicus 2016 9 Para não exibir a data e hora na tela use a flag ­t. Exemplo: # tcpdump ­c1 ­t tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on wlan0, link­type EN10MB (Ethernet), capture size 262144 bytes IP 192.168.1.6.47107 > 31.13.85.8.https: Flags [P.], seq 1552134858:1552134903, ack 3339798286, win 1741, options [nop,nop,TS val 5476830 ecr 1585806206,nop,nop,sack 3 {23597:26373}{20821:22209}{16657:19433}], length 45 1 packet captured 207 packets received by filter 156 packets dropped by kernel E especificar um host? Tem como? Vamos considerar que desejamos monitorar apenas o tráfego com destino a máquina gateway da rede. Na demonstração abaixo iremos primeiro habilitar o TCPdump para realizar este monitoramento, em seguida realizar um ping da máquina atual em direção ao gateway e depois verificar como o TCPdump interceptou este tráfego: # tcpdump ­i any dst host 192.168.0.1 Agora o ping: # ping ­c1 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.162 ms ­­­ 192.168.0.1 ping statistics ­­­ 1 packets transmitted, 1 received, 0% packet loss, time 0ms Copyright Logicus 2016 10 rtt min/avg/max/mdev = 0.162/0.162/0.162/0.000 ms E como o TCPdump capturou: 13:49:28.732519 IP 192.168.0.101 > 192.168.0.1: ICMP echo request, id 4977, seq 1, length 64 13:49:31.233958 ARP, Request who­has 192.168.0.1 tell 192.168.0.101, length 28 Mas e as portas? Para verificar o tráfego considerando uma porta específica, por exemplo, monitorando o tráfego na porta 80, usamos a opção dst port. Exemplo: # tcpdump ­i any dst port 80 Digamos então que eu desejasse saber das conexões ssh. O ssh usa a porta 22 não é mesmo? Então veja como pode ficar o comando: “​
tcpdump ­i eth0 port 22”​
. Mas antes de mostrar a saída vamos fazer o acesso propriamente dito: # ssh [email protected] E agora vemos a saída: # tcpdump ­i eth0 port 22 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes Copyright Logicus 2016 11 10:02:55.353095 IP dhcppc0.local.59051 > logicus.local.ssh: Flags [S], seq 774644026, win 14600, options [mss 1460,sackOK,TS val 758240 ecr 0,nop,wscale 4], length 0 10:02:55.353264 IP logicus.local.ssh > dhcppc0.local.59051: Flags [S.], seq 2069517576, ack 774644027, win 14480, options [mss 1460,sackOK,TS val 891971 ecr 758240,nop,wscale 4], length 0 10:02:55.353305 IP dhcppc0.local.59051 > logicus.local.ssh: Flags [.], ack 1, win 913, options [nop,nop,TS val 758241 ecr 891971], length 0 10:02:55.482803 IP logicus.local.ssh > dhcppc0.local.59051: Flags [P.], seq 1:33, ack 1, win 905, options [nop,nop,TS val 892004 ecr 758241], length 32 10:02:55.482869 IP dhcppc0.local.59051 > logicus.local.ssh: Flags [.], ack 33, win 913, options [nop,nop,TS val 758273 ecr 892004], length 0 (...) Lembrando é claro que deve deixar o TCPdump rodando antes para ver o acesso integralmente. Também podemos utilizar a opção src para delimitar uma porta de origem. Ok! E para imprimir na tela o pacote? Para imprimir o pacote em ASCII você deve usar a opção ­A. Esta opção não imprime o cabeçalho do pacote. Exemplo: # tcpdump ­A ­c1 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes 11:10:44.801111 IP 173.246.39.185.http > 192.168.1.3.38295: Flags [.], seq 2712799878:2712801266, ack 909823475, win 96, options [nop,nop,TS val 2421775904 ecr 3214391], length 1388 [email protected]...'......P.... .6:.....`....... g8.. d...5|..]..e...q.._.[..L.;>.j`..u..C......x.......Y.re...Ks%...51..~....q....F.k.].e.B..m%...'.e|.......W<2.|...........S...J+..w
.(..#:.. G......k...................n..WGn....6;..HW4..?`[email protected].}N*+fx..%.....&.?....t3.z...I.......8.l.S6F.....h.. s.Cv.e.d...*.H$.^@..itY..X..............=f.......#...P/.dG........a.M ....:....2.............W.M.c>.@9N3...(...usf...d...Q..;6].C..9.t.Q.. Copyright Logicus 2016 12 .D....&b......{U..V.\..]..........F..d.'.m....V.A.}._.|..!~.Y0..`.W....v..QI.wt.LG.....=~.1.1.].x.8m....­.WCN...hI1[..... 7....Z.....Q.|.&B.3.^f.."..........|".....b...JnmG..k....".M.zH.!.1.um..k..k6...x.L.&.+....t.%[email protected].....!RS..l......D....P$!....
..".D ..IlK.B....b...(..j/..<..KA. Ww...cs...f.[g.g. <.........,]..1.....>[email protected];%..'$...s.]QBI.. x..^....G.e..l .51PfxI. 1.8H...C.... .[....q..O.......pBrOYN.^........i......2.T...z.}i...sk.........4J3.$y.yh..z#Ya.lFW........fN..M.6....!<v....Y.k=+.MTW.R...d/..%2
.o(jN...%..q...N..B..$ 1 packet captured 2730 packets received by filter 2699 packets dropped by kernel Para imprimir na tela o pacote em hexa utilize a flag ­x. Exemplo: # tcpdump ­x ­c1 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes 18:42:40.481723 STP 802.1d, Config, Flags [none], bridge­id 8002.00:1d:46:2a:0b:00.8007, length 43 0x0000: 4242 0300 0000 0000 8002 001d 462a 0b00 0x0010: 0000 0000 8002 001d 462a 0b00 8007 0000 0x0020: 1400 0200 0f00 0000 0000 0000 0000 1 packet captured 1 packet received by filter 0 packets dropped by kernel Para imprimir na tela o pacote em hexa e também em ASCII utilize ­X. Veja um exemplo: # tcpdump ­i any ­X ­c1 Copyright Logicus 2016 13 tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on any, link­type LINUX_SLL (Linux cooked), capture size 262144 bytes 14:32:44.252622 IP6 fe80::fd07:bc73:e2b9:4521.dhcpv6­client > ff02::1:2.dhcpv6­server: dhcp6 solicit 0x0000: 6000 0000 0061 1101 fe80 0000 0000 0000 `....a.......... 0x0010: fd07 bc73 e2b9 4521 ff02 0000 0000 0000 ...s..E!........ 0x0020: 0000 0000 0001 0002 0222 0223 0061 ba45 .........".#.a.E 0x0030: 01be fb3d 0008 0002 05dc 0001 000e 0001 ...=............ 0x0040: 0001 1691 a204 50e5 49fb 8300 0003 000c ......P.I....... 0x0050: 0f50 e549 0000 0000 0000 0000 0027 000b .P.I.........'.. 0x0060: 0009 7761 676e 6572 2d50 4300 1000 0e00 ..wagner­PC..... 0x0070: 0001 3700 084d 5346 5420 352e 3000 0600 ..7..MSFT.5.0... 0x0080: 0800 1800 1700 1100 27 ........' 1 packet captured 14 packets received by filter 7 packets dropped by kernel Perceba que pela leitura da saída pudemos ver que se tratava de um tráfego capturado de uma máquina com Windowns. Veja um exemplo mais completo: # tcpdump ­n src net 192.168.0.0/24 ­X ­vvv Legal! E se quisermos gravar a saída do TPCdump para ler posteriormente? Para salvar a saída do TCPdump você deve usar a flag ­w. Veja um exemplo: # tcpdump ­c3 ­w arquivo­captura tcpdump: listening on enp2s0, link­type EN10MB (Ethernet), capture size 262144 bytes 3 packets captured Copyright Logicus 2016 14 3 packets received by filter 0 packets dropped by kernel Para ler o que foi salvo use a flag ­r. Exemplo: # tcpdump ­r arquivo­captura reading from file arquivo­captura, link­type EN10MB (Ethernet) 14:36:04.569038 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 14:a3:64:23:54: 57 (oui Unknown), length 315 14:36:04.889539 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), lengt h 28 14:36:05.110825 IP6 :: > ff02::1:ff23:5457: ICMP6, neighbor solicitation, who has fe80::16a3:64ff:fe 23:5457, length 24 Uma dúvida comum é porquê existem pacotes que geram outros pacotes? Na verdade não é que um pacote gera outro pacote, mas é verdade que um pacote pode ser dividido em outros. Lembre­se que existem limites de tamanho, como por exemplo 1500 bytes por pacote. Veja um exemplo bem didático onde enviaremos um ping para um site com um tamanho de 3500 bytes pra ver quantos pacotes irão ser enviados. Exemplo (enviando um pacote maior que 1500 bytes): # ping ­c 1 ­s 3500 mandatuiba.com.br PING logicus.com.br (192.185.214.23) 3500(3528) bytes of data. 3508 bytes from 192.185.214.23: icmp_req=1 ttl=49 time=530 ms ­­­ mandatuiba.com.br ping statistics ­­­ 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 530.986/530.986/530.986/0.000 ms Copyright Logicus 2016 15 Agora veja o resultado da análise do tráfego deste pacote: # tcpdump host mandatuiba.com.br tcpdump: verbose output suppressed, use ­v or ­vv for full protocol decode listening on eth0, link­type EN10MB (Ethernet), capture size 65535 bytes 10:43:01.370956 IP 192.168.1.3 > 192.185.214.23: ICMP echo request, id 4047, seq 1, length 1480 10:43:01.370967 IP 192.168.1.3 > 192.185.214.23: icmp 10:43:01.370973 IP 192.168.1.3 > 192.185.214.23: icmp 10:43:01.901418 IP 192.185.214.23 > 192.168.1.3: ICMP echo reply, id 4047, seq 1, length 1480 10:43:01.901867 IP 192.185.214.23 > 192.168.1.3: icmp 10:43:01.901915 IP 192.185.214.23 > 192.168.1.3: icmp Percebeu o que houve? O pacote foi dividido em outros pacotes, justamente por conta do tamanho. Uma outra questão interessante é a bufferizaçao. Mas posso bufferizar? Neste caso toda atenção a flag ­l. Exemplo: # tcpdump ­l > /tmp/buffer & tail ­f /tmp/buffer O processo ficará rodando mesmo após você sair do arquivo. Para encerrá­lo: # ps aux | grep tcpdump root 6140 0.0 0.0 26244 6400 pts/1 S 14:43 0:00 tcpdump ­l root 6149 0.0 0.0 9524 2156 pts/1 S+ 14:43 0:00 grep ­­color=auto tcpdump # kill ­9 6140 # ps aux | grep tcpdump Copyright Logicus 2016 16 root 6152 0.0 0.0 9524 2188 pts/1 S+ 14:44 0:00 grep ­­color=auto tcpdump [2]+ Morto tcpdump ­l > /tmp/buffer Ok! Sobre o TCPdump achamos que isto já é o suficiente para que você possa começar a analisar seu tráfego filtrando por portas, hosts, estabelecendo boas práticas para reduzir a captura tornando­a mais rápida e inclusive bufferizando para ver o tráfego ao mesmo tempo que grava em um arquivo que lhe poderá servir mais tarde de log. Mas o TCPdump apesar de ser, em nossa opinião, a melhor ferramenta, não é a única! Vejamos agora um pouco com relação ao Iptraf. O Iptraf é usado para monitorar tráfego, conexões de rede e protocolos. Uma de suas vantagens é que está ativo em boa parte das distribuições GNU/Linux. Seu uso é muito simples. Veja um quadro simples com as informações retornadas pelo Iptraf: O quê? De quê? Total IP, TCP, UDP, ICMP (Não contando bytes de IP) Endereços e portas de origem TCP Contagem de pacotes e bytes TCP Status Flag TCP Informações de origem e destino UDP Informação de tipo ICMP Informações de origem e destino OSPF Estatísticas de serviço TCP, UDP Copyright Logicus 2016 17 Contagem de pacotes Por interface Contagem dos erros de verificação de IP Por interface Indicadores de atividade Por interface Estatísticas de estação LAN Veja os pré­requisitos para a instalação do Iptraf: Hardware ou Sistema Configuração Memória Ram Mínimo de 16 megas, recomendável 64 HD 2 megas de espaço livre para instalação. Atentar­se no entanto para o espaço de registro de tráfego Processador Pentium ou superior, recomendável Pentium II 200Mhz acima Interface de rede Uma ou mais, desde que suportadas Kernel 2.2.0 ou superior GNU C Library 2.1 ou superior Ncurses 4.2 ou superior Para instalar em um sistema baseado em RedHat: Copyright Logicus 2016 18 # yum install iptraf Para instalar no Debian: # aptitude install iptraf Ok! Devidamente instalado, vamos ao seu funcionamento básico. O Iptraf utiliza o built­in raw do Kernel, o que permite seu amplo reconhecimento de interfaces de rede. Seu funcionamento básico é monitorar a carga da rede, tipos de serviços de rede mais usados, processos de conexão TCP, etc. Antes de entrar no Iptraf dê uma olhada no seu ­help: # iptraf ­help Syntax: iptraf [ ­f ] [ ­u ] [ { ­i iface | ­g | ­d iface | ­s iface | ­z iface | ­l iface } [ ­t timeout ] [ ­B ] [ ­L logfile ] [­I interval] ] Issue the iptraf command with no parameters for menu­driven operation. These options can also be supplied to the command: ­i iface ­ start the IP traffic monitor (use "­i all" for all interfaces) ­g ­ start the general interface statistics ­d iface ­ start the detailed statistics facility on an interface ­s iface ­ start the TCP and UDP monitor on an interface ­z iface ­ shows the packet size counts on an interface ­l iface ­ start the LAN station monitor ("­l all" for all LAN interfaces) ­B ­ run in background (use only with one of the above parameters) Copyright Logicus 2016 19 ­t timeout ­ when used with one of the above parameters, tells the facility to run only for the specified number of minutes (timeout) ­L logfile ­ specifies an alternate log file for any direct invocation of a facility from the command line. The log is placed in /var/log/iptraf if path is not specified. ­I interval ­ specifies the log interval for all facilities except the IP traffic monitor. Value is in minutes. ­f ­ clear all locks and counters. Use with great caution. Normally used to recover from an abnormal termination. ­u ­ allow use of unsupported interfaces as ethernet devices. IPTraf 3.0.0 Copyright (c) Gerard Paul Java 1997­2004 Veja no exemplo a tela de abertura: Copyright Logicus 2016 20 Nesta primeira tela é apresentada a versão do Iptraf, sendo que podemos ler ainda o nome do autor Paul Java e verificar a licença do programa. Vamos nos apegar no entanto agora as opções de linha de comando. Para indicar a interface já na linha de comando você deve usar a flag ­i, exemplo “​
iptraf ­i eth0​
”. Ele irá direto para a interface selecionada. Caso a interface não exista ele acusará um erro como exibido abaixo: # iptraf ­i eth1
<­ esta interface não existe no pc de exemplo Copyright Logicus 2016 21 Com a flag ­g o Iptraf vai direto para as estatísticas gerais. Exemplo: # iptraf ­g Com a opção ­d as estatísticas da interface são buscadas diretamente no formato detalhadas. Exemplo: # iptraf ­d eth0 Copyright Logicus 2016 22 Com a opção ­s e a indicação da interface você habilita o monitoramento de tráfego TCP / UDP. Com a opção ­z e interface o Iptraf mostra a divisão de tamanho dos pacotes. Vejamos: Copyright Logicus 2016 23 # iptraf ­s eth0 E agora: # iptraf ­z eth0 Copyright Logicus 2016 24 Faça contra a máquina onde está o iptraf o seguinte ping: Copyright Logicus 2016 25 $ ping 192.168.0.102 ­s 605 ­c5 PING 192.168.0.102 (192.168.0.102) 605(633) bytes of data. 613 bytes from 192.168.0.102: icmp_seq=1 ttl=64 time=0.164 ms 613 bytes from 192.168.0.102: icmp_seq=2 ttl=64 time=0.221 ms 613 bytes from 192.168.0.102: icmp_seq=3 ttl=64 time=0.210 ms 613 bytes from 192.168.0.102: icmp_seq=4 ttl=64 time=0.226 ms 613 bytes from 192.168.0.102: icmp_seq=5 ttl=64 time=0.209 ms ­­­ 192.168.0.102 ping statistics ­­­ 5 packets transmitted, 5 received, 0% packet loss, time 3998ms rtt min/avg/max/mdev = 0.164/0.206/0.226/0.021 ms E veja o resultado na contagem do iptraf no modo divisão de tamanho dos pacotes: Copyright Logicus 2016 26 Ok! Agora vamos dar uma olhada no menu. No primeiro menu apresentado ao usuário, ou seja, o menu inicial, podemos ver as seguintes opções: “Ip traffic monitor”, “General Interface statistics”, “Detailed interface statistics”, “Statistical breakdowns”, “Lan station monitor”, “Filters”, “Configure” e por fim “Exit”. Copyright Logicus 2016 27 No canto inferior esquerdo há uma breve legenda para cada opção. Ok! Vejamos a opção “IP traffic monitor”. Esta opção monitora todo o tráfego de dados em tempo real. Ao selecionar esta opção a janela Select Interface é apresentada. Clique em uma ou em All interfaces. Copyright Logicus 2016 28 A seguir uma nova janela é aberta. Esta janela é dividida por dois campos. Com a tecla “W” é possível mover o indicador Active para o campo desejado. Copyright Logicus 2016 29 O campo superior informa as conexões TCP (TCP Connections). Juntamente com estas conexões é exibido o endereço de origem e porta (Source Host:Port). Em seguida é nos informado os pacotes (Packets), os bytes (Bytes), as flags de status TCP (Flags) e a interface de rede (Iface). Se clicarmos com a tecla “M” no campo superior será apresentado mais informações do TCP, tais como tamanho do pacote (Pkt Size) e Win Size. Copyright Logicus 2016 30 O campo inferior exibe conexões de outros protocolos que podem ser UDP, ARP, entre outros. Vejamos um exemplo: Primeiramente é exibido o protocolo, o tamanho, endereço de origem, endereço de destino e interface de rede do pacote detectado. Esta informação não pode ser levada sempre ao pé da letra, pois, alguns protocolos podem informar um pouco mais de dados. Agora vamos retornar ao menu e dar uma olhada na opção “General interface statistics”. Esta opção é bem interessante pois, podemos acompanhar todas as interfaces. Copyright Logicus 2016 31 Observe na imagem acima que esta opção apresenta a Iface, a contagem de IP's, de NonIP's e contagem de pacotes de BadIP's. Note também que é apresentada a coluna de atividade (Activity) que nos informa o número de kilobits/seg dos pacotes. Voltemos agora ao menu e observemos a opção “Detailed interface statistics”. Como o nome já diz, esta opção apresenta estatísticas detalhadas para a interface selecionada. Ao clicar nesta opção no menu inicial será apresentada uma janela para selecionar a interface. No nosso exemplo selecionamos a eth0. Vejamos o uso desta opção na imagem a seguir: Copyright Logicus 2016 32 Observe que nesta janela o IPTraf apresenta dados do total de pacotes (Total Packets) e de total de bytes (Total Bytes) do IP, TCP, UDP, ICMP, outros, Non­IP. Também dados individuais de pacotes de entrada (Incoming Packets), bytes de entrada (Incoming Bytes), pacotes de saída (Outgoing Packets), bytes de saída (Outgoing Bytes) do IP, TCP, UDP, ICMP, outros e Non­IP. E por fim apresenta taxas totais (Total rates), taxas de entrada (Incoming rates), taxas de saída (Outgoing rates). Total de pacotes Broadcast (Broadcast packets), total de bytes Broadcast (Broadcast bytes) e checksum de erros (IP checksum errors). Vejamos agora a opção “Statistical breakdowns”. Ao selecionar esta opção, uma janela é Copyright Logicus 2016 33 apresentada com as opções: pelo tamanho do pacote (By packet size) e pela porta TCP/UDP (By TCP/UDP port). Basicamente lá no início quando observamos os comandos do iptraf conhecemos o resultado desta opção. Ao clicar na primeira opção, selecione a interface de rede e em seguida será apresentada uma janela denominada Distribuição de pacote por tamanho (Packet Distribution by Size). Como podemos visualizar na imagem logo abaixo: Copyright Logicus 2016 34 Observe que na primeira coluna Packet Size (bytes) o tamanho é informado por bytes. A segunda coluna informa a contagem. A terceira informa o tamanho de pacotes em bytes (Packet Size [bytes]) e por fim, a contagem. Note que a contagem das faixas é incrementada por 75. Vejamos agora o uso da segunda opção pela porta TCP/UDP (By TCP/UDP port). Observe que esta opção informa dados do protocolo/porta (Proto/Port), pacotes (Pkts), bytes (Bytes), pacotes para (PktsTo), bytes para (BytesTo), pacotes de (PktsFrom) e bytes de (BytesFrom). Note que na parte inferior nos é informado a taxa de dados dos protocolos em kbits (Protocol data rates [kbits/s]) de entrada e saída e por fim, o total. Acesse via lynx o site do google para ver uma saida como esta: Copyright Logicus 2016 35 Saída: Vejamos agora a opção no menu chamada “LAN station monitor”. Selecione uma ou todas interfaces de rede. Em seguida uma nova janela é apresentada aonde nos é informado os endereços MAC e dados de contagem de pacotes de entrada e saída em kilobits por segundo. Vejamos o seu uso através da imagem abaixo: Copyright Logicus 2016 36 A primeira linha de cada saída de dados (exemplo: Ethernet HW addr: 681500e04c69 on eth0), apresenta o tipo de LAN, ou seja, a rede local, que pode ser Ethernet, FDDI, PLIP, Token Ring; e também o endereço MAC. Na primeira coluna (PktsIn), nos é informado o número de pacotes recebidos. Na segunda coluna (IP In), o número de pacotes IP de entrada. Na terceira coluna (BytesIn) o total de bytes de entrada. Na quarta coluna (InRate), a taxa de entrada. Na quinta coluna (PktsOut), o total de pacotes de saída. Na sexta coluna (IP Out), os pacotes IP de saída. Na sétima coluna (BytesOut), o total de bytes de saída. E por último (OutRate), a taxa de saída. Se você pressionar “s” poderá selecionar o formato de ordem de apresentação: Copyright Logicus 2016 37 Ok! Vejamos agora a opção do menu chamada de “Filters”. Quando pressionada o resultado é: Copyright Logicus 2016 38 Pressionando “Enter” você pode mudar o status dos filtros: Vejamos agora a seção “Configure” do menu. Aqui ficam as opções de configuração do IPtraf. Vejamos seu menu principal: Copyright Logicus 2016 39 Mais uma vez você pode usar a tecla “Enter” para mudar alguns status. Vejamos: Copyright Logicus 2016 40 Para encerrar vamos falar sobre um problema conhecido. Ao se usar a opção ­t para designar um “timeout” para determinar um tempo de atuação pode ser que nada aconteça, ou seja, o iptraf simplesmente continua funcionando mesmo depois de passar o tempo determinado. Ocorre que a flag ­t deve ser usada com outra flag, por exemplo ­i. Exemplo: ​
iptraf ­t 1 ­i eth0​
. Neste exemplo o iptraf irá rodar por apenas um minuto capturando a interface eth0. Ok! Acho que de iptraf já está bom, o suficiente para que você saiba usar minimamente a ferramenta. Vejamos agora mais de perto nossa terceira ferramenta, o Etherape! O Etherape é um monitor gráfico para monitoramento de rede. Muito usado em testes de penetração e também em segurança. Seu uso mais comum no entanto é pelos administradores de redes. Por ser baseado no gnome ele terá dependência do pacote gnome­core. Você poderá chamar o etherape pelo terminal com o comando: ​
etherape​
. Vejamos sua tela: Copyright Logicus 2016 41 Copyright Logicus 2016 42 Copyright Logicus 2016 43 A dinâmica básica do Etherape é a apresentação do tráfego em forma gráfica, ordenando os protocolos por cores e aumentando ou diminuindo a linha de referência de acordo com o uso da banda de rede. Outra característica interessante é que o Etherape suporta tanto IPv4 como IPv6. O Etherape foi desenvolvido originalmente por Juan Toledo, em fevereiro de 2000. Vamos instalá­lo então! Para instalar no Debian faça: # aptitude install etherape Para instalar em um sistema baseado em RedHat: # yum install etherape De outro lado se você quer aproveitar outras opções disponíveis na compilação siga: # mv eterape­x.x.x.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf etherape­x.x.x.tar.gz # cd etherape­x.x.x # ./configure # make # make install Vejamos a saída do comando etherape ­­help para visualizarmos as opções possíveis de comando via terminal: # etherape ­­help Copyright Logicus 2016 44 Uso: etherape [OPÇÕES...] ­­load­modules=MODULE1,MODULE2,... Dynamic modules to load Help options ­?, ­­help Show this help message ­­usage Display brief usage message Application options ­d, ­­diagram­only don't display any node text identification ­r, ­­replay­file=<file to replay> replay packets from file ­f, ­­filter=<capture filter> set capture filter ­i, ­­interface=<interface name> set interface to listen to ­­final­export=<file to export to> export to named file at end of replay ­­signal­export=<file to export to> export to named file on receiving USR1 ­s, ­­stationary don't move nodes around (deprecated) ­l, ­­node­limit=<number of nodes> limits nodes displayed ­m, ­­mode=<link|ip|tcp> mode of operation ­n, ­­numeric don't convert addresses to names ­q, ­­quiet Disable informational messages ­­min­delay=<delay> minimum packet delay in ms for reading capture files [cli only] ­­max­delay=<delay> maximum packet delay in ms for reading capture files [cli only] ­­glade­file=<glade file> uses the named libglade file for widgets Help options: ­?, ­­help Show this help message ­­usage Display brief usage message GTK+ ­­gdk­debug=SINALIZADORES Sinalizadores de depuração Gdk a serem definidos ­­gdk­no­debug=SINALIZADORES Os sinalizadores de depuração Gdk a serem removidos ­­display=DISPLAY Dispositivo X a ser usado ­­screen=TELA Tela X a ser usada Copyright Logicus 2016 45 ­­sync Torna síncronas as chamadas do X ­­name=NOME Nome de programa como usado pelo gerenciador de janelas ­­class=CLASSE Classe de programa como usada pelo gerenciador de janelas ­­gtk­debug=SINALIZADORES Os sinalizadores de depuração Gtk+ a serem definidos ­­gtk­no­debug=SINALIZADORES Os sinalizadores de depuração Gtk+ a serem removidos ­­g­fatal­warnings Torna todos os avisos fatais ­­gtk­module=MÓDULO Carregar um módulo Gtk adicional Bonobo activation Support ­­oaf­ior­fd=FD Descritor de arquivos onde imprimir IOR ­­oaf­activate­iid=IID IID a ser ativado ­­oaf­private Evitar registro do servidor com o OAF Biblioteca GNOME ­­disable­sound Desabilitar o servidor de áudio ­­enable­sound Habilitar o servidor de áudio ­­espeaker=NOMEDAMÁQUINA:PORTA Máquina:porta para uso do servidor de áudio está em execução ­­version 2.32.1 Gerenciamento de sessão ­­sm­client­id=ID Especifica a ID do gerenciador de sessão ­­sm­config­prefix=PREFIXO Especifica o prefixo da configuração salva ­­sm­disable Desabilita conexão ao gerenciador de sessão Biblioteca GNOME GUI ­­disable­crash­dialog Desabilitar o diálogo de travamento Com a a opção ­ i ( ­­interface) determinamos a interface a ser monitorada capturada. # etherape ­i eth0 Copyright Logicus 2016 46 Apesar de ter muitas opções em linha de comando a graça do Etherape está justamente no seu gráfico. Vejamos então o que nos traz seu menu. Ao abrir o Etherape você poderá observar na barra de menu as seguintes opções: file, capture, view e help. Além disto verá também uma toolbar: Na seção “File” você tem as opções "abrir", "exportar" e "preferências". Com relação à opção exportar você pode escolher um nome para o arquivo. Veja um exemplo: Copyright Logicus 2016 47 Depois de exportado você poderá abrir o arquivo no navegador pois trata­se de um arquivo xml. Vejamos agora a seção de “preferências”: Copyright Logicus 2016 48 Copyright Logicus 2016 49 Nesta seção você encontrará as de “Diagram”, “Colors” e “Timings”. Com relação a seção “Diagram” o que gostaríamos de dizer é que serve para especificar o nível de profundidade do protocolo que o Etherape irá monitorar. Existem 5 níveis para escolher. Vejamos cada um deles na tabela a baixo: Topmost Recognized Protocol Level 1, physical medium (eth_II) Level 2 (IP) Level 3 (TCP and UDP) Level 4 (HTTP) Level 5 Como você já pode estar imaginando a depender de seu conhecimento em protocolos de rede ao escolher o nível mais alto você obterá mais informações dos pacotes, ou seja, informações mais específicas. Um exemplo simples de entender isto é que na camada 5 SNMP ­ Trap será desconhecido, sendo que na camada 2 você verá IP e ARP. Se estiver visualizando a camada 4, o SMTP não será reconhecido. A próxima aba é a “Colors”. Nesta é possível alterar as cores dos protocolos exibidos na legenda e janela de monitoramento. Vejamos: Copyright Logicus 2016 50 E na aba “Timings” você encontra ainda outras opções avançadas para preferência de captura. Vejamos: Copyright Logicus 2016 51 Voltemos agora ao menu para ver a opção “Capture”. Em capture as opções mais importantes são "mode" e "interface". Em interface você escolherá qual a interface de rede que deseja visualizar. Se você estiver por exemplo em uma rede na qual esteja conectada por cabo deverá Copyright Logicus 2016 52 escolher eth0. Se estiver numa rede sem fio escolha wlan0. Na opção “View” as opções são pelo método de seleção. Você poderá escolher "protocols", "nodes", "toolbar", "legend" e "status bar". Na janela de “Protocols” você pode ver a divisão por protocolo: Em nodes você pode ver uma lista de hosts com os quais está estabelecendo conexão no momento. Vejamos: Copyright Logicus 2016 53 Ok! O Etherape é realmente muito simples como você pode ter percebido. Agora iremos falar sobre uma das ferramentas mais usadas e completa na análise de tráfego de rede que é o Wireshark. O Wireshark é um programa que analisa dados no nível de protocolo. Analisa protocolos, captura e decodifica dados, gera e apresenta estatísticas, gera relatórios, entre outros recursos. Anteriormente era conhecido como Ethereal. Sua funcionalidade é parecida com o TCPDump, entretanto, possui interface gráfica, mais informações e o recurso de filtros. A sua biblioteca é a Libcap e no sistema Windows a biblioteca é WinPcap. Estudiosos de rede de forma geral podem usar o Wireshark para compreender mais a fundo o funcionamento de um protocolo de rede. Programadores podem usar o Wireshark para depuração. Especialistas em segurança podem usar o Wireshark para monitoramento de rede afim de encontrar conexões maliciosas. Administradores de rede podem usar o Wireshark para solucionar problemas de rede, de comunicação, tráfego, etc. Imaginemos o seguinte cenário: você é convocado por um de seus clientes para verificar o porquê a rede sempre num determinado momento do dia fica pesada demais. Com o Wireshark você pode verificar o que é que tem no tráfego no momento em que a rede pesa, e ai você já saberá se é de fato um problema de tráfego ou não, e sendo de onde está vindo e para onde está indo. O Wireshark está disponível para os sistemas do mundo Unix e também para Windows. Para instalar no Ubuntu digite: Copyright Logicus 2016 54 $ sudo apt­get ­y install wireshark wireshark­common wireshark­dev Comecemos pelo seu help: # wireshark ­h Wireshark 2.0.2 (SVN Rev Unknown from unknown) Interactively dump and analyze network traffic. See https://www.wireshark.org for more information. Usage: wireshark [options] ... [ <infile> ] Capture interface: ­i <interface> name or idx of interface (def: first non­loopback) ­f <capture filter> packet filter in libpcap filter syntax ­s <snaplen> packet snapshot length (def: 65535) ­p don't capture in promiscuous mode ­k start capturing immediately (def: do nothing) ­S update packet display when new packets are captured ­l turn on automatic scrolling while ­S is in use ­I capture in monitor mode, if available ­B <buffer size> size of kernel buffer (def: 2MB) ­y <link type> link layer type (def: first appropriate) ­D print list of interfaces and exit ­L print list of link­layer types of iface and exit Capture stop conditions: ­c <packet count> stop after n packets (def: infinite) ­a <autostop cond.> ... duration:NUM ­ stop after NUM seconds filesize:NUM ­ stop this file after NUM KB Copyright Logicus 2016 55 files:NUM ­ stop after NUM files Capture output: ­b <ringbuffer opt.> ... duration:NUM ­ switch to next file after NUM secs filesize:NUM ­ switch to next file after NUM KB files:NUM ­ ringbuffer: replace after NUM files Input file: ­r <infile> set the filename to read from (no pipes or stdin!) Processing: ­R <read filter> packet filter in Wireshark display filter syntax ­n disable all name resolutions (def: all enabled) ­N <name resolve flags> enable specific name resolution(s): "mnNtCd" ­­disable­protocol <proto_name> disable dissection of proto_name ­­enable­heuristic <short_name> enable dissection of heuristic protocol ­­disable­heuristic <short_name> disable dissection of heuristic protocol User interface: ­C <config profile> start with specified configuration profile ­Y <display filter> start with the given display filter ­g <packet number> go to specified packet number after "­r" ­J <jump filter> jump to the first packet matching the (display) filter ­j search backwards for a matching packet after "­J" ­m <font> set the font name used for most text ­t a|ad|d|dd|e|r|u|ud output format of time stamps (def: r: rel. to first) ­u s|hms output format of seconds (def: s: seconds) ­X <key>:<value> eXtension options, see man page for details ­z <statistics> show various statistics, see man page for details Copyright Logicus 2016 56 Output: ­w <outfile|­> set the output filename (or '­' for stdout) Miscellaneous: ­h display this help and exit ­v display version info and exit ­P <key>:<path> persconf:path ­ personal configuration files persdata:path ­ personal data files ­o <name>:<value> ... override preference or recent setting ­K <keytab> keytab file to use for kerberos decryption ­­display=DISPLAY X display to use NOTE: Not all options are implemented in the Qt port. Com o decorrer do uso do Wireshark é bom que você comece a se acostumar com seu glossário. Exemplo, quando você está visualizando as características de um pacote verá a seção “frame”. Esta se refere a camada 1 do modelo osi, a camada física, o Ethernet II à camada 2, e assim por diante. Veja: Vejamos a tela do Wireshark: Copyright Logicus 2016 57 Comece observando o menu e a barra caixa de ferramentas: Copyright Logicus 2016 58 A primeira opção do menu é a “File”. Clique em em “Open” ou use as teclas Ctrl+O para abrir um arquivo. Até aqui, seguindo este tutorial você ainda não terá arquivos salvos. Então vamos gerar uma captura. Primeiro selecione uma interface de rede e depois clique no ícone verde da caixa de ferramentas que simula uma barbatana de tubarão. Após alguns segundos e alguns pacotes pare a captura! Agora você “exportar” o tráfego capturado. Na opção “Export Packat Dissections” você possui algumas opções. São elas: Plain text, Post Script, CSV, C Arrays, e por fim XML. Escolha a opção “Plain text”. Veja o exemplo: Copyright Logicus 2016 59 Para imprimir clique em File > Print ou faça Ctrl+P: Copyright Logicus 2016 60 Copyright Logicus 2016 61 Após escolher as opções, clique em “Print” para imprimir. Vejamos agora a seção “Edit”. Nesta seção é possível marcar pacotes no painel de captura de pacotes. Um pacote marcado será destacado com fundo preto. Este recurso é útil ao trabalhar com uma lista grande de pacotes, pois, é mais fácil para encontrá­lo depois. Ao salvar e fechar o arquivo esta marcação será perdida! Para utilizar esta opção acesse Edit no menu superior e clique em Market Packet para marcar um pacote por vez. Exemplo: Você pode usar a opção Crtl+M para marcar pacotes a cada vez, mas também é possível também marcar todos de uma vez (Mark All Displayed Packets) e desmarcar (Unmark All Displayed Packets). Copyright Logicus 2016 62 Para inserir um comentário acesse o item Edit e clique na opção Packet Comment. Escreva o comentário: Clique em Ok. Ao clicar no pacote o comentário será exibido: Vamos agora para a seção “View”. Nesta seção encontramos diversas opções de visualização do Wireshark. Clique em “Coloring Rules”. Vejamos: Copyright Logicus 2016 63 Copyright Logicus 2016 64 Na seção “Go” estão disponíveis itens para navegar entre pacotes. Clique em “Go to package” para ir direto para um pacote. Exemplo: E o resultado: Uma opção muito interessante é a “Next Package in Conversation” que permite você avançar para o próximo pacote relativo naquela conversação. Você pode usar ainda o “Ctrl+.” como atalho para facilitar. Vejamos agora na seção “Capture”, seção esta que contém ítens de interfaces, opções, filtros, entre outros. Clique em “Interfaces”. Vejamos: Copyright Logicus 2016 65 A seção “Analyze” contém itens de manipulação de filtros, configurar decodificações, entre outros. Clique em Analyze e depois em “Display filters”. Vejamos: Copyright Logicus 2016 66 Copyright Logicus 2016 67 Selecione por exemplo o filtro “HTTP”. No resultado serão apresentados apenas pacotes relativos ao filtro. Vejamos: Se você abrir o pacote para verificar seus dados: Copyright Logicus 2016 68 Poderá ver até mesmo para qual site houve a requisição. Neste caso para o site da Logicus, o que mostra muito bom gosto por parte do usuário. Vejamos um exemplo procurando por um ip específico: Copyright Logicus 2016 69 Copyright Logicus 2016 70 E o resultado: Caso tenha algum protocolo desabilitado ou caso você queira desabilitar você pode ver em Analyze a opção “Enable Protocols”. Vejamos: Copyright Logicus 2016 71 Copyright Logicus 2016 72 Na opção “Follow UDP Stream” você pode conferir a sequência da conversação. Vejamos: Copyright Logicus 2016 73 Copyright Logicus 2016 74 Na opção “Expert info” você encontra uma janela de controle que lhe permite observar Erros, Warnings, Notes, Chats, Details e Packet Comments. Vejamos: Copyright Logicus 2016 75 Copyright Logicus 2016 76 Há ainda na seção “Statistics” ítens sobre estatísticas, resumo de pacotes, hierarquia de protocolo de exibição, entre outros. Para visualizar um resumo da captura de pacotes clique em Statistics e em seguida em Summary. Será apresentada a seguinte janela (dividida em duas partes devido a sua extensão). Copyright Logicus 2016 77 Copyright Logicus 2016 78 Nesta primeira parte da janela Summary nos é apresentado o campo File com informações gerais sobre o arquivo de captura. O campo Time que nos informa a data e hora da captura entre o primeiro e o último pacote. O campo Capture com informações sobre a captura de pacotes. Na segunda parte da janela é exibido o campo Display, com informações sobre a exibição. E por fim, o campo Traffic, que apresenta estatísticas do tráfego. Vejamos agora a opção “IO Graphs”. Trata­se de um gráfico dos pacotes de rede capturados pelo Wireshark. O usuário pode configurá­lo. É possível definir até cinco gráficos com cores diferentes: Copyright Logicus 2016 79 No campo Graphs selecionamos de 1­5 os gráficos que desejamos visualizar. O campo Color informa a cor do gráfico. O campo Filter define um filtro de exibição para o gráfico. Para selecionar um filtro clique no botão Filter, clique sob o filtro escolhido e clique em OK para confirmar. Copyright Logicus 2016 80 No campo Style podemos definir o estilo de exibição do gráfico. No campo X Axis (Eixo X) definimos as opções de intervalo de tempo, pixels e hora. No campo Y Axis (Eixo Y) definimos valores de unidade e escala. Há também no menu a seção “Teçephony” que contém ítens de telefonia. Os itens são relacionados a diversos tipos de telefonia. Os tipos disponíveis são: ANSI, GSM, IAX2, ISUP, LTE, MTP3, RTP, RTSP, SCTP, SMPP, Copyright Logicus 2016 81 UCP, VOIP, H.225, SIP e WAP­WSP. A próxima seção é a “Tools” que contém a ferramenta de criação de regras ACL do firewall. Esta opção permite você criar regras de ACL para diferentes tipos de Firewall. Exemplo: Vejamos com a opção de Netfilter selecionada: Lembrando que você pode alterar o filtro também, exemplo: Copyright Logicus 2016 82 A próxima seção do menu é a “Internals” que apresenta tabelas, protocolos suportados e campos de filtros. Estão presentes três opções sendo estas: “Dissector tables”, “conversion hash tables” e “supported protocols”. Vejamos um exemplo da janela relativa a opção “Dissector tables”: Copyright Logicus 2016 83 Copyright Logicus 2016 84 Vejamos um exemplo da janela relativa a opção “Conversion hash tables”: Vejamos a janela relativa a opção “Supported Protocols”: Copyright Logicus 2016 85 Sobre a seção “Help” gostaríamos de dizer que contém opções de ajuda sobre o conteúdo, o Guia do Usuário do Wireshark em inglês, páginas de manual, FAQ's, download, Wiki, entre outras. No item About Wireshark encontramos informações sobre versão atual do programa e também sobre os autores, plugins, licença e pastas. Agora, vejamos uma prática dirigida para analisar uma conexão FTP. Para encerrarmos nosso artigo vamos fazer uma prática dirigida acompanhado um tráfego feito utilizando FTP. Primeiramente vamos abrir o Wireshark sem nenhum filtro, na sua forma mais elementar. A depender do que você tem aberto, por exemplo um navegador, já terá todo um tráfego rodando sendo capturado. Esse tráfego Copyright Logicus 2016 86 obviamente não nos interessa, mas será interessante posteriormente para verificarmos o resultado do filtro no número dos pacotes referentes ao tráfego FTP. Agora abra um terminal. Vamos fazer uma conexão FTP no servidor ftp.suse.com. # ftp ftp.suse.com Connected to ftp.suse.com. 220 "Welcome to ftp.suse.com" Name (ftp.suse.com:root): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr­xr­x 8 ftp ftp 4096 Jun 26 2015 pub 226 Directory send OK. ftp> cd pub 250 Directory successfully changed. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. ­rw­r­­r­­ 1 ftp ftp 2862 Jul 01 2011 README.mirror­policy ­rw­r­­r­­ 1 ftp ftp 4046 Jan 14 2004 README.txt ­rw­r­­r­­ 1 ftp ftp 308655 Jul 01 2011 find­ls.gz drwxr­xr­x 8 ftp ftp 4096 Jun 14 23:01 incoming drwxrwsr­x 15 ftp ftp 4096 May 19 06:48 l3 ­rw­r­­r­­ 1 ftp ftp 217757 Jul 01 2011 ls­laR.gz drwxr­xr­x 3 ftp ftp 19 Nov 05 2013 partners drwxr­xr­x 90 ftp ftp 4096 Jun 18 2015 people drwxr­xr­x 37 ftp ftp 4096 Aug 14 2014 projects Copyright Logicus 2016 87 drwxr­xr­x 5 ftp ftp 78 Mar 03 2010 suse 226 Directory send OK. ftp> get README.txt local: README.txt remote: README.txt 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for README.txt (4046 bytes). 226 File send OK. 4046 bytes received in 0.00 secs (818.0480 kB/s) ftp> exit 221 Goodbye. Agora no Wireshark busque pela expressão “ftp”: Copyright Logicus 2016 88 Veja o IO Graph dessa conexão: Copyright Logicus 2016 89 Ok! Com esta prática capturando um tráfego FTP encerramos este artigo. Nosso objetivo era lhe mostrar o funcionamento básico das ferramentas TCPdump, Iptraf, Etherape e Wireshark. Lembre­se que como falamos no início você precisa de um conhecimento sobre os protocolos de rede Copyright Logicus 2016 90 para aproveitar bem estas ferramentas, então leia as RFCs e pratique muito, capture muitos tráfegos em sua rede interna e treine analisando­os. Esperamos ter ajudado! ​
Have a nice hacking day! Copyright Logicus 2016 91 

Documentos relacionados