Netsniff-ng es una de esas herramientas que aunque tiene unas
características muy interesantes y es muy potente, es más bien poco
conocida. También es una de las tantas herramientas que llevo tiempo con
ganas de mencionar aquí, pero por cuestiones de tiempo (y también
porque se me olvida) no lo había hecho antes, hoy le ha llegado su
turno. Se trata de un sniffer diseñado especialmente para sistemas
Linux, muy similar a herramientas como TCPDump o TShark, pero con
algunas ventajas adicionales. Una de ellas es su rendimiento, el cual es
mucho más óptimo que otros sniffers existentes, ya que los paquetes
manejados por Netsniff-ng no son copiados entre el espacio del kernel y
el espacio del usuario, algo que es tan común en librerías como libpcap
(De hecho, netsniff-ng no requiere de libpcap para su correcto
funcionamiento).
Algunos sniffers realizan una serie de invocaciones a las system
calls desde el espacio del usuario para realizar el proceso de captura
de paquetes, los cuales son procesados en primera instancia por el
kernel y almacenados en el kernel space. Este proceso es muy
ineficiente, ya que se debe invocar a una (en algunos casos varias)
system calls de la API de sockets del sistema operativo. Debido a esto,
en las últimas versiones de la rama 2.4 y en prácticamente todas de la
rama 2.6 del kernel de Linux se ha introducido PACKET_MMAP, un mecanismo
que se encarga de crear un buffer compartido entre el kernel space y el
user space para la captura y procesamiento de paquetes de red. Se trata
de una característica antigua y que se encuentra integrada en
prácticamente todos los sistemas Linux modernos por medio de la opción
CONFIG_PACKET_MMAP. No obstante, para el correcto funcionamiento de
netsniff-ng también se recomienda utilizar versiones recientes del
kernel de Linux (>= 2.6.31) ya que implementan el concepto de “rings”
del tipo RX y TX, los cuales permiten un control mucho más eficiente de
los buffers utilizados para la recepción y transmisión de paquetes de
datos. El tamaño de cada uno de estos rings puede variar dependiendo de
las limitaciones físicas de la interfaz de red y típicamente se calcula
en base al ancho de banda soportado por la interfaz de red.
INSTALACIÓN
El proceso de instalación es muy simple, basta con descargar la última versión estable desde el sitio web oficial (http://pub.netsniff-ng.org/netsniff-ng/)
y descomprimir en cualquier directorio del sistema. También es posible
instalar la versión de desarrollo que se encuentra en su repositorio
GitHub (https://github.com/netsniff-ng/netsniff-ng.git) pero pueden haber errores y problemas a la hora de instalar, así que se recomienda tirar de la última versión estable.
>./configure
>make
>sudo make install |
Con las instrucciones anteriores es suficiente para tener netsniff-ng
instalado en el sistema local. A continuación, se puede ejecutar el
comando “netsniff-ng” especificando la interfaz de red que será
utilizada para el proceso de captura.
>sudo netsniff-ng -i eth0 |
Para ver todas las opciones de configuración disponibles en la herramienta, basta con ejecutar el comando con la opción “-h”
Esta herramienta tiene varias dependencias a librerías que se tienen
que encontrar instaladas en el sistema, dichas dependencias se pueden
ver en el fichero INSTALL (https://github.com/netsniff-ng/netsniff-ng/blob/master/INSTALL).
Uso básico y análisis de trafico con Netsniff-ng
La herramienta permite la captura de paquetes desde un dispositivo o
un fichero de capturas (típicamente formato PCAP) y dicha información
también puede ser inyectada/redireccionada a un dispositivo de red o un
fichero de capturas. Un ejemplo muy sencillo seria el siguiente:
>netsniff-ng –in eth0 –out /home/adastra/Escritorio/dump.pcap -s icmp |
En este caso se van a capturar todos los paquetes que utilicen el
protocolo ICMP y que se transfieran por medio de la interfaz de red
“eth0”. Con la opción “–out” se indica el destino al que deben
redirigirse dichos paquetes, los cuales en este caso concreto, serán
almacenados en un fichero PCAP. En el caso de que se indicase, por
ejemplo, una interfaz de red, dichos paquetes serían inyectados a dicha
interfaz de red. Finalmente, con la opción “-s” la información
correspondientes a los paquetes capturados ya no serán enseñados por
pantalla.
Hay que tener en cuenta que además de las opciones estándar que
admite la herramienta, también es posible aplicar filtros sobre los
paquetes capturados, como en este caso concreto en el que se han
capturado todos los paquetes que utilicen protocolo ICMP. Estos filtros
deben seguir las normas definidas en el estándar BPF (Berkeley Packet
Filters) algo que es tan común en este tipo de herramientas (véase por
ejemplo TCPDump o Wireshark). No obstante, por línea de comandos no es
la única forma de especificar este tipo de filtros, también existe la
posibilidad de crear ficheros con los filtros que se desea aplicar y
pasarlos a la herramienta por medio de la opción “-f”. Existen algunos
de estos ficheros que vienen con la herramienta y que permiten aplicar
filtros que son bastante comunes cuando se trabaja con redes.
>netsniff-ng –in eth0 -f /etc/netsniff-ng/rules/icmp.bpf |
Además de los filtros BPF, también soporta filtros especiales sobre
el tipo de trafico a capturar aplicando el interruptor “-t”. Los
posibles valores que puede asumir “-t” son los siguientes:
broadcast: Permite filtrar solamente el trafico broadcast.
multicast: Permite filtrar solamente el trafico multicast.
host: Permite filtrar solamente los paquetes cuyo destino es la máquina desde donde se ejecuta la herramienta.
others: Permite filtrar los paquetes cuyo origen o destino es distinto de la máquina desde donde se ejecuta la herramienta.
outgoing: Permite filtrar solamente los paquetes cuyo origen es la máquina desde donde se ejecuta la herramienta.
>netsniff-ng –in eth0 -t others -s |
Por otro lado, tal como mencionaba anteriormente, también es posible
la reinyección de trafico utilizando esta herramienta, para ello se
puede utilizar un fichero PCAP o una interfaz de red que
contendrá/capturará los paquetes de datos que serán reinyectados en una
interfaz de red determinada. Para ello, se debe utilizar también el
interruptor “–mmap” tal como se enseña en el siguiente comando
>netsniff-ng –in /home/adastra/Escritorio/dump.pcap –mmap –out eth0 -k1000 –silent |
De esta forma, la herramienta leerá los paquetes de datos incluidos
en el fichero PCAP especificado con la opción “–in” y dichos paquetes
serán inyectados a la interfaz de red especificada con el interruptor
“–out”. Esto evidentemente sirve para generar trafico en el segmento de
red y posiblemente, generar estímulos sobre un objetivo determinado.
Todo depende de los contenidos del fichero PCAP, pero desde luego es una
opción bastante interesante si se desea producir algún tipo de
respuesta por parte de un objetivo determinado en el segmento de red.
Existen algunas otras opciones en el comando netsniff-ng, sin embargo no
es la única herramienta que incluye el paquete Netsniff-ng, existen
otras herramientas que son igualmente interesantes y que merece la pena
conocer.
Ifpps
Se trata de una herramienta que permite generar estadísticas en
tiempo real sobre los “rings” TX y RX del sistema operativo. Permite la
visualización de datos directamente desde la consola o exportar dicha
información a ficheros CVS o GNUPlot. Además, como prácticamente todas
las herramientas incluidas en Netsniff-ng, permite utilizar varias CPUs
para un mejor desempeño.
>ifpps -d eth0 –promisc
>ifpps -d eth0 –promisc -c |
Astraceroute
Funciona como traceroute para tracear los sistemas por los que pasa
un paquete antes de llegar a su destino, el beneficio adicional de esta
herramienta es que permite resolver el AS (Sistema Autónomo) de origen y
utiliza la librería GeoIP para intentar obtener las referencias
geográficas de cada AS encontrado.
Antes de poder utilizar esta herramienta, es necesario actualizar la base de datos de georeferencias con el siguiente comando.
>sudo astraceroute -i eth0 –update |
Después de actualizar la base de datos, se puede utilizar el comando astraceroute con las opciones de configuración admitidas.
>astraceroute -i eth0 -N -F -L -H netsniff-ng.org |
En este caso, se han utilizando las opciones -N y -F para ejecutar
una resolución DNS inversa y enviando paquetes con la flag FIN
habilitada respectivamente, luego -L y H permiten pintar las referencias
geográficas encontradas (latitud y longitud) así como especificar el
objetivo del análisis.
Espero que os haya gustado y que juguéis con esta estupenda herramienta.
Saludos y Happy Hack!
Adastra.