Professional Documents
Culture Documents
Tcpdump, es de uno de los analizadores de paquetes de red ms conocidos e importantes en lo que a lnea
de comandos en entornos Unix se refiere. Su principal funcin es la de analizar el trfico que circula por la
red. Este programa viene dede 1987, poca en la que sus autores Van Jacobson, Craig Leres y Steven
McCanne trabajaban en el Lawrence Berkeley Laboratory Network Research Group, . El programa es
ampliado por Andrew Tridgel.
Se le puede relacionar con el trmino Sniffer. Los sniffers son analizadores de red o analizadores de
paquetes que nos permiten capturar trfico en nuestra red para posteriormente poder realizar un anlisis de
la informacin recogida. Se trata de configurar nuestra tarjeta de red en un modo denominado promiscuo,
que nos permita no slo escuchar los paquetes que vienen destinados a nosotros, sino que se trata de
escuchar todo el trfico que se genera en la red.
Es una herramientas indispensable en su labor diaria del administrador de red.
Entre sus muchas funciones podemos citar como ejemplos:
Detectar problemas de red
Detectar intrusiones
Conocer y monitorizar el trfico que se est generando
Control de ancho de banda,
etc
Histricamente en todas aquellas redes centralizadas a travs de concentradores hub, era muy fcil colocar
un sniffer que nos permitiese escuchar todo el trfico que se generaba en la red. Qu podemos encontrar
en las capturas? Por ejemplo, muchos usuarios y contraseas. Hay que tener claro que son muchos los
protocolos inseguros por naturaleza en los que los usuarios/contraseas viajaban en texto claro. Protocolos
como smtp, pop3, ftp, http, Telnet, etc pueden ser slo algunos ejemplos. Como casi siempre sucede en el
mundo de las TIC, la seguridad no suele ser la fase ms importante a la hora de abarcar un proyecto.
Si preguntamos a nuestro sistema Debian por Tcpdump, nos dir:
#apt-cache search -f tcpdump
Package: tcpdump
Maintainer: Romain Francoise
Description: A powerful tool for network monitoring and data acquisition
This program allows you to dump the traffic on a network. tcpdump
is able to examine IPv4, ICMPv4, IPv6, ICMPv6, UDP, TCP, SNMP, AFS
BGP, RIP, PIM, DVMRP, IGMP, SMB, OSPF, NFS and many other packet
types.
.
It can be used to print out the headers of packets on a network
interface, filter packets that match a certain expression. You can
use this tool to track down network problems, to detect "ping attacks"
or to monitor network activities.
Homepage: http://www.tcpdump.org/
Tag: admin::monitoring, interface::commandline, network::scanner, protocol::{ip,i
#tcpdump -i 2
La respuesta sera una lnea del tipo:
20:50:43.975606 IP portatil.34296 > fx-in-f106.1e100.net.www: Flags [S], seq 2560890
-1-
El formato general de la lnea mostrada es el siguiente:
timestamp src > dst: flags data-seqno ack window urgent options
-2-
-p: pone la tarjeta en modo no promiscuo
Con ifconfig -a vemos si la tarjeta se encuentra en modo promiscuo
-q: imprime menos informacin por lo que las lneas son ms cortas
#tcpdump -q -i wlan0 c1
21:30:38.616870 IP portatil.local.57740 > fx-in-f99.1e100.net.www: tcp 0
1 packets captured
-r: lee los paquetes guardados con la opcin -w
EXPRESIONES
Para trabajar con ellas nos van a permitir filtrar resultados.
host: Filtrar el trfico por Host.
#tcpdump -n -i wlan0 -c1 host www.google.es
21:47:26.704685 IP 10.207.X.X.53749 > 74.125.39.106.80: Flags [S], seq 3929171104, win
5840, options [mss 1460,sackOK,TS val 499568 ecr 0,nop,wscale 6], length 0
Otro ejemplo en este sentido: #tcpdump ip host www.google.es and not www.bing.com
port: mostrar solo trfico de un determinado puerto.
#tcpdump -n -q -i wlan0 -n port 80
21:50:06.758861 IP 10.207.X.X.53749 > 74.125.39.106.80: tcp 5
-3-
21:50:06.880112 IP 74.125.X.X.80 > 10.207.214.102.53749: tcp 0
dst host host: Trfico con un determinado host como destino.
# tcpdump -i wlan0 dst host www.google.es
src host host: Trafico con un determinado host como origen.
#tcpdump -i wlan0 src host 10.20.1.90
Si queremos trabajar con las direcciones MAC al igual que con los host.
ether dst ehost
ether src ehost
ether host ehost
#tcpdump -i wlan0 ether dst 00:22:fb:9a:57:72
Si ahora queremos recoger informacin de una determinada red:
dst net net
src net net
net net
net net mask netmask
#tcpdump -i wlan0 net 10.207.X.X/24
Si queremos trabajar con puertos:
dst port port
src port port
#tcpdump -i wlan0 port 22 or 23
not: Negamos una expresin.
#tcpdump -i wlan0 "tcp src port 80" and not host 1.1.1.1
ip proto protocol: Especificar un determinado protocolo.
#tcpdump -i wlan0 ip proto 6 = tcpdump tcp -i wlan0 (tcp , udp, icmp) = #tcpdump -i wlan0
ip proto \\tcp
#cat /etc/protocols | grep tcp
tcp 6 TCP # transmission control protocol
Podemos trabajar con los tamaos (bytes)
less leghnt
greather length
#tcpdump -i wlan0 greater 20
Y muchas mas expresiones a consultar en el man tcpdump.
ip6 proto protocol, ip6 protochain protocol, ip protochain protocol
ip broadcast, ether multicast, ip multicast, ip6 multicast, ether proto protocol decnet
src host, decnet dst host, decnet host, ip, ip6, arp, rarp, atalk, aarp decnet. iso, stp,
ipx, netbeui, vlan vlan_id, tcp , udp, icmp, clnp, esis, isis
Tambin podemos combinar expresiones:
Negacin: ! o not
And: && o and
Or: || o or
Ejemplos:
# tcpdump -i wlan0 ip and not net 1.1.1.1
#tcpdump host 10.200.1.1 and \( 1.1.1.1 or 2.2.2.2 \)
#tcpdump -i wlan0 "tcp src port 80"
-4-
#tcpdump -n -i wlan0 "not (tcp port ssh and host 1.1.1.1 and host 2.2.2.2)"
#tcpdump -i wlan0 ((tcp) and (port 80) and ((!dst host www.google.es) && (!dst host
www.bing.com)))
Ahora vamos a complicarlo un poco ms y realizar filtrados con el que se muestra en el siguiente ejemplo:
Ejemplo de 3-way handshake protocol: vamos a recoger solo los paquetes SYN.
El diagrama de una cabecera TCP sin opciones seria tal que as.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |Octeto 0 -3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |Octeto 4 -7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |Octeto 8 - 11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Res. |W|C|R|C|S|S|Y|I| Window |Octeto 12 -15
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |Octeto 16 - 19
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Si nos fijamos los Flags se encuentran entre el octeto 12 y el 15. Exactamente en los bits contenidos en el
octeto 13
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Res. |W|C|R|C|S|S|Y|I| Window |Octeto 12 -15
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |Octeto 13 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Si ahora nos fijamos en el octeto 13
+-+-+-+-+-+-+-+-+
|C|E|U|A|P|R|S|F|
|W|C|R|C|S|S|Y|I|
|R|E|G|K|H|T|N|N|
+-+-+-+-+-+-+-+-+
7 6 5 4 3 2 1 0
Si recibimos un paquete con el bit SYN activado:
+-+-+-+-+-+-+-+-+
|0|0|0|0|0|0|1|0|
+-+-+-+-+-+-+-+-+
7 6 5 4 3 2 1 0
Asumiendo que el octeto es un integer sin signo, en Binario sera igual a 00000010 que en notacin decimal
corresponde al nmero 2. Esto lo podemos expresar como tcp[13] == 2.
#tcpdump -i wlan0 'tcp[13] ==2'
tcp[13] lo podemos reemplazar con tcp[tcpflags]. Los posibles valores serian :
tcp-fin
tcp-syn
tcp-rst
tcp-push
tcp-act
tcp-urg
Con lo que podemos expresarlo como :
#tcpdump tcp[tcpflags] & (tcp-syn) != 0)
Mostrar paquetes de inicio y fin (SYN y FIN activados) que no pertenezcan a una determinada red:
-5-
#tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 10.204.X.X'
Siguiendo el mismo razonamiento si queremos que filtrar paquetes SYN y ACK, entonces tcp[13] == 18
Si queremos recoger nicamente paquetes con SYN o SYN+ACK entonces aplicamos mscaras:
00010010:SYN-ACK + 00000010:Mascara (2 en decimal) = 00000010 : Resultado(2 en decimal)
#tcpdump -i wlan0 'tcp[13] & 2 = 2'
Tambin podramos filtrar los paquetes lanzados contra un determinado puerto :
proto[x:y] x es el byte inicio, y numero de bytes a recoger.
#tcpdump -i wlan0 'tcp[0:2] =81'
Ademas podemos utilizar los siguientes operadores:
Operators : >, <, >=, <=, =, !=
Pudiendo transformar el filtro anterior:
#tcpdump -i wlan0 'tcp[0:2] >21 && tcp[0:2] < 25''
Con lo visto podemos jugar con otros protocolos como ICMP.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo
11 Time Exceeded
12 Parameter Problem
13 Timestamp
14 Timestamp Reply
15 Information Request
16 Information Reply
Por ejemplo filtrar un Echo Request:
#tcpdump -i wlan0 'icmp[0]=8'
Podemos obtener las IP que nos estn haciendo escaneos
#tcpdump -lni wlan0 'icmp and (icmp[0] = 8)' | tee salida.txt #cut -d " " -f 3 salida.txt
-6-