Hallo! Wir alle kennen und lieben Produkte für Schwachstellenbewertungsprozesse wie Nessus , Qualys , Max Patrol und alle möglichen anderen OpenVAS . Eine der Hauptaufgaben, die sie lösen, ist die Kontrolle über versionierte Schwachstellen.
Dies ist ein ziemlich einfacher Vorgang zum Vergleichen installierter Softwareversionen mit dem Bereich "enthält keine bekannten Schwachstellen". Nun, dann entscheiden die Verantwortlichen für Informationssicherheit zusammen mit der Entwicklung und den Administratoren, welche Risiken eingegangen werden können und was heute gepatcht werden muss.
Es gibt viele verschiedene Tools zur Lösung dieses Problems, aber aus unserer Sicht haben alle ein gemeinsames Problem: Sie erfordern eine separate problematische Bereitstellung und erzeugen ein anderes Tool mit einem Root-Konto in Ihrer Infrastruktur. Aber für eine so einfache Aktion wie das Sammeln von Informationen über installierte Root-Pakete ist es schließlich nicht erforderlich! In der Regel sind in der Infrastruktur bereits Systeme implementiert, mit denen Daten, die Zusammenarbeit und die Remote-Ausführung von Befehlen auf Servern konsolidiert werden können. Aus diesem Grund haben wir uns entschlossen, ein Tool zu erstellen, mit dem mit wenigen Klicks ein Linux-System zur Überwachung von Sicherheitslücken in unserer Umgebung mit minimalen Änderungen an der Produktion bereitgestellt werden kann.
Was wird in den meisten Lebensmittelsystemen eingesetzt? Natürlich Überwachung. Und ziemlich oft ist es Zabbix . Also lasst uns loslegen und es befestigen!
In einer Hand Zabbix
Alles ist einfach: Ein verteiltes Agentensystem, Dashboards zur Visualisierung, ein Mehrbenutzerzugriffssystem und das Ausführen von Aktionen nach festgelegten Kriterien wurden bereits ohne uns durchgeführt. Wir müssen das Rad nicht neu erfinden und alles von Grund auf neu machen.
Zabbix hat genügend Rechte, um Informationen über Pakete zu erhalten, wo sie auch abgelegt werden können. Es bleibt, sie zu kombinieren und zur Analyse an die Vulners-API zu senden . Und dann das erworbene Wissen über Schwachstellen verarbeiten.
Beginnen wir jedoch mit einer kurzen Einführung darüber, was Zabbix kann und was wir tun müssen.
Zabbix-Agenten sind auf dem Server installiert und ermöglichen:
- Holen Sie sich eine breite Palette von Betriebssystemmetriken
- Führen Sie Skripte und Programme aus und erhalten Sie das Ergebnis ihrer Ausführung.
- Führen Sie alle Befehle in einem separaten Prozess (Fork) aus, unabhängig von den Prozessen des Zabbix-Agenten.
- mit mehreren Zabbix-Servern gleichzeitig arbeiten;
- Arbeiten Sie hinter einer Firewall, stellen Sie eine Verbindung zum Server her oder umgekehrt, und warten Sie auf eingehende Verbindungen.
Der Zabbix-Server empfängt Überwachungsmetriken als Eingabe, schreibt sie in die Datenbank und führt die weitere Verarbeitung durch.
Durch die Analyse der erhaltenen Daten und basierend auf einer ziemlich flexiblen Logik kann er verschiedene Aktionen ausführen:
- Senden Sie Benachrichtigungen auf verschiedenen Kanälen (Mail, SMS, Instant Messenger usw.).
- Stellen Sie über SSH oder IPMI eine Verbindung zu Servern her und führen Sie verschiedene Befehle auf diesen aus.
- Oder führen Sie verschiedene Korrekturbefehle auf Servern aus, indem Sie Zabbix-Agentenverbindungen zu ihnen herstellen.
Die Weboberfläche ist in PHP geschrieben und ermöglicht es Ihnen, von Zabbix gesammelte Metriken, Diagramme, ausgelöste Warnungen zu Problemen sowie vom Überwachungssystem ausgeführte Befehle und Aktionen anzuzeigen.
Die Zabbix-Administration erfolgt ebenfalls über die Weboberfläche.
Die Zabbix-API ist eine webbasierte API und Teil der Weboberfläche. Es verwendet das JSON-RPC-Protokoll.
- Ermöglicht das Empfangen, Erstellen, Konfigurieren und Löschen von Objekten im Überwachungssystem.
- Mit der API können Sie das Überwachungssystem problemlos in verschiedene externe Systeme integrieren.
Zabbix weiß jedoch nichts über Schwachstellen! Aber Vulners kennt sie :)
In der anderen Hand der Vulners
- Vulnerability Data Aggregator aus über 115 Quellen
- Praktische API für verschiedene Scanmethoden
- Stellt Daten in einer normalisierten, maschinenlesbaren Form bereit
- Sehr schnell
- Ermöglicht die Korrelation von Daten aus verschiedenen Quellen
Wir haben versucht, sie miteinander zu integrieren, und genau das ist daraus geworden.
Zabbix-Bedrohungskontrolle
Dies ist ein Open Source Zabbix Plugin, das in Python geschrieben wurde und das:
- Zeigt Informationen zu Schwachstellen in Ihrer Infrastruktur in der Zabbix-Weboberfläche an.
- Zeigt die Bedrohungsstufe jeder Sicherheitsanfälligkeit gemäß dem CVSS-Standard an.
- Und es bietet leicht anwendbare Methoden, um die gefundenen Schwachstellen zu beseitigen.
CVSS ist ein offener Industriestandard zur Bewertung der Schwachstellenkritikalität. In der Tat - 10-Punkte-Skala.
Mit dieser Technik können Sie Schwachstellen in verschiedenen Systemen und mit unterschiedlichen Eigenschaften auf einen einzigen Nenner bringen, was die Priorisierung erkannter Probleme vereinfacht.
Wir haben beim
Zabbix Moscow Meetup über dieses Plugin gesprochen. Für diejenigen, die nicht gerne lesen, sondern gerne zuschauen - gibt es einen
Videobericht .
Das Ergebnis des Plugins in Zabbix ist wie folgt:

Dies ist ein Dashboard in Zabbix. Darauf werden von links nach rechts folgende Informationen angezeigt:
- Verteilung der CVSS-Punktzahl nach Servern. Das Kreisdiagramm zeigt die Beziehung - wie viele Server wir mit kritischen Schwachstellen haben, wie viele unkritische Schwachstellen bekannte Schwachstellen haben oder überhaupt nicht.
- Der mittlere CVSS-Wert der gesamten Infrastruktur. Es wird in Form eines Diagramms angezeigt, mit dem Sie die Dynamik seiner Änderung beobachten können.
- Liste der anfälligen Pakete mit einem Index der Auswirkungen der Sicherheitsanfälligkeit auf die Infrastruktur.
- Eine vollständige Liste der anfälligen Server mit einer Bedrohungsstufe für jeden von ihnen.
- Liste der Sicherheitsbulletins, die in der Infrastruktur „gefunden“ wurden.
Nachfolgend ausführlicher über die interessantesten:
Informationen zu anfälligen Servern:

Das Bedienfeld zeigt eine Liste aller Server mit einer Sicherheitslücke über kritisch an. Das akzeptable Mindestmaß an Kritikalität, nach dem der Server als anfällig erscheint, wird in den Plugin-Einstellungen angegeben.
Die folgenden Informationen sind für jeden Server verfügbar:
- Eigentlich der Name des anfälligen Servers.
- Maximale CVSS-Server-Punktzahl. Die höchste Punktzahl aller für diesen Server gefundenen Schwachstellen wird angezeigt.
- Ein Befehl zum Entfernen aller erkannten Schwachstellen auf diesem Server. Nach Abschluss dieses Vorgangs erhalten wir einen Server, auf dem keine versionierten Schwachstellen bekannt sind.
Die Daten werden mit CVSS-Sortierung von maximal bis minimal dargestellt. Auf diese Weise können Sie die Server, die die meiste Aufmerksamkeit erfordern, immer ganz oben auf der Liste halten.
Das folgende Fenster zeigt die anfälligen Pakete:

Hier haben wir für jedes anfällige Paket in unserer Infrastruktur eine kurze Zusammenfassung:
- Der Name des anfälligen Pakets.
- Sicherheitsanfällige Version des Pakets.
- Die Anzahl der Server, auf denen die anfällige Version des Pakets installiert ist.
- CVSS-Punktzahl für diese Paketversion.
- Index der Auswirkungen dieser Sicherheitsanfälligkeit auf die Infrastruktur.
- Eine Liste aller Server, auf denen eine anfällige Version des Pakets erkannt wird.
- Link zum Security Bulletin. Ermöglicht es Ihnen zu lesen und zu verstehen, wie kritisch diese Sicherheitsanfälligkeit in unserer Situation ist.
- Das Team behebt die Sicherheitsanfälligkeit in diesem Paket.
Die Daten werden nach Wirkungsindex sortiert dargestellt, von maximal bis minimal.
Der Auswirkungsindex ist die Anzahl der betroffenen Server multipliziert mit dem CVSS-Schwachstellenwert. Es kommt häufig vor, dass eine Sicherheitsanfälligkeit mit einer nicht so hohen Punktzahl in der Infrastruktur viel weiter verbreitet und daher möglicherweise gefährlicher ist.
Wählen Sie Vulnerability Management-Strategien
Sie können jedoch nicht einfach alle Pakete auf allen Servern auf die neueste Version aktualisieren, wodurch vorhandene Schwachstellen beseitigt werden.
In jeder Infrastruktur, die aus mehr als mehreren Servern besteht, gibt es viele Einschränkungen: die Abhängigkeit einer Software von der Version einer anderen, das Risiko einer Funktionsbeeinträchtigung usw.
Daher haben Sie immer die Wahl, welche Pakete wir problemlos aktualisieren können. Welche Pakete erfordern einen separaten Arbeitsplan für die Umsetzung von Ausgleichsmaßnahmen. Und durch was wir Risiken eingehen können.
Mit dem im Plugin vorgeschlagenen Ansatz können Sie die Strategie zur Beseitigung von Schwachstellen auswählen, die zu Ihnen passt:
- Eine Sicherheitsanfälligkeit in der gesamten Infrastruktur: Wenn eine bestimmte Sicherheitsanfälligkeit für Sie von entscheidender Bedeutung ist, erhalten Sie über das Plugin Informationen darüber, wo diese Sicherheitsanfälligkeit in Ihrer Infrastruktur vorhanden ist und wie sie sofort in der gesamten Infrastruktur behoben werden kann.
- Alle Schwachstellen auf einem bestimmten Server: Wenn Sie beispielsweise einen vollständig sicheren Server in der DMZ oder hinter dem Unternehmensrand benötigen, erhalten Sie mithilfe des Plug-Ins Informationen darüber, wie Sie alle darauf gefundenen Schwachstellen beseitigen können.
Behobene Schwachstellen behoben
Es reicht jedoch nicht aus, zu wissen, welche Schwachstellen wir haben und wie und welche behoben werden können. Dies ist auch notwendig!
Systeme wie Puppet oder Ansible werden häufig für das zentrale Konfigurationsmanagement und Software-Updates verwendet. Sie können den Befehl fix verwenden, der die Sicherheitsanfälligkeit behebt, und sie mithilfe solcher Systeme zentral ausführen.
Wenn Ihre Infrastruktur solche Systeme nicht verwendet, können Sie mit Zabbix Threat Control Schwachstellen direkt über die Zabbix-Weboberfläche beseitigen.

Hierzu verwendet das Plugin die Standard-Zabbix-Funktionalität: Bestätigung von Ereignissen und Ausführung von Remote-Befehlen:
- Sobald das Problem von einem autorisierten Benutzer über die Weboberfläche bestätigt wurde;
- Es wird ein Remote-Befehl gestartet, der auf dem Zielserver oder einer Liste von Servern ausgeführt wird. Ein Fix-Befehl, der die Sicherheitsanfälligkeit behebt.
Wie funktioniert es?

- Der Zabbix-Server erhält über Zabbix-Agenten Informationen zu Paketen und zum Betriebssystem aller Server in der Infrastruktur.
- Das Plugin (unter Verwendung der Zabbix-API) empfängt einen Betriebssystembericht, der zuvor vom Zabbix-Server erstellt wurde. Das Plugin empfängt nichts direkt von den Servern. Und zu diesem Zeitpunkt ist kein direkter Kontakt mit ihnen erforderlich.
- Nachdem die von Zabbix erhaltenen Informationen verarbeitet wurden, gibt das Plugin sie an Vulners weiter. Daraus erhält er eine Liste der gefundenen Schwachstellen, deren Kritikalität und einen Weg, sie zu beseitigen.
- Das Plugin verarbeitet die empfangenen Daten, aggregiert sie zur Erstellung von Statistiken und generiert Datenpakete zur Übertragung an Zabbix.
- Das Plugin überträgt Zabbix-Daten im erforderlichen Überwachungssystemformat. Er tut dies mit dem Dienstprogramm zabbix-sender. Danach haben Sie bereits alles über die gefundenen Schwachstellen überwacht, die auf dem zuvor gezeigten Dashboard angezeigt werden.
- Nach Bestätigung des Problems wird ein Remote-Befehl ausgeführt, der an das Plugin übergeben wird:
- Der Name der Person, die es initiiert hat
- Fix Vulnerability Fix Team
- Serverliste
- Nachdem Sie all diese Zabbix Threat Control erhalten haben:
- Überprüft, ob der Korrekturbefehl von denjenigen initiiert wird, die ihn benötigen. Von dem, der nicht gebraucht wird - er akzeptiert den Befehl nicht :)
- Führt den an ihn übertragenen Befehl auf der erforderlichen Anzahl von Servern aus.
Standardmäßig sendet das Plugin mit dem Dienstprogramm zabbix-get einen Fix-Befehl an anfällige Server und greift mit dem Parameter nowait
auf den Zabbix-Agenten auf dem Zielserver zu. Diese Verbindungsmethode ermöglicht die Aktualisierung von Paketen im Hintergrund, ohne an die Prozesse des zabbix-Agenten gebunden zu sein. Es ist auch möglich, den Befehl über eine einfache SSH-Verbindung auf dem Zielserver auszuführen. Die Art und Weise, wie Fixbefehle ausgeführt werden, ist in der Konfigurationsdatei des Plugins als Option ausgewählt.
Und als Ergebnis der Arbeit - das Fehlen anfälliger Server, Ihr guter Schlaf und Ihre gute Laune :)
Installation
Wir haben darüber gesprochen, was Zabbix Threat Control ist , warum es benötigt wird und wie es funktioniert. Jetzt erfahren Sie, wie Sie es installieren und konfigurieren!
Abhängigkeiten
Um zu funktionieren, benötigt das Plugin nichts Übernatürliches. Auf dem Zabbix-Server, auf dem wir den Plan festlegen, muss Folgendes sein:
- zabbix v3.4 für die Verwendung von benutzerdefinierten Dashboards (sie wurden nur in dieser Version angezeigt ).
- zabbix-sender wird benötigt, um Schwachstellendaten an das Überwachungssystem zu senden.
- zabbix-get sendet Fix-Befehle, die Schwachstellen an Server beheben.
- Python v3 mit Modulen: pyzabbix, jpath, Anforderungen zum Ausführen der Haupt-Plugin-Skripte.
Auf allen Servern, für die nur nach Schwachstellen gesucht werden muss:
- zabbix-agent zum sammeln von daten und zum ausführen von skripten .
- Python v2 zum Ausführen des Skripts zum Sammeln des Betriebssystemberichts.
Installieren des Plugins aus Paketen
Verbinden Sie das Repository zunächst mit Paketen:
Drehzahlverteilungen
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
DEB- Verteilungen
wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb
Danach installieren wir auf dem Zabbix-Server das Hauptpaket, das die gesamte Logik des Plug-Ins und des Pakets enthält, das über das Betriebssystem berichtet:
Drehzahlverteilungen
yum install zabbix-threat-control-main zabbix-threat-control-host
DEB- Verteilungen
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
Auf allen anderen Servern, auf denen nach Sicherheitslücken gesucht werden muss, installieren wir ein Paket, das Betriebssystemberichte generiert:
Drehzahlverteilungen
yum install zabbix-threat-control-host
DEB- Verteilungen
apt-get update && apt-get install zabbix-threat-control-host
Installation von der Quelle
Wenn Sie die Installation von der Quelle bevorzugen, ist dies auch sehr einfach:
Auf dem Zabbix-Server installieren wir die Hauptskripte, die die gesamte Logik des Plug-Ins und des Skripts bereitstellen, das über das Betriebssystem berichtet:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Auf allen anderen Servern, auf denen nach Sicherheitslücken gesucht werden muss, installieren wir nur ein Skript, das über das Betriebssystem berichtet:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Anpassung
Nach der Installation müssen Sie das Plugin konfigurieren und ein Überwachungssystem für den Betrieb vorbereiten. Im Folgenden werden alle erforderlichen Aktionen Schritt für Schritt beschrieben.
Konfigurieren von Servern, die gescannt werden müssen
Sie müssen den Zabbix-Agenten aktivieren, um Remote-Befehle ausführen zu können. Ändern Sie dazu auf allen Servern, für die ein Scan erforderlich ist, die Parameter in der Konfigurationsdatei des zabbix-agent wie folgt:
EnableRemoteCommands=1 LogRemoteCommands=1
Die Konfigurationsdatei des zabbix-Agenten befindet sich normalerweise hier: /etc/zabbix/zabbix_agentd.conf
Wenn Sie die Funktionalität verwenden möchten, um mithilfe von Zabbix Threat Control gefundene Schwachstellen zu beseitigen, müssen Sie dem zabbix-Benutzer erlauben, die Pakete zu aktualisieren (aber nicht zu installieren oder zu deinstallieren).
/etc/sudoers
Datei
/etc/sudoers
die folgende Zeile
/etc/sudoers
:
Bei RPM- Verteilungen sieht die Zeile folgendermaßen aus:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Für DEB- Distributionen etwas anders:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Stellen Sie eine Verbindung zu Vulners her
Um die Vulners-API verwenden zu können, benötigen Sie einen API-Schlüssel. Um es zu bekommen:
- Melden Sie sich bei vulners.com an
- Wechseln Sie in Ihrem Konto zur Registerkarte KEYS API
- Wählen Sie im Bereich "Scope" die Option "Scannen" und drücken Sie "GENERATE NEW KEY".
Sie erhalten einen API-Schlüssel, der folgendermaßen aussieht: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK

Jetzt müssen Sie den Vulners-API-Schlüssel zur Plugin-Konfigurationsdatei /opt/monitoring/zabbix-threat-control/ztc_config.py
Ein Beispiel:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Stellen Sie eine Verbindung zu Zabbix her
Damit das Plugin eine Verbindung zu Zabbix herstellen kann, müssen Sie die folgenden Daten in der Konfigurationsdatei angeben: /opt/monitoring/zabbix-threat-control/ztc_config.py
- Zabbix-Webschnittstellenadresse für die Arbeit mit der Zabbix-API;
- Benutzername und Passwort, unter denen wir eine Verbindung zur Zabbix-API herstellen.
Domänenname und Port des Zabbix-Servers zum Senden von Daten mit dem Dienstprogramm zabbix-sender.
Ein Beispiel:
zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051'
Zabbix vorbereiten
Sie müssen in Zabbix Objekte erstellen, die das Plugin bereitstellen. Führen Sie dazu das Skript /opt/monitoring/zabbix-threat-control/ztc_create.py
. Das Skript überprüft, ob das Plugin korrekt konfiguriert ist, und erstellt es mithilfe der API in Zabbix:
- Hostgruppe, zu der Hosts mit Schwachstellen hinzugefügt werden.
- Die Vorlage, mit der der Betriebssystembericht von allen Servern erfasst wird.
- Hosts zum Anzeigen von Schwachstellen nach Paketen, Servern, Bulletins und allgemeinen Statistiken.
- Eine Aktion zum Ausführen von Befehlen zur Behebung von Remote-Schwachstellen.
- Dashboard zur einfachen Anzeige all dieser Informationen.

Nachdem Sie alle Objekte in Zabbix erstellt haben, zeigt das Skript Folgendes an:
- Link zum erstellten Dashboard in Zabbix, auf dem Schwachstellen angezeigt werden.
- Der Zeitpunkt, zu dem der Infrastruktur-Scan nach Schwachstellen gestartet wird.
Nachdem alle erforderlichen Objekte in Zabbix erstellt wurden, müssen Sie zur Zabbix-Weboberfläche gehen und die soeben vom Skript erstellte Vorlage "Vulners OS-Report" mit allen Servern verknüpfen, die nach Schwachstellen durchsucht werden müssen.

Danach muss noch gewartet werden, bis das Plugin zu dem bei der Installation angegebenen Zeitpunkt gestartet wird.
Scannen!
Das Hauptdatenverarbeitungsskript ( ztc.py
) wird einmal täglich automatisch über "Service Item ..." auf dem Host "Vulners - Statistics" zu dem im Skript angegebenen Zeitpunkt gestartet.
Sie können die Startzeit des Plugins nach Belieben ändern, indem Sie das "Planungsintervall" in diesem Datenelement ändern. In diesem Fall muss auch die Erfassungszeit der Statistiken in den drei Datenelementen der Vorlage "Vulners OS-Report" angepasst werden. Die Metriken in der Vorlage sollten 10 ... 15 Minuten früher funktionieren als die Hauptmetrik "Service Item ..." auf dem Host "Vulners - Statistics".
Die Zeit, in der alle Schwachstellendaten verarbeitet werden, hängt von der Anzahl der Server in der Infrastruktur und der Anzahl der darauf installierten Pakete ab. Für die Verarbeitung von 1000 Servern werden ca. 30 Minuten aufgewendet.
Pläne
Dies ist nur die erste Version des Zabbix Threat Control-Plugins. Und wir entwickeln es weiter.
Die Pläne:
- Fügen Sie Informationen zu Dashboards in der CVE-Infrastruktur hinzu.
- Verweigern Sie die Installation von Skripten auf Agenten und sammeln Sie alle erforderlichen Informationen zum Betriebssystem und zu den Paketen mithilfe der im Zabbix-Agenten integrierten Datenelementschlüssel.
Und da es Open Source ist - machen Sie mit! Pull Anfragen willkommen :)