Parseando pcaps con tshark
Parseando pcaps con tshark, en una investigación en la que tenemos que tratar tráfico de red, si no contamos con algunos tricks puede ser una tarea bastante tediosa. Una de las primeras cosas que tendremos que saber es:
Parseando pcaps con tshark ¿Qué queremos obtener?
Imaginad que estamos en un equipo anti-fraude y tenemos que mandar a cerrar al ISP aquellos dominios relacionados con phishing o malware. En este caso nos dará igual las peticiones GET o POST (aunque también son útiles), lo más rápido que buscaremos son las peticiones DNS, por ejemplo.
En este caso no hará falta que revisemos el pcap entero, podríamos directamente extraer las peticiones DNS, si además lo podemos scriptar mucho mejor, por si hay que mirar mucha cantidad de paquetes.
¿Que herramientas nos pueden ayudar?
Bueno, en este caso mostraré la versión GUI de la herramienta y luego la versión consola, que es de lo que trata el artículo 😉
Esta imagen nos debería de ser muy familiar, se trata de Wireshark, este programa nos sirve entre otras cosas para capturar el tráfico de red.
Si abrimos un pcap podemos ver gráficamente todo el flujo de datos, además podremos aplicar filtros para hacer las búsquedas que necesitemos.
Seleccionando el filtro adecuado podríamos obtener por pantalla el resultado del filtro en el pcap.
A mi me encantan las interfaces GUI, pero reconozco que es mucho más rápido y, además puedes procesar mas cantidad de información el poder usar alguna herramienta del tipo command line.
En este caso usaremos tshark, la versión de consola de Wireshark.
Se puede encontrar en los repositorios, para instalarlo solo hemos de hacer:
apt-get install tshark
Vamos a ver unos ejemplos para obtener cierta información de un pcap.
Extrayendo peticiones DNS
Para extraer peticiones DNS de un pcap tendríamos que lanzar tshark de la siguiente forma:
tshark -r PCAP -T fields -e ip.src -e dns.qry.name -R "dns.flags.response eq 0"
En este caso veríamos por pantalla:
Parseando pcaps con tshark Extrayendo User-agents
En una determinada investigación, puede ser útil extraer los user agents del pcap, la sentencia de tshark sería:
tshark -nn -r PCAP -T fields -e ip.src -e http.user_agent -R "http.user_agent"
Por pantalla podemos ver los resultados
Extrayendo peticiones MYSQL
Imaginad que en una investigación una base de datos forma parte de la investigación, también podemos extraer facilmente información del pcap
La sentencia de tshark sería:
tshark -r PCAP -d tcp.port==3306,mysql -T fields -e mysql.query
Por pantalla podemos ver los resultados de nuevo:
Peticiones GET Parseando pcaps con tshark
Si queremos de manera rápida, extraer las peticiones GET, con tshark realizamos:
tshark -r PCAP -R "http.request.method==GET"
Por pantalla nos muestra:
Aunque hemos visto que podemos extraer información de un pcap, con tshark, podremos también capturar tráfico de red y pedir con filtros tráfico específico
Capturar peticiones HTTP
La sentencia con tshark sería:
tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R 'http.request.method == "GET" || http.request.method == "HEAD"'
Y lo que veríamos en el output de tshark es:
190.302141 192.168.0.199 -> 74.125.77.104 HTTP GET / HTTP/1.1
190.331454 192.168.0.199 -> 74.125.77.104 HTTP GET /intl/en_com/images/srpr/logo1w.png HTTP/1.1190.353211 192.168.0.199 -> 74.125.77.104 HTTP GET /images/srpr/nav_logo13.png HTTP/1.1190.400350 192.168.0.199 -> 74.125.77.100 HTTP GET /generate_204 HTTP/1.1
En este artículo hemos visto como podemos con tshark extraer información de un pcap, además de como podemos capturar tráfico aplicando un filtro específico.
No he podido encontrar un cheatsheet de tshark, ¿Te animas a compartir algún script con tshark?