12 KiB
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
- Onboarding Assistant – erzeugt sAMAccountName, UPN, E-Mail, DisplayName,
New-ADUserund Gruppenbefehle; kann ein Kennwort als einmaliges Secret ablegen. - Hash / File Inspector – Dateigröße, MIME-Type, Erweiterung, erste Bytes sowie MD5, SHA-256 und SHA-512.
- Certificate Inspector – X.509-Details, SANs, Gültigkeit, Key Usage, EKU und Thumbprints für PEM/CER/CRT/DER; PFX/P12 über lokales OpenSSL.
- JSON / XML / YAML Formatter – JSON/XML formatieren, minifizieren und validieren; YAML konservativ normalisieren und auf häufige Strukturfehler prüfen.
- Text Diff – zeilenweiser Vergleich zweier Texte bis 500 Zeilen pro Seite.
- AD Converter – UUID/GUID ↔ AD-Bytefolge, SID ↔ Binär-Hex sowie ISO/Unix/Windows FILETIME/LDAP GeneralizedTime.
- DNS Lookup – A, AAAA, CNAME, MX, TXT, SRV und PTR.
- IP / Subnet Calculator – IPv4 und IPv6, Netzbereich und für IPv4 zusätzlich Netzmaske/Broadcast/Hostbereich.
- Base64 / Hex / URL Encoder – UTF-8-basiertes Encodieren und Decodieren.
- PowerShell Command Builder – Generator für häufige AD-Befehle; führt keine Befehle aus.
- CSV Viewer – CSV laden, Trennzeichen erkennen, filtern und gefilterte Daten exportieren.
- Connectivity Checker – gezielter TCP-Test auf genau einen Host/Port.
- Regex Tester – Regex mit Flags gegen Text testen und Treffer/Gruppen anzeigen.
- Text Transformer – trimmen, sortieren, deduplizieren, Groß-/Kleinschreibung, Prefix/Suffix und Reihenfolge.
- ZIP Archive Viewer – ZIP-Inhalt und Größen anzeigen, ohne Dateien zu extrahieren.
- 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
- Datei im Bereich Dateien hochladen.
- In der Sandbox-VM dieselbe PAW Toolbox öffnen und die Datei herunterladen.
- Datei prüfen; bei Bedarf im Hash / File Inspector die Prüfsumme dokumentieren.
- Die geprüfte Datei wieder hochladen und Quelle/Bearbeiter angeben.
- Auf der Ziel-VM herunterladen.
- 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
- Unter Werkzeuge → Onboarding Assistant Stammdaten erfassen.
- Naming-Daten und den erzeugten
New-ADUser-Befehl verwenden. - Über Kennwort generieren + einmalig ablegen ein Initialkennwort erzeugen. Das Kennwort wird als Secret mit TTL im gewählten Raum abgelegt.
- In Tier-2 den Raum, z. B.
onboarding, unter Zwischenablage öffnen. - Secret explizit abrufen; bei einmaligem Abruf wird der Servereintrag anschließend entfernt.
- 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_PASSoder 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.jsongespeichert, 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 Modus0600geschriebenen JSON-Datei und/datamuss entsprechend geschützt werden. Wer Secrets bewusst nur im RAM halten möchte, kannCLIPBOARD_PERSIST_SECRETS=falsesetzen. - 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
/datasollte 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
- Dieses Projekt bauen und zunächst parallel auf einem Test-Port starten.
- Gewünschte externe Kacheln aus dem alten
apps.jsonübernehmen. Die bisherigen Clipboard-/Passwort-/ProjectSend-Kacheln können entfallen, da diese Funktionen integriert sind. - Falls bestehende nicht geheime Clipboard-Historie übernommen werden soll, die alte Snapshot-Datei als
/data/clipboard.jsonkopieren. Vorher sensible Altwerte entfernen. - Funktionsprüfung aus allen vorgesehenen Tier-VMs durchführen.
- 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.