Página Personal de Alfon. Seguridad y Redes. http://seguridadyredes.nireblog.com Página personal de Alfon. Seguridad y Redes Sat, 05 Jul 2008 18:22:47 +0100 Página Personal de Alfon. Seguridad y Redes. http://nireblog.com/imagenes/logo.png http://seguridadyredes.nireblog.com http://nireblog.com Posición del sniffer en nuestra red. Redes conmutadas y no conmutadas. http://seguridadyredes.nireblog.com/post/2008/06/25/posicion-del-sniffer-en-nuestra-red-redes-conmutadas-y-no-conmutadas http://seguridadyredes.nireblog.com/post/2008/06/25/posicion-del-sniffer-en-nuestra-red-redes-conmutadas-y-no-conmutadas Después de algún comentario y correos, vamos a estudiar el posicionamiento o colocación de un sniffer en nuestra red para obtener los resultados que esperamos.

pantalla-max1.jpg

Todo depende de la topología de red y el uso de hub o switch.

Este artículo es válido para cualquier sniffer de los que ya hemos visto. Wireshark, Tshark, WinDump / TCPdump, etc.

Posición del sniffer en red no conmutada (HUB).

El escenario más básico lo encontramos en una red conectada mediante hub. En este caso posicionamos el sniffer en cualquier ranura o boca del hub y obtendremos, con la tarjeta en modo promíscuo, todo el tráfico de la red. Esto es así porque en un hub todos los paquetes son transmitidos a todos los hosts conectados en el mismo segmento de red. Se divide el ancho de banda entre cada host de la red, ademas, se transmiten los paquetes a la velocidad del dispositivo más lento del segmento. Se producen también colisiones que derivan en una red más lenta debido a las retransmisiones.

Posición del sniffer en red conmutada (SWITCH).

En este caso, a cada host conectado al switch, le llega solo el trafico dirigido a el (unicast ) y el broadcast/multicast. El tráfico dirigido a otros host NO lo veremos. No divide el ancho de banda, esto significa, a grosso modo, que en un switch 10/100 cada puerto es capaz de transmitir a un máximo de 100 dedicado. Es más eficiente que las redes no conmutadas.

Resumiendo entonces, si ubicamos un sniffer en cualquier puerto del switch, solo veremos el tráfico dirigido solo al host donde se encuentre el sniffer y el tráfico broadcast/multicast tal como ARP.

Soluciones.

Solución 1

Una posible solución podría ser el envenenamiento ARP, un Arp Poison. Pero esto es totalmente desaconsejable porque podemos "destabilizar" la red y crear mayores problemas.

Solución 2

Podríamos también colocar el sniffer en el gateway de salida a internet, ó en un host firewall de varias tarjetas, indicar cual de las interfaces nos interesa "olfatear", de esta forma veremos algo más de tráfico que no sea el broadcast/multicast.

Pero para ver todo el tráfico entre dos hosts las soluciones más eficaces son otras.

Solución 3

Una de ellas es aprovechar alguna de las características de un switch administrable como el SPAN (Switch Port Analysis) o llamado de otra forma el Port Mirroring. Esta es una caraterística que lo que hace es, básicamente, copiar el tráfico entre dos puertos a un tercero (ubicación del host sniffer) del switch. Eel Port mirroring tiene el problema que multiplica la carga del switch.

Solución 4

Pero ¿ que pasa si el switch es antiguo y/o no administrable, o simplemente no soporta Port Mirroring ?.

Para este caso tenemos otra opción. Se trata de conectar un hub a una de las salidas o puerto del switch y a este hub conectar el host sniffer (C) y uno de los host a capturar el tráfico (B). El otro host llamémosle (B) sigue en su ubicación del switch . De esta forma C puede ver el tráfico entre A y B. ( B puede ser cualquier otro host conectado al switch o un servidor ).

Esta opción, al igual que el Arp Poison, es algo problemática y desaconsejable.

Solución 5

Otra opción de la que disponemos es instalar otra interface de red en el host sniffer de forma que tenga dos interfaces de red. Una de las tarjetas la conectamos al switch y la otra a uno de los hosts a analizar. Esta opción se considera pasiva, pero necesita de configuración del host sniffer a nivel de interfaces de red para establecer el modo Bridge. (http://technet.microsoft.com/en-us/library/bb457038(TechNet.10).aspx).

Solución 6

Est solución, quizá la más eficiente y aconsejable aunque también más costosa y quizás más incomoda. Consiste en hacer uso de un Network TAP o "Test Access Port" (Puerto de acceso de pruebas). Con este dispositivo podemos capturar el tráfico de una red conmutada de forma pasiva, es decir, no interfiere en el flujo o tráfico de nuestra red.

Sobre la construcción de un TAP:

http://www.snort.org/docs/tap/

Más información sobre sniffers en redes conmutadas y no conmutadas. Su detección:

http://seguridadyredes.nireblog.com/post/2007/12/20/detectando-sniffers-en-nuestra-red-redes-conmutadas-y-no-conmutadas


Comments

]]>
Wed, 25 Jun 2008 12:11:33 +0100
Wireshark. Tshark. Detectando tráfico P2P en nuestra red. http://seguridadyredes.nireblog.com/post/2008/06/23/wireshark-tshark-detectando-trafico-p2p-en-nuestra-red http://seguridadyredes.nireblog.com/post/2008/06/23/wireshark-tshark-detectando-trafico-p2p-en-nuestra-red Fruto de algún que otro comentario y algunos correos, en esta entrada voy a dar algunas pistas para tratar de descubrir y analizar el tráfico P2P en nuestra red. El tráfico generado por Ares, Emule / Edonkey, BitTorrent, etc, deja una serie de huellas con las que podemos trabajar para su descubrimiento. Para ello podemos usar cualquier sniffer tal como windump / tcpdump, Wireshark o Tshark, aunque son estos dos últimos los que continenen algunas utilidades que nos hará el trabajo más facil. De Esta forma nos será también más facil bloquearlos.

La forma más básica de descubrir el tráfico P2P es filtrando por los puertos que, por defecto, suelen usar estos programas. Hay que tener en cuenta que en la mayoría de estos programas estos puertos usados son configurables, pero es ya la primera pista para ir comenzando a abordar el problema.

Algunos puertos usados por los programas P2P.

Gnutella (Bearshare, Limewire)
TCP 6346, 6347, 6348
UDP 6346, 6347, 6348

Kazaa, Grokster, Morpheous
TCP 1214
UDP 1214

WinMX & Napster
TCP 6257
UDP 6257
TCP 6699
UDP 6699

eDonkey
TCP 4661-4672
UDP 4661-4672

BitTorrent
TCP 6881-6889
UDP 6881-6889

Napster
TCP 4444, 5555, 6666, 7777, 8888
UDP 4444, 5555, 6666, 7777, 8888

Analizando el tráfico P2P. Las huellas.

Otra forma de descubrir este tráfico es poe las huellas dejadas en las trazas o paquetes capturados.

Ares suele algunas pistas sobre sue uso en nuestras capturas:

traza ares

De la misma forma, Napster suele dejar en las capturas:

@napster.com

Emule deja la firma: "Server eMule"

Gnutella suele dejar ditrectamente: "GNUTELLA" ó "GNUTELLA OK"

BitTorrent puede dejar algo parecedo a: "BitTorrent protocol"

En resúmen, casi todos los progrmas P2P suelen dejar una huella bastante evidente. Es cuentión de usarlos y analizar dichas huellas para que nos sirva de filtro.

Filtrando por protocolos en Wireshark / Tshark.

Mientras capturamos en Wireshark o Tshark, podemos o filtrar por puertos (lo hemos visto más arriba), o por protocolo en los filtros de visualizaxión (Display Filter):

Filtrando por protocolos podemos usar la opción -R de Tshark o la ventana de Display Filter de Wireshark introduciendo cualquiera de estos disertores:

gnutella
bittorrent
edonkey

Tambíen podemos usar desde el menú principal de Wireshark:

Edit > Preferences > Protocols> BitTorrent , EDONKEY

Estadísticas de uso.

Usando las estadísticas, podemos también ver según el protocolo P2P la cantidad frames y bytes que circulan por la red. Lo vimos en su momento aquí y aquí :

estadisticas emule edonkey

Otro tipo de estadísiticas:

estadisticas wireshark tshark

Vemos claramente el uso de edonkey / Emule en las estadisticas.

Uso de IDS o Sistemas de detección de Intrusos y cortafuegos.

La mayoría de firewalls o cortafuegos tienen estadísticas, logs y sistemas para bloquear el uso de programas P2P. Así mismo, un IDS tal como Snort , contienen una serie de reglas para detectar el uso del tráfico P2P.


Comments

]]>
Mon, 23 Jun 2008 12:08:54 +0100
IPerf. Midiendo ancho de banda entre dos hosts. http://seguridadyredes.nireblog.com/post/2008/06/18/iperf-midiendo-ancho-de-banda-entre-dos-hosts http://seguridadyredes.nireblog.com/post/2008/06/18/iperf-midiendo-ancho-de-banda-entre-dos-hosts Para la evaluación de rendimientos en las comunicaciones en nuestra red local y posterior optimización de los parámetros, disponemos de multitud de herramientas multiplataforma. Una de ellas es IPerf.

Con IPerf podemos medir el ancho de banda y rendimiento de una conexión entre dos host. Se trata, pues, de una herramienta cliente-servidor.

Podemos descargar Iperf desde aquí. Y para win32 y otras plataformas desde aquí.

Al tratarse de una herramienta cliente-servidor, tendremos que ejecutar Iperf en dos máquinas. Una hará de Servidor y otra de Cliente.

IPerf como servidor.

La forma más básica de ejecución como servidor es:

>iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------

En este momento IPerf se encuentra a la "escucha" en le puerto 5001.

IPerf como cliente.

En la máquina cliente IPerf, de la forma más sencilla lo ejecutamos de esta manera:

>iperf -c 192.168.1.250
------------------------------------------------------------
Client connecting to 192.168.1.250, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------

Conectamos con el servidor (192.168.1.250) y se envian una serie de paquetes para calcular el ancho de banda en la conexión. El resultado es el siguiente:

>iperf -c 192.168.1.250
------------------------------------------------------------
Client connecting to 192.168.1.250, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------
[844] local 192.168.1.30 port 3545 connected with 192.168.1.250 port 5001
[ ID] Interval Transfer Bandwidth
[844] 0.0-10.0 sec 113 MBytes 94.8 Mbits/sec

