Files
aza/AzA march 2026/security/handovers/STEP_03_GAP_ANALYSE.md
2026-03-25 22:03:39 +01:00

7.6 KiB
Raw Permalink Blame History

=====================================================================

STEP 3 FORMELLE GAP-ANALYSE (HIN vs. AZA)

=====================================================================

Datenquellen: /security/reference/hin_docs/ + Projekt-Code

Methode: Nur technisch belegbare Fakten

=====================================================================

1. Transport Security

HIN:

  • S/MIME als primärer Transportschutz (nicht TLS)
  • TLS optional, nicht erzwungen auf SMTP-Ebene
  • Wireguard-Protokoll für Stargate (App-zu-App, kein VPN)
  • SCION-Netzwerk für SSHN (any-to-any Verschlüsselung)
  • Routing ausschliesslich über Schweizer Netze

AZA:

  • SMTP mit STARTTLS (Port 587) aza_email.py Zeilen 14331436, 29942997
  • IMAP über SSL/TLS (Port 993, IMAP4_SSL) aza_email.py Zeilen 1470, 1705
  • Keine eigene TLS-Konfiguration (Python-Defaults)
  • Keine Zertifikatsverifikation im Code gesetzt
  • todo_server.py: reiner HTTP-Server, kein HTTPS Zeile 228
  • transcribe_server.py: kein TLS
  • backend_main.py: kein TLS
  • Supabase-Zugriff über HTTPS aza_config.py Zeile 176

GAP:

Aspekt HIN AZA Lücke
Mail-Verschlüsselung S/MIME (RSA 4096) Nur STARTTLS (opportunistisch) JA
App-zu-App Transport Wireguard Kein verschlüsselter Kanal JA
Netzwerk-Routing SCION, nur CH Internet, global JA
Server-Kommunikation Verschlüsselt HTTP (Klartext) JA
TLS-Konfiguration UNBEKANNT Python-Defaults UNBEKANNT

Kritikalität: HIGH


2. Netzwerkmodell

HIN:

  • Geschlossener Vertrauensraum (Gated Community)
  • SCION/SSHN mit AS-Nummern und Zertifikaten
  • DDoS-Schutz durch Architektur
  • 1 Instanz pro Organisation (keine Mandantenfähigkeit)
  • Redundante Transportwege, automatischer Fail-over
  • Governance: HIN, FMH, pharmaSuisse, BAG, SWITCH

AZA:

  • Kein Netzwerk-Perimeter definiert
  • Kein VPN
  • Kein DDoS-Schutz
  • Keine Netzwerk-Segmentierung
  • Einzige Netzwerk-Massnahme: Windows-Firewall-Regel für Todo-Server-Port todo_server.py Zeilen 209220
  • Backend-Services auf localhost (HTTP)
  • Supabase als externer Cloud-Service (HTTPS)

GAP:

Aspekt HIN AZA Lücke
Vertrauensraum Geschlossen, verifiziert Offen, kein Perimeter JA
DDoS-Schutz SCION-basiert Keiner JA
Segmentierung 1 Instanz/Organisation Keine JA
Redundanz Multi-Path, Fail-over Keine JA
Governance 5 Organisationen Keine JA
VPN Wireguard (Stargate) Keiner JA

Kritikalität: HIGH


3. PKI

HIN:

  • Eigene CA: "HIN MGW Issuing CA 2022"
  • RSA 4096-bit, SHA256withRSAEncryption
  • Domain-Zertifikate (10 Jahre Gültigkeit)
  • SSHN-Zertifikate (72h Gültigkeit, automatische Erneuerung)
  • Zentrale Zertifikatsverteilung über HIN-Backend
  • Geschlossenes System

AZA:

  • Keine PKI
  • Keine eigene CA
  • Keine Zertifikate (weder Client- noch Server-Zertifikate)
  • Kein Zertifikatsmanagement
  • Kein CSR-Prozess
  • Keine Signierung von Daten oder Kommunikation

GAP:

Aspekt HIN AZA Lücke
Eigene CA HIN MGW Issuing CA 2022 Keine JA
Zertifikate RSA 4096, Domain-Zerts Keine JA
Zertifikatsverteilung Zentral, automatisch Nicht vorhanden JA
Schlüsselmanagement Zentral über Backend Nicht vorhanden JA
Hardware-Token UNBEKANNT Nicht vorhanden UNBEKANNT

Kritikalität: HIGH


4. Authentifizierung

HIN:

  • 2FA in drei Varianten:
    • HIN Client: Passwort + kryptographischer Geräteschlüssel
    • HIN Gateway: mTAN/Auth-App + Active Directory
    • Mobil: mTAN/Auth-App + HIN Login+Passwort
  • Identitätsprüfung via Videoidentifikation
  • eID-Typen: Persönlich, Organisation, Team
  • SSO für HIN-geschützte Anwendungen
  • Berufsqualifikation über Register/Verbände verifiziert

