Hola Todos conocemos y amamos los productos para procesos de evaluación de vulnerabilidades como Nessus , Qualys , Max Patrol y todo tipo de otros OpenVAS . Una de las tareas principales que resuelven es proporcionar control sobre las vulnerabilidades versionadas.
Este es un proceso bastante simple de comparar las versiones de software instaladas con el rango "no contiene vulnerabilidades conocidas". Bueno, entonces los responsables de la seguridad de la información, junto con el desarrollo y los administradores, deciden qué riesgos se pueden tomar y qué se debe parchar hoy.
Existen muchas herramientas diferentes para resolver este problema, pero desde nuestro punto de vista, todas tienen un problema común: requieren una implementación problemática por separado y generan otra herramienta con una cuenta raíz en su infraestructura. Pero, después de todo, ¡para una acción tan simple como recopilar información sobre paquetes raíz instalados no es necesaria! Y generalmente en la infraestructura ya hay sistemas implementados con la capacidad de consolidar datos, colaboración y ejecución remota de comandos en servidores. Por lo tanto, decidimos crear una herramienta que permitiera un par de clics para implementar un sistema de monitoreo de vulnerabilidad de Linux en nuestro entorno con cambios mínimos en la producción.
¿Qué se implementa en la mayoría de los sistemas alimentarios? Por supuesto, monitoreo. Y muy a menudo es Zabbix . ¡Así que vamos a sujetarlo!
En una mano Zabbix
Todo es simple: un sistema de agente distribuido, paneles de control para visualización, un sistema de acceso multiusuario y realizar acciones de acuerdo con criterios específicos ya se han realizado sin nosotros. No necesitamos reinventar la rueda y hacerlo todo desde cero.
Zabbix tiene suficientes derechos para recibir información sobre paquetes, dónde colocarlos también. Queda combinarlos y enviarlos para su análisis a la API de Vulners . Y luego procesar el conocimiento adquirido sobre vulnerabilidades.
Pero comencemos con una breve introducción sobre lo que Zabbix puede hacer y lo que debemos hacer.
Los agentes Zabbix están instalados en el servidor y permiten:
- Obtenga una amplia gama de métricas del sistema operativo
- ejecutar scripts y programas y obtener el resultado de su ejecución;
- ejecutar cualquier comando en un proceso separado (fork), independiente de los procesos del agente Zabbix;
- trabajar con varios servidores Zabbix a la vez;
- trabajar detrás de un firewall, iniciando una conexión al servidor, o viceversa, esperando las conexiones entrantes.
El servidor Zabbix recibe las métricas de monitoreo como una entrada y las escribe en la base de datos y lleva a cabo un procesamiento adicional.
Analizando los datos obtenidos y basados en una lógica bastante flexible, puede realizar varias acciones:
- Enviar alertas en varios canales (correo, sms, mensajería instantánea, etc.);
- Conéctese a los servidores a través de SSH o IPMI y ejecute varios comandos en ellos;
- O ejecute varios comandos correctivos en servidores que usan conexiones de agente Zabbix con ellos;
La interfaz web está escrita en PHP y le permitirá mostrar las métricas recopiladas por Zabbix, gráficos, alertas activadas sobre problemas y comandos y acciones realizadas por el sistema de monitoreo.
La administración de Zabbix también se lleva a cabo a través de la interfaz web.
La API de Zabbix es una API basada en la web y viene como parte de la interfaz web. Utiliza el protocolo JSON-RPC.
- Le permite recibir, crear, configurar y eliminar cualquier objeto en el sistema de monitoreo.
- Usando la API, puede integrar fácilmente el sistema de monitoreo con varios sistemas externos.
Sin embargo, ¡Zabbix no sabe nada sobre vulnerabilidades! Pero Vulners sabe de ellos :)
Por otro lado de los Vulners
Intentamos integrarlos entre sí y eso es lo que surgió.
Control de amenazas Zabbix
Este es un complemento Zabbix de código abierto escrito en Python que:
- Muestra información sobre las vulnerabilidades encontradas en su infraestructura en la interfaz web de Zabbix.
- Muestra el nivel de amenaza de cada vulnerabilidad de acuerdo con el estándar CVSS.
- Y ofrece métodos fácilmente aplicables para eliminar las vulnerabilidades encontradas.
CVSS es un estándar abierto de la industria para evaluar la vulnerabilidad de la vulnerabilidad. De hecho, escala de 10 puntos.
El uso de esta técnica le permite traer vulnerabilidades encontradas en diferentes sistemas y con diferentes propiedades a un solo denominador, lo que simplifica la priorización de los problemas detectados.
Hablamos sobre este complemento en el
Zabbix Moscow Meetup . Para aquellos a quienes no les gusta leer, pero les gusta mirar, hay un informe en
video .
El resultado del complemento en Zabbix es el siguiente:

Este es un tablero en Zabbix. En el cual, de izquierda a derecha, se muestra la siguiente información:
- Distribución del puntaje CVSS por servidores. El gráfico circular muestra la relación: cuántos servidores tenemos con vulnerabilidades críticas, cuántas vulnerabilidades no críticas tienen o no vulnerabilidades conocidas.
- La puntuación mediana de CVSS de toda la infraestructura. Se muestra en forma de gráfico, que le permite observar la dinámica de su cambio.
- Lista de paquetes vulnerables con un índice del impacto de la vulnerabilidad en la infraestructura.
- Una lista completa de servidores vulnerables con un nivel de amenaza para cada uno de ellos.
- Lista de boletines de seguridad que se han "encontrado" en la infraestructura.
A continuación con más detalle sobre los más interesantes:
Información sobre servidores vulnerables:

El panel muestra una lista de todos los servidores con un nivel de vulnerabilidad superior al crítico. El nivel mínimo de criticidad aceptable, después del cual el servidor comienza a aparecer como vulnerable, se especifica en la configuración del complemento.
La siguiente información está disponible para cada servidor:
- En realidad, el nombre del servidor vulnerable.
- Puntuación máxima del servidor CVSS. Se muestra la puntuación más alta de todas las vulnerabilidades encontradas para este servidor.
- Un comando para eliminar todas las vulnerabilidades detectadas en este servidor. Una vez completado, obtenemos un servidor en el que no hay vulnerabilidades versionadas conocidas.
Los datos se presentan con clasificación CVSS, de máximo a mínimo. Esto le permite mantener los servidores que requieren la mayor atención, siempre en la parte superior de la lista, ante sus ojos.
El siguiente panel muestra los paquetes vulnerables:

Aquí para cada paquete vulnerable en nuestra infraestructura, tenemos un breve resumen:
- El nombre del paquete vulnerable.
- Versión vulnerable del paquete.
- El número de servidores en los que está instalada la versión vulnerable del paquete.
- Puntuación CVSS para esta versión del paquete.
- Índice del impacto de esta vulnerabilidad en la infraestructura.
- Una lista de todos los servidores en los que se detecta una versión vulnerable del paquete.
- Enlace al boletín de seguridad. Le permite leer y comprender cuán crítica es esta vulnerabilidad en nuestra situación.
- El equipo que repara la vulnerabilidad en este paquete.
Los datos se presentan ordenados por índice de impacto , de máximo a mínimo.
El índice de impacto es el número de servidores afectados multiplicado por la puntuación de vulnerabilidad CVSS. A menudo sucede que una vulnerabilidad con un puntaje no tan alto está mucho más extendida en la infraestructura y, por lo tanto, es potencialmente más peligrosa.
Elija estrategias de gestión de vulnerabilidades
Sin embargo, no puede simplemente tomar y actualizar todos los paquetes en todos los servidores a la última versión, lo que elimina las vulnerabilidades existentes.
En cualquier infraestructura que consta de más de varios servidores, existen muchas restricciones: la dependencia de un software de la versión de otro, los riesgos de una funcionalidad deteriorada, etc.
Por lo tanto, siempre hay una opción: qué paquetes podemos actualizar sin problemas. Qué paquetes requieren un plan de trabajo separado para la implementación de medidas compensatorias. Y por lo que podemos aceptar riesgos.
El enfoque propuesto en el complemento le permite elegir la estrategia para eliminar las vulnerabilidades que más le convengan:
- Una vulnerabilidad en toda la infraestructura: si una vulnerabilidad específica es crítica para usted, el complemento le proporciona información sobre dónde existe esta vulnerabilidad en su infraestructura y cómo se puede solucionar de inmediato en toda la infraestructura.
- Todas las vulnerabilidades en un servidor específico: si necesita tener un servidor completamente seguro, por ejemplo, ubicado en la DMZ o detrás del perímetro de la empresa, al usar el complemento obtendrá información sobre cómo eliminar todas las vulnerabilidades encontradas en él.
Arreglar vulnerabilidades encontradas
Pero no es suficiente saber qué vulnerabilidades tenemos y determinar cómo y cuáles se pueden solucionar. ¡También es necesario hacer esto!
Los sistemas como Puppet o Ansible se usan ampliamente para la gestión centralizada de la configuración y las actualizaciones de software. Puede usar el comando de reparación que corrige la vulnerabilidad y ejecutarlo de forma centralizada utilizando dichos sistemas.
Si su infraestructura no utiliza dichos sistemas, Zabbix Threat Control le permite eliminar vulnerabilidades directamente de la interfaz web de Zabbix.

Para esto, el complemento utiliza la funcionalidad estándar de Zabbix: confirmación de eventos y ejecución de comandos remotos:
- Tan pronto como el problema sea confirmado a través de la interfaz web por un usuario autorizado;
- Se inicia un comando remoto que se ejecuta en el servidor de destino, o en la lista de servidores, un comando de reparación que corrige la vulnerabilidad.
Como funciona

- El servidor Zabbix recibe información sobre los paquetes y el sistema operativo de todos los servidores en la infraestructura a través de agentes zabbix.
- El complemento (que usa la API de Zabbix) recibe un informe del sistema operativo previamente compilado por el servidor de Zabbix. El complemento no recibe nada directamente de los servidores. Y en esta etapa no requiere contacto directo con ellos.
- Después de procesar la información recibida de Zabbix, el complemento se la pasa a Vulners. De donde recibe una lista de vulnerabilidades encontradas, su criticidad y una forma de eliminarlas.
- El complemento procesa los datos recibidos, los agrega para generar estadísticas y genera paquetes de datos para su transmisión a Zabbix.
- El complemento empuja los datos de Zabbix en el formato del sistema de monitoreo requerido. Lo hace usando la utilidad zabbix-sender. Después de eso, ya tiene que monitorear todo sobre las vulnerabilidades encontradas, que se muestran en el panel que se mostró anteriormente.
- Después de confirmar el problema, se ejecuta un comando remoto, que pasa al complemento:
- El nombre de la persona que lo inició.
- Fix Vulnerability Fix Team
- Lista de servidores
- Habiendo recibido todo este Control de amenazas Zabbix:
- Comprueba que el comando de corrección sea iniciado por quienes lo necesitan. Del que no es necesario, no acepta el comando :)
- Ejecuta el comando que se le transfiere en la cantidad necesaria de servidores.
De manera predeterminada, el complemento envía un comando de reparación a servidores vulnerables utilizando la utilidad zabbix-get, accediendo al agente Zabbix en el servidor de destino con el parámetro nowait
. Este método de conexión permite que el proceso de actualización de paquetes se ejecute en segundo plano sin estar vinculado a los procesos del agente zabbix. También es posible ejecutar el comando en el servidor de destino a través de una simple conexión SSH. La forma de ejecutar los comandos de arreglo se selecciona como una opción en el archivo de configuración del complemento.
Y como resultado del trabajo: la ausencia de servidores vulnerables, su buen sueño y buen humor :)
Instalación
Hablamos sobre qué es Zabbix Threat Control , por qué es necesario y cómo funciona. ¡Ahora le diremos cómo instalarlo y configurarlo!
Dependencias
Para funcionar, el complemento no requiere nada sobrenatural. Es necesario que en el servidor Zabbix en el que establecemos el plan, lo siguiente sea:
- zabbix v3.4 para usar paneles personalizados (solo aparecieron en esta versión).
- Se necesita zabbix-sender para enviar datos de vulnerabilidad al sistema de monitoreo.
- zabbix-get para enviar comandos de reparación que corrigen vulnerabilidades a los servidores.
- Python v3 con módulos: pyzabbix, jpath, solicitudes para ejecutar los scripts principales del complemento.
En todos los servidores para los que se requiere el análisis de vulnerabilidades, solo:
- zabbix-agent para recopilar datos y ejecutar scripts.
- Python v2 para ejecutar el script que recopila el informe del sistema operativo.
Instalar el complemento desde paquetes
Para comenzar, conecte el repositorio con paquetes:
Distribuciones RPM
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
Distribuciones DEB
wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb
Después de eso, en el servidor Zabbix instalamos el paquete principal que proporciona toda la lógica del complemento y el paquete que informa sobre el sistema operativo:
Distribuciones RPM
yum install zabbix-threat-control-main zabbix-threat-control-host
Distribuciones DEB
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
Y en todos los demás servidores que requieren análisis de vulnerabilidades, instalamos un paquete que genera informes del sistema operativo:
Distribuciones RPM
yum install zabbix-threat-control-host
Distribuciones DEB
apt-get update && apt-get install zabbix-threat-control-host
Instalación desde la fuente
Si prefiere la instalación desde la fuente, esto también es muy simple:
En el servidor Zabbix, instalamos los scripts principales que proporcionan toda la lógica del complemento y el script que informa sobre el sistema operativo:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
En todos los demás servidores que requieren análisis de vulnerabilidades, solo instalamos un script que informa sobre el sistema operativo:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Personalización
Después de la instalación, debe configurar el complemento y preparar un sistema de monitoreo para su funcionamiento. La siguiente es una descripción paso a paso de todas las acciones necesarias.
Configurar servidores que requieren escaneo
Debe habilitar el agente Zabbix para ejecutar comandos remotos. Para hacer esto, en todos los servidores para los que se requiere escaneo, cambie los parámetros en el archivo de configuración de zabbix-agent como se muestra a continuación:
EnableRemoteCommands=1 LogRemoteCommands=1
El archivo de configuración del agente zabbix generalmente se encuentra aquí: /etc/zabbix/zabbix_agentd.conf
Si desea utilizar la funcionalidad para eliminar las vulnerabilidades encontradas utilizando Zabbix Threat Control , debe permitir que el usuario de zabbix actualice los paquetes (pero no los instale ni los desinstale).
Para hacer esto, agregue la siguiente línea al
/etc/sudoers
:
Para distribuciones RPM , la línea se ve así:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Para distribuciones DEB un poco diferente:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Conéctate a los Vulners
Para usar la API de Vulners, necesita una clave de API. Para conseguirlo:
- Regístrate en vulners.com
- En su cuenta, vaya a la pestaña KEYS API
- Seleccione "Escanear" en el área Alcance y presione "GENERAR NUEVA CLAVE".
Obtendrá una clave de API que se ve así: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK

Ahora debe agregar la clave de la API de Vulners al archivo de configuración del complemento /opt/monitoring/zabbix-threat-control/ztc_config.py
Un ejemplo:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Conectar a Zabbix
Para que el complemento pueda conectarse a Zabbix, debe especificar los siguientes datos en el archivo de configuración: /opt/monitoring/zabbix-threat-control/ztc_config.py
- Dirección de la interfaz web de Zabbix para trabajar con Zabbix-API;
- nombre de usuario y contraseña con los que nos conectaremos a la API de Zabbix.
Nombre de dominio del servidor Zabbix y puerto para enviar datos utilizando la utilidad zabbix-sender.
Un ejemplo:
zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051'
Preparando Zabbix
Debe crear objetos en Zabbix que proporcionen el complemento. Para hacer esto, ejecute el script /opt/monitoring/zabbix-threat-control/ztc_create.py
. El script verificará que el complemento esté configurado correctamente y, utilizando la API, creará en Zabbix:
- Grupo de hosts al que se agregan los hosts que muestran vulnerabilidades.
- La plantilla mediante la cual se recopila el informe del sistema operativo de todos los servidores.
- Hosts para mostrar vulnerabilidades por paquetes, servidores, boletines y estadísticas generales.
- Una acción para ejecutar comandos remotos de reparación de vulnerabilidades.
- Panel de control para una fácil visualización de toda esta información.

Después de crear todos los objetos en Zabbix, el script mostrará:
- Enlace al panel creado en Zabbix, en el que se mostrarán las vulnerabilidades.
- El momento en que se iniciará el escaneo de infraestructura en busca de vulnerabilidades.
Después de que se hayan creado todos los objetos necesarios en Zabbix, debe ir a la interfaz web de Zabbix y vincular la plantilla "Informe de sistema operativo Vulners" que acaba de crear el script con todos los servidores que requieren escaneo en busca de vulnerabilidades.

Después de eso, queda esperar a que el complemento se inicie a la hora especificada durante la instalación.
Escanear!
El script de procesamiento de datos principal ( ztc.py
) se ztc.py
automáticamente, una vez al día, a través del "Elemento de servicio ..." en el host "Vulners - Estadísticas" en el momento especificado por el script.
Puede cambiar la hora de inicio del complemento a cualquier conveniente cambiando el "Intervalo de programación" en este elemento de datos. En este caso, también es necesario ajustar el tiempo de recopilación de estadísticas en los tres elementos de datos de la plantilla "Informe Vulners OS": las métricas en la plantilla deberían funcionar 10 ... 15 minutos antes que la métrica principal "Elemento de servicio ..." en el host "Vulners - Estadísticas".
El tiempo durante el cual se procesarán todos los datos de vulnerabilidad depende de la cantidad de servidores en la infraestructura y la cantidad de paquetes instalados en ellos. Se gastan aproximadamente 30 minutos en procesar mil servidores.
Planes
Esta es solo la primera versión del complemento Zabbix Threat Control. Y seguimos desarrollándolo.
Los planes:
- Agregue información en los paneles que se encuentran en la infraestructura de CVE.
- Negarse a instalar cualquier secuencia de comandos en los agentes y recopilar toda la información necesaria sobre el sistema operativo y los paquetes utilizando las claves de elementos de datos integradas en el agente Zabbix.
Y como es de código abierto, ¡únete a nosotros! Solicitudes de extracción bienvenidas :)