94.8 Mbits/sec en una red a 100 Mbits.

Claramente vemos el rendimiento de la conexión.

Configurando IPerf.

Podemos configurar tanto el cliente como el servidor para personalizar un poco las mediciones.

Como servidor.

A parte de la opción -s que deja a IPref a la escucha, podemos usar:

  • -D como servicio
  • -R remover servicio
  • -u recibir datagramas UDP en vez de TCP por defecto.
  • -P x número de conexiones simultáneas
  • -m muestra MTU (depende del sistema operativo )
  • -w specifica el tamaño de Ventana (TCP window size). Muy útil para ir calculando nuestro tamaño de ventana más óptimo según las mediciones de ancho de banda.
  • -f[bkmBKB] mostrar resultados en bits/s, kilobits/s, megabytes/s, Bytes/s, KiloBytes/s, MegaBytes/s (s=segundos). Tanto en cliente como servidor:

>iperf -c 192.168.1.250 -f B
------------------------------------------------------------
Client connecting to 192.168.1.250, TCP port 5001
TCP window size: 64512 Byte (default)
------------------------------------------------------------
[844] local 192.168.1.30 port 3591 connected with 192.168.1.250 port 5001
[ ID] Interval Transfer Bandwidth
[844] 0.0-10.0 sec 118792192 Bytes 11860687 Bytes/sec

Como cliente.

Lo más básico es -c IP pero podemos establecer otras opciones, las más importantes:

  • -f[bkmBKB] (igual que lo comentado como servidor)
  • -w (lo mismio que para servidor)
  • -m muestra MTU (depende del sistema operativo)
  • -T ttl especifica valor TTL
  • -i segundos especifica un intervalo, medido en segundos, en el cual se volverá a realizar la medición.
  • -t segundos tiempo duración transmisión. Hace más fiable la medida.

>iperf -c 192.168.1.250 -t 60
------------------------------------------------------------
Client connecting to 192.168.1.250, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------
[844] local 192.168.1.30 port 3670 connected with 192.168.1.250 port 5001
[ ID] Interval Transfer Bandwidth
[844] 0.0-60.0 sec 669 MBytes 93.5 Mbits/sec

  • -p especifica puerto en el que escucha el servidor
  • -u envio de UDP en vez de TCP por defecto. Podemos medir también pérdida de paquetes:

cliente:

>iperf -c 192.168.1.250 -u -f MB -t 60
------------------------------------------------------------
Client connecting to 192.168.1.250, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 0.06 MByte (default)
------------------------------------------------------------
[844] local 192.168.1.30 port 3745 connected with 192.168.1.250 port 5001
[ ID] Interval Transfer Bandwidth
[844] 0.0-60.0 sec 7.50 MBytes 0.12 MBytes/sec
[844] Server Report:
[844] 0.0-60.0 sec 7.06 MBytes 0.12 MBytes/sec 0.000 ms 314/ 5351 (5.9%)
[844] Sent 5351 datagrams

respuesta servidor:

>iperf -s -u -f MB -i1
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 0.01 MByte (default)
------------------------------------------------------------
[1964] local 192.168.1.250 port 5001 connected with 192.168.1.30 port 3744
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[1964] 0.0- 1.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 544436086/ 89 (6.
1e+008%)
[1964] 1.0- 2.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 2.0- 3.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 3.0- 4.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 4.0- 5.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 5.0- 6.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 6.0- 7.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 7.0- 8.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 8.0- 9.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 9.0-10.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 0.0-10.0 sec 1.25 MBytes 0.12 MBytes/sec 0.000 ms 0/ 893 (0%)
[1964] local 192.168.1.250 port 5001 connected with 192.168.1.30 port 3745
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[1964] 0.0- 1.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 1.0- 2.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 2.0- 3.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 3.0- 4.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 4.0- 5.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 5.0- 6.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 6.0- 7.0 sec 0.12 MBytes 0.12 MBytes/sec 0.136 ms 0/ 89 (0%)
[1964] 7.0- 8.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 8.0- 9.0 sec 0.12 MBytes 0.12 MBytes/sec 0.020 ms 0/ 89 (0%)
[1964] 9.0-10.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 10.0-11.0 sec 0.12 MBytes 0.12 MBytes/sec 0.062 ms 0/ 89 (0%)
[1964] 11.0-12.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 12.0-13.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 13.0-14.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 14.0-15.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 15.0-16.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 16.0-17.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 17.0-18.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 18.0-19.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 19.0-20.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[1964] 20.0-21.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 21.0-22.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 22.0-23.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 23.0-24.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 24.0-25.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 25.0-26.0 sec 0.12 MBytes 0.12 MBytes/sec 1.108 ms 0/ 89 (0%)
[1964] 26.0-27.0 sec 0.12 MBytes 0.12 MBytes/sec 0.004 ms 0/ 89 (0%)
[1964] 27.0-28.0 sec 0.13 MBytes 0.13 MBytes/sec 0.840 ms 0/ 90 (0%)
[1964] 28.0-29.0 sec 0.12 MBytes 0.12 MBytes/sec 0.003 ms 0/ 89 (0%)
[1964] 29.0-30.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 30.0-31.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 31.0-32.0 sec 0.12 MBytes 0.12 MBytes/sec 1.986 ms 0/ 89 (0%)
[1964] 32.0-33.0 sec 0.12 MBytes 0.12 MBytes/sec 0.006 ms 0/ 89 (0%)
[1964] 33.0-34.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 34.0-35.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 35.0-36.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 36.0-37.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 37.0-38.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 38.0-39.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 39.0-40.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[1964] 40.0-41.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 41.0-42.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 42.0-43.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 43.0-44.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 44.0-45.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 45.0-46.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 46.0-47.0 sec 0.00 MBytes 0.00 MBytes/sec 0.000 ms 0/ 1 (0%)
[1964] 47.0-48.0 sec 0.00 MBytes 0.00 MBytes/sec 0.000 ms 0/ 0 (-1.$%)
[1964] 48.0-49.0 sec 0.00 MBytes 0.00 MBytes/sec 0.000 ms 0/ 0 (-1.$%)
[1964] 49.0-50.0 sec 0.11 MBytes 0.11 MBytes/sec 3.386 ms 277/ 355 (78%)
[1964] 50.0-51.0 sec 0.12 MBytes 0.12 MBytes/sec 0.011 ms 0/ 89 (0%)
[1964] 51.0-52.0 sec 0.13 MBytes 0.13 MBytes/sec 0.000 ms 0/ 90 (0%)
[1964] 52.0-53.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 53.0-54.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 54.0-55.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 55.0-56.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 56.0-57.0 sec 0.12 MBytes 0.12 MBytes/sec 0.000 ms 0/ 89 (0%)
[1964] 57.0-58.0 sec 0.07 MBytes 0.07 MBytes/sec 2.658 ms 37/ 90 (41%)
[1964] 58.0-59.0 sec 0.12 MBytes 0.12 MBytes/sec 0.009 ms 0/ 89 (0%)
[1964] 0.0-60.0 sec 7.06 MBytes 0.12 MBytes/sec 0.000 ms 314/ 5351 (5.9%)



Comments

]]>
Wed, 18 Jun 2008 17:18:26 +0100
Snort. Búsqueda de patrones. Reglas de contenido. http://seguridadyredes.nireblog.com/post/2008/06/12/snort-busqueda-de-patrones-reglas-de-contenido http://seguridadyredes.nireblog.com/post/2008/06/12/snort-busqueda-de-patrones-reglas-de-contenido Aunque estamos viendo, en los diferentes artículos al respecto, las opciones para crear reglas Snort, y, en general, todo lo respecto a Snort com IDS (Sistema Detección de Intrusos), vamos a realizar una parada, para estudiarlo con más detenimiento, en content, opción de la regla que busca contenidos en la carga útil de un paquete o payload y las opciones de content como pueden ser:

  • Depth
  • Offset
  • Nocase
  • Distance
  • Within

logo snort

Ya hemos visto que con la opción content de una regla Snort, podemos buscar un contenido determinado en el payload o carga útil de un paquete, de forma que genere una alerta cuando exista una coincidencia en el patrón. El contenido a buscar puede ser texto, binario o una mezcla de ambos. Sin embargo, para lograr una mayor coincidencia en los patrones y mejor rendimiento existen una serie de modificadores que añaden mayor potencia, flexibilidad y exactitud a la búsqueda de patrones y contenidos.

Puede ser que la coincidencia del patrón a buscar necesite mucha exactitud para darse como valido o que tengamos varios patrones distintos a buscar dentro del payload de un mismo paquete, e incluso que entre ambos patrones haya una determinada distancia en bytes.

Consideraciones previas

Antes que nada una serie de consideraciones sobre la notación de la sintaxis a emplear.

  • Podemos usar | para delimitar el contenido en binario:

alert tcp any any -> any any (content: "|73 74 65 6d 61 73| ;)

  • El caracter ! niega el patrón:

alert tcp any any -> any any (content: ! "USER" ;)

Buscando el contenido en el payload.

Uno de los casos más simples que se nos pueden dar es el siguiente. Tenemos una captura:

captura snort content

Queremos qe Snort genere una alerta cada vez que aparezca el comando SMTP: EHLO alfon

Lo más rápido, pasando por alto puertos y hosts (por eso ponemos any) sería:

alert tcp any any -> any any (content: "EHLO alfon";)

También lo podríamos ponner en binario:

alert tcp any any -> any any (content:"|45 48 4c 4f 20 6c 63 61 6d 70|";)

Puede ser que el comando pueda ser ehlo alfon en minúscula o máyúscula. Para ello usamos nocase:

alert tcp any any -> any any (content: "EHLO alfon"; nocase ;)

Por cierto, vamos a incluir un manseje para la alerta:

alert tcp any any -> any any (msg: "conexión SMTP"; content: "EHLO alfon"; nocase ;)

Depth y Offset

Para que la búsqueda del patrón sea más eficiente vamos a acotar este de forma que mejoremos el rendimiento. Usaremos Depth.

Depth establece un número determinado de bytes a buscar en el payload del paquete. Se cuenta desde el principio de la zona destinada a los contenidos del paquete. Vamos a verlo de forma más detallada:

content-2.png

Esta captura corresponde a un comando SMB. En este caso: SMB Read AndX Request (0x2e) Apertura de un archivo.

Para comenzar a buscar en el contenido del paquete, una vez terminada la zona destinada a cabecera y segmento TCP , nos situamos en la zona de datos (señalada con una flecha).

Deseamos buscar el "Server Component: SMB" (dentro del cuadro rojo).

Los datos a buscar ocupan 4 bytes y comienza en el byte 4 desde el principio del a zona de datos. (comenzamos desde 0).

Vamos a usar entonces los conceptos Depth, ya explicado y Offset. Con offset indicamos en número de bytes a partir del cual analizamos la busqueda del patrón. Seguimos con el ejemplo y creamos la regla:

alert tcp any any -> any any (msg: "apertura de archivo detectado"; content: "|ff 53 4d 42|"; offset = 4 ; depth = 4)

Es decir; buscamos el patron .SMB o en binario ff 53 4d 42 comenzando en el byte 4 y analizamos 4 bytes a partir de este último.

Distance y Within.

Bien, vamos ahora a complicar un poco la búsqueda. Necesitamos buscar dos patrones diferentes en el mismo paquete. Para que el rendimiento sea mayor y el motor de snort realice su trabajo con mayor precisión y usando menos recursos, vamos a aplicar una regla en la que determinemos el patrón de forma exacta.

Tenemos la siguiwente captura:

Snort. Content offset búsqueda patrones en pyload

Vamos a bucar la Palabra Microsoft Word y a una distancia determinada MSWordDoc. Por si acaso vamos a olvidarnos de mayúsculas y mínusculas (nocase) y acotaremos perfectamente lo patrones.

alert tcp any any -> any any (msg: "Apertura de archivo Microsft Word"; content: "Microsoft Word"; offset = 116 ; depth = 14; content: "MSWordDoc"; nocase ; distance = 14 ; within = 9 ;)

Esto es lo mismo que decir. Genera una alerta con el mensaje Apertura de archivo Microsft Word cuando encuentres la palabra Microsoft Word a una distancia (offset ) de 116 bytes y busca dentro de los 14 primero bytes (depth). Busca también la palabra MSWordDoc a una distancia (distance) del último patron o palabra encontrada de 14 bytes dentro de los 9 primeros bytes (within).



Comments

]]>
Thu, 12 Jun 2008 11:22:23 +0100
Tshark. Análisis correo saliente SMTP. http://seguridadyredes.nireblog.com/post/2008/06/05/tshark-analisis-correo-saliente-smtp http://seguridadyredes.nireblog.com/post/2008/06/05/tshark-analisis-correo-saliente-smtp Vamos a analizar una captura correspondiente al envio de correo a través del protocolo SMTP, lo que sería el diálogo entre cliente y servidor SMTP. Diálogo constituido por un conjunto de comandos en formato texto ASCII.

Partimos de la siguiente captura:

captura smtp tshark

Observemos las tres primeras líneas. Estas corresponden al inicio de la comunicación con el servidor de correo. Se trata, como vemos, del establecimiento de conexiónen tres pasos. El número de secuencia incial es relativo y por tanto en este caso 0.

Para comprenderlo mejor vemos esta otra traza con el número de secuencia inicial aleatorio:

cliente -> servidor TCP 1125 > smtp [SYN] Seq=13766490 Ack=0 Win=16384 Len=0
servidor -> cliente TCP smtp > 1125 [SYN, ACK] Seq=472370892 Ack=13766491 Win=8736 Len=0
cliente -> servidor TCP 1125 > smtp [ACK] Seq=13766491 Ack=472370893 Win=17472 Len=0

  1. cliente envia SYN con un número aleatorio Seq=13766490 y Ack=0
  2. servidor lo recibe, envia SYN-ACK y responde con su propio número de secuencia y con un ACK = al número de secuencia anterior + 1, es decir: Seq=472370892 Ack=13766491
  3. cliente a su vez responde con ACK y número de secuencia inicial (Seq=13766490) +1 y ACK = número de secuecia anterior (472370892) +1, es decir: Seq=13766491 Ack=472370893

Inmediatamente el servidor de correo responde con un código 220 que está listo:

SMTP Response: 220 SERV-CORREO Spectrum Server 1.0 ESMTP ready

Responde le cliente iniciando el diálogo y sesión SMTP con el servidor:

SMTP Command: EHLO alfon

Responde le servidor de correo aceptando con un código 250 y el nombre del servidor:

SMTP Response: 250-SERV-CORREO

El cliente inicia la autentificación con el servidor. (Servidor autentificado):

SMTP Command: AUTH LOGIN

Responde el servidor pidiendo Username y un código 334, en este caso codificado. En caso de fallo de autentificación se responde con un codigo 535. el cliente envia el usuario;

SMTP Response: 334 VXNlcm5hbWU6
SMTP Command: c2lzdGVtYXNAYWJhbmNlLmVz

El servidor pide Password el el cliente responde. Todo ello codificado.:

SMTP Response: 334 UGFzc3dvcmQ6
SMTP Command: JEFETUFOMTAwJQ==

Todo salió bien:

SMTP Response: 235 2.0.0 Authentication successful

Inidicamos al servidor el inicio del mensaje de correo con MAIL FROM. Indicamos remitente y destinatario (RCPT TO):

SMTP Command: MAIL FROM:
SMTP Response: 250 2.1.0 Sender ok
SMTP Command: RCPT TO:
SMTP Response: 250 2.1.5 Recipient ok (local)

Con DATA indicamos al servidor que lo que viene a continuación es el texto del mensaje. El servidor responde aceptando con un código 354 indicando que podemos introducir el mensaje y enviamos los paquetes correspondientes al texto de mensaje:

SMTP Response: 354 Enter mail, end with CRLF.CRLF
SMTP DATA fragment, 1460 bytes
SMTP DATA fragment, 1460 bytes
SMTP DATA fragment, 1460 bytes
SMTP DATA fragment, 1460 bytes
SMTP DATA fragment, 740 bytes

Una vez que finalizamos la transmisión de los paquetes del mensaje y con el comando EOM indica el cliente el fin del mensaje:

SMTP EOM

El servidor se da por enterado y acepta el mensaje:

SMTP Response: 250 2.0.0 48456cd9-0001a6ae Message accepted for delivery

El cliente indica ahora que no hay más operaciones a realizar que se puede cerrar la conexión:

SMTP Command: QUIT

El servidor se da por enterado y cierra conexión con el cliente:

SMTP Response: 221 2.0.0 SMTP closing connection

Cierre de conexión TCP. Al igual que al principio se inicia una petición de conexión por parte del cliente con un diálogo en tres fases, ahora se da por terminada la conexión pero en cuatro pasos. Esto es debido a que cada una de las "direcciones" debe ser cerrada independientemente:

serv_correo -> cliente TCP 25 > 3612 [FIN, ACK] Seq=505 Ack=6732 Win=65524 Len=0
cliente -> serv_correo TCP 3612 > 25 [ACK] Seq=6732 Ack=506 Win=64008 Len=0
cliente -> serv_correo TCP 3612 > 25 [FIN, ACK] Seq=6732 Ack=506 Win=64008 Len=0
serv_correo -> cliente TCP 25 > 3612 [ACK] Seq=506 Ack=6733 Win=65524 Len=0


Comments

]]>
Thu, 05 Jun 2008 09:05:18 +0100
VMware. Creando nuestro laboratorio virtual. (I Parte) http://seguridadyredes.nireblog.com/post/2008/06/02/vmware-creando-nuestro-laboratorio-virtual-i-parte http://seguridadyredes.nireblog.com/post/2008/06/02/vmware-creando-nuestro-laboratorio-virtual-i-parte Una de las ventajas de las tecnologías de virtualización es que podemos crear un host virtual para nuestro propio entorno de pruebas. O mejor aún, crear una pequeña red virtual para analizar el comportamiento del herramientas como Snort, Wireshark, Windump, trabajar con sniffers y su detección, etc con aplicaciones maliciosas, virus o cualquier tipo de de tráfico de paquetes que pudiera comprometer un entorno físico o productivo pero no uno virtual de pruebas.

vmware

Herramientas de virtualización hay varias, aquí nos centraremos en VMware Server, VMware Converter y VMware Player, por ser las tres libres.

La primera herramienta que vamos a analizar es VMware Converter, por ser el primer paso o forma de crear un host virtual para nuestras pruebas.

Lo que trataremos de hacer, en una primera fase, es crear un entorno virtual a partir de un equipo físico. Puede ser nuestro propio equipo o uno cualquiera de nuestra red. Incluso podemos realizar la virtualización en caliente, es decir, un servidor que este en producción. Lo configuraremos, cargaremos con VMware player y lo usaremos para nuestras pruebas.

Instalación de VMware Converter.

Lo descargaremos desde aquí. (VMware Converter 3.0.3 (Starter Edition)

Rellenamos un pequeño formulario y acto seguido ya podemos descargar el software.

La instalación es muy sencilla y no requiere explicación alguna. Vamos directamente a la copia dle disco físico.

En la pantalla que se nos presenta tras cargar VMware Converter, pulsamos en Convert Machine:

wmware converter

Convert Machine nos presentará la pantalla Conversion Wizard. Pulsamos en Siguiente:

vmware converter

Dejamos la opción Physical Computer. Al pulsar Siguiente se nos presenta una pantalla en la cual pòdemos escoger entre:

  • A remote machine. Introducimos la IP de la máquina remota, dominio\usuario administrador y contraseña.
  • This local machine. Nuestra máquina local. Pulsamos esta opción:

vmware converter

Pulsamos Siguiente y seleccionamos tipo de destino. En nuestro caso:

Other Virtual Machine

En la siguiente pantalla elegimos nombre de la máquina virtual y destino físico de los archivos generados por la conversión. En mi caso el destino es otra máquina de mi red, pero si hay especio puede ser la máquina local:

vmware converter

Pulsamos Siguiente > Siguiente y usamos la opción Bridge. > Siguiente.

Se nos presenta una pantalla donde elegimos instalar las VMware Tools y configuración personalizada de la nueva máquina para que sea distinta a la nuestra, es decir, podemos dejar tal cual para crear un clon de la máquina virutalizada con mismio nombre de máquina, IP, etc. o personalizar para que tengo atro nombre de máquina, IP distinta ,etc. No vamos a cambiar de momento estas características, es decir, elegimos solo la opcion:

  • Install VMware Tools

Pulsamos Siguiente y Finalizar.

Inmediatamente VMware Converter comienza a trabajar y y a crear la máquina virtual:

vmware converter

Una vez terminado el proceso, instalamos VMware Player, una instalación muy sencilla. Descargamos el software desde aquí. Instalamos y cargamos el disco virtual:

vmware player

Una vez cargado, tras unos minutos, se inciará el nuevo S.O en disco virtual, introducimos nuestro usuario/clave y ya tendemos nuestro host virtual. Ahora nos resta, para diferenciarlos del host físico clonado, el nombre de máquina, IP, etc.

Siguiente objetivo.

En la segunda parte vamos a crear una red privada virtual entre dos máquimas. El procedicimeto para añadir más será el mismo. Copiaremos el host virtual creado, cambiaremos de nombre y lo configuraremos todo de tal manera que crearemos una red virtual solo entre las máquinas virtuales sin acceso fuera de dicha red. De esta manera podemo realizar cuantas pruebas queramos sin perjudicar un entorno exterior productivo o no.

Comments

]]>
Mon, 02 Jun 2008 11:50:39 +0100
Snort y las expresiones regulares. (I Parte) http://seguridadyredes.nireblog.com/post/2008/05/23/snort-y-las-expresiones-regulares-i-parte http://seguridadyredes.nireblog.com/post/2008/05/23/snort-y-las-expresiones-regulares-i-parte Ya vimos en la serie dedicadda a Snort, en uno de los capítulos dedicado a la creación de reglas Sistemas de Detección de intrusos y Snort. (II). Creación de Reglas (II). Opciones de las reglas. ,la opcion content. Recordemos:

