Skip to content
Software Kiosk · Technisches Dossier

Architektur · Bedrohungsmodell · Mitigationen · bekannte Lücken

Dieses Dossier beschreibt die Sicherheits-Architektur des Solvia Software Kiosk in einer Tiefe, die ausreicht, damit Workplace-Engineering- und Information-Security-Teams eine begründete Einkaufsentscheidung treffen können.

Stand: April 2026 · Produktversion v1.2 · Sprache: DE-CH
01 — Zweck und Geltungsbereich

Was dieses Dossier deckt — und was nicht.

Das Dossier deckt:

  • die Komponenten-Architektur und die Trust-Boundaries zwischen ihnen
  • ein Bedrohungsmodell nach STRIDE
  • die aktuell aktiven Mitigationen je Bedrohung
  • die uns bekannten offenen Lücken, ehrlich offengelegt
  • die Roadmap für Sicherheits-Verbesserungen in den nächsten zwei Versionen

Es deckt nicht ab: Threat-Vektoren ausserhalb des Endpoints (Active-Directory-Kompromittierung, RMM-Übernahme), die Sicherheit der vom Kunden gepflegten PowerShell-Installationsskripte selbst (das ist Aufgabe des Skript-Autors), und die Sicherheit des Hostings, wenn der Kunde self-hosted betreibt.

02 — Architektur-Übersicht

Komponenten, Trust-Boundaries, Datenflüsse.

2.1 Komponenten

Komponente Sprache / Stack Privilegien-Kontext Datei-Pfad
SolviaKiosk.UI.exe .NET 10 / WPF Standardnutzer C:\Program Files\SolviaKiosk\
SolviaKiosk.Service.exe .NET 10 / Worker LocalSystem (Windows Service) C:\Program Files\SolviaKiosk\
appsettings.json Konfiguration (Datei, beide Komponenten) C:\Program Files\SolviaKiosk\
Logs Serilog (Service schreibt, Admin liest) C:\ProgramData\SolviaKiosk\logs\
Install-History SQLite Service C:\ProgramData\SolviaKiosk\history.db
Temp-Skripte PowerShell Service (SYSTEM-only-ACL) C:\ProgramData\SolviaKiosk\temp\
HTTPS Software-Server Webserver + PHP bei Solvia (default) oder optional beim Kunden URL über BaseUrl konfiguriert

2.2 Trust-Boundaries

   Aussenwelt (HTTPS)
        |
        | (1) Skript-Download und Katalog-Fetch
        v
   ============== Trust-Boundary 1: Server <-> Endpoint ==============
        |
   +----+--------------------------------------------+
   |  Service (LocalSystem)                          |
   |  - validiert Skript-URL gegen BaseUrl-Whitelist |
   |  - lädt Skript via HTTPS                        |
   |  - führt PowerShell mit SYSTEM-Rechten aus      |
   +---+---------------------------------------------+
       |
       | (2) Named Pipe (lokal, ACL)
       v
   ============== Trust-Boundary 2: Service <-> UI ==============
       |
   +---+-----------------------------+
   |  UI (Nutzerkontext, kein Admin) |
   |  - rendert Katalog              |
   |  - sendet Install-Requests      |
   +---------------------------------+

Drei Trust-Boundaries, drei verschiedene Mitigations-Schichten:

  1. Server ↔ Endpoint: HTTPS, BaseUrl-Whitelist, Skript-URL-Validierung
  2. Service ↔ UI (cross-privilege): Named-Pipe-ACL, strukturiertes Request-Format mit Validierung
  3. UI ↔ Nutzer: WPF-Standardnutzer-Kontext, keine UAC-Eskalation

2.3 Datenflüsse

Fluss Trigger Inhalt
Server → Service: Katalog UI-Start, periodischer Reload sw-packages.json (per Mandant)
Server → Service: Skript Install-Request akzeptiert PowerShell-.ps1, geladen nach BaseUrl-Validierung
Service → Server: Telemetrie Service-Start + alle 5 Min { machine, customer, version, timestamp } — keine Inhalte
UI → Service: Install-Request Nutzer klickt „Installieren" Paket-ID, Skript-URL, Username, Maschine
Service → UI: Status-Updates während/nach Installation Accepted → InProgress → Completed / Failed
Service → UI: Detection-Results Cadence + nach Install DetectionResult[] (Paket, Scope, Kind, Installed, Version)
Service → UI: Confirm-Request Pre-Install-Process-Check Prozess-Name + Anzeige-Text + Frage-Text (cross-session UI-Prompt)
03 — Annahmen

