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

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
= NASL NVT für Port 4711 unter Greenbone erstellen =
+
= Open Port 4711 Detection (NASL-VT) =
  
Diese Anleitung beschreibt, wie ein NASL (Nessus Attack Scripting Language) Network Vulnerability Test (NVT) für die Greenbone Community Edition erstellt wird, um zu prüfen, ob Port 4711 offen ist, und bei Offenheit eine kritische Meldung ausgibt. Die Schritte sind für den Benutzer `_gvm` optimiert, der standardmäßig in Greenbone verwendet wird.
+
Diese VT prüft, ob TCP-Port 4711 auf einem Ziel offen ist, und meldet das im Report.
  
== Voraussetzungen ==
+
== Das Skript ==
* Greenbone Community Edition (oder vergleichbare Installation) mit dem Benutzer `_gvm`.
 
* Schreibrechte im Plugin-Verzeichnis `/var/lib/openvas/plugins/`.
 
* Ein Texteditor wie `nano` oder `vim`.
 
* Synchronisierte NVTs:
 
  <source lang="bash">
 
  sudo -u _gvm greenbone-nvt-sync
 
  </source>
 
* Grundkenntnisse in NASL (siehe [http://www.openvas.org/nasl.html OpenVAS NASL-Referenz]).
 
  
== Schritte ==
+
;Skript anlegen
 
+
*vi check_port_4711.nasl
=== 1. NASL-Skript erstellen ===
+
<pre>
Erstelle eine Datei `check_port_4711.nasl` im Plugin-Verzeichnis:
+
# check_port_4711.nasl
<source lang="bash">
+
# Erkennt, ob TCP-Port 4711 offen ist
sudo -u _gvm vim /var/lib/openvas/plugins/check_port_4711.nasl
 
</source>
 
 
 
Füge den folgenden NASL-Code ein:
 
 
 
<source lang="nasl">
 
# SPDX-FileCopyrightText: 2025 Dein Name <dein.email@example.com>
 
# SPDX-License-Identifier: GPL-2.0-or-later
 
  
 
if(description)
 
if(description)
 
{
 
{
   script_oid("1.3.6.1.4.1.25623.1.0.150001"); # Eindeutige OID
+
  # Eigene Arc - NICHT .1.0. (gehört Greenbone). Nur lokal eindeutig.
   script_version("2025-08-08T19:32:00+0000");
+
   script_oid("1.3.6.1.4.1.25623.1.7.4711001");
   script_tag(name:"last_modification", value:"2025-08-08 19:32:00 +0000 (Fri, 08 Aug 2025)");
+
   script_version("2026-06-24T00:00:00+0000");
   script_tag(name:"creation_date", value:"2025-08-08 19:32:00 +0000 (Fri, 08 Aug 2025)");
+
   script_tag(name:"creation_date", value:"2026-06-24 10:00:00 +0000 (Tue, 24 Jun 2026)");
  script_tag(name:"cvss_base", value:"7.5"); # Kritischer Schweregrad
+
   script_tag(name:"last_modification", value:"2026-06-24 10:00:00 +0000 (Tue, 24 Jun 2026)");
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:P/I:P/A:P");
 
  script_tag(name:"qod_type", value:"remote_banner");
 
 
 
 
   script_name("Open Port 4711 Detection");
 
   script_name("Open Port 4711 Detection");
 
 
   script_category(ACT_GATHER_INFO);
 
   script_category(ACT_GATHER_INFO);
  script_copyright("Copyright (C) 2025 Dein Name");
 
 
   script_family("Service detection");
 
   script_family("Service detection");
   script_dependencies("find_service.nasl");
+
   script_copyright("Copyright (C) 2026 Thomas / Xinux");
  script_require_ports("Services/unknown", 4711);
 
  
   script_tag(name:"summary", value:"Prüft, ob Port 4711 offen ist und gibt eine kritische Meldung aus.");
+
   script_tag(name:"cvss_base", value:"0.0");
   script_tag(name:"impact", value:"Ein offener Port 4711 kann auf eine unsichere Konfiguration hinweisen und Angreifern Zugriff ermöglichen.");
+
  script_tag(name:"qod_type", value:"remote_active");
   script_tag(name:"solution", value:"Schließen Sie Port 4711 oder beschränken Sie den Zugriff durch eine Firewall.");
+
   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_tag(name:"solution_type", value:"Mitigation");
  
 +
  script_require_ports(4711);
 
   exit(0);
 
   exit(0);
 
}
 
}
  
include("host_details.inc");
+
port = 4711;
include("port_service_func.inc");
+
 
 +
if(!get_port_state(port))
 +
  exit(0);
 +
 
 +
log_message(port:port, data:"TCP-Port 4711 ist offen.", proto:"tcp");
 +
exit(0);
 +
</pre>
 +
 
 +
== Syntax prüfen ==
 +
 
 +
;Vor dem Deployen linten:
 +
*openvas-nasl-lint check_port_4711.nasl
 +
 
 +
== Deployment ins Feed ==
  
port = 4711;
+
;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
  
if(!get_port_state(port)) {
+
Pfad/Username ggf. an die Distro anpassen (<code>plugins_folder</code> in
  exit(0); # Port geschlossen
+
<code>/etc/openvas/openvas.conf</code> prüfen).
}
 
  
if(get_port_state(port)) {
+
== Scan konfigurieren ==
  security_message(
 
    port:port,
 
    data:"Der Port 4711 ist offen. Dies stellt ein kritisches Sicherheitsrisiko dar, da ungeschützte Dienste auf diesem Port ausgenutzt werden können.",
 
    proto:"tcp"
 
  );
 
  exit(0);
 
}
 
  
exit(99);
+
# '''Configuration → Port Lists''' → sicherstellen, dass 4711 im Portbereich liegt
</source>
+
#: (eigene Portliste mit <code>T:4711</code> oder ein Bereich, der 4711 enthält).
 +
# '''Scans → Tasks''' → Task mit Ziel-IP und dieser Portliste anlegen.
 +
# Scan starten, Report unter '''Scans → Reports''' prüfen.
  
=== 2. Skript speichern und Berechtigungen setzen ===
+
Ohne 4711 in der Portliste wird der Port nie gescannt und <code>script_require_ports(4711)</code>
* Speichere die Datei (`Ctrl+O`, `Ctrl+X` in `nano`).
+
plant die VT nicht ein – der häufigste „läuft nicht"-Grund.
* Überprüfe die Berechtigungen:
 
<source lang="bash">
 
sudo chown _gvm:_gvm /var/lib/openvas/plugins/check_port_4711.nasl
 
sudo chmod 644 /var/lib/openvas/plugins/check_port_4711.nasl
 
</source>
 
  
=== 3. NVT-Datenbank aktualisieren ===
+
== Verifikation ==
Aktualisiere die OpenVAS-Datenbank als `_gvm`-Benutzer:
 
<source lang="bash">
 
sudo -u _gvm openvas --update-vt-info
 
</source>
 
Falls erforderlich, lade die Plugins neu:
 
<source lang="bash">
 
sudo -u _gvm gvmd --rebuild
 
</source>
 
  
=== 4. Scan konfigurieren und ausführen ===
+
;Erst von Hand prüfen, ob der Port offen ist:
# Öffne die Greenbone Security Assistant (GSA) im Browser (z. B. `https://<deine-ip>:9392`).
+
*nmap -p 4711 <ziel-ip>
# Erstelle eine neue **Scan-Konfiguration**:
+
;VT eingelesen? SecInfo → NVTs nach Name oder OID suchen.
#* Gehe zu ''Configuration > Scan Configs''.
 
#* Wähle oder erstelle ein Profil (z. B. "Full and fast").
 
#* Aktiviere die NVT-Familie ''Service detection'' und stelle sicher, dass das Skript ''Open Port 4711 Detection'' ausgewählt ist.
 
# Erstelle eine **Task** unter ''Scans > Tasks'':
 
#* Gib das Ziel (IP-Adresse) ein.
 
#* Stelle sicher, dass Port 4711 in der Portliste enthalten ist (z. B. `T:4711`).
 
# Starte den Scan und überprüfe die Ergebnisse unter ''Scans > Reports''.
 
  
== Fehlerbehebung ==
+
== Hinweis: Log-Level im Report ==
* '''Skript nicht erkannt''': Teste die Syntax:
 
  <source lang="bash">
 
  sudo -u _gvm openvas-nasl -t /var/lib/openvas/plugins/check_port_4711.nasl
 
  </source>
 
* '''Port wird nicht geprüft''': Stelle sicher, dass Port 4711 in der Scan-Konfiguration enthalten ist (''Configuration > Port Lists'').
 
* '''Keine Meldung''': Überprüfe mit `nmap -p 4711 <ziel-ip>`, ob der Port offen ist.
 
* '''Berechtigungsfehler''': Stelle sicher, dass alle Aktionen als `_gvm` ausgeführt werden.
 
  
== Erweiterungen ==
+
Der Treffer kommt über <code>log_message</code> und erscheint mit Severity '''Log (0.0)'''.
* '''Banner-Prüfung''': Füge `get_tcp_banner(port:port)` hinzu, um den Dienst auf Port 4711 zu identifizieren.
+
Da die Standard-Reportansicht Log-Meldungen oft ausblendet, im Report-Filter die Stufe
* '''CVSS-Anpassung''': Ändere `cvss_base` (z. B. auf 10.0 für maximale Kritikalität) je nach Bedrohung.
+
'''Log''' einschalten (z.B. <code>levels=hmlg</code>), sonst wirkt es, als sei nichts gefunden.
* '''Erweiterte Logik''': Prüfe spezifische Schwachstellen des Dienstes auf Port 4711.
 
  
== Hinweise ==
+
== Soll der Port laut Vorgabe verboten sein ==
* '''OID-Eindeutigkeit''': Verwende eine eindeutige OID, z. B. `1.3.6.1.4.1.25623.1.0.<eigene_nummer>`.
 
* Konsultiere die [http://www.openvas.org/nasl.html OpenVAS NASL-Referenz] für weitere Funktionen.
 
* Teste das Skript in einer kontrollierten Umgebung, bevor es in einer Produktionsumgebung eingesetzt wird.
 
  
== Siehe auch ==
+
Dann wird aus der Info ein Finding: <code>log_message</code> durch <code>security_message</code>
* [[Greenbone Community Edition]]
+
ersetzen und einen begründbaren <code>cvss_base</code> setzen (etwa 2.0–4.0 für einen
* [[OpenVAS]]
+
unerwarteten offenen Port):
* [[NASL]]
 
  
[[Kategorie:Greenbone]]
+
<pre>
[[Kategorie:NASL]]
+
  security_message(port:port,
[[Kategorie:Sicherheit]]
+
    data:"TCP-Port 4711 ist offen, entgegen der Vorgabe.",
 +
    proto:"tcp");
 +
</pre>
 +
</pre>

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