Content busca un determinado patrón en el contenido del paquete. Es sensible a mayúsculas/minúsculas. Puede ser texto, binario o una mezcla de ambos. el contenido binario se encierra entre || y se representa en hexadecimal. Podemos negar también un contenido.

Pero hay más. Content entiende también de expresiones regulares mediante PCRE.

Sintaxis

Ysamos las expresiones regulares en Snort de la siguiente forma:

pcre:/expresion regular/;

Algunos ejemplos simples.

Empezamos por algo sencillo. supongamos que queremos crear una regla para detectar una conexión de un usuario con un determinado servidor FTP. Sabemos que el usuario usa una combinación de numeros para su password. combinación del tipo 1234, 11234, 234, etc. Es decir usa como primer caracter numérico el 1, luego 234 pero puede usar el 1 varias veces repetidas o no usarlo. Pero no lo sabemos exactamente. Crear la regla con una expresión normal sería algo complicado:

alert tcp any any > any 21 (msg: "Usuario conectado"; content: "1234";)

ya que las combinaciones son muchas. La solución pasa por usar las expresiones regulares, quedando la regla de la siguiente forma:

alert tcp any any > any 21 (msg: "Usuario conectado"; content: "USER"; pcre: "/1*234/";)

Podría ser también que sepamos que el pasword consta de una letra y 4 números cualquiera:

alert tcp any any > any 21 (msg: "Usuario conectado"; content: "USER"; pcre: "/[A-Z]\d\d\d\d/";)

Con lo cual valdría A1234, V0000, V5432, etc.

Un usuario con password conteniendo cualquier caracter alfanumérico:

alert tcp any any > any 21 (msg: "Usuario conectado"; content: "USER"; pcre: "/ [a-zA-Z0-9_ ]/";)

Usuario Administrador conectado:

alert tcp any any > any 21 (msg: "Usuario Administrador conectado"; content: "USER"; pcre: "/administrador/i";)

La opción i hace que resulten válidas tanto mayúsculas com minúsculas.

Podemos detectar el trasiego de ciertos ejecutables:

alert tcp any any > any any (msg: "Alerta movimiento de ejecutables "; pcre: "/(\.exe|\.bat|\.com)/i";)

Un usuario FTP con password contenido una cadena alfanumérica de longitud 10 caracteres:

alert tcp any any > any 21 (msg: "Usuario conectado"; content: "USER"; pcre: "/\D{10}/";)

En las reglas Snort, se usan mucho las expresiones regulares. Ejemplos:  dtección de Inyección SQL, Malware, virus, etc.

Enlaces sobre Expresiones regulares en general:

Sobre las expresiones regulares en general.

Definiciones de Carácter. Metacaracteres.


En el próximo capitulo dedicado a las expresiones regulares nos dedicaremos a las expresiones avanzadas, detección de cadenas URL, etc.

Comments

]]>
Fri, 23 May 2008 11:27:59 +0100
Tshark. Detectando borrado de archivos de la red y otros eventos. http://seguridadyredes.nireblog.com/post/2008/05/21/tshark-detectando-borrado-de-archivos-de-la-red-y-otros-eventos http://seguridadyredes.nireblog.com/post/2008/05/21/tshark-detectando-borrado-de-archivos-de-la-red-y-otros-eventos Ya hemos visto como detectar el envenenamiento de la cache ARP. Ahora vamos a ver como detectar el borrado de archivos en red en una red no conmutada haciendo uso de Tshark y los filtros SMB (Server Message Block Protocol). Es posible hacerlo también en una red conmutanda capturando los paquetes mediante envenenamiento de la caché ARP.

Usaremos el filtro smb.cmd de comando SMB, aunque también podríamos usar smb.disposition.delete_on_close de borrado o cerrado de archivo, dependiendo pues de la forma de borrar el fichero por parte del cliente.

Actualización. 21-05-2008. Registro de eventos de apertura y escritura de archivos.

Tenemos una captura de red. Realizamos una estadística SMB:

estadistica smb tshark

Vemos que el comando Delete tiene una llamada. Vamos a investigar un poco más. Usamos el filtro smb.cmd == 0x06:

TSHARK

NOTA: algunos datos se cambiaron

Ahora vemos con claridad el SMB Delete Request (0x06). Vemos también el fichero borrado y la captura ASCII de la cual podemos extraer mucha más información. Sin embargo con usar la opción -V de Tshark podemos obtener toda la información necesaria para auditar el evento del borrado de archivo de la red, independientemetne del uso de otras herramientas y/o auditorias.

Si usamos:

tshark -r captura3.cap -R "smb.cmd==0x06" -V

Obtendremos entre otras cosas esta información:

............
Process ID High: 0
Signature: 0000000000000000
Reserved: 0000
Tree ID: 2049 (\\SERVER-1\E$)
[Path: \\SERVER-1\E$]
[Mapped in: 42172]
Process ID: 65279
User ID: 2049 (USER01\Administrador)
[Primary Domain: USER01]
[Account: Administrador]
[Logged In: 42170]
............
Delete Request (0x06)
Word Count (WCT): 1
Search Attributes: 0x0006
.... .... .... ...0 = Read Only: Do NOT include read only files in search results
.... .... .... ..1. = Hidden: Include HIDDEN files in search results
.... .... .... .1.. = System: Include SYSTEM files in search results
.... .... .... 0... = Volume ID: Do NOT include volume IDs in search results
.... .... ...0 .... = Directory: Do NOT include directories in search results
.... .... ..0. .... = Archive: Do NOT include archive files in search results
Byte Count (BCC): 103
Buffer Format: ASCII (4)
File Name: \DATOS00001\PROYECTOS\Nuevo Documento de texto.txt

Que otros eventos podemos registrar.

Entre otros muchos:

  • Close Request (0x04) Cerrado de archivo.
  • NT Create Andx Request (0xa2) Creación de carpetas y arhivos.
  • smb.cmd simplmente filtrndo por smb.cmd sin valor alguno podemos analizar las transacciones SMB, errores, etc.
  • SMB Rename Request (0x07) Renombrado de archivos.
  • SMB Read AndX Request (0x2e) Apertura de un archivo.
  • SMB Write Andx Request (0x2f) Escrituraen un archivo.
  • SMB Cancer Request (0xa4)

Un ejemplo. Si dejamos Tshark capturando los evetos de apertura y escritura de archivos de la red:

tshark

Con la opción -x o -V veremos el resto de la información que necesitamos para saber que archivo, cuando, quien, con que privilegios, etc.


Comments

]]>
Wed, 21 May 2008 11:00:59 +0100
Tshark. Detectando Arp-Poison. http://seguridadyredes.nireblog.com/post/2008/05/16/tshark-detectando-arp-poison http://seguridadyredes.nireblog.com/post/2008/05/16/tshark-detectando-arp-poison Ya vimos en su momento como detectar sniffers en redes conmutadas y no conmutadas. donde también vimos como funciona el protocolo ARP.

En este artículo vamos estudiar como detectar un Arp-poison o Envenenamiento ARP en Tshark.

La vulnerabilidad

De forma muy básica. Es posible engañar a un determinado host diciéndole que la dirección MAC con quien se comunica sea otro host (C) distinto al que pretende comunicarse. De esta forma podemos redireccionar hacia (C) todo el tráfico que supuestamente debería ir de (A) --> (B). Una explicación más detallada en la Wikipedia.

Ettercap ARP-Poison

arp poison ettercap

Los pasos seguidos para realizar en nuestra red un Envenenamiento ARP son los siguientes:

  1. Sniff > Unified Sniffing... (seleccionamos interface de red)
  2. Hosts > Scan for Hosts
  3. Hosts > Hosts List
  4. Target 1 (seleccionamos por ejemplo la Puerta de Enlace)
  5. Target 2 (seleccionamos la "víctima")
  6. Mitm > Arp poisoning..
  7. Start > Start Sniffing > Sniff remote connections.
  8. Al terminar. Mitm > Stop mitm attack(s) y Start > Stop Sniffing

Detectando con Tshark

Filtramos por protocolo ARP y vemos lo siguiente:

tshark arp-poison



Comments

]]>
Fri, 16 May 2008 09:21:14 +0100
Tshark, Wireshark en línea de comandos. (V Parte.) Avanzando en filtros y Estadísticas. http://seguridadyredes.nireblog.com/post/2008/05/13/tshark-wireshark-en-linea-de-comandos-v-parte-avanzando-en-filtros-y-estadisticas http://seguridadyredes.nireblog.com/post/2008/05/13/tshark-wireshark-en-linea-de-comandos-v-parte-avanzando-en-filtros-y-estadisticas En esta entrega de Tshark, Wireshark en línea de comandos, avanzamos un poco más en las Estadísticas que vimos ya en la III parte. Esta vez nos centraremos en:

  • dests,tree
  • ptype,tree
  • ip_hosts,tree
  • smb,rtt

Avanzaremos sobre otras estádisticas vistas en otras entregas, usaremos funciones como SUM(), COUNT(), MIN(), etc. y aplicaremos filtros mostrando resultados por campos tipo -Tfields.