Voraussetzungen, ohne die das Modell nicht hält.

Werden diese Annahmen verletzt, sind eigene Mitigationen nötig.

  1. §3.1

    Der Kunde kuratiert die PowerShell-Skripte selbst und verantwortet ihren Inhalt. Der Kiosk garantiert, dass nur Skripte einer vom Kunden kontrollierten BaseUrl ausgeführt werden — nicht, dass diese Skripte sicher sind.

  2. §3.2

    Der Webserver an BaseUrl ist mindestens so geschützt wie ein interner Code-Repository. Schreibzugriff darauf entspricht Admin-Rechten auf jedem ausgerollten Endpoint.

  3. §3.3

    Der Endpoint ist nicht bereits vollständig kompromittiert. Ein Angreifer mit lokalen Admin-Rechten oder einem geschriebenen Kernel-Treiber kann den Kiosk so wenig schützen wie jede andere Anwendung auf der Maschine.

  4. §3.4

    Das CA-Trust-Store des Endpoints ist intakt. Der Kiosk verlässt sich auf das System-CA-Pinning (kein eigenes Cert-Pinning in v1.2 — siehe §6).

  5. §3.5

    Strukturierte Logs werden in ein SIEM oder zumindest manuell gereviewt. Der Kiosk schreibt; der Audit-Wert entsteht erst durch Lesen.

04 — Bedrohungsmodell (STRIDE)

Vektoren, Mitigationen, Status.

4.1 Spoofing

Vektor Mitigation Status
Schadhafter Server gibt sich als Solvia-Server aus HTTPS Pflicht, System-CA-Trust, BaseUrl-Whitelist (Skript-URL muss mit konfigurierter BaseUrl beginnen) Mitigiert
Nutzer A ruft Pipe-API als Nutzer B auf Named-Pipe-ACL für authentifizierte lokale Nutzer; UI sendet Nutzername + Maschinenname im Request Mitigiert
Schadhaftes UI gibt sich als Solvia-UI aus Pipe-Server akzeptiert nur strukturierte Requests; Service-Logs zeigen Pipe-Client-Identität Mitigiert (Restrisiko)

4.2 Tampering

Vektor Mitigation Status
Skript wird während HTTPS-Download manipuliert TLS verhindert In-Transit-Manipulation Mitigiert
Skript wird auf dem Webserver manipuliert (CDN/Repo-Kompromittierung) Skript-Hash-Verifikation (sha256 im Catalog-Schema reserviert) Offen (siehe §6)
appsettings.json wird auf dem Endpoint manipuliert Datei liegt in C:\Program Files\ — Standardnutzer hat keinen Schreibzugriff Mitigiert
Pipe-Request enthält manipulierte Felder (z. B. fremde Username-Felder) Service ignoriert UI-claimed Username; nutzt TokenImpersonationLevel.Identification für authoritative Identität Mitigiert (FEAT-207)
Skript-Datei in temp\ wird zwischen Download und Ausführung manipuliert Temp-Verzeichnis hat SYSTEM-only-ACL; Skript wird sequenziell heruntergeladen → ausgeführt → gelöscht Mitigiert

4.3 Repudiation

Vektor Mitigation Status
Nutzer streitet ab, eine Installation angefordert zu haben Service-Log: User, Maschine, Paket-ID, Skript-URL, Skript-Hash (sobald Hash-Verifikation aktiv), Exit-Code, Dauer, Stdout/Stderr Mitigiert (Logs); Hash folgt
Logs werden nachträglich manipuliert Logs liegen in C:\ProgramData\SolviaKiosk\logs\ — Schreibzugriff erfordert Admin-Rechte; SIEM-Forwarding hebt Logs aus dem Endpoint heraus Mitigiert (mit SIEM)
Service streitet eine Installation ab, die der Audit erwartet Pipe-Sequenz-IDs (FEAT-205) erlauben Korrelation Request → Result im Log Mitigiert

4.4 Information Disclosure

Vektor Mitigation Status
Pipe-Traffic wird mitgeschnitten Pipe ist lokal; ACL erlaubt nur authentifizierte Nutzer; lokaler Admin kann theoretisch lesen Akzeptiertes Restrisiko
Logs enthalten sensitive Daten aus Skript-Stdout Stdout/Stderr werden geloggt, optional summary-only (FEAT-209). Kunde verantwortet Skript-Inhalt Akzeptiert (Kunden-Mitwirkung)
Telemetrie sendet Inhaltsdaten Payload ist auf { machine, customer, version, timestamp } beschränkt — keine Skripte, keine Dateien Mitigiert
Katalog-Inhalt ist sensitiv (Software-Liste eines Kunden) sw-packages.json ist auf dem Server hinter Authentisierung oder Obscurity (URL-Pfad) geschützt — Verantwortung des Server-Operators Akzeptiert

