
Soporte de Zeek para hash de flujos Community ID.
Este paquete de Zeek proporciona soporte para el hash de flujo Community ID, una forma estandarizada de etiquetar flujos de tráfico en monitores de red. Cuando se carga, el paquete añade un campo de cadena community_id al conn.log.
Nota
Zeek 6 y versiones posteriores incluyen soporte para Community ID. Ya no necesitas este paquete si usas esas versiones de Zeek. Consulta la documentación para más detalles.
Este paquete implementa un BiF para aplicar la lógica de hash y, por tanto, necesita compilación binaria, así que también es un plugin de Zeek. Aquí tienes un ejemplo de un conn.log resultante:
#separator \x09
#set_separator ,
#empty_field (empty)
#unset_field -
#path conn
#open 2018-01-31-13-06-56
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents community_id
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] string
1071580904.891921 CPcWB54kqKkvkdNEXe 128.232.110.120 34855 66.35.250.204 80 tcp - 0.311104 496 1731 SF - - 2227 ShADadfF 6 816 6 2051 - 1:LQU9qZlK+B5F3KDmev6m5PMibrg=
#close 2018-01-31-13-06-56
El paquete soporta Community ID en el notice.log de Zeek para avisos con contexto de conexión. Si quieres usar esta funcionalidad, añade la siguiente línea en tu local.zeek o en una configuración local similar:
@load zeek-community-id/notice
Esta línea no tiene efecto si el paquete Community ID no está cargado. Este enfoque de script adicional garantiza que los usuarios que no quieran el ID en su notice.log no vean ese registro saturado con una columna adicional que siempre está sin usar.
La especificación de Community ID prevé actualmente soporte para una serie de constelaciones de protocolos para las que Zeek no realiza un seguimiento del estado a nivel de flujo, porque sus analizadores no sabrían qué hacer con el tráfico. Para tales flujos, Zeek nunca dispara los eventos relacionados con la conexión que usa el paquete, así que tampoco habrá salida en conn.log. (Si hubiera protocolos que Zeek rastrea a nivel de flujo pero que el plugin no soporta, el ID reportado estaría vacío). Actualmente soportamos TCP y UDP sobre IPv4 o IPv6, así como ICMPv4 e ICMPv6. No soportamos otros protocolos a nivel de transporte (como SCTP), ni flujos genéricos de pares de direcciones IP para protocolos de capa de transporte no soportados.
El nombre del paquete es zeek-community-id; el nombre del plugin es Corelight::CommunityID. Puedes ver las opciones de configuración del paquete en el script de Zeek correspondiente.
El paquete Community ID funciona con cualquier versión de Zeek desde la 2.6.4. Dado que el código base de Zeek ha sufrido cambios sustanciales desde entonces, el paquete ofrece ramas de compatibilidad que soportan rangos específicos de versiones de Zeek, logrando un equilibrio entre código legible y facilidad de instalación y gestión de ramas.
En las ramas zeek/x.y y master, las etiquetas de git identifican las versiones de Community ID. Por ejemplo, 3.1.0 es la primera versión en la rama zeek/3.1 y funciona con cualquier Zeek de la serie 3.1. La siguiente versión de Community ID para la serie Zeek 3.1 se llamará 3.1.1 y también vivirá en esta rama, seguida de 3.1.2, etc. (Por lo tanto, no es versionado semántico).
Cada rama también declara una ventana de compatibilidad con versiones de Zeek en zkg.meta, por lo que no se instalará si se combina con una versión de Zeek incompatible. Por ejemplo, la rama master actualmente requiere al menos Zeek 3.2.0, sin límite superior.
Aquí hay un resumen de cómo se alinean las versiones de Zeek, las etiquetas de git y las ramas de git:
| Versión de Zeek | Etiqueta Git | Rama Git |
|---|---|---|
| 2.6.4 - 3.0.x | 3.0.y | zeek/3.0 |
| 3.1.x | 3.1.y | zeek/3.1 |
| 3.2.x - master | 3.2.y | master |
El paquete incluye btests que verifican la carga del plugin y procesan los pcaps de prueba incluidos a través de Zeek para comprobar la salida de consola de Zeek de referencia. Puedes ejecutarlos escribiendo btest -c btest.cfg en el directorio de pruebas.
Para preguntas y comentarios, ponte en contacto a través de la lista de correo de Zeek o el Slack de Zeek. Las incidencias y PRs de Github son bienvenidos.