Practicaremos con los filtros y opciones en busca de la información que nos interse.

Arbol de destinos.

-z dests,tree, filtro,

Nos muestra información de número de paquetes frames capturados, protocolos usados y ratios atendiendo al tráfico de destino de hosts. Podemos aplicar filtro:

tshark

Arbol de tipo de puerto.

-z ptype,tree

Nos muestra información de tipo de puerto TCP O UDP:

TSHARK

Arbol de IP hosts.

-z ip_hosts,tree

Nos muestra información de IP de los host intervinientes en la captura:

tshark

Transacciones SMB.

-z smb,rtt

Nos muestra información de transacciones SMB, paquetes SMB, etc.

tshark

Avanzando en Estadísticas y filtros

Vamos a realizar una captura en la que queremos que se nos muestreuna series de campos del datagrama IP. en este caso el campo TTL y los flags o banderas clasificados por IP.

Usaremos la opción -Tfields, es decir, mostrar la información por campos. Estableceremos que campos -e y como apareceran en pantalla con la opción -E:

tshark

Algo parecido a lo anterior pero nos centreremos en capturas HTTP, para biscar información como código de respuesta HTTP, hosts, ubicación de archivos del servidor, etc:

tshark

Vamos a mezclar estadísticas, filtros y el uso de funciones tipo SUM(), COUNT(), etc. Usaremos la función SUM() en estos dos ejemplos para mejor explicar su funcionamiento.

Tomaremos los datos de una captura (captura.cap) realizada con anterioridad con el comando -w. Leeremos el archivo .cap de la forma -r captura.cap. Mostraremos la información por columnas:

tshark

Ahora vamos a ver una "conversación" ICMP. Realizaremos el volcado de la información de la captura en pantalla mostrando como se realiza el "diálogo" echo request / echo reply resultado de un ping a un host cualquiera (quitamos la opción -q para esta tarea). Mostraremos las estadísticas de conversación y la estadistica de jerarquía de protocolos involucrados:

tshark

Vamos a realizar, por último en este capítulo, un volcado de información similar pero para ver como se realiza un establecimiento de conexión TCP, lo que técnicamente se llama three-way handshake. Lo vimos en el capítulo dedicado a la Interpretación del Segmento TCP.:

tshark

---------------------------------------------------------

Comments

]]>
Tue, 13 May 2008 16:48:14 +0100
Tshark, Wireshark en línea de comandos. (IV Parte.) Usando el lenguaje Lua. http://seguridadyredes.nireblog.com/post/2008/05/08/tshark-wireshark-en-linea-de-comandos-iv-parte-usando-el-lenguaje-lua http://seguridadyredes.nireblog.com/post/2008/05/08/tshark-wireshark-en-linea-de-comandos-iv-parte-usando-el-lenguaje-lua Seguimos con Tshark. Ahora vamos a ver de forma básica como podemos usar Tshark con el lenguaje de programación de script Lua invocándolo mediante la opción -X como una extensión. No trataremos aquí como programa on Lua, más bien como usar este lenguaje con Tshark.

La sintaxis sería -Xlua_script:nombrefichero.lua

Pero antes que nada. ¿ Que es Lua ?.

Lua para tshark, wireshark y snort

Lua es un lenguage de programación extensible diseñado para una programación procedimental general con utilidades para la descripción de datos. También ofrece un buen soporte para la programación orientada a objetos, programación funcional y programación orientada a datos. Se pretende que Lua sea usado como un lenguaje de script potente y ligero para cualquier programa que lo necesite. Es un lenguaje embebido en una aplicación. A parte de Tshark y Wireshark, también lo usará Snort en la proxima generación de este IDS, la V 3.0 de la que hablaremos en otro post.

Es decir, que a la ya potente herramienta de captura y análisis de paquetes Tshark podemos añadir la todo el potencial de un lenguaje de programación para extraer todos los datos que necesitemos.

Comenzando con Lua

Antes que nada, para usar Lua tenemos que editar el fichero lua.ini que se encuentra en:

C:\Archivos de programa\Wireshark

En este archivo se encuentra la siguiente línea:

disable_lua = true; do return end;
y la cambiamos por:
disable_lua = false; do return end; 
Salvamos y listo.

Como ya hemos dicho, la sintáxis para usar un script de Lua es:

-Xlua_script:nombrefichero.lua

Vamos entonces a crear nuestreo primer ejemplo.

-- Hola.lua -- Mi primer  ejemplo programa con Lua
    print("Hola mundo!")
Lo llamaremos hola.lua y lo invocamos desde Tshark:
tshatk y Lua
Otro ejemplo. Un contador de paquetes atendiendo a un determinado host.
Lo llamaremos contador.lua.

do

packets = 0;
local function init_listener()

local tap = Listener.new("frame","ip.addr == 192.168.1.30")
function tap.reset()

packets = 0;

end
function tap.packet(pinfo,tvb,ip)

packets = packets + 1

end
function tap.draw()

print("Paquetes desde/hacia 192.168.1.30",packets)

end
end

init_listener()

end

Cambiamos o personalizamos la IP y salvamos y ejecutamos:

Tshark y Lua

Con Lua podemos complicar todo lo que queramos y crear programas completos.

Información sobre el API Wireshark para Lua:

http://www.wireshark.org/docs/wsug_html_chunked/wsluarm_modules.html

Comments

]]>
Thu, 08 May 2008 16:08:55 +0100
Tshark, Wireshark en línea de comandos. (III Parte.) Estadísticas. http://seguridadyredes.nireblog.com/post/2008/05/07/tshark-wireshark-en-linea-de-comandos-iii-parte-estadisticas http://seguridadyredes.nireblog.com/post/2008/05/07/tshark-wireshark-en-linea-de-comandos-iii-parte-estadisticas Ya vimos en la primera y segunda parte de Tshark las nociones más basicas y algunas más avanzadas del uso de este capturador de paquetes.

tshark logo

En esta tercera entrega vamos a estudiar una característica bastante intersante de Tshark y Wireshark, las estadísticas. Estadísticas que nos informarán del uso de la red, protocolos involucrados en las capturas y estádisticas de uso, comunicaciones entre hosts, etc. Además podemos aplicar filtros a las estádisticas de tal forma que la información obtenida por ellas es altamente personalizable y flexible.

Existe gran variedad de tipos de estádisticas a mostrar por Tshark, protocolos, comunicaciones entre hosts, estádisticas de direcciones de destino, estadísticas SMB, por longitud de paquetes, HTTP, etc y todo ello aplicando intervalos de tiempo para mostrar los resultados y filtros de captura. Se muestra también información de ratios y porcentajes.

Actualizado a 08-05-2008: Mostrar datos estadísticos en varias columnas.

El comando que invoca a las estadísticas es -z. vamos a ver, a continuación, los tipos de estádisticas y ejemplos. Si añadimos -q no apareceran las capturas en pantalla, solo las estadisticas tras pulsar Control+C.

Estadísticas de Protocolo.

-z io,stat,intervalo, filtro,filtro,

Nos muestra información de número de paquetes frames capturados en un intervalo determinado. Podemos aplicar un filtro o varios filtros.

Un ejemplo sin aplicar filtros:

tshark

Podemos aplicar varios filtros. La información se nos mostrará en pantalla en varias columnas. Se mostrará mostrará el letrero de las columnas con el filtro aplicado:

  • Column #0 filtro por ip
  • Column #1 filtro por tcp
  • Column #2 filtro por icmp
  • Column #3 tcp.port == 80

Lo vemos en un ejemplo:

tshark

Estadísticas de Jeraquía de Protocolos.

-z io,phs, filtro

Nos muestra información de los protocolos involucrados en la captura. Podemos aplicar un filtro.

Sin filtro. Todos los protocolos involucrados en la captura. Tenemos información de protocolos, frames capturados y bytes.

tshark

Aplicamos filtros:

tshark

Observamos en la captura de arriba, en el protocolo http, datos sobre imagenes, etc descargados tras la navegación (tcp.port eq 80).
tshark
Arriba. Se trata de captura con destino a un servidor de correo, de ahí la presencia de imap.
Aplicamos duración a la captura tras lo cual aparecerán las estadísticas sin pulsar Control+C:

tshark

Estadísticas de comunicación o conversación.

-z conv,tipo,filtro

Información sobre comunicaciones o conversaciones entre hosts. Podemos establecer diferentes tipos:

  • eth
  • fc
  • fddi
  • ip
  • ipx
  • tcp
  • tr
  • udp

Estadísticas IP:

tshark

Estadísticas TCP aplicando filtro:

tshark

Añadiendo información de protocolos a los paquetes capturados.

Podemos incluir información a los frames de paquetes capturados de la forma:

-z proto,colinfo,filtro,campo

Que podenos añadir. Ya estudiamos en su momentos los campos de un datagrama IP y vimos algunos campos como versión, TTL, Tipo de servicio, banderas o flags, etc. En una captura tshark normal no veriamos estos campos. Con proto,colinfo podemos ver mucho de ellos.

Algunos ejemplos con:

  • -z proto,colinfo,ip.ttl,ip.ttl
  • -z proto,colinfo,ip.proto,ip.proto
  • -z proto,colinfo,ip.proto,ip.proto -z proto,colinfo,ip.ttl,ip.ttl
  • -z proto,colinfo,ip.proto,ip.proto -z proto,colinfo,tcp.len,tcp.len

tshark

Estadísticas http.

Completo informe estádistico de transaciones http, códigos de error... También nos informa de redirecciones, errores de servidor, enlaces rotos, etc.

Tenemos varias formas de estraer la información:

  • -z http,stat,filtro
  • -z http,tree,filtro
  • -z http_req,tree
  • -z http_srv,tree

Y algunos ejemplos combinando también filtros:

tshark

tshark

Las estadisticas basadas en:

  • -z http_req,tree
  • -z http_srv,tree

son muy interesantes y nos da mucha más información que los otros dos métodos:

tshark

http_srv,tree:

tshark

En la siguiente entrega seguiremos con las estádisticas, plugins y otras características avanzadas de Tshark.

Comments

]]>
Wed, 07 May 2008 12:47:15 +0100
Tshark, Wireshark en línea de comandos. (II Parte.) http://seguridadyredes.nireblog.com/post/2008/05/02/tshark-wireshark-en-linea-de-comandos-ii-parte http://seguridadyredes.nireblog.com/post/2008/05/02/tshark-wireshark-en-linea-de-comandos-ii-parte En esta entrega avanzamos en el estudio de Tshark. Ya vimos en la primera parte las opciones más básicas. Ahora nos adentraremos en las opciones que hacen de Tshark un capturador/analizador de paquetes bastante interesante.