4.5 Denial of Service

Vektor Mitigation Status
Nutzer spammt Install-Requests Service akzeptiert nur eine Installation gleichzeitig (Busy-Response); UI-Buttons werden deaktiviert Mitigiert
Nutzer spammt Detection-Requests 60-Sekunden-Cache absorbiert wiederholte Anfragen (FEAT-101 §4.1) Mitigiert
Skript hängt oder läuft endlos ScriptTimeoutMinutes (default 30) tötet hängende Prozesse Mitigiert
WingetProbe blockiert (COM-Hang) Operationen mit CancellationToken + WaitAsync(15s) umhüllt; Timeout liefert „winget timeout" Error Mitigiert

4.6 Elevation of Privilege

Dies ist der Use-Case selbst — Standardnutzer wird ein elevated Effekt erlaubt. Das Modell stellt sicher, dass nur vom Kunden freigegebene Effekte möglich sind.

Vektor Mitigation Status
Nutzer schmuggelt eine fremde Skript-URL in einen Install-Request Service validiert URL gegen BaseUrl-Whitelist + HTTPS + No-Path-Traversal + No-Credentials Mitigiert
Nutzer modifiziert die Pipe-Request-Struktur, um andere Skripte auszuführen Pipe-Server validiert gegen typisierte Schema-Records (kein freier String-Parser) Mitigiert
Nutzer dropt eine .ps1 ins Temp-Verzeichnis vor dem Service-Start Temp-Verzeichnis hat SYSTEM-only-ACL; Standardnutzer hat keinen Schreibzugriff Mitigiert
Service wird über DLL-Hijacking kompromittiert Self-contained-Build mit allen Dependencies im Program Files-Pfad; AppLocker/WDAC können zusätzlich pinnen Teilmitigiert
Nutzer trickst Service in das Ausführen eines Skripts mit anderen Argumenten v1.2 unterstützt keine Skript-Argumente; Skripte sind self-contained Mitigiert
05 — Aktive Mitigationen

Acht Architektur-Prinzipien, im Code durchgesetzt.

  1. §5.1

    Privilegien-Trennung als harter Boundary. UI ist Standardnutzer, Service ist LocalSystem. Es gibt keinen Code-Pfad, der diese Grenze ohne Pipe-Request überschreitet.

  2. §5.2

    Skript-Whitelist über BaseUrl. Jede Skript-URL wird vor dem Download mit IScriptValidator geprüft. Validierung umfasst HTTPS, BaseUrl-Prefix, kein Path-Traversal, keine Credentials.

  3. §5.3

    Named-Pipe-ACL. Pipe akzeptiert nur authentifizierte lokale Nutzer. Keine Netzwerk-Exposition, keine offenen Ports.

  4. §5.4

    Pipe-Identitäts-Discovery. Service nutzt TokenImpersonationLevel.Identification, um die echte Client-Identität zu ermitteln (FEAT-207). UI-claimed Username wird nicht für Autorisierungs-Entscheidungen verwendet.

  5. §5.5

    Strukturiertes Logging. Serilog mit File-Sink + optional SIEM-Sink. Jede Installation hinterlässt einen vollständigen Audit-Eintrag.

  6. §5.6

    Single-Concurrent-Install. Concurrent-Requests werden mit Busy zurückgewiesen — keine Race-Conditions.

  7. §5.7

    Skript-Timeout. ScriptTimeoutMinutes (default 30) verhindert hängende Prozesse.

  8. §5.8

    Detection nur lesend. Probes (winget, Registry, File, Script) MÜSSEN read-only sein. Script-Probes werden vom selben IScriptValidator validiert wie Install-Skripte.

06 — Bekannte Lücken (offen)

Was wir noch nicht haben — ehrlich offengelegt.

Wir legen diese offen, weil ein Pen-Tester sie ohnehin findet und weil wir keine Sicherheits-Theatralik betreiben. Jede Lücke hat eine Roadmap-Position oder eine bewusste Akzeptanz-Entscheidung.

6.1 Skript-Hash-Verifikation nicht enforced

Das Catalog-Schema (FEAT-211) hat ein sha256-Feld pro Paket reserviert. In v1.2 wird es nicht geprüft — der Service vertraut dem HTTPS-TLS-Channel und der BaseUrl-Whitelist.

