lunes, noviembre 27, 2006

Checkpoint fw monitor (un sniffer dentro del Firewall)

Los módulos de inspección del Checkpoint Firewall-1 se instalan entre la tarjeta de red y la pila TCP/IP de la máquina que hace de host del sistema (Windows, Linux, IPSO, Solaris). Normalmente, estas máquinas tienen utilidades a nivel de red que permiten ver qué está llegando a los interfaces.Sin embargo, puede darse el caso que queramos ver como está tratanto el propio firewall los paquetes, y para ello, cabe la posibilidad de usar el fw monitor, un mecanismo incluido dentro del firewall que permite ver y filtrar paquetes.

Lo primero que hay que decir es que con esta utilidad no podemos ver problemas a nivel de enlace (por ejemplo, la falta de resoluciones arp), puesto que cuando el paquete llega al firewall, ya esta información ha desaparecido. Lo siguiente es que las expresiones de los filtros se escriben en INSPECT, el lenguaje que utiliza checkpoint para definir todas sus reglas e interpretarlas (aunque no estoy muy seguro, creo que Checkpoint lo que tiene es una máquina virtual en el kernel de los sistemas host que interpreta ciertos bytecodes que surgen de la compilación de INSPECT). Por último hay que tener los 4 puntos donde fw monitor captura el paquete: pre-inbound inspection (i), post-inbound inpection (I) que corresponde a mirar el paquete después de recibirse y pre-outbound inspection (o), post-outbound inspection (O) que mira el paquete justo antes de transmitirse por la red. Así un paquete que entre por una interfaz, esté autorizado a pasar con destino a otra máquina, imprime 4 líneas. También imprime en la salida la interfaz por la cual entra el paquete y la interfaz por la cual va a salir.

Las opciones del comando son:

  • -e expr Expresión en inspect de lo que queremos capturar
  • -o file para grabar la sesión de captura en formato pcap. Sin embargo, en esta captura no se guarda información sobre la cabecera de enlace (aunque por ejemplo el Ethereal puede leer sin problemas estos ficheros de capturas
  • -l len Longitud total del paquete a capturar
  • -m mask Mask puede ser iIoO, y viene determinando el punto de captura del paquete

Lo más complicado es ajustar las distintas expresiones de inspect para que funcione la captura. Normalmente, se hace un accept con los parámetros del filtro (y ojo con el ";" del final que hay que incluirlo). Por ejemplo para capturar todo el tráfico web (puerto 80) se utiliza una expresión del tipo:

-e "accept sport=80 or dport=80;"
Si queremos capturar todo el tráfico que vaya a una dirección IP
-e "accept src=192.168.1.1 or dst=192.168.1.1;"

Realmente el monitor carga una serie de macros (src, ip_d, dport,sport,etc) que nos permite gestionar de una manera eficiente los filtros (y las reglas si hay alguien lo suficientemente aburrido). DE esta manera nos evitamos estar poniendo offsets en las cabeceras.

Existen una serie de comandos relacinales como and o ,, or, not, = o is, != o is not, <,>,<= y >= que nos permite asociar expresiones y por supuesto agruparlas a través de paréntesis. Por ejemplo para capturar el tráfico que va a un host determinado al puerto 80

-e "accept (src=192.168.1.1 or dst=192.168.1.1) and (dport=80 or sport=80);"

Aunque para mi gusto la expresión de los filtros con el tcpdump es más cómoda (ver este tutorial sobre el tema que escribí hace tiempo - y que tengo ganas de actualizar -)

Technorati Tags: ,

No hay comentarios: