Test für offenen Port 4711 in Greenbone/OpenVAS: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 1: Zeile 1:
= Open Port 4711 Detection (korrigierte NASL-VT) =
+
= Open Port 4711 Detection (NASL-VT) =
  
Diese VT prüft, ob TCP-Port 4711 offen ist. Sie ist die '''korrigierte Fassung''' einer
+
Diese VT prüft, ob TCP-Port 4711 auf einem Ziel offen ist, und meldet das im Report.
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 ==
+
== Das Skript ==
 
 
{| class="wikitable"
 
! Fehler !! Original !! Korrekt
 
|-
 
| OID in Greenbones Raum || <code>1.3.6.1.4.1.25623.1.0.150001</code> || eigene Arc <code>...1.7.</code> – die <code>.1.0.</code> gehört Greenbone und kollidiert beim Feed-Sync
 
|-
 
| Totes Sync-Kommando || <code>greenbone-nvt-sync</code> || veraltet → <code>greenbone-feed-sync</code> (für den offiziellen Feed)
 
|-
 
| Erfundenes Kommando || <code>gvmd --rebuild</code> || existiert nicht → <code>openvas --update-vt-info</code> + ospd-openvas-Neustart
 
|-
 
| Selbst-aushebelnder Trigger || <code>script_require_ports("Services/unknown", 4711)</code> || läuft nur, wenn der Port als ''unbekannt'' gilt; erkennt find_service einen Dienst, läuft die VT nie → nur <code>script_require_ports(4711)</code>
 
|-
 
| Doppelte Port-Abfrage || <code>get_port_state</code> zweimal, totes <code>exit(99)</code> || eine Abfrage, sauberer Pfad
 
|-
 
| Severity erfunden || <code>cvss_base 7.5</code> 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
 
;Skript anlegen
Zeile 30: Zeile 9:
 
<pre>
 
<pre>
 
# check_port_4711.nasl
 
# check_port_4711.nasl
# Erkennt, ob TCP-Port 4711 offen ist (korrigierte Fassung)
+
# Erkennt, ob TCP-Port 4711 offen ist
  
 
if(description)
 
if(description)
Zeile 44: Zeile 23:
 
   script_copyright("Copyright (C) 2026 Thomas / Xinux");
 
   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:"cvss_base", value:"0.0");
 
   script_tag(name:"qod_type", value:"remote_active");
 
   script_tag(name:"qod_type", value:"remote_active");
 
 
   script_tag(name:"summary", value:"Prüft, ob TCP-Port 4711 offen ist.");
 
   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
 
   script_tag(name:"solution", value:"Port 4711 schließen oder per Firewall
Zeile 53: Zeile 30:
 
   script_tag(name:"solution_type", value:"Mitigation");
 
   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);
 
   script_require_ports(4711);
 
   exit(0);
 
   exit(0);
Zeile 88: Zeile 64:
  
 
# '''Configuration → Port Lists''' → sicherstellen, dass 4711 im Portbereich liegt
 
# '''Configuration → Port Lists''' → sicherstellen, dass 4711 im Portbereich liegt
#: (eigene Portliste mit <code>T:4711</code> oder einen Bereich, der 4711 enthält).
+
#: (eigene Portliste mit <code>T:4711</code> oder ein Bereich, der 4711 enthält).
 
# '''Scans → Tasks''' → Task mit Ziel-IP und dieser Portliste anlegen.
 
# '''Scans → Tasks''' → Task mit Ziel-IP und dieser Portliste anlegen.
 
# Scan starten, Report unter '''Scans → Reports''' prüfen.
 
# Scan starten, Report unter '''Scans → Reports''' prüfen.
  
Ohne 4711 in der Portliste wird der Port nie gescannt <code>script_require_ports(4711)</code>
+
Ohne 4711 in der Portliste wird der Port nie gescannt und <code>script_require_ports(4711)</code>
plant die VT nicht ein. Das ist der häufigste „läuft nicht"-Grund.
+
plant die VT nicht ein der häufigste „läuft nicht"-Grund.
  
 
== Verifikation ==
 
