Ya vimos en la primera parte de esta serie dedicada a Netsniff-ng la instalación de esta herramienta y us uso básico. En esta ocasión vamos a avanzar un poco más.
Instalaremos la última versión de Netsniff-ng y veremos otras formas de uso más avanzadas, creación de filtros personalizados, rendimiento, astraceroute, trafgen, etc.
Al lío…
Instalación Netsniff-ng 0.5.8
En mi caso casi tengo cumplidos todos los prerequisitos, pero si no es así instalamos lo siguiente:
alfon@ids0:~$ sudo apt-get install git build-essential flex bison ccache libnl-3-dev libnl-genl-3-dev libgeoip-dev libnetfilter-conntrack-dev asciidoc libncurses5-dev liburcu-dev libnet1-dev libpcap-dev
Es posible que nos lleve un ratito, así que paciencia.
Ahora vamos a instalar netsniff-ng a través de git de la forma:
root@ids0:/home/alfon# git clone git://git.cryptoism.org/pub/git/netsniff-ng.git
Cloning into 'netsniff-ng'...
remote: Counting objects: 152, done.
remote: Compressing objects: 100% (137/137), done.
remote: Total 152 (delta 11), reused 53 (delta 11)
Receiving objects: 100% (152/152), 428.16 KiB | 198 KiB/s, done.
Resolving deltas: 100% (11/11), done.y ahora:
- cd netsniff-ng
- sudo make
- sudo make install
En caso de error en el make con curvetun:
Makefile:214: atención: la variable `NACL_INC_DIR’ no ha sido definida-e CC xmalloc.cgcc: error: curvetun/xmalloc.o: No existe el archivo o el directoriomake: *** [curvetun/xmalloc.o] Error 1
entonces, dentro de la carpeta netsniff-ng, hacemos lo siguiente y te tomas un café porque se lleva su tiempo:
cd curvetun ./build_nacl.sh ~/nacl ./nacl_path.sh ~/nacl/build/include/x86 ~/nacl/build/lib/x86
Si el error sigue, no pasa nada. La herramienta curvetun la veremos en otro capítulo. El resto funcionará correctamente.
Creando filtros personalizados con tcpdump.
Ya vimos en la primera parte que podemos cargar filtros bpf de la forma:
sudo netsniff-ng -deth0 -f /etc/netsniff-ng/rules/icmp.bpf
Como veis, en /etc/netsniff-ng/rules tenemos una lista de filtros, pero podemos crear otros según nuestras necesidades. Para ello usaremos tcpdump y la opción -dd (Dump packet-matching code as a C program fragment).
Por ejemplo. Si queremos crear un filtro bpf para arp.
root@ids0: # tcpdump -dd arp
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 1, 0x00000806 },
{ 0x6, 0, 0, 0x0000ffff },
{ 0x6, 0, 0, 0x00000000 },
Si lo volcamos a un archivo:
tcpdump -dd arp > arp.bpf
lo usamos con netsniff-ng de la forma:
sudo netsniff-ng -deth1 -f arp.bpf
si creamos un filtro algo más complejo:
tcpdump -dd «tcp[13] & 2 == 2» > tcpSYN.bdf
tenemos:
netsniff-ng -deth0 -f tcpSYN.bdf -n1
con -n1 capturamos un solo paquete.
De igual forma podríamos crear otro filtro:
tcpdump -dd «ip src 192.168.1.250 and tcp and port (80 or 8081 or 443)» > filtro01.bpf
Creando tráfico, entrada y salida.
Con netsniff-ng podemos extraer el tráfico de un fichero .pcap y «sacarlo» por la interface de la forma:
netsniff-ng -f /etc/netsniff-ng/rules/smtp.bpf –in ./pcap/XPLICO.pcap -m -o eth0 -s
obtenemos:
efectivamente:
Generando tráfico con trafgen.
Tenemos además una herramienta que es: trafgen para la creación de tráfico. Esta herramienta, de alto rendimiento y alta velocidad, puede usar múltiples CPUs y trabaja con ficheros .txf, una especie de scrips/macros de bajo nivel donde «programamos» ese tráfico. Un ejemplo:
trafgen -i /etc/netsniff-ng/trafico.txf -oeth0 -n1000 -b0
genera tráfico y lo vuelca a la interface eth0 forzando el uso de la CPU0 (-b0).
Estos archivos .txf son complejos, pero tenemos otras formas de crear el tráfico.
Lo hacemos de la forma:
netsniff-ng –in ./pcap/ftp.pcap –out ftp.cfg -s
- –in cargamos el fichero .pcap
- –out creamos el archivo de tráfico
- -s silent mode. No vuelca el resultado en pantalla.
Un extracto del fichero .cfg creado:
y lo volcamos:
trafgen –in ftp.cfg –out eth0
el resultado:
señalado con una capa azul las estadísticas de rendimiento y uso de CPU. De ahi que podemos decir, mendiate -b , la cpu a usar.
Tenemos otras opciones con trafgen como.
- –rand generación aleaoria de paquetes.
- -b 1 -n 10000 usamos la CPU1 y generamos 10000 paquetes.
- -V para añadir más información.
- –cpus 2 con esta opción podemo decir a trafgen que use dos cpus.
Hay más lo iremos viendo en otros capítulos.
Astraceroute. Un traceroute con información GeoIP.
Esta herramienta de netsniff-ng es un traceroute que nos devuelve información AS y GeoIP.
Antes que nada actualizamos las bases de datos GeoIP. En esta ocasión lo hago desde mi SecurityOnion de la forma:
sudo astraceroute -ieth0 –update
Y ahora:
sudo astraceroute -ieth0 -H terra.es
AS path IPv4 TCP trace from 192.168.101.99 to 208.84.244.10:80 (terra.es) with len 40 Bytes, 30 max hops
Using flags SYN:0,ACK:0,ECN:0,FIN:0,PSH:0,RST:0,URG:0
...
...
7: i[ 154124 us] 4.69.143.122 in AS3356 Level 3 Communications in United States
8: i[ 152121 us] 4.69.137.62 in AS3356 Level 3 Communications in United States
9: i[ 156163 us] 4.69.134.158 in AS3356 Level 3 Communications in United States
10: i[ 154346 us] 4.69.134.141 in AS3356 Level 3 Communications in United States
11: i[ 152166 us] 4.69.132.85 in AS3356 Level 3 Communications in United Kingdom
12: i[ 152687 us] 4.69.148.254 in AS3356 Level 3 Communications in United States
13: i[ 152990 us] 4.69.140.141 in AS3356 Level 3 Communications in United States
14: i[ 153954 us] 4.69.138.109 in AS3356 Level 3 Communications in United States
15: i[ 155569 us] 4.59.242.10 in AS3356 Level 3 Communications in United States
16: i[ 159944 us] 216.177.198.57 in AS22364 Telefonica USA, Inc. in United States, Miami
17: i[ 156252 us] 216.177.214.154 in AS22364 Telefonica USA, Inc. in United States, Miami
18: i[ 153889 us] 98.142.238.241 in AS40260 Terra Networks Operations Inc. in United States, Coral Gables
si añadimos la opción -L (para añadir Latitud y Longitud), obtenemos líneas como éstas:
14: i[ 153722 us] 4.69.138.109 in AS3356 Level 3 Communications in United States (38.000000/-97.000000) 15: i[ 155992 us] 4.59.242.10 in AS3356 Level 3 Communications in United States (38.000000/-97.000000) 16: i[ 160319 us] 216.177.198.57 in AS22364 Telefonica USA, Inc. in United States, Miami (25.774300/-80.193703) 17: i[ 156682 us] 216.177.214.154 in AS22364 Telefonica USA, Inc. in United States, Miami (25.763100/-80.191101) 18: i[ 154193 us] 98.142.238.241 in AS40260 Terra Networks Operations Inc. in United States, Coral Gables (25.754101/-80.271004)
Netsniff -ng. Escritura en disco de ficheros .pcap.
Para escribir a disco, lo podemos hacer de diferentes formas:
sudo netsniff-ng -ieth0 –out ./pcap/net -F 10sec -s -H -b0
Leemos desde la interface eth0 y volcamos cada 10 segundos (-F 10sec) en ./pcap/net con (–out) . No volcamos salida en pantalla (-s), le damos máxima prioridad al proceso (-H) y usamos la CPU0 (-b0).
Tendremos como resultado:
El ingervalo no solo puedeser de tiempo, también podemos indicar -F 10GiB para volcar cada 10 GB.
Podemos añadir un prefijo a nuestros archivos de captura con la opción –prefix para mejor identificación/etiquetado de la forma:
sudo netsniff-ng -ieth0 –out ./pcap/net -F 10sec -s -H -b0 –prefix «alfon_»
Otra opción es la de expecificar el tamaño ring size para RX_RING o TX_RING. Lo haríamos de la forma:
sudo netsniff-ng -ieth0 –out ./pcap/net -S 1MiB -s -H -b0 –prefix «alfon_»
Pero esto lo veremos más adelante.
=============================================================
Aún queda mucho por ver. En los próximos capítulos iremos avanzando.
Y hasta aquí por hoy. Hasta la próxima.
Pingback: Netsniff-ng. Un sniffer diferente de alto rendimiento. Parte I. | Seguridad y Redes
Excelente articulo 🙂
Solo me quede con las ganas de ver en acción «astraceroute» pero veo que «han cerrado la puerta»
git clone git://git.cryptoism.org/pub/git/netsniff-ng.git
Clonar en «netsniff-ng»…
fatal: unable to connect to git.cryptoism.org:
git.cryptoism.org[0: 93.95.227.20]: errno=Conexi?n rehusada
Saludos
Pingback: Esas pequeñas utilidades. CSPLIT. Con Suricata_IDS, TCPDump, Netsniff-ng. | Seguridad y Redes