AZA:

  • basis14.py: SHA-256 Passwort-Hash OHNE Salt Zeilen 12981300
  • workforce_planner: bcrypt mit Salt auth.py Zeilen 2328
  • workforce_planner: JWT mit HS256 auth.py Zeilen 3137
  • workforce_planner: Secret Key hardcoded als Fallback "dev-secret-change-in-production" config.py Zeile 19
  • workforce_planner: Token-Ablauf 480 Minuten (8h) config.py Zeile 20
  • backend_main.py: API-Token via Header "X-Api-Token" Zeilen 154157
  • backend_main.py: User-Identifikation via Header "X-User" Zeilen 162164
  • Rollen: ADMIN, MANAGER, EMPLOYEE enums.py Zeilen 3336
  • Rollenbasierte Zugriffskontrolle mit require_role() auth.py Zeilen 5966
  • Keine 2FA / MFA / OTP
  • Keine zertifikatsbasierte Authentifizierung
  • Keine Identitätsprüfung (Videoidentifikation o.ä.)
  • Kein SSO-Protokoll (SAML/OAuth/OIDC)

GAP:

Aspekt HIN AZA Lücke
2FA Ja (3 Varianten) Nein JA
Passwort-Hashing UNBEKANNT SHA-256 ohne Salt (basis14) / bcrypt (workforce) JA (basis14)
Secret Key UNBEKANNT Hardcoded Fallback JA
Identitätsprüfung Videoidentifikation Keine JA
SSO Ja Nein JA
Zertifikats-Auth Ja (Geräteschlüssel) Nein JA
Token-Ablauf UNBEKANNT 480 min (8h) UNBEKANNT
Rollen eID-basiert (3 Typen) RBAC (3 Rollen) TEILWEISE

Kritikalität: HIGH


5. Mail-Sicherheit

HIN:

  • S/MIME Gateway-zu-Gateway mit Domain-Zertifikaten (RSA 4096)
  • Automatische Verschlüsselung/Entschlüsselung durch Gateway
  • HIN Mail Global: GINA/SEPPMail für externe Empfänger
  • SMS-Code-Authentifizierung für externe Empfänger
  • Domain-Prüfung gegen HIN-Domainliste
  • Betreffzeile bei HIN Mail Global: UNVERSCHLÜSSELT
  • Header "X-HIN-Encrypted" für Steuerung

AZA:

  • SMTP mit STARTTLS (opportunistisch, nicht erzwungen) aza_email.py
  • IMAP über SSL (IMAP4_SSL) aza_email.py
  • Keine S/MIME-Implementierung
  • Keine PGP/GPG-Implementierung
  • Keine Gateway-Verschlüsselung
  • Keine Ende-zu-Ende-Verschlüsselung
  • Keine Signierung von E-Mails
  • Passwörter im Klartext in aza_email_config.json gespeichert
  • Keine Zertifikatsverifikation im SMTP/IMAP-Code

GAP:

Aspekt HIN AZA Lücke
Mail-Verschlüsselung S/MIME (RSA 4096) Keine JA
Gateway-Verschlüsselung Automatisch Keine JA
Externe Empfänger HIN Mail Global (GINA) Keine Lösung JA
Signierung S/MIME Signatur Keine JA
Credential-Speicherung UNBEKANNT Klartext JSON JA
Zertifikatsverifikation Domain-Zertifikate Python-Defaults JA

Kritikalität: HIGH


OFFENE TECHNISCHE FRAGEN

  1. HIN: TLS-Version, Cipher Suites, PFS nicht in hin_docs belegt
  2. HIN: Hardware-Token / Smartcard nicht in hin_docs belegt
  3. HIN: SSO-Protokoll (SAML/OAuth/OIDC) nicht in hin_docs belegt
  4. HIN: Passwort-Hashing-Verfahren nicht in hin_docs belegt
  5. HIN: Token-Ablaufzeiten nicht in hin_docs belegt
  6. HIN: Credential-Speicherung nicht in hin_docs belegt
  7. AZA: Python-Default-TLS-Verhalten hängt von Systemkonfiguration ab nicht geprüft
  8. AZA: Supabase-Sicherheitskonfiguration nicht im Scope dieser Analyse
  9. AZA: Ob STARTTLS erzwungen oder opportunistisch ist Code zeigt keine Prüfung auf Erfolg

ZUSAMMENFASSUNG

Bereich Kritikalität Anzahl Lücken
1. Transport Security HIGH 5
2. Netzwerkmodell HIGH 6
3. PKI HIGH 5
4. Authentifizierung HIGH 7
5. Mail-Sicherheit HIGH 6
GESAMT HIGH 29 identifizierte Lücken

Alle 5 Bereiche haben Kritikalität HIGH. 9 Punkte konnten mangels HIN-Dokumentation nicht vollständig verglichen werden.