groot fbe33afaa5
All checks were successful
release-tag / release-image (push) Successful in 1m34s
Bugfix
2026-08-26 10:29:34 +02:00
2026-08-26 10:29:34 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00
2026-08-26 07:30:25 +02:00

PAW Toolbox

Eine zusammengeführte Go-Anwendung für eine Privileged Access Workstation (PAW). Sie vereint die bisherigen Projekte virtual-appstore, virtual-clipboard und virtual-clipboard-generator, ergänzt einen einfachen Dateiaustausch und bündelt typische Sysadmin-/AD-Werkzeuge in einer gemeinsamen Oberfläche.

Enthaltene Funktionen

Kernfunktionen

  • App Launcher: zentrale Kachelübersicht aus apps.json, Suche und Kategorien.
  • Virtuelle Zwischenablage: persistente Räume und Verläufe, klickbare Raumverwaltung mit Öffnen/Leeren/Löschen, SSE-Aktualisierung und JSON-Persistenz.
  • Secrets: maskierte Clipboard-Einträge, TTL und optional einmaliger Abruf.
  • Passwortgenerator: kryptographisch zufällige Kennwörter; direkte Übergabe in einen Clipboard-Raum ohne separaten Dienst.
  • Dateiaustausch: Upload, Download und Delete; zufällige interne Datei-ID, SHA-256-Prüfsumme und konfigurierbares Größenlimit.
  • Ein Binary / ein Container: alle Web-Funktionen liegen auf demselben Port.

Integrierte Admin-Werkzeuge

  1. Onboarding Assistant erzeugt sAMAccountName, UPN, E-Mail, DisplayName, New-ADUser und Gruppenbefehle; kann ein Kennwort als einmaliges Secret ablegen.
  2. Hash / File Inspector Dateigröße, MIME-Type, Erweiterung, erste Bytes sowie MD5, SHA-256 und SHA-512.
  3. Certificate Inspector X.509-Details, SANs, Gültigkeit, Key Usage, EKU und Thumbprints für PEM/CER/CRT/DER; PFX/P12 über lokales OpenSSL.
  4. JSON / XML / YAML Formatter JSON/XML formatieren, minifizieren und validieren; YAML konservativ normalisieren und auf häufige Strukturfehler prüfen.
  5. Text Diff zeilenweiser Vergleich zweier Texte bis 500 Zeilen pro Seite.
  6. AD Converter UUID/GUID ↔ AD-Bytefolge, SID ↔ Binär-Hex sowie ISO/Unix/Windows FILETIME/LDAP GeneralizedTime.
  7. DNS Lookup A, AAAA, CNAME, MX, TXT, SRV und PTR.
  8. IP / Subnet Calculator IPv4 und IPv6, Netzbereich und für IPv4 zusätzlich Netzmaske/Broadcast/Hostbereich.
  9. Base64 / Hex / URL Encoder UTF-8-basiertes Encodieren und Decodieren.
  10. PowerShell Command Builder Generator für häufige AD-Befehle; führt keine Befehle aus.
  11. CSV Viewer CSV laden, Trennzeichen erkennen, filtern und gefilterte Daten exportieren.
  12. Connectivity Checker gezielter TCP-Test auf genau einen Host/Port.
  13. Regex Tester Regex mit Flags gegen Text testen und Treffer/Gruppen anzeigen.
  14. Text Transformer trimmen, sortieren, deduplizieren, Groß-/Kleinschreibung, Prefix/Suffix und Reihenfolge.
  15. ZIP Archive Viewer ZIP-Inhalt und Größen anzeigen, ohne Dateien zu extrahieren.
  16. Encoding Converter UTF-8, Windows-1252, ISO-8859-1 und UTF-16 lesen und als UTF-8 bzw. UTF-8-BOM speichern.

Wo werden Daten verarbeitet?

Die Werkzeuge Onboarding, Formatter, Diff, AD Converter, Encoder, PowerShell Builder, CSV Viewer, Regex Tester, Text Transformer und Encoding Converter laufen vollständig im Browser.

Die folgenden Werkzeuge benötigen die Toolbox-API:

  • Hash/File Inspector
  • Certificate Inspector
  • ZIP Archive Viewer
  • DNS Lookup
  • Connectivity Checker
  • IP/Subnet Calculator

Dateien für die drei Inspektionswerkzeuge werden nur für die jeweilige Anfrage eingelesen und nicht in den normalen Dateiaustausch übernommen. Das Analyse-Limit liegt bei 64 MiB.

Wichtig: DNS Lookup und Connectivity Checker laufen aus Netzsicht des PAW-Toolbox-Servers. Sie zeigen nicht automatisch die Netzsicht der Browser-/Tier-VM an.

Typische Workflows