== Verifikation ==
  
;Erst von Hand prüfen, ob der Port überhaupt offen ist:
+
;Erst von Hand prüfen, ob der Port offen ist:
 
*nmap -p 4711 <ziel-ip>
 
*nmap -p 4711 <ziel-ip>
 
;VT eingelesen? SecInfo → NVTs nach Name oder OID suchen.
 
;VT eingelesen? SecInfo → NVTs nach Name oder OID suchen.
  
== Stolperfalle: Log-Level im Report ==
+
== Hinweis: Log-Level im Report ==
  
 
Der Treffer kommt über <code>log_message</code> und erscheint mit Severity '''Log (0.0)'''.
 
Der Treffer kommt über <code>log_message</code> und erscheint mit Severity '''Log (0.0)'''.
Die Standard-Reportansicht blendet Log-Meldungen oft aus – wer nur nach Medium/High
+
Da die Standard-Reportansicht Log-Meldungen oft ausblendet, im Report-Filter die Stufe
filtert, denkt, der Check sei nicht gelaufen. Im Report-Filter die Stufe '''Log'''
+
'''Log''' einschalten (z.B. <code>levels=hmlg</code>), sonst wirkt es, als sei nichts gefunden.
einschalten (z.B. <code>levels=hmlg</code>).
 
  
== Wenn der Port laut Vorgabe verboten ist ==
+
== Soll der Port laut Vorgabe verboten sein ==
  
Soll 4711 per Policy '''nicht''' offen sein, wird aus der Info ein Finding. Dann
+
Dann wird aus der Info ein Finding: <code>log_message</code> durch <code>security_message</code>
<code>log_message</code> durch <code>security_message</code> ersetzen und eine '''ehrliche'''
+
ersetzen und einen begründbaren <code>cvss_base</code> setzen (etwa 2.0–4.0 für einen
Severity setzen, die zum tatsächlichen Risiko des dahinterliegenden Dienstes passt –
+
unerwarteten offenen Port):
nicht pauschal 7.5 wie im kaputten Original:
 
  
 
<pre>
 
<pre>
  # statt log_message:
 
 
   security_message(port:port,
 
   security_message(port:port,
     data:"TCP-Port 4711 ist offen, entgegen der Vorgabe. Bitte schließen.",
+
     data:"TCP-Port 4711 ist offen, entgegen der Vorgabe.",
 
     proto:"tcp");
 
     proto:"tcp");
 
</pre>
 
</pre>
 
+
</pre>
und im Description-Block z.B. <code>cvss_base</code> 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
 
*<code>require_ports(4711)</code> vs. <code>require_ports("Services/unknown", 4711)</code>
 
zeigt, wie stark das Scheduling davon abhängt, was der Service-Scanner vorher entschieden hat.
 

Aktuelle Version vom 24. Juni 2026, 04:57 Uhr

Open Port 4711 Detection (NASL-VT)

Diese VT prüft, ob TCP-Port 4711 auf einem Ziel offen ist, und meldet das im Report.

Das Skript

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

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");

  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");

  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 ein 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 und script_require_ports(4711) plant die VT nicht ein – der häufigste „läuft nicht"-Grund.

Verifikation

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

Hinweis: Log-Level im Report

Der Treffer kommt über log_message und erscheint mit Severity Log (0.0). Da die Standard-Reportansicht Log-Meldungen oft ausblendet, im Report-Filter die Stufe Log einschalten (z.B. levels=hmlg), sonst wirkt es, als sei nichts gefunden.

Soll der Port laut Vorgabe verboten sein

Dann wird aus der Info ein Finding: log_message durch security_message ersetzen und einen begründbaren cvss_base setzen (etwa 2.0–4.0 für einen unerwarteten offenen Port):

  security_message(port:port,
    data:"TCP-Port 4711 ist offen, entgegen der Vorgabe.",
    proto:"tcp");