Files
zima-apps/Apps/steam-moonlight/SECURITY.md
T

2.2 KiB

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.