71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
# Security Model
|
|
|
|
Detta dokument beskriver säkerhetsmodellen för `steam-moonlight` och hur risker begränsas mellan default- och Moonlight-profil.
|
|
|
|
## Mål
|
|
|
|
- Hålla default-profilen (`steam`) så nära least-privilege som möjligt.
|
|
- Göra Moonlight-profil (`steam-moonlight`) explicit opt-in med tydlig riskaccept.
|
|
- Hålla state/data begränsad till `/DATA/AppData/$AppID/...`.
|
|
|
|
## Tillitsgränser
|
|
|
|
- Host OS och Docker daemon är högsta trust-zon.
|
|
- Containern är lägre trust-zon.
|
|
- Moonlight-klienter och LAN-trafik är extern yta.
|
|
|
|
## Threat Model
|
|
|
|
Primära hot:
|
|
|
|
- Kontoövertagande via svagt `SUNSHINE_PASS`.
|
|
- Lateral movement via `network_mode: host` (Moonlight-profil).
|
|
- Ökad impact vid containerkompromiss p.g.a. extra capabilities och device passthrough.
|
|
- Dataförlust vid felaktig mount-path.
|
|
|
|
## Säkerhetskontroller
|
|
|
|
Gemensamt:
|
|
|
|
- Immutable image pin (`tag + digest`).
|
|
- Ingen docker socket mount.
|
|
- Ingen `privileged: true`.
|
|
- Data paths begränsade till `/DATA/AppData/$AppID/...`.
|
|
|
|
Defaultprofil (`steam`):
|
|
|
|
- `cap_drop: ["ALL"]`
|
|
- `no-new-privileges:true`
|
|
- Ingen `host` network
|
|
- Inga device mounts
|
|
- Sunshine avstängd som default (`ENABLE_SUNSHINE=false`)
|
|
|
|
Moonlightprofil (`steam-moonlight`):
|
|
|
|
- Högriskkontroller isolerade till `profiles: ["moonlight"]`
|
|
- `cap_drop: ["ALL"]` + minsta kända `cap_add`
|
|
- Explicit device lista (`/dev/fuse`, `/dev/uinput`, `/dev/dri/*`)
|
|
- `seccomp:unconfined` och `apparmor:unconfined` endast i Moonlight-profilen
|
|
|
|
## Fail-Closed Regler
|
|
|
|
- Moonlight ska inte startas om `SUNSHINE_PASS` är default eller tomt.
|
|
- Moonlight ska inte startas om GPU-device mapping saknas eller är fel.
|
|
- Vid osäkerhet, kör endast defaultprofilen (`steam`).
|
|
|
|
## Operativa krav
|
|
|
|
- Exponera inte Sunshine admin/UI mot internet.
|
|
- Begränsa åtkomst till LAN/VPN och pålitliga klienter.
|
|
- Rota image-pins kontrollerat och verifiera digest före uppdatering.
|
|
- Följ checklistan i `MOONLIGHT-RUNTIME-CHECKLIST.md` före varje aktivering.
|
|
|
|
## Incidentrespons (minimum)
|
|
|
|
Vid misstänkt kompromiss:
|
|
|
|
1. Stoppa Moonlight-profilen direkt.
|
|
2. Roterar `SUNSHINE_PASS` och övriga credentials.
|
|
3. Granska hostens nätverksexponering och Docker logs.
|
|
4. Byt image till känd god pin och starta om endast defaultprofil.
|