# 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 ```bash mkdir -p data cp apps.json data/apps.json docker compose up -d --build ``` Danach: `http://:8080` Der Runtime-Container enthält `openssl`, damit PFX/P12-Zertifikate lokal analysiert werden können. ## HTTPS direkt im Container Beispielvariablen: ```text 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: ```text 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: ```text 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: ```json { "type": "password", "content": "Beispielwert", "author": "admin", "secret": true, "one_time": true, "ttl_minutes": 15 } ``` ## Datei-API ```text 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 ```text 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 ```text /data/apps.json /data/clipboard.json /data/files.json /data/files/.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 ```bash 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.