Restrisiko: Wer Schreibzugriff auf den BaseUrl-Server erhält, kann ein Skript ersetzen, ohne dass der Endpoint die Manipulation bemerkt.

Roadmap: Hash-Verifikation als FEAT-225 (in Planung). Ziel ist ein optionaler Modus, in dem ein Skript ohne passenden Hash abgelehnt wird (Hash-Pinning-Mode).

6.2 Kein Cert-Pinning

Der Kiosk vertraut dem System-CA-Store. Eine vom Kunden installierte Custom-CA — etwa für Inspections-Proxies — wird ohne Frage akzeptiert.

Restrisiko: Wer die System-CA-Liste manipulieren kann (Admin-Rechte!), kann TLS-Inspection an jedem HTTPS-Endpunkt durchführen — auch am BaseUrl-Server.

Akzeptanz: Ein Kompromittierungspfad mit lokalen Admin-Rechten liegt ausserhalb unseres Threat-Models (siehe Annahme §3.3).

6.3 Keine externe Pen-Test-Auditierung

v1.2 ist intern code-reviewed (Review-Backlogs sind Teil jedes FEAT-Specs, nachvollziehbar im Repository). Eine externe Pen-Test-Auditierung ist nicht durchgeführt worden.

Roadmap: Geplant für H2 2026 mit einem Schweizer Auditor. Ergebnisse werden in ein nachgeschobenes Dossier-Update einfliessen.

6.4 Logs enthalten potenziell sensitive Stdout-Daten

Wenn ein vom Kunden gepflegtes Installationsskript sensible Daten via Write-Output schreibt, landen diese im Service-Log. Es gibt keinen automatischen Sanitizer.

Mitigation (operativ): Skript-Autoren sind angehalten, sensible Werte nicht über stdout zu schreiben. FEAT-209 erlaubt einen Summary-Only-Modus, der nur die ersten und letzten N Zeilen behält.

6.5 Kein Anti-Tampering auf den Binaries

Die .exe-Dateien in C:\Program Files\SolviaKiosk\ sind durch Standard-Windows-ACLs (Admin-Schreib, User-Read) geschützt. Es gibt kein zusätzliches Anti-Tampering (Authenticode-Pinning, WDAC-Policy).

Empfehlung an Enterprise-Kunden: WDAC- oder AppLocker-Policy einsetzen, um die Solvia-Binaries (signiert oder pfad-basiert) zu pinnen.

07 — Code-Review- und Audit-Trail

Feature-basiert dokumentierter Entwicklungsprozess.

Jeder grössere Code-Change ist als FEAT-NNN dokumentiert; jeder Review hinterlässt einen Backlog mit aufgelösten Findings.

Ressource Inhalt
docs/features/FEAT-000-index.md Master-Index aller Features mit Status (Live / Reserved / Planned)
docs/features/mvp/FEAT-NNN-*.md Spezifikation pro shipped Feature (MVP + v1.1 + v1.2)
docs/features/mvp/FEAT-101-review-backlog.md Phase-1-Audit der Detection-Engine — 23 Findings, alle resolved
docs/features/mvp/FEAT-101-phase2-review-backlog.md Phase-2-Audit (Inventory-Tab + winget-upgrade) — 17 Findings, 11 resolved + 6 deferred
PRD.md Aktuelles PRD (v1.2 Stand) mit explizitem Sicherheitsabschnitt §10

Auf Anfrage stellen wir kuratierte Auszüge aus diesem Audit-Trail bereit, ohne dass Sie das gesamte Repository einsehen müssen.

08 — Roadmap (Sicherheits-relevant)

Was als Nächstes ansteht.

Version Geplante Verbesserung ETA
v1.3 Skript-Hash-Verifikation enforced (Hash-Pinning-Mode) Q3 2026
v1.3 Optionales Cert-Pinning für die BaseUrl Q3 2026
v1.4 WDAC-Policy-Template für die Solvia-Binaries Q4 2026
v1.4 Externe Pen-Test-Auditierung + Befunde-Veröffentlichung H2 2026
v1.5 Authenticode-Signierung der Binaries 2027
09 — Kontakt

Architektur-Workshop. 90 Minuten. Ihre Infrastruktur.

Wir bringen einen Architekten und einen Engineer mit, gehen Threat-Vektoren durch und diskutieren Ihre SIEM-Pipeline. Anfragen für vertiefte Auszüge aus dem Audit-Trail nehmen wir per E-Mail entgegen.

Solvia GmbH · +41 44 885 00 10 · Im Grossacher 14, 8127 Forch