/** * Incident Mock Data (Demo-Daten fuer Entwicklung und Tests) */ import { Incident, IncidentStatistics, } from './types' /** * Erstellt Demo-Vorfaelle fuer die Entwicklung */ export function createMockIncidents(): Incident[] { const now = new Date() return [ // 1. Gerade erkannt - noch nicht bewertet (detected/new) { id: 'inc-001', referenceNumber: 'INC-2026-000001', title: 'Unbefugter Zugriff auf Schuelerdatenbank', description: 'Ein ehemaliger Mitarbeiter hat sich mit noch aktiven Zugangsdaten in die Schuelerdatenbank eingeloggt. Der Zugriff wurde durch die Log-Analyse entdeckt.', category: 'unauthorized_access', severity: 'high', status: 'detected', detectedAt: new Date(now.getTime() - 3 * 60 * 60 * 1000).toISOString(), detectedBy: 'Log-Analyse (automatisiert)', affectedSystems: ['Schuelerdatenbank', 'Schulverwaltungssystem'], affectedDataCategories: ['Personenbezogene Daten', 'Daten von Kindern', 'Gesundheitsdaten'], estimatedAffectedPersons: 800, riskAssessment: null, authorityNotification: null, dataSubjectNotification: null, measures: [], timeline: [ { id: 'tl-001', incidentId: 'inc-001', timestamp: new Date(now.getTime() - 3 * 60 * 60 * 1000).toISOString(), action: 'Vorfall erkannt', description: 'Automatische Log-Analyse meldet verdaechtigen Login eines deaktivierten Kontos', performedBy: 'SIEM-System' } ], assignedTo: undefined }, // 2. In Bewertung (assessment) - Risikobewertung laeuft { id: 'inc-002', referenceNumber: 'INC-2026-000002', title: 'E-Mail mit Kundendaten an falschen Empfaenger', description: 'Ein Mitarbeiter hat eine Excel-Datei mit Kundendaten (Name, Adresse, Vertragsnummer) an einen falschen E-Mail-Empfaenger gesendet. Der Empfaenger wurde kontaktiert und hat die Loeschung bestaetigt.', category: 'data_breach', severity: 'medium', status: 'assessment', detectedAt: new Date(now.getTime() - 18 * 60 * 60 * 1000).toISOString(), detectedBy: 'Vertriebsabteilung', affectedSystems: ['E-Mail-System (Exchange)'], affectedDataCategories: ['Personenbezogene Daten', 'Kundendaten'], estimatedAffectedPersons: 150, riskAssessment: { id: 'ra-002', assessedBy: 'DSB Mueller', assessedAt: new Date(now.getTime() - 12 * 60 * 60 * 1000).toISOString(), likelihoodScore: 3, impactScore: 2, overallRisk: 'medium', notificationRequired: false, reasoning: 'Empfaenger hat Loeschung bestaetigt. Datenkategorie: allgemeine Kontaktdaten und Vertragsnummern. Geringes Risiko fuer betroffene Personen.' }, authorityNotification: { id: 'an-002', authority: 'LfD Niedersachsen', deadline72h: new Date(new Date(now.getTime() - 18 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(), status: 'pending', formData: {} }, dataSubjectNotification: null, measures: [ { id: 'meas-001', incidentId: 'inc-002', title: 'Empfaenger kontaktiert', description: 'Falscher Empfaenger kontaktiert mit Bitte um Loeschung', type: 'immediate', status: 'completed', responsible: 'Vertriebsleitung', dueDate: new Date(now.getTime() - 16 * 60 * 60 * 1000).toISOString(), completedAt: new Date(now.getTime() - 15 * 60 * 60 * 1000).toISOString() } ], timeline: [ { id: 'tl-002', incidentId: 'inc-002', timestamp: new Date(now.getTime() - 18 * 60 * 60 * 1000).toISOString(), action: 'Vorfall gemeldet', description: 'Mitarbeiter meldet versehentlichen E-Mail-Versand', performedBy: 'M. Schmidt (Vertrieb)' }, { id: 'tl-003', incidentId: 'inc-002', timestamp: new Date(now.getTime() - 15 * 60 * 60 * 1000).toISOString(), action: 'Sofortmassnahme', description: 'Empfaenger kontaktiert und Loeschung bestaetigt', performedBy: 'Vertriebsleitung' }, { id: 'tl-004', incidentId: 'inc-002', timestamp: new Date(now.getTime() - 12 * 60 * 60 * 1000).toISOString(), action: 'Risikobewertung', description: 'Bewertung durchgefuehrt - mittleres Risiko, keine Meldepflicht', performedBy: 'DSB Mueller' } ], assignedTo: 'DSB Mueller' }, // 3. Gemeldet (notification_sent) - Ransomware-Angriff { id: 'inc-003', referenceNumber: 'INC-2026-000003', title: 'Ransomware-Angriff auf Dateiserver', description: 'Am Montagmorgen wurde ein Ransomware-Angriff auf den zentralen Dateiserver erkannt. Mehrere verschluesselte Dateien wurden identifiziert. Der Angriffsvektor war eine Phishing-E-Mail an einen Mitarbeiter.', category: 'ransomware', severity: 'critical', status: 'notification_sent', detectedAt: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(), detectedBy: 'IT-Sicherheitsteam', affectedSystems: ['Dateiserver (FS-01)', 'E-Mail-System', 'Backup-Server'], affectedDataCategories: ['Personenbezogene Daten', 'Beschaeftigtendaten', 'Kundendaten', 'Finanzdaten'], estimatedAffectedPersons: 2500, riskAssessment: { id: 'ra-003', assessedBy: 'DSB Mueller', assessedAt: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(), likelihoodScore: 5, impactScore: 5, overallRisk: 'critical', notificationRequired: true, reasoning: 'Hohes Risiko fuer Rechte und Freiheiten der betroffenen Personen durch potentiellen Zugriff auf personenbezogene Daten und Finanzdaten. Verschluesselung betrifft Verfuegbarkeit, Exfiltration nicht auszuschliessen.' }, authorityNotification: { id: 'an-003', authority: 'LfD Niedersachsen', deadline72h: new Date(new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(), submittedAt: new Date(now.getTime() - 4 * 24 * 60 * 60 * 1000).toISOString(), status: 'submitted', formData: { referenceNumber: 'LfD-NI-2026-04821', incidentType: 'Ransomware', affectedPersons: 2500 }, pdfUrl: '/api/sdk/v1/incidents/inc-003/authority-form.pdf' }, dataSubjectNotification: { id: 'dsn-003', notificationRequired: true, templateText: 'Sehr geehrte Damen und Herren, wir informieren Sie ueber einen Sicherheitsvorfall, bei dem moeglicherweise Ihre personenbezogenen Daten betroffen sind...', sentAt: new Date(now.getTime() - 3 * 24 * 60 * 60 * 1000).toISOString(), recipientCount: 2500, method: 'email' }, measures: [ { id: 'meas-002', incidentId: 'inc-003', title: 'Netzwerksegmentierung', description: 'Betroffene Systeme vom Netzwerk isoliert', type: 'immediate', status: 'completed', responsible: 'IT-Sicherheitsteam', dueDate: new Date(now.getTime() - 4.8 * 24 * 60 * 60 * 1000).toISOString(), completedAt: new Date(now.getTime() - 4.9 * 24 * 60 * 60 * 1000).toISOString() }, { id: 'meas-003', incidentId: 'inc-003', title: 'Passwoerter zuruecksetzen', description: 'Alle Benutzerpasswoerter zurueckgesetzt', type: 'immediate', status: 'completed', responsible: 'IT-Administration', dueDate: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(), completedAt: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString() }, { id: 'meas-004', incidentId: 'inc-003', title: 'E-Mail-Security Gateway implementieren', description: 'Implementierung eines fortgeschrittenen E-Mail-Sicherheitsgateways mit Sandboxing', type: 'preventive', status: 'in_progress', responsible: 'IT-Sicherheitsteam', dueDate: new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000).toISOString() }, { id: 'meas-005', incidentId: 'inc-003', title: 'Mitarbeiterschulung Phishing', description: 'Verpflichtende Schulung fuer alle Mitarbeiter zum Thema Phishing-Erkennung', type: 'preventive', status: 'planned', responsible: 'Personalwesen', dueDate: new Date(now.getTime() + 60 * 24 * 60 * 60 * 1000).toISOString() } ], timeline: [ { id: 'tl-005', incidentId: 'inc-003', timestamp: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(), action: 'Vorfall erkannt', description: 'IT-Sicherheitsteam erkennt ungewoehnliche Verschluesselungsaktivitaet', performedBy: 'IT-Sicherheitsteam' }, { id: 'tl-006', incidentId: 'inc-003', timestamp: new Date(now.getTime() - 4.9 * 24 * 60 * 60 * 1000).toISOString(), action: 'Eindaemmung gestartet', description: 'Netzwerksegmentierung und Isolation betroffener Systeme', performedBy: 'IT-Sicherheitsteam' }, { id: 'tl-007', incidentId: 'inc-003', timestamp: new Date(now.getTime() - 4.5 * 24 * 60 * 60 * 1000).toISOString(), action: 'Risikobewertung abgeschlossen', description: 'Kritisches Risiko festgestellt - Meldepflicht ausgeloest', performedBy: 'DSB Mueller' }, { id: 'tl-008', incidentId: 'inc-003', timestamp: new Date(now.getTime() - 4 * 24 * 60 * 60 * 1000).toISOString(), action: 'Behoerdenbenachrichtigung', description: 'Meldung an LfD Niedersachsen eingereicht', performedBy: 'DSB Mueller' }, { id: 'tl-009', incidentId: 'inc-003', timestamp: new Date(now.getTime() - 3 * 24 * 60 * 60 * 1000).toISOString(), action: 'Betroffene benachrichtigt', description: '2.500 betroffene Personen per E-Mail informiert', performedBy: 'Kommunikationsabteilung' } ], assignedTo: 'DSB Mueller' }, // 4. Abgeschlossener Vorfall (closed) - Phishing { id: 'inc-004', referenceNumber: 'INC-2026-000004', title: 'Phishing-Angriff auf Personalabteilung', description: 'Gezielter Phishing-Angriff auf die Personalabteilung. Ein Mitarbeiter hat Zugangsdaten auf einer gefaelschten Login-Seite eingegeben. Das Konto wurde sofort gesperrt. Keine Datenexfiltration festgestellt.', category: 'phishing', severity: 'high', status: 'closed', detectedAt: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(), detectedBy: 'IT-Sicherheitsteam (SIEM-Alert)', affectedSystems: ['Active Directory', 'HR-Portal'], affectedDataCategories: ['Beschaeftigtendaten', 'Personenbezogene Daten'], estimatedAffectedPersons: 0, riskAssessment: { id: 'ra-004', assessedBy: 'DSB Mueller', assessedAt: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(), likelihoodScore: 4, impactScore: 3, overallRisk: 'high', notificationRequired: true, reasoning: 'Zugangsdaten kompromittiert, potentieller Zugriff auf Personaldaten. Keine Exfiltration festgestellt, dennoch Meldung wegen Kompromittierung der Zugangsdaten.' }, authorityNotification: { id: 'an-004', authority: 'LfD Niedersachsen', deadline72h: new Date(new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).getTime() + 72 * 60 * 60 * 1000).toISOString(), submittedAt: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(), status: 'acknowledged', formData: { referenceNumber: 'LfD-NI-2026-03912', incidentType: 'Phishing', affectedPersons: 0 } }, dataSubjectNotification: { id: 'dsn-004', notificationRequired: false, templateText: '', recipientCount: 0, method: 'email' }, measures: [ { id: 'meas-006', incidentId: 'inc-004', title: 'Konto gesperrt', description: 'Kompromittiertes Benutzerkonto sofort gesperrt', type: 'immediate', status: 'completed', responsible: 'IT-Administration', dueDate: new Date(now.getTime() - 29.8 * 24 * 60 * 60 * 1000).toISOString(), completedAt: new Date(now.getTime() - 29.9 * 24 * 60 * 60 * 1000).toISOString() }, { id: 'meas-007', incidentId: 'inc-004', title: 'MFA fuer alle Mitarbeiter', description: 'Einfuehrung von Multi-Faktor-Authentifizierung fuer alle Konten', type: 'preventive', status: 'completed', responsible: 'IT-Sicherheitsteam', dueDate: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(), completedAt: new Date(now.getTime() - 12 * 24 * 60 * 60 * 1000).toISOString() } ], timeline: [ { id: 'tl-010', incidentId: 'inc-004', timestamp: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(), action: 'SIEM-Alert', description: 'Verdaechtiger Login-Versuch aus unbekannter Region erkannt', performedBy: 'IT-Sicherheitsteam' }, { id: 'tl-011', incidentId: 'inc-004', timestamp: new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000).toISOString(), action: 'Behoerdenbenachrichtigung', description: 'Meldung an LfD Niedersachsen', performedBy: 'DSB Mueller' }, { id: 'tl-012', incidentId: 'inc-004', timestamp: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(), action: 'Vorfall abgeschlossen', description: 'Alle Massnahmen umgesetzt, keine Datenexfiltration festgestellt', performedBy: 'DSB Mueller' } ], assignedTo: 'DSB Mueller', closedAt: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(), lessonsLearned: '1. MFA haette den Zugriff verhindert (jetzt implementiert). 2. E-Mail-Security-Gateway muss verbesserte Phishing-Erkennung erhalten. 3. Regelmaessige Phishing-Simulationen fuer alle Mitarbeiter einfuehren.' } ] } /** * Erstellt Mock-Statistiken fuer die Entwicklung */ export function createMockStatistics(): IncidentStatistics { return { totalIncidents: 4, openIncidents: 3, notificationsPending: 1, averageResponseTimeHours: 8.5, bySeverity: { low: 0, medium: 1, high: 2, critical: 1 }, byCategory: { data_breach: 1, unauthorized_access: 1, data_loss: 0, system_compromise: 0, phishing: 1, ransomware: 1, insider_threat: 0, physical_breach: 0, other: 0 }, byStatus: { detected: 1, assessment: 1, containment: 0, notification_required: 0, notification_sent: 1, remediation: 0, closed: 1 } } }