Sandbox -> geprüfte Datei -> Zielsystem

  1. Datei im Bereich Dateien hochladen.
  2. In der Sandbox-VM dieselbe PAW Toolbox öffnen und die Datei herunterladen.
  3. Datei prüfen; bei Bedarf im Hash / File Inspector die Prüfsumme dokumentieren.
  4. Die geprüfte Datei wieder hochladen und Quelle/Bearbeiter angeben.
  5. Auf der Ziel-VM herunterladen.
  6. Nicht mehr benötigte Dateien löschen.

Die SHA-256-Prüfsumme wird für jeden Upload angezeigt und zusätzlich beim Download im Header X-Content-SHA256 mitgegeben.

Tier-0 -> AD-Onboarding -> Tier-2 Office

  1. Unter Werkzeuge → Onboarding Assistant Stammdaten erfassen.
  2. Naming-Daten und den erzeugten New-ADUser-Befehl verwenden.
  3. Über Kennwort generieren + einmalig ablegen ein Initialkennwort erzeugen. Das Kennwort wird als Secret mit TTL im gewählten Raum abgelegt.
  4. In Tier-2 den Raum, z. B. onboarding, unter Zwischenablage öffnen.
  5. Secret explizit abrufen; bei einmaligem Abruf wird der Servereintrag anschließend entfernt.
  6. Onboarding-Brief in Office erstellen.

Der Onboarding Assistant führt selbst keine AD-Befehle aus.

Sicherheitsmodell

Die Anwendung ist technisch bewusst ein Transferpunkt zwischen VM-/Tier-Kontexten. Dadurch wird sie selbst zu einer sicherheitskritischen Komponente.

  • TLS verwenden oder TLS an einem vertrauenswürdigen Reverse Proxy terminieren. Basic Auth niemals unverschlüsselt über ein nicht vertrauenswürdiges Netz verwenden.
  • Zugriff auf den Dienst per Firewall/ACL ausschließlich von der PAW bzw. den vorgesehenen Verwaltungsnetzen erlauben.
  • AUTH_USER/AUTH_PASS oder vorgeschaltete Authentisierung aktivieren. Für produktive Tier-Grenzen ist eine identitätsbasierte Authentisierung am Reverse Proxy empfehlenswert.
  • Clipboard-Räume und Inhalte werden standardmäßig vollständig persistent in clipboard.json gespeichert, einschließlich maskierter Secrets (CLIPBOARD_PERSIST_SECRETS=true). TTL und One-Time-Verhalten bleiben erhalten: abgelaufene bzw. verbrauchte Einträge werden entfernt. Maskierung ist keine Verschlüsselung: persistierte Secret-Werte liegen serverseitig in der mit Modus 0600 geschriebenen JSON-Datei und /data muss entsprechend geschützt werden. Wer Secrets bewusst nur im RAM halten möchte, kann CLIPBOARD_PERSIST_SECRETS=false setzen.
  • Der Dateibereich ist kein Malware-Scanner. Die Sandbox-Prüfung bleibt ein expliziter Arbeitsschritt.
  • Ein zentraler Dateiaustausch kann eine Tier-Grenze überbrücken. Netzwerk- und Betriebsregeln sollten klar festlegen, welche Richtungen und Dateitypen erlaubt sind.
  • DNS-/TCP-Werkzeuge ermöglichen dem angemeldeten Benutzer bewusst Abfragen aus Sicht des Toolbox-Servers. Zugriff auf diese Oberfläche daher entsprechend schützen.
  • Das Verzeichnis /data sollte auf einem geschützten Datenträger liegen; Rechte und Backup-Verfahren entsprechend behandeln.
  • MD5 und SHA-1 werden nur für Kompatibilität/Identifikation angezeigt. Für Integritätsprüfungen sollte SHA-256 oder stärker verwendet werden.

Start mit Docker Compose

mkdir -p data
cp apps.json data/apps.json
docker compose up -d --build

Danach: http://<PAW-Toolbox>:8080

Der Runtime-Container enthält openssl, damit PFX/P12-Zertifikate lokal analysiert werden können.

HTTPS direkt im Container

Beispielvariablen:

SERVER_MODE=https
ADDR=:8443
TLS_CERT_FILE=/certs/server.pem
TLS_KEY_FILE=/certs/server.key
HTTP_REDIRECT_ENABLED=true
HTTP_REDIRECT_ADDR=:8080

Die Zertifikate müssen in den Container gemountet werden.

Wichtige Umgebungsvariablen