Tshark , Wireshark en línea de comandos.

Formateo de tiempo.

Con la opción -t podemos formatear la impresión de tiempo en nuestras capturas de diferentes formas:

  • -t ad Formato absoluto fecha y tiempo.
  • -t a Formato absoluto sin dato de fecha.
  • -t r Relativo en segundos entre primer paquete y el actual
  • -t d Tiempo respecto al paquete anterior

Ejemplos:

-t ad

2008-05-02 10:00:11.133511 192.168.1.1 00:13:49:56:32:c7 224.0.0.1 IGMP V2 Membership Query

-t a

10:02:26.148340 192.168.1.1 00:13:49:56:32:c7 224.0.0.1 IGMP V2 Membership Query

-t r

0.000000 192.168.1.201 00:1b:78:1e:88:c8 224.0.0.251 IGMP V1 Membership Report
2.987708 192.168.1.201 00:1b:78:1e:88:c8 224.0.1.60 IGMP V1 Membership Report

Formateo de salida de datos.

Podemos formatear la salida de los datos de paquetes capturados para su mejor decodificación o tratamiento externo. Lo haremos con la opción -T en combinación con -e y -E.

Con -T especificamos el formato de los datos, es decir, si lo queremos en formato XML, texto, postscript o por campos.

Con la opción -e especificamos que campos mostramos cuando usemos la opción -T fields.

Con la opción -E mostramos la información de los campos especificados con -e.

Vamos a ver todo esto por partes y de forma más detallada.

Formateo de tipo de datos (-T)

  • -T psml / -T pdml

Formato XML psml ó pdml

  • -T ps

Formato postscript

  • -T text

Formato texto. Por defecto

  • -T fields

Formato campos seleccionados. Los campos a mostrar en la capturas lo indicaremos con la opción -e. Por ejemplo. Si queremos mostrar el campo IP lo haremos de la forma -e ip.addr. Lo vemos al fina con unos ejemplo.

Formateo de especificacion de campos a mostrar (-e).

Indicaremos con -e los campos a mostrar de nuestras capturas. Si solo queremos mostrar el campo IP y el puerto UDP haremos lo siguiente:

-e ip.addr -e udp.port

El comando -e necesariamente debe ir acpmpañado de -T fields

Formateo de información de campos mostrados (-E)

Nos muestra los campos especificados con -e. además podemos, para mostroar mejor los datos capturados, establecer separadores, cabeceras, etc.

  • -E headers=y/n

Establece si imprimimos o no la cabecera de los campos indicados en -e

  • -E separators=/t | /s [caracter]

Establecemos un separador para los campos mostrados en -e ó un separador tipo caracter.

  • -E quote=d|s|n

Delimitamos, los campos mostrados con comillas, comillas simples o sin delimitar.

Ejemplos de combinación de comandos formateo de salida de datos.

A continuación unos ejemplos de lo explicado para formateo. Marco en negrita los comandos usados.

>tshark -i2 -n -t ad -T ps
%!
%!PS-Adobe-2.0
%
% Wireshark - Network traffic analyzer
% By Gerald Combs
% Copyright 1998 Gerald Combs
%
%%Creator: Wireshark
%%Title: wireshark.ps
%%DocumentFonts: Helvetica Courier
%%EndComments
%!

%
% Ghostscript http://ghostscript.com/ can convert postscript to pdf files.
%
% To convert this postscript file to pdf, type (for US letter format):
% ps2pdf filename.ps
%
% or (for A4 format):
% ps2pdf -sPAPERSIZE=a4 filename.ps

>tshark -i2 -n -t ad -T fields -e ip.addr -e dst.host

Capturing on 3Com EtherLink PCI
224.0.0.9
224.0.1.60
192.168.1.239
192.168.1.30
192.168.1.239
192.168.1.30
192.168.1.239

>tshark -i2 -n -t ad -T fields -e ip.addr -e dst.host -E header=y -E separator=/t

ip.addr dst.host
Capturing on 3Com EtherLink PCI

224.0.0.9

224.0.0.1
224.0.0.9
224.0.0.251
239.255.255.250
224.0.1.60
224.0.1.60

224.0.0.1
224.0.0.9
239.255.255.250
224.0.0.251
224.0.1.60
192.168.1.255

19 packets captured

>tshark -i2 -n -t ad -T fields -e ip.addr -e udp.port -E header=y -E separator=/t

ip.addr udp.port
Capturing on 3Com EtherLink PCI

224.0.0.1
239.255.255.250
224.0.0.251
192.168.1.255 137
192.168.1.255 137
192.168.1.255 137
224.0.1.60
224.0.1.60

224.0.0.9
224.0.0.1
12 packets captured

>tshark -i2 -n -t ad -T psml

Capturing on 3Com EtherLink PCI

Time
Source
mc scr
Destination
Protocol
Info

2008-05-02 11:27:04.859138
192.168.1.201
00:1b:78:1e:88:c8
224.0.1.60
IGMP
V1 Membership Report
2008-05-02 11:27:04.995910
192.168.1.11
00:01:02:9f:7b:1a
192.168.1.255
NBNS
Name query NB SERVER-1<00>

Indicadores de resolución de nombres (-N). No resolución (-n).

Con la opción -n indicamos que no se resulevan los nombres de hosts:

>tshark -i2 -n

Capturing on 3Com EtherLink PCI
0.000000 192.168.1.201 00:1b:78:1e:88:c8 224.0.0.251 IGMP V1 Membership Report
5.745429 192.168.1.1 00:13:49:56:32:c7 224.0.0.1 IGMP V2 Membership Query
5.975411 192.168.1.201 00:1b:78:1e:88:c8 224.0.0.251 IGMP V1 Membership Report

>tshark -i2

Capturing on 3Com EtherLink PCI
0.000000 192.168.1.54 Dell_1d:b5:da 192.168.1.255 BROWSER Host Announcement MAQUINA1-XP, Workstation, Server, NT Workstation, Potential Browser
0.050003 192.168.1.30 3Com_ed:89:c3 224.0.0.9 IGMP V2 Membership Report
0.794876 3Com_ed:89:c3 3Com_ed:89:c3 Broadcast ARP Who has 192.168.1.245? Tell 192.168.1.30
0.794995 192.168.1.245 192.168.1.245 3Com_ed:89:c3 ARP 192.168.1.245 is at 00:14:22:5f:a9:25
0.795003 192.168.1.30 3Com_ed:89:c3 192.168.1.245 DNS Standard query PTR 255.1.168.192.in-addr.arpa
0.867768 192.168.1.245 192.168.1.245 192.168.1.30 DNS Standard query response, No such name
1.544494 192.168.1.30 3Com_ed:89:c3 MAQUINA-2 DNS Standard query PTR 30.1.168.192.in-addr.arpa
1.544570 192.168.1.30 3Com_ed:89:c3 MAQUINA-2 DNS Standard query PTR 9.0.0.224.in-addr.arpa

Con la opción -N establecemos que indicadores de resulución queremos.

  • -N m Resolver dirección MAC
  • -N n Resolver nombres a nivel de red.
  • -N t Resolver nombres capa trasporte.

Modo promíscuo (-p)

No ponemos la tarjeta en modo promíscuo.

Combinando filtros de captura y visualización ó display filters.

Podemos combinar ambos filtros en línea de comandos con Tshark usando los comandos -f (filtros de captura) que lo vimos en la primera parte y -R (filtros de visualización):

>tshark -i 2 -f "port 25" -R "smtp.req.parameter contains "midominio""
Could not open file: 'Ericsson.xml', error: No such file or directory
Capturing on 3Com EtherLink PCI
0.193559 192.168.1.30 3Com_ed:89:c3 192.168.100.241 SMTP Command: MAIL FROM:
0.196750 192.168.1.30 3Com_ed:89:c3 192.168.100.241 SMTP Command: RCPT TO:

Filtros de captura y visualización para Wireshark y Tshark.

Estadísticas (-z).

Las veremos más a delante. Un adelanto en foma de ejemplos de esta muy interesante característica de Tshark.

>tshark -i2 -q -zio,phs -t ad -f "tcp"

Capturing on 3Com EtherLink PCI
330 packets captured

===================================================================
Protocol Hierarchy Statistics
Filter: frame

frame frames:330 bytes:175489
eth frames:330 bytes:175489
ip frames:330 bytes:175489
tcp frames:330 bytes:175489
http frames:10 bytes:9012
image-jfif frames:1 bytes:967
malformed frames:1 bytes:967
tcp.segments frames:8 bytes:2826
http frames:8 bytes:2826
image-gif frames:2 bytes:178
data-text-lines frames:4 bytes:1445
png frames:2 bytes:1203
===================================================================

Estadísticas para http:

>tshark -i2 -q -zhttp,tree -t ad -f "tcp"

Capturing on 3Com EtherLink PCI
352 packets captured

===================================================================
HTTP/Packet Counter value rate percent
-------------------------------------------------------------------
Total HTTP Packets 39 0,001354
HTTP Request Packets 17 0,000590 43,59%
GET 17 0,000590 100,00%
HTTP Response Packets 16 0,000556 41,03%
???: broken 0 0,000000 0,00%
1xx: Informational 0 0,000000 0,00%
2xx: Success 12 0,000417 75,00%
200 OK 10 0,000347 83,33%
204 No Content 2 0,000069 16,67%
3xx: Redirection 1 0,000035 6,25%
304 Not Modified 1 0,000035 100,00%
4xx: Client Error 3 0,000104 18,75%
404 Not Found 3 0,000104 100,00%
5xx: Server Error 0 0,000000 0,00%
Other HTTP Packets 6 0,000208 15,38%

===================================================================

En la siguiente entrega avanzaremos aún más.

Comments

]]>
Fri, 02 May 2008 11:59:38 +0100
Tshark, Wireshark en línea de comandos. (I Parte.) http://seguridadyredes.nireblog.com/post/2008/04/30/tshark-wireshark-en-linea-de-comandos-i-parte http://seguridadyredes.nireblog.com/post/2008/04/30/tshark-wireshark-en-linea-de-comandos-i-parte Ya estudiamos en su momento Wireshark, una herramieta multiplataforma de interfaz gráfico para análisis de red, producto de la evolución de Ethereal. Pero si no queremos usar la interfaz gráfica, wireshark incluye la herramienta Tshark para capturas, análisis de red, etc en línea de comandos. Al usar las librerias pcap, su uso es similar a TCPDump y Windump.

