Test für offenen Port 4711 in Greenbone/OpenVAS

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Open Port 4711 Detection (korrigierte NASL-VT)

Diese VT prüft, ob TCP-Port 4711 offen ist. Sie ist die korrigierte Fassung einer verbreiteten, generierten Anleitung, die so nie lief. Die Fehler des Originals sind unten dokumentiert – als Lehrstück, warum „sieht plausibel aus" und „läuft" zwei verschiedene Dinge sind.

Was am Original kaputt war

Fehler Original Korrekt
OID in Greenbones Raum 1.3.6.1.4.1.25623.1.0.150001 eigene Arc ...1.7. – die .1.0. gehört Greenbone und kollidiert beim Feed-Sync
Totes Sync-Kommando greenbone-nvt-sync veraltet → greenbone-feed-sync (für den offiziellen Feed)
Erfundenes Kommando gvmd --rebuild existiert nicht → openvas --update-vt-info + ospd-openvas-Neustart
Selbst-aushebelnder Trigger script_require_ports("Services/unknown", 4711) läuft nur, wenn der Port als unbekannt gilt; erkennt find_service einen Dienst, läuft die VT nie → nur script_require_ports(4711)
Doppelte Port-Abfrage get_port_state zweimal, totes exit(99) eine Abfrage, sauberer Pfad
Severity erfunden cvss_base 7.5 für „Port offen" ein offener Port ist für sich kein kritischer Befund → Info/Log, Eskalation nur bei konkreter Vorgabe

Das korrigierte Skript

Skript anlegen
  • vi check_port_4711.nasl
# check_port_4711.nasl
# Erkennt, ob TCP-Port 4711 offen ist (korrigierte Fassung)

if(description)
{
  # Eigene Arc - NICHT .1.0. (gehört Greenbone). Nur lokal eindeutig.
  script_oid("1.3.6.1.4.1.25623.1.7.4711001");
  script_version("2026-06-24T00:00:00+0000");
  script_tag(name:"creation_date", value:"2026-06-24 10:00:00 +0000 (Tue, 24 Jun 2026)");
  script_tag(name:"last_modification", value:"2026-06-24 10:00:00 +0000 (Tue, 24 Jun 2026)");
  script_name("Open Port 4711 Detection");
  script_category(ACT_GATHER_INFO);
  script_family("Service detection");
  script_copyright("Copyright (C) 2026 Thomas / Xinux");

  # Ein offener Port allein ist kein kritischer Befund -> Info-Level.
  script_tag(name:"cvss_base", value:"0.0");
  script_tag(name:"qod_type", value:"remote_active");

  script_tag(name:"summary", value:"Prüft, ob TCP-Port 4711 offen ist.");
  script_tag(name:"solution", value:"Port 4711 schließen oder per Firewall
einschränken, falls nicht benötigt.");
  script_tag(name:"solution_type", value:"Mitigation");

  # Läuft, sobald 4711 als offen bekannt ist - unabhängig von der Service-Erkennung.
  script_require_ports(4711);
  exit(0);
}

port = 4711;

if(!get_port_state(port))
  exit(0);

log_message(port:port, data:"TCP-Port 4711 ist offen.", proto:"tcp");
exit(0);

Syntax prüfen

Vor dem Deployen linten
  • openvas-nasl-lint check_port_4711.nasl

Deployment ins Feed

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 check_port_4711.nasl /var/lib/openvas/plugins/custom/check_port_4711.nasl
NVTI-Cache neu aufbauen
  • sudo runuser -u _gvm -- openvas --update-vt-info
Scanner neu laden
  • sudo systemctl restart ospd-openvas

Pfad/Username ggf. an die Distro anpassen (plugins_folder in /etc/openvas/openvas.conf prüfen).

Scan konfigurieren

  1. Configuration → Port Lists → sicherstellen, dass 4711 im Portbereich liegt
    (eigene Portliste mit T:4711 oder einen Bereich, der 4711 enthält).
  2. Scans → Tasks → Task mit Ziel-IP und dieser Portliste anlegen.
  3. Scan starten, Report unter Scans → Reports prüfen.

Ohne 4711 in der Portliste wird der Port nie gescannt → script_require_ports(4711) plant die VT nicht ein. Das ist der häufigste „läuft nicht"-Grund.

Verifikation

Erst von Hand prüfen, ob der Port überhaupt offen ist
  • nmap -p 4711 <ziel-ip>
VT eingelesen? SecInfo → NVTs nach Name oder OID suchen.

Stolperfalle: Log-Level im Report

Der Treffer kommt über log_message und erscheint mit Severity Log (0.0). Die Standard-Reportansicht blendet Log-Meldungen oft aus – wer nur nach Medium/High filtert, denkt, der Check sei nicht gelaufen. Im Report-Filter die Stufe Log einschalten (z.B. levels=hmlg).

Wenn der Port laut Vorgabe verboten ist

Soll 4711 per Policy nicht offen sein, wird aus der Info ein Finding. Dann log_message durch security_message ersetzen und eine ehrliche Severity setzen, die zum tatsächlichen Risiko des dahinterliegenden Dienstes passt – nicht pauschal 7.5 wie im kaputten Original:

  # statt log_message:
  security_message(port:port,
    data:"TCP-Port 4711 ist offen, entgegen der Vorgabe. Bitte schließen.",
    proto:"tcp");

und im Description-Block z.B. cvss_base auf einen begründbaren Wert (etwa 2.0–4.0 für „unerwarteter offener Port"), nicht aus der Luft gegriffen.

Cybersec-2 Einordnung

Didaktischer Doppelnutzen:

Korrektheit vs. Plausibilität
  • Das generierte Original liest sich sauber und läuft trotzdem nicht. Vier Showstopper

(OID-Arc, totes Sync-Kommando, erfundenes gvmd-Flag, selbst-aushebelnder Trigger) plus erfundene Severity. Ideal, um Studierenden beizubringen: generierten Code immer testen.

Severity-Disziplin
  • „Port offen = kritisch 7.5" ist genau die Art Übertreibung, die ein Audit unbrauchbar

macht. Befund-Schwere muss begründbar sein.

Trigger-Verständnis
  • require_ports(4711) vs. require_ports("Services/unknown", 4711)

zeigt, wie stark das Scheduling davon abhängt, was der Service-Scanner vorher entschieden hat.