""" TOM-Anlage (Technische und Organisatorische Massnahmen) checks — Art. 32 DSGVO. Prueft die 8 klassischen Kontrollziele nach dem DSK-Standard sowie die Art. 32(1) Anforderungen. Level 1: Kontrollziel adressiert? Level 2: Konkrete Massnahme beschrieben? """ TOM_ANNEX_CHECKLIST = [ # ── L1: Zutrittskontrolle ──────────────────────────────────────── { "id": "tom_access_physical", "label": "Zutrittskontrolle (physischer Zugang)", "level": 1, "parent": None, "patterns": [ r"zutrittskontrolle", r"physische[rn]?\s+(?:zugang|sicherheit|zutrittskontrolle)", r"geb(?:ae|ä)ude(?:sicherheit|zugang|zutritt)", ], "severity": "HIGH", "hint": "Zutrittskontrolle: Unbefugten den physischen Zugang zu Datenverarbeitungsanlagen verwehren. Beispiele: Schliessanlage, Chipkarte, Videoüberwachung, Besucherregelung.", }, { "id": "tom_access_physical_measures", "label": "Konkrete Zutrittsmassnahmen benannt", "level": 2, "parent": "tom_access_physical", "patterns": [ r"(?:schl(?:ue|ü)ssel|chipkarte|badge|code|pin|biometr|video(?:ue|ü)berwachung|alarm|pfortner|empfang|besucher)", r"(?:zutrittskontroll|zugangs)(?:system|anlage|konzept)", ], "severity": "MEDIUM", "hint": "Nicht nur 'Zutrittskontrolle vorhanden' schreiben — konkrete Massnahmen benennen (z.B. 'elektronisches Schliesssystem mit personenbezogenen Chipkarten, protokollierte Besucherregelung').", }, # ── L1: Zugangskontrolle ───────────────────────────────────────── { "id": "tom_access_logical", "label": "Zugangskontrolle (IT-Systeme)", "level": 1, "parent": None, "patterns": [ r"zugangskontrolle", r"(?:authentifizierung|authentisierung|login|anmeldung)\s+(?:zu|an|fuer|bei)\s+(?:systemen|it-?systemen|anwendungen)", r"(?:passwort|kennwort)[\s-]?(?:richtlinie|policy|politik|regelung)", ], "severity": "HIGH", "hint": "Zugangskontrolle: Unbefugten den Zugang zu IT-Systemen verwehren. Beispiele: Passwortrichtlinie, MFA, automatische Sperrung, VPN.", }, { "id": "tom_access_logical_mfa", "label": "Multi-Faktor-Authentifizierung oder starke Passwoerter", "level": 2, "parent": "tom_access_logical", "patterns": [ r"(?:multi[\s-]?faktor|zwei[\s-]?faktor|2[\s-]?fa|mfa|totp|fido|yubikey)", r"(?:passwort|kennwort)[\s\S]{0,100}(?:mindestens\s+\d+\s+zeichen|komplex|stark|sicher)", ], "severity": "MEDIUM", "hint": "BSI empfiehlt MFA fuer alle Administratorzugaenge. Mindestens starke Passwoerter (12+ Zeichen, Komplexitaetsanforderungen) muessen dokumentiert sein.", }, # ── L1: Zugriffskontrolle ──────────────────────────────────────── { "id": "tom_authorization", "label": "Zugriffskontrolle (Berechtigungen)", "level": 1, "parent": None, "patterns": [ r"zugriffskontrolle", r"(?:berechtigungs|rechte|rollen)(?:konzept|management|vergabe|system)", r"(?:need[\s-]?to[\s-]?know|least\s+privilege|minimalprinzip)", ], "severity": "HIGH", "hint": "Zugriffskontrolle: Sicherstellen, dass Benutzer nur auf die Daten zugreifen koennen, fuer die sie berechtigt sind. Beispiele: Rollenkonzept (RBAC), Need-to-Know-Prinzip, regelmaessige Rechterezertifizierung.", }, # ── L1: Weitergabekontrolle / Uebertragungssicherheit ─────────── { "id": "tom_transfer", "label": "Weitergabekontrolle / Verschluesselung bei Transport", "level": 1, "parent": None, "patterns": [ r"weitergabekontrolle", r"(?:ue|ü)bertragungssicherheit", r"(?:transport|uebertragung|transit)[\s-]?verschl(?:ue|ü)sselung", r"(?:tls|ssl|https|sftp|vpn|ipsec)\s", ], "severity": "HIGH", "hint": "Weitergabekontrolle: Personenbezogene Daten duerfen bei elektronischer Uebertragung nicht unbefugt gelesen, kopiert oder veraendert werden. Beispiele: TLS 1.2+, VPN, verschluesselter E-Mail-Versand.", }, { "id": "tom_transfer_encryption", "label": "Verschluesselungsstandard benannt (TLS, AES etc.)", "level": 2, "parent": "tom_transfer", "patterns": [ r"(?:tls|ssl)\s*(?:1\.[2-3]|1\.3)", r"aes[\s-]?(?:128|256)", r"verschl(?:ue|ü)sselung[\s\S]{0,100}(?:bit|aes|rsa|ecc|sha)", ], "severity": "MEDIUM", "hint": "Konkrete Standards benennen: TLS 1.2 oder hoeher (nicht 'SSL'), AES-256 fuer Verschluesselung at Rest. Stand der Technik nach Art. 32(1) DSGVO.", }, # ── L1: Eingabekontrolle ───────────────────────────────────────── { "id": "tom_input", "label": "Eingabekontrolle (Protokollierung)", "level": 1, "parent": None, "patterns": [ r"eingabekontrolle", r"(?:protokollierung|logging|audit[\s-]?(?:log|trail|protokoll))", r"(?:nachvollziehbar|nachvollziehbarkeit)\s+(?:der\s+)?(?:eingabe|aenderung|loeschung|verarbeitung)", ], "severity": "MEDIUM", "hint": "Eingabekontrolle: Nachtraeglich pruefen koennen, wer wann welche Daten eingegeben, geaendert oder geloescht hat. Beispiele: Audit-Logging, Versionierung, Zugriffsprotokollierung.", }, # ── L1: Auftragskontrolle ──────────────────────────────────────── { "id": "tom_processing_control", "label": "Auftragskontrolle (Weisungsgebundenheit)", "level": 1, "parent": None, "patterns": [ r"auftragskontrolle", r"(?:weisung|anweisung)(?:sgebunden|en)\s+(?:der\s+)?(?:mitarbeiter|besch(?:ae|ä)ftigten)", r"(?:schulung|sensibilisierung)\s+(?:der\s+)?(?:mitarbeiter|besch(?:ae|ä)ftigten)\s+(?:zum|im|bezueglich)\s+(?:datenschutz|umgang\s+mit\s+daten)", ], "severity": "MEDIUM", "hint": "Auftragskontrolle: Sicherstellen, dass personenbezogene Daten nur entsprechend den Weisungen verarbeitet werden. Beispiele: Mitarbeiterschulungen, Verpflichtung auf Datengeheimnis.", }, # ── L1: Verfuegbarkeitskontrolle ───────────────────────────────── { "id": "tom_availability", "label": "Verfuegbarkeitskontrolle (Backup, Wiederherstellung)", "level": 1, "parent": None, "patterns": [ r"verf(?:ue|ü)gbarkeit(?:skontrolle)?", r"(?:backup|datensicherung|wiederherstellung|disaster\s+recovery|business\s+continuity)", r"(?:redundanz|spiegelung|replikation|georedundant)", ], "severity": "HIGH", "hint": "Verfuegbarkeitskontrolle: Personenbezogene Daten gegen Verlust schuetzen. Beispiele: Regelmaessige Backups, Redundanz, Disaster-Recovery-Plan, USV.", }, # ── L1: Trennungskontrolle ─────────────────────────────────────── { "id": "tom_separation", "label": "Trennungskontrolle (Mandantenfaehigkeit)", "level": 1, "parent": None, "patterns": [ r"trennungskontrolle", r"(?:mandantenf(?:ae|ä)higkeit|mandantentrennung|datentrennung)", r"(?:logische|physische)\s+trennung\s+(?:der\s+)?(?:daten|systeme)", r"(?:zweckbindung|zwecktrennung)", ], "severity": "MEDIUM", "hint": "Trennungskontrolle: Sicherstellen, dass Daten verschiedener Auftraggeber/Zwecke getrennt verarbeitet werden. Beispiele: Mandantenfaehige Software, getrennte Datenbanken, Berechtigungskonzept.", }, # ── L1: Verschluesselung at Rest ───────────────────────────────── { "id": "tom_encryption_rest", "label": "Verschluesselung gespeicherter Daten (at Rest)", "level": 1, "parent": None, "patterns": [ r"verschl(?:ue|ü)sselung[\s\S]{0,50}(?:gespeichert|ruhend|at[\s-]?rest|festplatte|datentraeger|datenbank)", r"(?:at[\s-]?rest|ruhende\s+daten|gespeicherte\s+daten)[\s\S]{0,50}verschl(?:ue|ü)ssel", r"(?:festplatten|datentraeger|datenbank|disk)[\s-]?verschl(?:ue|ü)sselung", ], "severity": "HIGH", "hint": "Art. 32(1)(a) DSGVO: Verschluesselung ist explizit als Sicherheitsmassnahme benannt. Ohne Verschluesselung at Rest ist der Schutz bei physischem Verlust von Datentraegern nicht gewaehrleistet.", }, ]