Empezando con Tshark.

Listamos las interfaces:

>tshark -D

1. \Device\NPF_GenericDialupAdapter (Adapter for generic dialup and VPN capture)
2. \Device\NPF_{58C21E09-0C1F-4F85-9463-12328CA28B9A} (3Com EtherLink PCI)
3. \Device\NPF_{209C9E91-9E52-4551-8FE9-3D78AD9AB0FD} (Juniper Network Connect V
irtual Adapter)

Ejecutando Tshark:

>tshark -i2
Capturing on 3Com EtherLink PCI
0.000000 192.168.1.240 192.168.1.240 Broadcast ARP Who has 192.168.1.11? Tell 192.168.1.240
2.339835 192.168.1.201 HewlettP_1e:88:c8 224.0.1.60 IGMP V1 Membership Report
2.973620 192.168.1.30 192.168.1.30 Broadcast ARP Who has 192.168.1.245? Tell 192.168.1.30
2.973737 192.168.1.245 192.168.1.245 192.168.1.30 ARP 192.168.1.245 is at 00:14:22:5f:a9:25
2.973746 192.168.1.30 192.168.1.30 192.168.1.245 DNS Standard query PTR 240.1.168.192.in-addr.arpa
3.058973 192.168.1.245 192.168.1.245 192.168.1.30 DNS Standard query response, No such name
3.474263 192.168.1.30 192.168.1.30 host001 DNS Standard query PTR 201.1.168.192.in-addr.arpa
3.474332 192.168.1.30 192.168.1.30 host001 DNS Standard query PTR 60.1.0.224.in-addr.arpa
3.474691 192.168.1.30 192.168.1.30 host001 DNS Standard query PTR 30.1.168.192.in-addr.arpa
3.474751 host001 192.168.1.245 192.168.1.30 DNS Standard query response PTR HP-DEVICE-DISC.MCAST.NET
3.475016 192.168.1.30 192.168.1.30 host001 DNS Standard query PTR 245.1.168.192.in-addr.arpa
3.475069 192.168.1.30 192.168.1.30 host001 DNS Standard query A HP-DEVICE-DISC.MCAST.NET
3.475239 host001 192.168.1.245 192.168.1.30 DNS Standard query response PTR FIREWALL1
3.475314 host001 192.168.1.245 192.168.1.30 DNS Standard query response A 224.0.1.60

Aplicando filtros:

Como Tshark usa las librerias pcap, podemos aplicar los filtros ya aprendidos para TCPDump y Windump. Para aplicar estos filtros usaremos el comando -f :

>tshark -i2 -f "dst port 80"
Capturing on 3Com EtherLink PCI
0.000000 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP qsnet-workst > http [SYN] Seq=0 Win=64512 Len=0 MSS=1460
0.000318 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP qsnet-workst > http [ACK] Seq=1 Ack=1 Win=64512 Len=0
0.000794 192.168.1.30 3Com_ed:89:c3 67.228.110.120 HTTP GET /bugzilla/userprefs.cgi?tab=email HTTP/1.1
1.256491 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP qsnet-workst > http [ACK] Seq=738 Ack=1658 Win=64512 Len=0
1.257280 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP qsnet-workst > http [ACK] Seq=738 Ack=3508 Win=64512 Len=0
1.299224 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org HTTP GET /bugzilla/skins/standard/global.css HTTP/1.1
1.571152 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP qsnet-workst > http [ACK] Seq=1396 Ack=6277 Win=64512 Len=0
1.571285 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP qsnet-workst > http [ACK] Seq=1396 Ack=8042 Win=64512 Len=0
1.571359 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP qsnet-workst > http [ACK] Seq=1396 Ack=8915 Win=63639 Len=0
1.829680 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP qsnet-workst > http [ACK] Seq=1396 Ack=10962 Win=64512 Len=0

Condicionando las capturas:

Podemos condicionar las capturas atendiendo, por ejemplo, a criterios de tiempo o de cantidad de paquetes capturados haciendo que Tshark finalice la captura cuando deseemos.

  • -c Termina la captura hasta n paquetes
  • -a Termina la captura hasta n segundos
  • -a Termina la captura hasta n Kb.
  • -a Yermina la captura hasta n ficheros

Ejemplos:

>tshark -i2 -f "dst port 80" -c 10
Capturing on 3Com EtherLink PCI
0.000000 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP 4382 > http [SYN] Seq=0 Win=64512 Len=0 MSS=1460
0.000407 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP 4382 > http [ACK] Seq=1 Ack=1 Win=64512 Len=0
0.000673 192.168.1.30 3Com_ed:89:c3 67.228.110.120 HTTP GET /bugzilla/report.cgi HTTP/1.1
5.096047 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP 4382 > http [FIN, ACK] Seq=725 Ack=1 Win=64512 Len=0
5.096541 192.168.1.30 3Com_ed:89:c3 67.228.110.120 TCP 4384 > http [SYN] Seq=0 Win=64512 Len=0 MSS=1460
5.096943 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP 4384 > http [ACK] Seq=1 Ack=1 Win=64512 Len=0
5.123580 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org HTTP GET /bugzilla/userprefs.cgi?tab=email&GoAheadAndLogIn=1 HTTP/1.1
6.590758 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP 4384 > http [ACK] Seq=756 Ack=198 Win=64315 Len=0
6.690479 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP 4386 > http [SYN] Seq=0 Win=64512 Len=0 MSS=1460
6.690934 192.168.1.30 3Com_ed:89:c3 bugs.wireshark.org TCP 4386 > http [ACK] Seq=1 Ack=1 Win=64512 Len=0
10 packets captured

Aquí complicamos un poco el filtro y condicionamos la captura para que termine a los 10 segundos:

>tshark -i2 -f "tcp[13] = 2 and port 25" -aduration:10
Capturing on 3Com EtherLink PCI
0.000000 192.168.1.30 3Com_ed:89:c3 192.168.103.240 TCP 4409 > smtp [SYN] Seq=0 Win=64512 Len=0 MSS=1460
1 packets captured

Aplicando los Dispaly Filters o Filtros de Visualización:

Estos filtros lo vimos aquí. Se usan de forma análoga a como lo haríamos con Wireshark. Usaremos para ello el comando -R.

>tshark -i2 -R "tcp.port == 23"
Capturing on 3Com EtherLink PCI
29.264737 192.168.1.30 3Com_ed:89:c3 192.168.108.254 TCP 4462 > telnet [SYN] Seq=0 Win=64512 Len=0 MSS=1460
29.267380 192.168.108.254 Dell_5f:a9:25 192.168.1.30 TCP telnet > 4462 [SYN, ACK] Seq=0 Ack=1 Win=1024 Len=0 MSS=512
29.267423 192.168.1.30 3Com_ed:89:c3 192.168.108.254 TCP 4462 > telnet [ACK] Seq=1 Ack=1 Win=64512 Len=0
29.269452 192.168.108.254 Dell_5f:a9:25 192.168.1.30 TELNET Telnet Data ...
29.270779 192.168.1.30 3Com_ed:89:c3 192.168.108.254 TELNET Telnet Data ...

Salida Tshark en formato hexadecimal y ascii:

Usamos el comando -x

C:\>tshark -i2 -R "tcp.port == 23" -x
Capturing on 3Com EtherLink PCI
2.198516 192.168.1.30 3Com_ed:89:c3 192.168.108.254 TCP 4510 > telnet [SYN] Seq=0 Win=64512 Len=0 MSS=1460

0000 00 14 22 5f a9 25 00 04 75 ed 89 c3 08 00 45 00 .."_.%..u.....E.
0010 00 30 fd ad 40 00 80 06 14 ad c0 a8 01 1e c0 a8 .0..@...........
0020 65 fe 11 9e 00 17 59 2e b1 e9 00 00 00 00 70 02 e.....Y.......p.
0030 fc 00 81 e4 00 00 02 04 05 b4 01 01 04 02 ..............

2.201146 192.168.108.254 Dell_5f:a9:25 192.168.1.30 TCP telnet > 4510 [SYN, ACK] Seq=0 Ack=1 Win=1024 Len=0 MSS=512