Variable Standard Bedeutung
ADDR :8080 Listen-Adresse
SERVER_MODE http http oder https
APPS_JSON /data/apps.json App-Launcher-Konfiguration
DATA_DIR /data Datenbasis für Dateiaustausch
CLIPBOARD_DATA /data/clipboard.json Clipboard-Persistenz
MAX_PER_ROOM 200 Max. Clipboard-Einträge je Raum
CLIPBOARD_PERSIST_SECRETS true Secrets im persistenten Clipboard-Snapshot speichern
FILE_MAX_BYTES 268435456 Max. Uploadgröße, Standard 256 MiB
AUTH_USER leer Optionaler Basic-Auth-Benutzer
AUTH_PASS leer Optionales Basic-Auth-Kennwort
PWGEN_LENGTH 20 Passwortlänge
PWGEN_MIN_LOWER 2 Min. Kleinbuchstaben
PWGEN_MIN_UPPER 2 Min. Großbuchstaben
PWGEN_MIN_DIGITS 2 Min. Ziffern
PWGEN_MIN_SYMBOLS 2 Min. Sonderzeichen
PWGEN_NO_AMBIGUOUS true Mehrdeutige Zeichen vermeiden
PWGEN_NO_SEQ true Sequenzen vermeiden
PWGEN_NO_REPEAT true Direkte Wiederholungen vermeiden
PWGEN_UNIQUE false Nur einzigartige Zeichen
PWGEN_EXCLUDE leer Zeichen ausschließen
PWGEN_CHARSET leer Zusätzliche Zeichen
PWGEN_TEMPLATE leer Optionales Template (l, L, d, s)
PWGEN_SYMBOLS eingebaut Sonderzeichensatz

Clipboard API-Kompatibilität

Die bisherigen Kernpfade bleiben erhalten:

POST   /api/{room}/clip
GET    /api/{room}/latest
GET    /api/{room}/history
DELETE /api/{room}/history
DELETE /api/{room}
GET    /api/{room}/stream

Ergänzt wurden die persistente Raumverwaltung und der explizite Secret-Abruf:

GET    /api/rooms              Raum-Namen auflisten
POST   /api/rooms              Leeren Raum anlegen/persistieren (`{"name":"tier0"}`)
GET    /api/rooms/details      Räume mit Anzahl/Secrets/letzter Aktivität
GET    /api/{room}/clip/{id}   Maskierten/One-Time-Eintrag explizit abrufen

Dieser Pfad dient insbesondere dem expliziten Abruf maskierter bzw. einmaliger Secrets.

Beispiel zum Ablegen eines Secrets:

{
  "type": "password",
  "content": "Beispielwert",
  "author": "admin",
  "secret": true,
  "one_time": true,
  "ttl_minutes": 15
}

Datei-API

GET    /api/files
POST   /api/files             multipart/form-data: file, optional uploader
GET    /api/files/{id}
DELETE /api/files/{id}

Originaldateinamen werden nur als Metadaten verwendet. Serverseitig wird die Datei unter einer zufälligen ID gespeichert; dadurch werden Pfadtraversal und Namenskollisionen vermieden.

Werkzeug-APIs

POST /api/tools/file-inspect   multipart/form-data: file
POST /api/tools/cert-inspect   multipart/form-data: file, optional password
POST /api/tools/archive        multipart/form-data: file
POST /api/tools/dns            JSON: name, type
POST /api/tools/connectivity   JSON: host, port, timeout_ms
POST /api/tools/subnet         JSON: cidr

Datenlayout

/data/apps.json
/data/clipboard.json
/data/files.json
/data/files/<zufällige-id>.bin

Die **Dateiablage ist persistent**: Dateiinhalt und Metadaten werden unter `/data` gespeichert. Mit dem mitgelieferten `compose.yaml` wird `./data:/data` als Bind-Mount eingebunden, sodass Uploads Container-Neustarts und Neu-Erstellungen überstehen. Werden `/data` bzw. `./data` gelöscht, sind auch die gespeicherten Dateien entfernt.

Die Analysewerkzeuge legen hochgeladene Dateien nicht in /data/files ab.

Migration aus den drei alten Containern

  1. Dieses Projekt bauen und zunächst parallel auf einem Test-Port starten.
  2. Gewünschte externe Kacheln aus dem alten apps.json übernehmen. Die bisherigen Clipboard-/Passwort-/ProjectSend-Kacheln können entfallen, da diese Funktionen integriert sind.
  3. Falls bestehende nicht geheime Clipboard-Historie übernommen werden soll, die alte Snapshot-Datei als /data/clipboard.json kopieren. Vorher sensible Altwerte entfernen.
  4. Funktionsprüfung aus allen vorgesehenen Tier-VMs durchführen.
  5. Alte Clipboard- und Passwortgenerator-Container abschalten, sobald keine Clients mehr direkt auf deren Ports zugreifen.

Build ohne Docker

go build -o paw-toolbox .
ADDR=:8080 APPS_JSON=./apps.json DATA_DIR=./data CLIPBOARD_DATA=./data/clipboard.json ./paw-toolbox

Für PFX/P12-Unterstützung muss openssl im PATH vorhanden sein. Alle anderen Funktionen benötigen keine externen Laufzeitbibliotheken.

Description
No description provided
Readme 78 KiB
Languages
Go 41.8%
JavaScript 29.6%
HTML 17.7%
CSS 10.3%
Dockerfile 0.6%