Port-Scan via Agent (ss -tulpn lokal) statt nmap vom Node; non-127.0.0.1 = public #16

Closed
opened 2026-06-01 19:00:23 +00:00 by chinux · 0 comments
Owner

Ziel

Den Port-Scan lokal auf dem Agenten per ss -tulpn ausführen (lauschende Sockets inventarisieren) statt per nmap vom Node gegen eine Ziel-IP. Alles, was nicht an 127.0.0.1/::1 gebunden ist, gilt als öffentlich/exponiert.

Vorteile: kein nmap nötig, keine Netz-Erreichbarkeit, zeigt zusätzlich den Prozess je Port, und VMs werden im Gast gescannt (über deren Agent) statt vom Node aus.

Ist-Zustand

  • server/routers/security_router.pysecurity.port_scan an den Node-Agent.
  • Node-Agent: src/commands.rs:245secmod::port_scan(target_ip, ports)src/security.rs scan_nmap (nmap -Pn -sT -T3 --open -p ... target_ip).

Soll

1. Node-Agent (Rust) — src/security.rs

  • Neue Funktion „lokaler Listen-Scan" via ss -tulpnH (H = ohne Header).
    Beispielzeile: tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=123,fd=3))
    Parsen je Zeile:
    • protocol: tcp|udp (Spalte 1)
    • address + port: aus dem lokalen Endpoint (Spalte „Local Address:Port")
    • process: Name aus users:(("<name>",pid=...)) (kann fehlen → "")
    • exposure: address ∈ {127.0.0.1, ::1} → "local", sonst (0.0.0.0, ::, konkrete LAN/Public-IP) → "public"
  • security.port_scan darauf umstellen: kein target_ip/nmap mehr, sondern lokaler ss-Scan des Hosts, auf dem der Agent läuft. nmap-Pfad entfernen oder als Legacy hinter Flag.
  • Ergebnisform (abwärtskompatibel zum bestehenden VMPortSnapshot, erweitert):
    [{ "protocol": "tcp", "port": 22, "address": "0.0.0.0", "process": "sshd", "exposure": "public" }, ...]

2. VM-Guest-Agent (Linux) — VM-Guest-Agent/src/

  • Dasselbe als Command im Gast-Agenten ergänzen (gleiche ss-Parsing-Logik), damit VM-Scans im Gast laufen.
  • FreeBSD: ss fehlt dort i. d. R. → sockstat -l als Äquivalent (best effort), sonst leeres Ergebnis + Hinweis.

3. Backend — server/routers/security_router.py

  • VM-Scan an den VM-Guest-Agenten routen (über den Node-Agent-Relay) statt nmap-gegen-IP; Node-Scan an den Node-Agent.
  • Neue Felder (address, process, exposure) in VMPortSnapshot aufnehmen/persistieren (Migration falls nötig). port/protocol bleiben.

4. Frontend — CVE/Ports-Anzeige

  • Spalten Prozess und Exponiert (local/public, public farblich hervorheben) ergänzen, wo Port-Snapshots gerendert werden (CveList.svelte / Ports-Panels).

Akzeptanzkriterien

  • Port-Scan liefert lauschende Sockets via ss (Node lokal; VM im Gast), inkl. Prozessname.
  • Exposure korrekt: nur 127.0.0.1/::1 = local, alles andere = public.
  • Kein nmap mehr im Standardpfad.

Branch

feat/portscan-ss

## Ziel Den Port-Scan **lokal auf dem Agenten** per `ss -tulpn` ausführen (lauschende Sockets inventarisieren) statt per **nmap vom Node gegen eine Ziel-IP**. Alles, was **nicht** an `127.0.0.1`/`::1` gebunden ist, gilt als **öffentlich/exponiert**. Vorteile: kein nmap nötig, keine Netz-Erreichbarkeit, zeigt zusätzlich den **Prozess** je Port, und VMs werden **im Gast** gescannt (über deren Agent) statt vom Node aus. ## Ist-Zustand - `server/routers/security_router.py` → `security.port_scan` an den Node-Agent. - Node-Agent: `src/commands.rs:245` → `secmod::port_scan(target_ip, ports)` → `src/security.rs` `scan_nmap` (`nmap -Pn -sT -T3 --open -p ... target_ip`). ## Soll **1. Node-Agent (Rust) — `src/security.rs`** - Neue Funktion „lokaler Listen-Scan" via `ss -tulpnH` (H = ohne Header). Beispielzeile: `tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=123,fd=3))` Parsen je Zeile: - protocol: `tcp`|`udp` (Spalte 1) - address + port: aus dem lokalen Endpoint (Spalte „Local Address:Port") - process: Name aus `users:(("<name>",pid=...))` (kann fehlen → "") - exposure: `address` ∈ {`127.0.0.1`, `::1`} → `"local"`, sonst (`0.0.0.0`, `::`, konkrete LAN/Public-IP) → `"public"` - `security.port_scan` darauf umstellen: kein `target_ip`/`nmap` mehr, sondern lokaler `ss`-Scan des Hosts, auf dem der Agent läuft. nmap-Pfad entfernen oder als Legacy hinter Flag. - Ergebnisform (abwärtskompatibel zum bestehenden VMPortSnapshot, erweitert): `[{ "protocol": "tcp", "port": 22, "address": "0.0.0.0", "process": "sshd", "exposure": "public" }, ...]` **2. VM-Guest-Agent (Linux) — `VM-Guest-Agent/src/`** - Dasselbe als Command im Gast-Agenten ergänzen (gleiche `ss`-Parsing-Logik), damit **VM-Scans im Gast** laufen. - FreeBSD: `ss` fehlt dort i. d. R. → `sockstat -l` als Äquivalent (best effort), sonst leeres Ergebnis + Hinweis. **3. Backend — `server/routers/security_router.py`** - VM-Scan an den **VM-Guest-Agenten** routen (über den Node-Agent-Relay) statt nmap-gegen-IP; Node-Scan an den Node-Agent. - Neue Felder (`address`, `process`, `exposure`) in `VMPortSnapshot` aufnehmen/persistieren (Migration falls nötig). `port`/`protocol` bleiben. **4. Frontend — CVE/Ports-Anzeige** - Spalten `Prozess` und `Exponiert` (local/public, public farblich hervorheben) ergänzen, wo Port-Snapshots gerendert werden (`CveList.svelte` / Ports-Panels). ## Akzeptanzkriterien - Port-Scan liefert lauschende Sockets via `ss` (Node lokal; VM im Gast), inkl. Prozessname. - Exposure korrekt: nur 127.0.0.1/::1 = local, alles andere = public. - Kein nmap mehr im Standardpfad. ## Branch `feat/portscan-ss`
chinux changed title from Port-Scan über Agent ausführen to Port-Scan via Agent (ss -tulpn lokal) statt nmap vom Node; non-127.0.0.1 = public 2026-06-01 19:19:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chinux/theProx#16
No description provided.