Zeek - Sistema de monitorización (1)

En esta serie de artículos se procederá al estudio y análisis de la herramienta de monitorización actualmente conocida como Zeek [1].

Zeek 01

Estos artículos son parte de un trabajo que realicé junto con Adrián Bazán durante el Máster de Ciberseguridad.

Zeek es un sistema de detección de intrusos (IDS) basado tanto en anomalías como en firmas. A través de la monitorización y captura del tráfico genera una serie de eventos, como pueden ser inicios de sesión, conexión por un determinado puerto… [2]

Zeek es un software open source. Su desarrollo lo comenzó Vern Paxson en los años 90s para conocer lo que ocurría en las redes de su laboratorio y universidad. El proyecto comenzó con el nombre de Bro, pero a finales de 2018, para celebrar su desarrollo y expansión, decidieron renombrarlo a Zeek.

Zeek se encarga de observar de forma silenciosa y discreta el tráfico de la red. Zeek interpreta lo que ve y crea logs, archivos o salidas personalizadas que puedan ser analizadas de forma manual o a través de otras herramientas como un SIEM.

Las principales características de Zeek son [3]:

  • Adaptabilidad: Políticas de monitorización específicas a través de un lenguaje de script propio.
  • Efectividad: Redes de alto rendimiento.
  • Flexibilidad: No está restringido a un enfoque de detección particular.
  • Forense: Registra todo lo que ve y proporciona archivos de alto nivel.
  • Análisis en profundidad: Cuenta con analizadores para muchos protocolos por defecto.
  • Interfaces abiertas: Puede intercambiar información en tiempo real con otras aplicaciones.
  • Open Source: Licencia BSD.

Escenario

En un terreno ideal el monitoreo se haría poniendo el equipo con Zeek conectado a un puerto de un switch con “Port Mirroring” activo, de esta forma la conexión de la red seguiría tal cual y todos los paquetes se replicarían hacia ese puerto donde está conectada la herramienta de monitoreo, en este caso Zeek, para poder analizar el tráfico de la red.

En nuestro caso queremos realizar una prueba de concepto con los recursos que tenemos, por lo que el escenario preparado para llevar a cabo el monitoreo y uso de la herramienta consiste en configurar un equipo con Zeek como punto de acceso intermedio entre el router y los equipos de la red local que quieren conectarse a Internet. Así pues, todo el tráfico pasará por Zeek y se podrá realizar su monitoreo.

Zeek se está ejecutando sobre el sistema operativo Kali Linux 2020.1. A través del uso de la herramienta create_ap [4] se ha establecido un punto de acceso que será donde el resto de equipos se conectarán:

Zeek 02

Nos conectaremos a la red a través de RedMonitorizada. La red local para este escenario generado estará compuesta por un ordenador y un smartphone de trabajadores. También habrá un servidor con múltiples servicios, malas configuraciones y muy desactualizado, lo que implica que sea vulnerable. Y, por último, un equipo desconocido y sospechoso que hará de potencial atacante, en este caso será un smartphone que se ha conseguido conectar a la red.

A continuación, podemos ver el diagrama de red del sistema anteriormente expuesto.

Zeek 03

Despliegue

La herramienta puede ser instalada en Mac o Linux. En nuestro caso hemos realizado el despliegue sobre máquinas Linux, concretamente en un sistema Linux basado en Debian.

En primer lugar, instalamos las dependencias necesarias [5] con el siguiente comando:

sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev

Una vez instalados todos los requisitos necesarios pasamos a descargar el código fuente de la herramienta usando Git:

git clone –recursive https://github.com/zeek/zeek

Posteriormente accedemos al repositorio descargado y ejecutamos los siguientes tres comandos para proceder con su instalación:

./configure
make
make install

Después de esto, si todo ha salido correctamente, deberíamos tener Zeek instalado en la ruta /usr/local/zeek. Lo siguiente, para poder utilizar el comando desde cualquier ruta, sería incluir el bin al PATH, para ello se puede utilizar, por ejemplo, el siguiente comando:

export PATH=/usr/local/zeek/bin:$PATH

Para probar su funcionamiento podemos usarlo sobre una captura de tráfico de prueba como es attack-trace.pcap. Para analizar una captura podemos usarlo de la siguiente forma:

Zeek 04

Podemos ver como Zeek nos ha dividido la captura del tráfico en diferentes registros, pero esta funcionalidad la estudiaremos más detenidamente en capítulos posteriores.

Zeek también cuenta con una shell interactiva para su manejo llamada ZeekControl. Para la instalación de esta shell interactiva hay que dirigirse a la carpeta /usr/local/zeek/bin y ejecutar el comando:

python zeekctl install

Después de esto ya podremos utilizar el comando ‘zeekctl’ para acceder a ZeekControl. En el primer acceso es recomendable ejecutar el comando ‘deploy’ para la generación de ficheros de configuración:

Zeek 05

En cuanto a los ficheros de configuración, los tenemos en la carpeta /etc/ de Zeek que por defecto debe estar situada en /usr/local/zeek/etc/. Ahí dentro podemos ver tres ficheros de configuración, que son los siguientes:

Zeek 06

En el archivo networks.cfg tendremos que indicar las diferentes redes que se van a analizar desde Zeek. En nuestro caso se hará un monitoreo sobre una única red que hemos definido en el archivo:

Zeek 07

En el archivo de configuración node.cfg se indica la interfaz para monitorear. En nuestro caso utilizaremos la interfaz ap0 creada con la herramienta create_ap.

Zeek 08

Y por último tenemos el archivo zeekctl.cfg donde se sitúan todas las variables de configuración de Zeek. Aquí podemos destacar las variables MailTo, que indicará a donde se enviarán los emails de notificación de Zeek, o la variable LogRotationInterval, que indica cada cuanto se irán comprimiendo y almacenando los logs recogidos, por defecto está a 3600 segundos, es decir, una hora. Desde aquí también se pueden modificar las direcciones donde se irán almacenando los logs o activar/desactivar determinados logs que genera Zeek.

Zeek 09

Pulsa aquí para continuar con la segunda parte del artículo.

Referencias

[1] The Zeek Network Security Monitor

[2] Mejores IDS Opensource para Detección de Intrusiones

[3] Despliegue de la herramienta “Zeek” y su posterior explotación para el análisis de actividades sospechosas en la red

[4] oblique/create_ap: This script creates a NATed or Bridged WiFi Access Point.

[5] Installing — Zeek User Manual v3.1.3

Written on February 1, 2021
Herramienta