Openvas checkmk unverschlüsselter Agent: Unterschied zwischen den Versionen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 109: | Zeile 109: | ||
;Skript ablegen (lesbar für den Scanner-User) | ;Skript ablegen (lesbar für den Scanner-User) | ||
| + | *sudo install -d -o _gvm -g _gvm -m 0755 /var/lib/openvas/plugins/custom | ||
*sudo install -o _gvm -g _gvm -m 0644 checkmk_unencrypted.nasl /var/lib/openvas/plugins/custom/checkmk_unencrypted.nasl | *sudo install -o _gvm -g _gvm -m 0644 checkmk_unencrypted.nasl /var/lib/openvas/plugins/custom/checkmk_unencrypted.nasl | ||
;NVTI-Cache neu aufbauen (scannt den Plugin-Ordner, füllt Redis) | ;NVTI-Cache neu aufbauen (scannt den Plugin-Ordner, füllt Redis) | ||
| Zeile 119: | Zeile 120: | ||
und cached sie in Redis. | und cached sie in Redis. | ||
| − | == | + | == Plugin in der GSA finden == |
| − | + | Nach dem Cache-Rebuild und dem ospd-openvas-Neustart taucht die VT in der | |
| − | und <code> | + | Weboberfläche auf. So findest du sie: |
| − | + | ||
| − | + | === Über die VT-Liste === | |
| + | |||
| + | # Im Menü '''SecInfo → NVTs''' öffnen. | ||
| + | # Im Filter-Feld oben nach dem Namen suchen: <code>Checkmk Agent Unencrypted</code> | ||
| + | #: alternativ direkt nach der OID <code>1.3.6.1.4.1.25623.1.7.6556001</code>. | ||
| + | # Die VT anklicken – Details zeigen Family ''General'', Severity ''Medium (5.0)'', | ||
| + | #: QoD und die hinterlegten Tags (Summary, Solution, Impact). | ||
| + | |||
| + | Erscheint sie hier '''nicht''', hat der Scanner sie nicht eingelesen → Cache-Rebuild | ||
| + | und Neustart kontrollieren (siehe oben), Syntax per <code>openvas-nasl-lint</code> prüfen. | ||
| + | |||
| + | === In eine Scan-Config aufnehmen === | ||
| + | |||
| + | # '''Configuration → Scan Configs''' öffnen. | ||
| + | # Eine eigene Config anlegen (oder eine bestehende klonen – die Standard-Configs | ||
| + | #: sind schreibgeschützt). | ||
| + | # In der Config die VT über Family '''General''' aktivieren oder gezielt per OID | ||
| + | #: hinzufügen. | ||
| + | # Config speichern. | ||
| + | |||
| + | === Im Report wiederfinden === | ||
| + | |||
| + | Nach dem Task-Lauf gegen 10.0.10.104 erscheint der Treffer unter '''Scans → Reports → | ||
| + | [Report] → Results''', gefiltert nach Severity ''Medium''. Der Eintrag trägt den | ||
| + | VT-Namen; im Detail steht der <code>security_message</code>-Text mit dem erkannten | ||
| + | Marker. | ||
Aktuelle Version vom 24. Juni 2026, 03:55 Uhr
Checkmk-Agent unverschlüsselt erkennen (OpenVAS / Greenbone)
Der Checkmk-Agent lauscht auf TCP 6556. Der Legacy-Agent (xinetd / systemd-socket) gibt seine komplette Ausgabe beim Verbindungsaufbau im Klartext zurück – jeder unauthentifizierte Client im Netz liest damit Host- und Systeminformationen aus (Prozesse, Dienste, Pakete, Pfade). Der moderne Agent-Controller (cmk-agent-ctl) würde stattdessen TLS aushandeln.
Dieser Artikel zeigt eine eigene NASL-VT, die genau das erkennt, inklusive der vollständigen Integration ins Greenbone-Feed.
Detektions-Primitiv: Connect auf 6556, Antwort lesen, auf den Sektions-Marker
<<<check_mk>>> prüfen.
Testziel im Lab: 10.0.10.104
Das Skript
Greenbone nutzt NASL (Nessus Attack Scripting Language). Der Befund läuft über
security_message() und landet durch cvss_base 5.0 als
Medium im Report.
- Skript anlegen
- vi checkmk_unencrypted.nasl
# checkmk_unencrypted.nasl
# Checkmk-Agent unverschlüsselt auf TCP 6556 (Information Disclosure)
if(description)
{
# WICHTIG: NICHT die .1.0.-Arc verwenden - die gehört Greenbone.
# Eigene Arc für lokale VTs, Nummer nur lokal eindeutig halten.
script_oid("1.3.6.1.4.1.25623.1.7.6556001");
script_version("2026-06-24T00:00:00+0000");
script_tag(name:"creation_date", value:"2026-06-24 08:00:00 +0000 (Tue, 24 Jun 2026)");
script_tag(name:"last_modification", value:"2026-06-24 08:00:00 +0000 (Tue, 24 Jun 2026)");
script_name("Checkmk Agent Unencrypted Information Disclosure (TCP 6556)");
script_category(ACT_GATHER_INFO);
script_family("General");
script_copyright("Copyright (C) 2026 Thomas / Xinux");
script_tag(name:"cvss_base", value:"5.0");
script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:P/I:N/A:N");
script_tag(name:"qod_type", value:"remote_active");
script_tag(name:"solution_type", value:"Mitigation");
script_tag(name:"summary", value:"Es wird geprüft, ob ein unverschlüsselter
Checkmk-Agent auf TCP 6556 antwortet und seine Ausgabe im Klartext liefert.");
script_tag(name:"vuldetect", value:"Sendet einen TCP-Connect auf 6556 und prüft,
ob die Antwort den Sektions-Marker '<<<check_mk>>>' im Klartext enthält.");
script_tag(name:"insight", value:"Der Legacy-Checkmk-Agent (xinetd/systemd-socket)
gibt beim Verbindungsaufbau die komplette Agent-Ausgabe unverschlüsselt zurück.
Der moderne Agent-Controller (cmk-agent-ctl) würde stattdessen TLS aushandeln.");
script_tag(name:"impact", value:"Jeder unauthentifizierte Netzwerk-Client kann
Host- und Systeminformationen (Prozesse, Dienste, Pakete, Pfade) auslesen.");
script_tag(name:"solution", value:"Agent-Controller mit TLS registrieren
(cmk-agent-ctl register) oder den Zugriff auf 6556 per Firewall auf den
Monitoring-Server beschränken.");
script_require_ports(6556);
exit(0);
}
port = 6556;
if(!get_port_state(port))
exit(0);
soc = open_sock_tcp(port);
if(!soc)
exit(0);
# Checkmk-Agent schickt seine Ausgabe sofort nach Connect - kein Request nötig.
data = recv(socket:soc, length:4096);
close(soc);
if(!data)
exit(0);
if("<<<check_mk>>>" >< data)
{
report = "Ein unverschlüsselter Checkmk-Agent antwortet auf TCP-Port " + port +
" und liefert seine Ausgabe im Klartext (Marker '<<<check_mk>>>' erkannt). " +
"Dies offenbart Host- und Systeminformationen an unauthentifizierte Clients.";
security_message(port:port, data:report);
exit(0);
}
exit(0);
Syntax prüfen
- Vor dem Deployen einmal linten
- openvas-nasl-lint checkmk_unencrypted.nasl
OID-Hinweis
Die OID liegt bewusst nicht in der Arc 1.3.6.1.4.1.25623.1.0. – die
gehört Greenbone. Drittskripte nutzen das Schema
1.3.6.1.4.1.25623.1.[contributor].[plugin]. Lokal muss die Nummer nur
eindeutig sein – gegenchecken:
- grep -rn "1.3.6.1.4.1.25623.1.7.6556001" /var/lib/openvas/plugins/
Integration: Paket- / Source-Installation
Plugins liegen im über plugins_folder konfigurierten Verzeichnis
(Standard /var/lib/openvas/plugins). Eigene VTs in einen Unterordner legen:
- Skript ablegen (lesbar für den Scanner-User)
- sudo install -d -o _gvm -g _gvm -m 0755 /var/lib/openvas/plugins/custom
- sudo install -o _gvm -g _gvm -m 0644 checkmk_unencrypted.nasl /var/lib/openvas/plugins/custom/checkmk_unencrypted.nasl
- NVTI-Cache neu aufbauen (scannt den Plugin-Ordner, füllt Redis)
- sudo runuser -u _gvm -- openvas --update-vt-info
- Scanner neu laden
- sudo systemctl restart ospd-openvas
Der Scanner findet die Datei automatisch: er durchsucht das Plugin-Verzeichnis
rekursiv nach .nasl-Dateien, parst die Metadaten im Description-Modus
und cached sie in Redis.
Plugin in der GSA finden
Nach dem Cache-Rebuild und dem ospd-openvas-Neustart taucht die VT in der Weboberfläche auf. So findest du sie:
Über die VT-Liste
- Im Menü SecInfo → NVTs öffnen.
- Im Filter-Feld oben nach dem Namen suchen:
Checkmk Agent Unencrypted- alternativ direkt nach der OID
1.3.6.1.4.1.25623.1.7.6556001.
- alternativ direkt nach der OID
- Die VT anklicken – Details zeigen Family General, Severity Medium (5.0),
- QoD und die hinterlegten Tags (Summary, Solution, Impact).
Erscheint sie hier nicht, hat der Scanner sie nicht eingelesen → Cache-Rebuild
und Neustart kontrollieren (siehe oben), Syntax per openvas-nasl-lint prüfen.
In eine Scan-Config aufnehmen
- Configuration → Scan Configs öffnen.
- Eine eigene Config anlegen (oder eine bestehende klonen – die Standard-Configs
- sind schreibgeschützt).
- In der Config die VT über Family General aktivieren oder gezielt per OID
- hinzufügen.
- Config speichern.
Im Report wiederfinden
Nach dem Task-Lauf gegen 10.0.10.104 erscheint der Treffer unter Scans → Reports →
[Report] → Results, gefiltert nach Severity Medium. Der Eintrag trägt den
VT-Namen; im Detail steht der security_message-Text mit dem erkannten
Marker.