En una entrada anterior un lector anónimo comentaba: "Muy
interesante sería una entrada para desvelar los misterios de
tcpdump. En
muchos tutoriales
solo se araña la superficie de esta herramienta"... lo
intentaremos.
La verdad es muy
difícil decir algo de esta herramienta que no esté ya dicho, pero
voy a intentar hacer un artículo en varias entregas con lo
que creo que se debería saber sobre este magnifico sniffer.
En esta serie de
entradas (creo que serán
unas 3) intentaremos abarcar todos los aspectos de esta herramienta,
por favor si me dejo algo decirlo.
Para quien no sepa
lo que es Tcpdump echaremos mano de Wikipedia... a
modo de introducción: Tcpdump
es un herramienta en línea de comandos cuya utilidad principal es
analizar el tráfico que circula por la red.
Permite al usuario
capturar y mostrar a tiempo real los paquetes transmitidos y
recibidos en la red a la cual el ordenador está conectado. Tcpdump
funciona en la mayoría de los sistemas operativos UNIX: Linux,
Solaris,
BSD,
Mac
OS X, HP-UX
y AIX
entre otros. En esos sistemas, tcpdump
hace uso de la biblioteca libpcap
para
capturar los paquetes que circulan por la red.
Existe una
adaptación de Tcpdump
para los sistemas Windows
que
se llama WinDump
y que hace uso de la biblioteca Winpcap.
Tcpdump fue escrito originalmente en 1987 por Van
Jacobson,
Craig
Leres
y Steven
McCanne. A día
de hoy va por la versión: 4.5.1 / 1.5.2 release date: Nov
20, 2013/Dec
3, 2013.
Utiliza libpcap
al igual que wireshark,
snort,
nmap,
kismet,
iftop, xplico
y un largo etc...t ambién
creada por estos tres "elementos", TCPdump
puede ser a día de hoy unos de los sniffer
mas usado en todo el mundo, por su versatilidad y potencia.
Dicho
esto entramos en harina...
Instalación
Lo
podemos descargar de la pagina
oficial y compilarlo, aunque sería muy raro que no estuviese en
los repositorios como paquete ya precompilado
para cualquier distribución. Debian, Ubuntu
y derivadas lo pueden instalar con Apt,
Centos, Redhat
con Yum,
Opensuse
con Yast,etc, etc.
Para mí, la mejor característica que tiene Tcpdump
es que esta diseñado para correr en la linea de comandos, esto nos
ofrece posibilidades
que otros sniffers
igual de potentes no tienen, sacrificamos a priori vistosidad y intuición
de manejo por versatilidad...
Tcpdump básico
Antes de comenzar conviene echarle un ojo a las opciones de esta herramienta un poco por encima. Más adelante las iremos viendo todas:
Con esto ya
estamos preparados para nuestro primer comando:
tcpdump
-i wlan0 -n
Lo que le estamos diciendo a tcpdump es que capture el trafico
con la tarjeta de red Wlan0 y que no resuelva los nombres de las
interfaces de manera que nos saldrían las ip:
En realidad de
momento esto no tiene ningún misterio: nosotros ordenamos y tcpdump
obedece.
Vamos a ver otro ejemplo:
tcpdump
-i wlan0 -n -c 1 -t -A
En cristiano sería: -i captura el trafico por wlan0, -n no resuelvas los nombres, -c1
cuando hayas capturado 1 paquetes para, -t no muestres la hora, -A
muestra los paquetes en ascII:
Otras opción que
interesa ver sería -s len,
donde "len" es la longitud que nos interesa.
Por defecto Tcpdump
sólo captura los primeros 68 bytes, lo cual es útil si lo único
que se quiere son las cabeceras IP,
TCP
o UDP. Sin embargo, en caso de estar esnifando
protocolos como NFS
se truncan los datos. En ese caso podemos ajustar la longitud de la
captura a la MTU
del medio que estamos usando con esta opción. Por ejemplo para
capturar toda la trama ethernet
podemos usar -s
1500 o -s 0.
Filtrado básico
A veces no nos
interesa ver todos todos los paquetes que pasan por nuestra red y
queremos ver los que salen de una determinada ip,
o los de un puerto en
concreto, etc.
Para esto Tcpdump
viene bien armado, los modificadores
básicos son 3:
Tipo:
Puede ser host,
net o port,
portrange indican
respectivamente una máquina, por ejemplo host
192.168.1.1, una red completa, por ejemplo net
192.168, un puerto concreto o un rango de puertos.
Veamos unos ejemplos:
Captura
el tráfico que entre o salga del host
192.168.1.1 por el puerto 22:
tcpdump
-i wlan0 host
192.168.1.11 port 22
Captura
el tráfico con destino 192.168.1.11 por el rango de puertos del 22 al
25 pero no el 23:
tcpdump
-i wlan0 host 192.168.1.11
and portrange
22-25 and not
23
Dirección:
Especifica desde o
hacia donde se va a mirar el flujo de datos. Tenemos src
(source) o dst
(destination) y podemos
combinarlos con or,
and y not.
Para el caso de de protocolos punto a punto podemos sustituir por
inbound o outbound.
Más ejemplos:
Captura los paquetes
que vienen de 192.168.1.11:
tcpdump
-i wlan0 src 192.168.1.11
Captura los paquetes
que van hacia 192.168.1.11:
tcpdump
-i wlano dst
192.168.1.11
Captura los paquetes
con el origen 192.168.1.11 y destinado
a 192.168.1.35:
tcpdump
-i wlan0 src
192.168.1.11 and
dst
192.168.1.35
Por supuesto se
pueden combinar con los modificadores
anteriores:
tcpdump
-i wlan0 -n -S src
192.168.1.11 and dst
192.168.1.35 and dst
port 25
Captura los paquetes
de origen 192.168.1.11 con destino 192.168.1.35 con el puerto de
destino 25.
Proto:
En este caso es el
protocolo que queremos capturar: tcp,
udp, icmp, rarp,
ip,
ip6, igrp, icmp6, igmp,
etc, etc...
tcpdump
-i wlan0 icmp
and
host
192.168.1.1
Seguro
que me dejo infinidad de expresiones y combinaciones,
todo lo anterior lo podemos escribir
tanto con nombres de servidor, direcciones
ip o direcciones mac... Como
veis cuando hablé de versatilidad iba en serio.
Siguiendo con el
tema del filtrado ....todavía
podemos filtrar aun más y ser mucho mas quirúrgicos...
Filtrado (no tan
básico) de
FLAGS
Imaginemos que
queremos filtrar todos los paquetes que lleguen de una máquina a
otra por un puerto determinado, que tengan el flag
activo ACK (así
dicho tan en frío casi
suena a rollazo pero en el
próximo tutorial
veremos un par de ejemplos muy divertidos).
Esto lo podríamos
filtrar del siguiente modo (es un poco largo pero luego veremos como
abreviarlo todo):
tcpdump
-i wlan0 src
host
192.168.1.10 and
dst
host
192.168.1.30 and
port
22 and
-S -n "
tcp[13]
& 16 == 16 "
Fijémonos
ahora en la parte resaltada del filtro
y veamos de dónde sale y qué significa.
Para ello debemos
ver como es una cabecera tcp y dónde se sitúa la bandera
ACK (esto mismo se
puede hacer con otros protocolos como icmp,
luego veremos cuanto puede dar de sí ésto...)
Como podemos
ver, la bandera ACK
está situada en el octeto
número 13. De ahí sale el principio del filtro
tcp[13].
Ahora
miremos más de cerca... el octeto
sería
0001000 si
tuviese
el flag
ACK
activo. Si pasamos esa situación de
binario a decimal nos da 16 con lo cual podemos decirle a tcpdump
que mire en la cabecera en el octeto 13 y si es igual a dieciséis
que nos muestre
esos paquetes ..."
tcp[13]
& 16 == 16 "
¿Sencillo no?, imaginad... ¿qué no podéis
filtrar con tcpdump?, ¿se
puede ser mas quirúrgico?...
Otro ejemplo. Si queremos visualizar los paquetes con el syn ack activo el estado del octeto 13 sería 00010010
= 18 con lo cual el
filtro es "
tcp[13]
& 18 == 18.
Bueno
por hoy lo dejamos aquí,
espero no haber
aburrido y hasta la segunda entrada sobre Tcpdump...
Fuente
No hay comentarios:
Publicar un comentario