Files
pawtoolbox/README.md
2026-08-26 07:30:25 +02:00

233 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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://<PAW-Toolbox>: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/<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
```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.