0000 00 04 75 ed 89 c3 00 14 22 5f a9 25 08 00 45 00 ..u....."_.%..E.
0010 00 2c fb e4 00 00 fd 06 d9 79 c0 a8 65 fe c0 a8 .,.......y..e...
0020 01 1e 00 17 11 9e 1b 05 d0 00 59 2e b1 ea 60 12 ..........Y...`.
0030 04 00 a7 89 00 00 02 04 02 00 00 00 ............

2.201187 192.168.1.30 3Com_ed:89:c3 192.168.108.254 TCP 4510 > telnet [ACK] Seq=1 Ack=1 Win=64512 Len=0

0000 00 14 22 5f a9 25 00 04 75 ed 89 c3 08 00 45 00 .."_.%..u.....E.
0010 00 28 fd ae 40 00 80 06 14 b4 c0 a8 01 1e c0 a8 .(..@...........
0020 65 fe 11 9e 00 17 59 2e b1 ea 1b 05 d0 01 50 10 e.....Y.......P.
0030 fc 00 c3 91 00 00 ......

2.203228 192.168.108.254 Dell_5f:a9:25 192.168.1.30 TELNET Telnet Data ...

0000 00 04 75 ed 89 c3 00 14 22 5f a9 25 08 00 45 00 ..u....."_.%..E.
0010 00 3a fb e5 00 00 fd 06 d9 6a c0 a8 65 fe c0 a8 .:.......j..e...
0020 01 1e 00 17 11 9e 1b 05 d0 01 59 2e b1 ea 50 18 ..........Y...P.
0030 04 00 c7 a8 00 00 ff fb 03 ff fb 01 0d 0a 50 61 ..............Pa
0040 73 73 77 6f 72 64 3a 20 ssword:

--------------------------------------------------------------

En la segunda parte estudiaremos opciones avanzadas que son las que diferencian a Tshark de otros capturadores de paquetes.

Comments

]]>
Wed, 30 Apr 2008 17:40:04 +0100
Snort. Enviado log a base datos mysql. http://seguridadyredes.nireblog.com/post/2008/04/29/snort-enviado-log-a-base-datos-mysql http://seguridadyredes.nireblog.com/post/2008/04/29/snort-enviado-log-a-base-datos-mysql Fruto de algún comentario y correos voy a tratar en este artículo la configuración, de forma muy sencilla, de Snort para el envío de las alertas a una base de datos, en este caso MySql. Crearemos la base de datos y toda la configuración necesaria para la comunicación entre Snort y MySql.

Hemos instalado Mysql, creado la contraseña de root.

Creación de la base de datos snort. 

mysql -u root -p

> create database snort;

> exit

Ahora vamos a ejecutar el script create_mysql para crear las tablas que serán usadas por snort:

mysql -u root -p -D snort < c:\Snort\schemas\create_mysql
Enter password: **************

mysql -u root -p
Enter password: **************

Otorgamos permisos:

> grant insert,select,update,create,delete on snort.* to snort@localhost identified by 'snortpass';

>exit

Comprobamos que todo está correcto y se crearon las tablas:

mysql -u snort -p
Enter password: *********

> use snort

> show tables;

+------------------+
| Tables_in_snort |
+------------------+
| data |
| detail |
| encoding |
| event |
| icmphdr |
| iphdr |
| opt |
| reference |
| reference_system |
| schema |
| sensor |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+------------------+
16 rows in set (0.00 sec)

Configuración de Snort. Archivo snort.conf

La parte del fichero snort.conf correspondiente a la configuración de base de datos es:

# database: log to a variety of databases
# ---------------------------------------
# See the README.database file for more information about configuring
# and using this plugin.
#
# output database: log, mysql, user=root password=test dbname=db host=localhost
# output database: alert, postgresql, user=snort dbname=snort
# output database: log, odbc, user=snort dbname=snort
# output database: log, mssql, dbname=snort user=snort password=test
# output database: log, oracle, dbname=snort user=snort password=test

Realizamos el siguiente cambio:

Descomentamos:

# output database: log, mysql, user=root password=test dbname=db host=localhost

y los dejamos de esta forma:

output database: log, mysql, user=root password=snortpass dbname=db host=localhost

Ahora las alertas serán dirigidas a la base de datos.

Comments

]]>
Tue, 29 Apr 2008 12:47:30 +0100
Snortalog. Analizando los logs de Snort. http://seguridadyredes.nireblog.com/post/2008/03/28/snortalog-analizando-los-logs-de-snort http://seguridadyredes.nireblog.com/post/2008/03/28/snortalog-analizando-los-logs-de-snort Hasta ahora hemos visto como configurar Snort, crear reglas, crear reglas I , actualizar sensores remotos, actualizar reglas, etc. Damos un paso más en este artículo para estudiar las diversas herramientas de análisis de los logs de Snort. Herramientas que nos facilitarán un estudio más completo, estadístico y comprensible de las alertas almacenadas en alert.ids. La primera herramienta que vamos a estudiar es Snortalog.

snortalog_0.jpg

Snortalog es un script de perl que tras analizar el archivo alert.ids creará un informe personalizado, con gráficos y dividido en secciones correspondientes a los ataques por hora, por métodos, IP origen, protocolos, puerto de destino, etc. Tambíen incluye estadísticas y gráficos con codigo de colores según la importancia de ataque sufrido.

Los pasos a seguir lo resumimos en:

  • Instalación de ActivePerl
  • Descarga e instalación de Snortalog
  • Instalación de las librerías necesarias
  • Ejecución de Snortalog

Instalación de ActivePerl.

Para ello lo primero que tenemos que hacer es descargar e instalar ActiverPerl desde aquí.

La instalación es muy sencilla y no requiere explicación alguna. Solo hay que seguir las indicaciones y el programa de instalación se encargará de el resto, además de las variables de entorno necesarias.

Descarga e instalación de Snortalog.

Descargamos Snortalog desde aquí. Una vez descargado volcamos el contenido en C:\snort\snortalog

Instalación de las librerías necesarias.

Snortalog para funcionar necesita una serie de librerías de Perl. Estas librerías son las siguientes:

Generación de gráficos:

  • GD-1.19.tar.gz
  • GDGraph-1.39.tar.gz
  • GDTextUtil-0.85.tar.g
  • Generación de informe en PDF:

  • htmldoc-1.8.23-source.tar.gz
  • HTML-HTMLDoc-0.07.tar.gz
  • Existen varias formas para instalar dichas librerías. Vamos con una de ellas, quizás la más sencilla.

    En Inicio > Ejecutar, introducimos lo siguiente: ppm

    Con lo que se nos desplegará un gestor de librerías de Perl, el Perl Package Manager:

    snortalog_1.jpg

    En gris tenemos los paquetes no instalados y en color los instalados. Solo tenemos que buscar la librería a instalar > botón derecho del ratón e Install... Marcamos todos los paquetes a instalar y pulsamos el botón:

    snortalog_2.jpg

    Instalación completada.

    Puede ser que alguna librería no aparezca en el listado, lo ha sido posible si instalación a mano o simplemente una instalación incorrecta. Es el posible caso de la librería GD. Para instalara esta librería introducimos el repositorio de donde lo descargaremos:

    http://theoryx5.uwinnipeg.ca/ppms/GD.ppd

    Lo haremos desde:

    snortalog_3.jpg

    Se abre una ventana para introducir los datos del repositorio y la descripción. Y en mi caso lo llamé GD:

    snortalog_4.jpg

    Pulsamos Add y ya está añadido.

    En el listado de Perl Package Manager buscamos GD y lo instalamos.

    También podemos hacer las instalación de la librería de la forma:

    Inicio > Ejecutar > ppm install http://theoryx5.uwinnipeg.ca/ppms/GD.ppd

    Ejecución de Snortalog.

    Ya tan solo nos resta ejecutar Snortalog para crear nuestro informe. La sintáxis depende de la ubicación de Snort y las alertas. Podemos crear varios tipos de informes, por ejemplo:

    • -dst Por IP destino
    • -attack Por ataques
    • -hour Distribución de ataques por horas
    • -portscan Por scan de puertos
    • .......
    • -report Informe completo. (La mejor opción)

    La lectura de los logs depende de la forma en que hayamos ejecutado Snort para crear las alertas, es decir -Fast, -Full, o Syslog. Recordemos para ellos los modos de alertas aquí.

    • -1 Para lectura de alert.ids en modo alerta rápida (-Fast)
    • -2 Para lectura de alert.ids en modo alerta completa (-Full)
    • -3 Para lectura de alert.ids en modo alerta syslog

    Otros parámetros a indicar a Snortalog son:

    • -o Especifica fichero html o PDF para el informe
    • -r Resolución de dirección IP
    • -i Invertir los resultados
    • -g formato salida gráfica que puede ser -g gif ó -g jpg

    Ejecutando Snortalog.

    Personalizar según ubicación de snort, alert.ids, etc.

    snortalog

    Notar que en este caso usé la opción -1 porque use la alerta rápida en Snort.

    Dependiendo de la cantidad de información contenida en alert.ids el proceso será más rápido o más lento. Cuando Snortalog termine la creación del informe, solo tenemos que abrir el html index.html para ver el informe completo de varias páginas:

    informe snortalog

    Para la creación de informes .PDF en windows descargar HTMLdocs de:

    http://xmlrad.com/Downloads/HTMLDOC.exe

    Creación de un informe completo en formato ASCII:

    C:\Snort\snortalog>type c:\snort\log\alert.ids | Perl c:\snort\snortalog\snortal
    og.pl -r -n 30 -1 -report

    Si añadimos al final > informe.txt :

    snortalog_7.jpg

    Canalizaremos y volcaremos el informe en un fichero de texto para su mejor manipulación.


    Comments

    ]]>
    Fri, 28 Mar 2008 08:35:07 +0100
    Oinkmaster. Actualizando las reglas Snort. http://seguridadyredes.nireblog.com/post/2008/03/25/oinkmaster-actualizando-las-reglas-snort http://seguridadyredes.nireblog.com/post/2008/03/25/oinkmaster-actualizando-las-reglas-snort Ya hemos visto en el artículo dedicado a IDS Policy Manager aquí y aquí como, entre otras cosas, podemos actualizar las reglas de varios sensores Snort remotos. Ahora vamos a algo más simple. Vamos a actualizar las reglas Snort de una forma más sencilla a través de Oinkmaster, un script de perl que nos facilita dicha operación. Al ser un sript de perl tenemos varias opciones para ejecutar Oinkmaster en un sistema Windows. Por su facilidad usaremos ActivePerl.

     

    snort_sm.jpg

    Para ello lo primero que tenemos que hacer es descargar e instalar ActiverPerl desde aquí.

    La instalación es muy sencilla y no requiere explicación alguna. Solo hay que seguir las indicaciones y el programa de instalación se encargará de el resto, además de las variables de entorno necesarias.

    Descarga de Oinkmaster.

    La realizaremos desde aquí. Descomprimimos el archivo oinkmaster-2.0.tar.gz y volcamos el contenido, por ejemplo, en c:\Snort\oinkmaster.

    Abrimos el archivo de configuración oinkmaster.conf y nos encontramos con una parte de la configuración donde indicaremos de que repositorio descargaremos las reglas Snort para se actualización:

    oinkmaster.conf

    Como vemos tenemos varios repositorios. Aquí hemos descomentado para activar el repositorio Snort-current en linea correspondiente:

    url = http://www.snort.org/pub-bin/oinkmaster.cgi/ oinkcode /snortrules-snapshot-CURRENT.tar.gz

    En el hueco oinkcode que he dejado hay que introducir nuestro oinkcode.

    Obtendremos nuestro Oink Code tras el registro como usuario en la página oficial de Snort, una vez registrados y logeados, al final de la página de registro nos aparecera una cadena alfanumérica. Este es nuestro oinkcode:

    Oink code

    Para terminar ya solo nos queda introducir:

    oink_1.jpg

    Como vemos arriba, en las tres últimas lineas, oinkcode carga el archivo de configuración y descarga el fichero comprimido con las reglas actualizadas.

    oink_2.jpg

    Vemos arriba como va actualizando las reglas (old) y (new), y al final nos hará un informe de lo realizado:

    oink_3.jpg

    Con esto ya tenemos en nuestra carpeta C:\snort\rules actualizadas nuestras reglas.

    Hay que tener en cuenta que en nuestro fichero de configuración snort.conf en C:\snort\etc tenemos que tener activas (descomentadas) las reglas actualizadas o en el caso de descargar y actualizar archivos de reglas de otro repositorio tenerlas también activas y con la variable RULE_PATH correcta:

    Tenemos por defecto:

    var RULE_