===== Guía rápida y completa del sniffer Tshark (Wireshark en modo texto) ===== Las ventajas que ofrece tshark frente a otros sniffers es su capacidad de poder visualizar tráfico de red de manera muy filtrada. Permitiendo también generar con esos filtros otros ficheros pcap derivados. Otras de sus posibilidades son la obtención de estadísticas muy configurables y útiles. También permite el coloreado de paquetes en la terminal de la misma manera que lo hace wireshark (GUI), posibilidad de descifrar https mediante ficheros de claves y geolocalización de IPs. Resumiendo, todo el potencial del popular Wireshark pero en modo texto. Listar las interfaces de red disponibles numeradamente e indicar cual utilizar. tshark -D # Capturar en la interfaz indicada, el número corresponde al listado. "any" corresponde a todas las interfaces. tshark -i ens32 / tshark -i1 Obtener información sobre una captura pcap. capinfos fichero.pcap Abrir una captura pcap. tshark -r fichero.cap Permite obtener la salida estándar (-P) a la vez que se crea un fichero pcap (-w), el comentario es algo optativo. tshark -P -w fichero.pcap --capture-comment "Comentario" Extraer tráfico de una captura aplicando uno o varios filtros y crear otro fichero pcap. tshark -r test2.pcap -Y ldap.simple -w cacas.pcap Resolución de nombres en tshark. # Deshabilita la resolución de nombres de objetos como IPs, puertos, etc. tshark -n -N m # Resolver dirección MAC -N n # Resolver nombres usando las resoluciones de la captura. -N N # Resuelve utilizando DNS. –N t # Resolver nombres de puertos. -N d # Ressolver IP. Especificar condiciones temporales en las capturas. -c n Termina la captura después de capturar n paquetes. -a duration:n Termina la captura después de n segundos. -a filesize:n Termina la captura después de que el fichero de captura llegue a n Kb. (Rquiere -w fichero.pcap) –a files:n Termina la captura cuando al tener n ficheros de captura. requiere de filesize o duration y de -w indicando directorio: "tshark -a files:3 -a filesize:1024 -w /tmp/" Ejemplo: A los 10 segundos tshark dejará de capturar. # shark -i2 -f "port 25" -aduration:10 ===== Configurar campos / formato de la salida de Tshark ===== La salida que obtenemos por defecto en tshark, si no se especifican opciones extras es sin colores y el formato sería el siguiente (Puede obtenerse mediante "tshark -G column-formats"). tshark -o 'gui.column.format:"No.","%m","Time","%t","Source","%s","Destination","%d","Protocol","%p","Length","%L","Info","%i"' Salida coloreada en la terminal al estilo wireshark. tshark --color Formatos de salida (json, text, etx,etc. Para compatibilidad con elasticsearch mirar el manual). tshark -T ek|fields|json|jsonraw|pdml|ps|psml|tabs|text -T psml / -T pdm # Formato XML psml ó pdml -T ps # Formato postscript -T text # Formato texto. Por defecto -T json # Formato json embellecido -T ek # Formato json en una sola linea, util para combinarlo con herramientas como jq. -T fields # Especifica qué campos se desean mostrar. ej "-e ip.addr). # NOTA: La opción "fields" se usa para especificar con "-e" los campos que se quieren visualizar, pueden ser usados en combinación con los filtros de captura o lectura indistintamente. Formas de mostrar los campos (fields). -E header=y/n # Establece si imprimimos o no la cabecera de los campos indicados en -e -E separator=/t|/s|[caracter] # Establecemos un separador para los campos mostrados en -e ó un separador tipo caracter./t tabuludo, /s espacio y -E separator="-" (Sólo un car acter) -E quote=d|s|n # Delimitar campos con comillas normales, simples o sin delimitar. # Mostrar únicamente los campos "http.host" y "ip.addr" indicando el nombre del campos en la cabecera. tshark -nr test99.pcap -Y "http" -T fields -e http.host -e ip.addr -E headers=y http.host ip.addr 192.168.178.1 192.168.178.50,192.168.178.1 Información mostrada de los paquetes. tshark -G protocols # Muestra las abreviaciones de los protocolos tshark -G fields # Muestra un listado de todos los campos de todos los protocolos soportados: tshark -G fields | grep -i "http\.request tshark -G ? # Muestra las posibles opciones. tshark -V # Muestra los detalles de los paquetes. tshark -O protocol # Muestra los detalles de los paquetes y su contenido en los protocolos especificados. tshark -G column-formats # Como comentamos anteriormente en la guía puede definir el formato de algunos campos. Opciones de visualización de tiempo. -t ad Formato absoluto fecha y tiempo (ej. 2018-05-13 21:46:11). -t a Formato absoluto sin dato de fecha (ej. 21:46:11). –t r Relativo en segundos entre primer paquete y el actual (ej. 41.182871015). –t d Tiempo respecto al paquete anterior (ej. 0.004406077). ===== Filtros en Tshark / Wireshark ===== Tshark tiene dos tipos de filtros, uno es a la hora de capturar paquetes y el otro que se puede utilizar se aplica sobre la visualización de los datos. Se recomienda utilizar los de captura por si se van a analizar redes con mucho tráfico en detrimento de los de visualización. * Filtros de captura: [[https://biot.com/capstats/bpf.html // http://wiki.wireshark.org/CaptureFilters]] * Filtros de visualización: [[https://www.wireshark.org/docs/dfref/]] ==== Filtros de captura ==== Los filtros de captura están orientados a usarse en tiempo de ejecución de la captura. Estos no pueden ser usados para filtrar contenido en un fichero pcap, para ello deben usarse los filtros llamados de lectura o visualización. Los filtros de captura utilizan la sintaxis (BPF - Berkeley Packet Filter) que es también la utilizada en tcpdump. Lo que aporta tshark frente a tcpdump es su capacidad de visualización (filtros de lectura / visualización) para poder analizar la red de una manera algo más eficiente. También se nos permite extraer información y crear otros ficheros pcap derivados. Estos filtros de lectura tienen una sintaxis diferente a los de captura. Filtros para interceptar contraseñas. ### LDAP ldap.authentication ### FTP ftp.request.command == "USER" or ftp.request.command == "PASS" ### HTTP HTTP/XML xml.tag == "" ### HTTP Authentication # HTTP Basic Authentication http.authbasic # Proxy Authentication. http.proxy_authenticate # Citrix Authentication. http.authcitrix.user and http.authcitrix.password Ejemplo de filtro: Filtrando por direcciones destino que usen los puertos 80 y 443. tshark -i1 -f "dst port 80 && dst port 443" ==== Filtros de lectura / visualización ==== Estos son los filtros orientados a operar sobre ficheros pcap pero pueden ser usados en capturas en tiempo real. Como se comento anteriormente y por pura lógica los filtros de captura son más eficientes para filtrar tráfico en tiempo real que los visuales. Por lo que si se quiere obtener una visualización personalizada de algunos campos del protocolo http, lo correcto sería filtrar la captura por http y luego aplicar un filtro de visualización. A continuación se muestra como obtener información sobre cualquier campo de tshark / wireshark para poder visualizarlo y/o condicionarlo en el filtro. Listado de todos los protocolos - campos soportados: [[https://www.wireshark.org/docs/dfref/]] tshark -G fields # Muestra un listado de todos los campos de todos los protocolos soportados: tshark -G fields | grep -i "http\.request tshark -G ? # Muestra las posibles opciones. Obtener información completa sobre los filtros de visualización. man wireshark-filter Conectar a la interfaz 2 (tshark -D) y visualizar únicamente conexiones TCP al puerto 443. tshark -i2 -Y "tcp.port == 443" **Filtrar los campos de la salida**. Ejemplo: Se muestran los campos "ldap.simple" y "ldap.name" encontrados en el fichero test.pcap. shark -nr test.pcap -T fields -e ldap.simple -e ldap.name -Y'((ldap.authentication == 0) && !(ldap.simple == "abc32")) && !(ldap.simple == "1234")' 1 sexa69 cn=user1 zink,ou=_users,ou=XXX,ou=cacas,dc=group,dc=local 2 !wx35_r cn=user2 villwock,ou=_users,ou=XXX,ou=cacas2,dc=group,dc=local Estos dos comandos muestran la misma salida, la primera aplica un filtro de captura y la segunda uno de visualización. Capturar en tiempo real peticiones DNS usando un filtro de captura. tshark -f "dst port 53" -n -T fields -e dns.qry.type -e dns.qry.name -e ip.dst 1 busindre.com 201.244.0.4 28 busindre.com 201.244.0.4 Capturar en tiempo real peticiones DNS usando un filtro de lecura / visualización. tshark -Y "udp.port == 53" -n -T fields -e dns.qry.type -e dns.qry.name -e ip.dst 1 busindre.com 201.244.0.4 28 busindre.com 201.244.0.4 NOTA: Si se usa la salida de campos sin especificar un filtro del tipo que sea, todos los paquetes que no tengan dichos campos serán mostrados como lineas en blanco, por lo que es importante que el filtro tenga coherencia en relación a los campos que se quieren visualizar. ==== HTTPS ==== Descifrar tráfico HTTPS en tshark mediante un fichero [descifrar_trafico_https_con_wireshark|SSLKEYLOGFILE]]. tshark -nr test.pcap -Y "ssl" -o ssl.keylog_file:/tmp/SSLKEYLOGFILE ==== GeoIP ==== Obtener información geográfica y/o filtrar por geolocalización en las capturas de red. mkdir -p ~/.wireshark echo '"/usr/share/GeoIP"' > ~/.wireshark/geoip_db_paths # Arrancar tshark activando el modo GeoIP lookup. tshark -n -i venet0 -V -o "ip.use_geoip: TRUE" tshark -n -i venet0 -V -o "ip.use_geoip: TRUE" -T fields -e ip.dst -e ip.geoip.dst_country tshark -n -i venet0 -o "ip.use_geoip: TRUE" -R "ip.geoip.country==China" ===== Estadísticas ===== Para las estadísticas tshark utiliza la opción "-z" la cual necesita como parámetro el tipo de filtro y optativamente uno o varios filtros. Hay muchísimos tipos de estadísticas disponibles y se recomienda consultar las páginas del manual, aquí solo se mostrarán algunas de ellas. Si únicamente se quieren obtener estadísticas, se recomienda usar la opción "-q" de tshark para no ver el tráfico en la terminal. Es posible también especificar varios tipos de estadísticas en un solo comando tshark, veamos un ejemplo para obtener estadísticas de endpoints por IP y estadisticas de conexiones IP que hayan usado UDP en el puerto 53 (Normalmente DNS). tshark -qz endpoints,ip -z conv,ip,"udp.port==53" **Agregar información a la salida de la captura**. # -z proto,colinfo,filtro,campo # Agrega a los datagramas IP el campo ip.proto y a los http, el campo http.host. tshark -i1 -z proto,colinfo,ip.proto,ip.proto -z proto,colinfo,http.host,http.host Las estadísticas podemos dividirlas en dos grupos, estadísticas generales y específicas. Las generales nos permiten filtrar varios protocolos de una manera muy personalizada. Las estadísticas especificas en cambio suelen tener también opciones de configuración y filtrado, pero vienen ya preparadas y adaptadas para determinados protocolos populares como HTTP, DNS, SAMBA, SIP, etc. **Estadísticas por IO (bytes / frames) en intervalos de tiempo configurables**. # Pueden asignarse varios filtros. # -z io,stat,intervalo,[filtro],[filtro],.. tshark -i1 -qzio,stat,10 # Saca estadísticas cada 10 segundos de los frames y bytes tshark -i1 -qzio,stat,10,http,ip,"udp.port==53" # Saca estadísticas cada 10 segundos de los frames y bytes por protocolo http, IP y el tráfico udp del puerto 53. **Estadísticas de Jerarquía de Protocolos**. tshark -i1 -qzio,phs # Muestra estadísticas por protocolo tshark -i1 -qzio,phs,[filtro] # Muestra estadísticas por protocolo aplicando filtro. # Ejemplo de salida. tcp frames:15031 bytes:7714455 ssl frames:1206 bytes:970409 tcp.segments frames:274 bytes:294440 ssl frames:111 bytes:155164 http frames:614 bytes:558256 data-text-lines frames:21 bytes:12635 tcp.segments frames:2 bytes:2956 image-gif frames:7 bytes:6639 tcp.segments frames:2 bytes:1110 ... **Estadística de comunicación entre pares**. Muestra estadísticas por comunicación establecida.Tipos: bluetooth, eth, fc ,fddi ,ip ,ipv6 ,ipx ,jxta ,mptcp ,ncp ,rsvp ,sctp ,sll, tcp, tr, udp, usb, wlan, # -z conv # Muestra los valores posibles. # -z conv,tipo,[filtro] tshark -i1 -zconv,eth tshark -i1 -zconv,tcp tshark -i1 -zconv,eth,"ip.addr == 192.168.1.1" **Estadísticas por destino**. # -z endpoints,type[,filter] "bluetooth" Bluetooth addresses "eth" Ethernet addresses "fc" Fibre Channel addresses "fddi" FDDI addresses "ip" IPv4 addresses "ipv6" IPv6 addresses "ipx" IPX addresses "jxta" JXTA message addresses "ncp" NCP connections "rsvp" RSVP connections "sctp" SCTP addresses "tcp" TCP/IP socket pairs Both IPv4 and IPv6 are supported "tr" Token Ring addresses "usb" USB addresses "udp" UDP/IP socket pairs Both IPv4 and IPv6 are supported "wlan" IEEE 802.11 addresses # tshark -qz endpoints,ip -z endpoints,ipv6 IPv4 Endpoints Filter: | Packets | | Bytes | | Tx Packets | | Tx Bytes | | Rx Packets | | Rx Bytes | 192.168.178.50 1344 1049919 556 57160 788 992759 151.101.13.50 1101 917655 658 874301 443 43354 104.244.76.42 100 89105 60 83751 40 5354 23.45.237.207 92 36918 46 30714 46 6204 209.244.0.4 40 4833 20 3259 20 1574 192.168.178.1 3 390 3 390 0 0 **Estadísticas HTTP**. -z http,stat,filtro -z http,tree,filtro -z http_req,tree -z http_srv,tree **Estadísticas DNS**. -i1 -z dns,tree # Ejemplo de salida. ======================================================================================================================================== DNS: Topic / Item Count Average Min val Max val Rate (ms) Percent Burst rate Burst start ---------------------------------------------------------------------------------------------------------------------------------------- Total Packets 154 0,0021 100% 0,1800 38,828 rcode 154 0,0021 100,00% 0,1800 38,828 No error 154 0,0021 100,00% 0,1800 38,828 opcodes 154 0,0021 100,00% 0,1800 38,828 Standard query 154 0,0021 100,00% 0,1800 38,828 Query/Response 154 0,0021 100,00% 0,1800 38,828 Response 77 0,0010 50,00% 0,1000 38,843 Query 77 0,0010 50,00% 0,1000 38,807 Query Type 154 0,0021 100,00% 0,1800 38,828 A (Host Address) 84 0,0011 54,55% 0,0900 38,828 AAAA (IPv6 Address) 70 0,0009 45,45% 0,0900 38,828 Class 154 0,0021 100,00% 0,1800 38,828 IN 154 0,0021 100,00% 0,1800 38,828 Payload size 154 75,79 28 264 0,0021 100% 0,1800 38,828 Query Stats 0 0,0000 100% - - Qname Len 77 18,60 10 33 0,0010 0,1000 38,807 Label Stats 0 0,0000 - - 3rd Level 60 0,0008 0,0800 38,807 4th Level or more 10 0,0001 0,0400 39,631 2nd Level 7 0,0001 0,0200 2,814 1st Level 0 0,0000 - - Response Stats 0 0,0000 100% - - no. of questions 154 1,00 1 1 0,0021 0,2000 38,843 no. of authorities 154 0,19 0 1 0,0021 0,2000 38,843 no. of answers 154 2,55 0 8 0,0021 0,2000 38,843 no. of additionals 154 0,00 0 0 0,0021 0,2000 38,843 Service Stats 0 0,0000 100% - - request-response time (secs) 77 0,06 0,032116 0,451902 0,0010 0,1000 38,843 no. of unsolicited responses 0 0,0000 - - no. of retransmissions 0 0,0000 - - **Enlaces recomendados**. * Wireshark Tutorial Series: [[https://www.youtube.com/watch?v=aIiosBw2YH4]] * Tutorial: Packets don't lie: [[https://www.youtube.com/watch?v=F2HAPAUqitc]]