
Open-Source-Tooling zur Bekämpfung von ICS-Phishing (bösartige Kalendereinladungen)
Dieses Toolkit zur Behebung bösartiger Kalendereinladungen wurde entwickelt, um Teams zu unterstützen, die E-Mail-Sicherheitslösungen verwenden, die diese Angriffe nicht nativ beheben.
Wenn Sie Sublime verwenden, benötigen Sie dieses Toolkit nicht, da die Behebung nativ unterstützt wird.
Für jede Kombination dieser E-Mail-Sicherheitsanbieter und Kalenderanbieter werden stack-spezifische eigenständige Skripte (z. B. proofpoint-microsoft365.py, mimecast-google-workspace.py) bereitgestellt:
E-Mail-Sicherheitsanbieter:
Kalenderanbieter:
Gehen Sie zu Schnellstart, um direkt loszulegen!
Sie sehen Ihren Stack nicht? Zögern Sie nicht, uns unter [email protected] mitzuteilen, welchen Stack Sie unterstützt haben möchten.
Diese Skripte erfordern eine E-Mail-Sicherheitslösung, die ICS-Phishing-E-Mails bereits erkennt, aber die durch diese E-Mails erstellten Kalenderereignisse nicht entfernt.
Wenn Sie keine E-Mail-Sicherheitslösung zur Erkennung von ICS-Phishing haben, bietet Sublime Core kostenlose und selbst hostbare E-Mail-Sicherheit mit integrierter ICS-Phishing-Erkennung und automatischer Kalenderbereinigung.
ICS-Phishing ist ein zweigleisiger Angriff, der schädliche Nutzlasten gleichzeitig sowohl in das Postfach als auch in den Kalender eines Benutzers liefert. Dieser Angriffsvektor verzeichnete laut dem E-Mail-Bedrohungsforschungsbericht 2026 von Sublime von Q1 bis Q4 2025 einen Anstieg um etwa das 100-fache, wobei über 20 % der Callback-Phishing-Angriffe im Q4 Kalendereinladungen als Zustellmechanismus nutzten.
Die kritische Sicherheitslücke: Kalenderereignisse bleiben bestehen, selbst wenn E-Mail-Sicherheitslösungen die schädliche E-Mail unter Quarantäne stellen oder löschen. Dies betrifft sowohl Secure Email Gateways (SEGs) als auch API-basierte E-Mail-Sicherheitslösungen, von denen die meisten schädliche Kalenderereignisse Stand Februar 2026 nicht bereinigen.
Basierend auf der integrierten Behebung von Sublime für schädliche Kalenderereignisse löschen diese Python-Skripte schädliche Ereignisse, wenn Ihre E-Mail-Sicherheitslösung ICS-Phishing-E-Mails unter Quarantäne stellt. Die Skripte:
.ics-Kalenderanhänge und andere iCalendar-konforme Anhänge aus diesen NachrichtenAls reines Python können Sie diese Skripte in vielen SOARs ausführen, darunter Tines, Splunk SOAR und Cortex XSOAR.
Wir arbeiten auch an SOAR-spezifischen Anleitungen. Bitte wenden Sie sich an [email protected], wenn Sie Hilfe benötigen oder benachrichtigt werden möchten, wenn wir Dokumentation für eine bestimmte SOAR veröffentlichen.
Jedes eigenständige Skript erfordert:
Sie können diese Skripte in jeder Umgebung ausführen, die Folgendes bietet:
requirements.txt aufgeführten PyPI-Pakete (requests und PyJWT)Für Produktionsbereitstellungen sollten Sie das Skript auch regelmäßig ausführen lassen, z.B. mit einem Cron-Job.
Die Skripte werden standardmäßig im Dry-Run-Modus ausgeführt, um versehentliches Löschen von Ereignissen zu verhindern. Siehe Konfigurationsoptionen für Informationen zum Aktivieren des Löschens und zur Implementierung benutzerdefinierter Logik als Reaktion auf die Erkennung bösartiger Einladungen und Ereignisse.
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-client-secret"
PROOFPOINT_CLIENT_ID: OAuth 2.0-Client-ID für die Proofpoint Cloud Threat Response APIPROOFPOINT_CLIENT_SECRET: OAuth 2.0-Client-Geheimnisexport MIMECAST_CLIENT_ID="your-client-id"
export MIMECAST_CLIENT_SECRET="your-client-secret"
export MIMECAST_REGION="global" # Optionen: global, us, uk (Standard: global)
MIMECAST_CLIENT_ID: OAuth 2.0-Client-ID für die Mimecast API 2.0MIMECAST_CLIENT_SECRET: OAuth 2.0-Client-GeheimnisMIMECAST_REGION: API-Regionsendpunkt (optional, Standard: global)Erforderliche API-Berechtigungen:
Services | Threat Remediation | ReadGateway | Tracking | ReadArchive | Readexport ABNORMAL_API_KEY="your-api-key"
ABNORMAL_API_KEY: API-Schlüssel von der Abnormal Security-Plattform# Option 1: Dienstkonto-Datei
export GOOGLE_SERVICE_ACCOUNT_FILE="/path/to/service-account.json"
# Option 2: Dienstkonto-JSON (inline)
export GOOGLE_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'
GOOGLE_SERVICE_ACCOUNT_FILE: Pfad zur JSON-Schlüsseldatei des DienstkontosGOOGLE_SERVICE_ACCOUNT_JSON: Inline-Dienstkonto-Anmeldeinformationen als JSON-StringErforderliche Einrichtung:
https://www.googleapis.com/auth/calendar.eventsexport MICROSOFT_CLIENT_ID="your-client-id"
export MICROSOFT_CLIENT_SECRET="your-client-secret"
export MICROSOFT_TENANT_ID="your-tenant-id"
MICROSOFT_CLIENT_ID: Azure AD-Anwendungs- (Client-) IDMICROSOFT_CLIENT_SECRET: Geheimer Clientschlüssel der Azure AD-AnwendungMICROSOFT_TENANT_ID: Azure AD-Verzeichnis- (Mandanten-) IDErforderliche API-Berechtigung: Calendars.ReadWrite (Anwendungsberechtigung)
export ICS_PHISHING_REMEDIATION_MODE="dry_run" # "dry_run" ist Standard
export MESSAGE_LOOKBACK_MINUTES=10
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-secret"
export MICROSOFT_TENANT_ID="your-tenant"
export MICROSOFT_CLIENT_ID="your-client"
export MICROSOFT_CLIENT_SECRET="your-secret"
python3 proofpoint-microsoft365.py
Standardmäßig laufen alle Skripte im Dry-Run-Modus, um versehentliches Löschen zu verhindern. In diesem Modus führt das Skript Folgendes aus:
Dies ermöglicht es Ihnen, zu überprüfen, ob das Skript korrekt funktioniert, bevor Sie das tatsächliche Löschen aktivieren.
Um Kalenderereignisse tatsächlich zu löschen, setzen Sie die Umgebungsvariable ICS_PHISHING_REMEDIATION_MODE:
export ICS_PHISHING_REMEDIATION_MODE="delete_events"
Gültige Werte:
dry_run (Standard) – Aktionen in der Vorschau anzeigen, ohne zu löschendelete_events – Passende Kalenderereignisse tatsächlich löschenUngültige Werte führen zu einem Fehler, um Fehlkonfigurationen zu verhindern.
Alle Skripte suchen innerhalb eines konfigurierbaren Zeitfensters nach E-Mails unter Quarantäne:
export MESSAGE_LOOKBACK_MINUTES=10 # Optional, Standard: 5 Minuten
Wichtig: Dieser Wert sollte mit Ihrer Cron-Planungshäufigkeit übereinstimmen, mit einem kleinen Puffer, um sicherzustellen, dass keine Nachrichten übersehen werden. Wenn das Skript beispielsweise alle 5 Minuten ausgeführt wird, setzen Sie das Rückblickfenster auf 10 Minuten.
Für zusätzliche Integrationen, z. B. mit Protokollierungssystemen oder Überwachungstools, können Sie in Ihrem Skript benutzerdefinierte Callbacks implementieren und diese an die Funktion delete_events_from_remediated_emails übergeben:
on_invitation_found_callback(invitation: CalendarInvitation) – Wird aufgerufen, wenn eine Kalendereinladung in einer unter Quarantäne gestellten Nachricht gefunden wirdon_event_found_callback(invitation: CalendarInvitation, event: CalendarEvent) – Wird für jedes passende Kalenderereignis aufgerufenBeispiel:
def log_invitation(invitation):
print(f"Found malicious invitation for {invitation.user_id}, UID: {invitation.ics_uid}")
def log_event(invitation, event):
print(f"Found calendar event {event.id} matching invitation {invitation.ics_uid}")
fetcher = ProofpointCloudFetcher()
deleter = GoogleWorkspaceEventDeleter()
delete_events_from_remediated_emails(
fetcher,
deleter,
mode="delete_events", # Überschreibt den standardmäßigen Dry-Run-Modus
on_invitation_found_callback=log_invitation,
on_event_found_callback=log_event
)
Hinweis: Fehler in Callbacks werden protokolliert, stoppen jedoch nicht die Ereignisverarbeitung.
Alle Skripte folgen einem gemeinsamen, in common.py definierten Muster:
class MessageFetcher:
def yield_remediated_emails(self) -> Iterator[Message]:
"""Fetch quarantined messages from your email security solution"""
class EventDeleter:
def delete_matching_events(
self,
invitation: CalendarInvitation,
mode: Mode,
on_event_found_callback: Optional[Callable[[CalendarInvitation, CalendarEvent], None]]
) -> None:
"""Delete calendar events matching the ICS attachment"""
Stack-spezifische Implementierungen kümmern sich um die API-Authentifizierung und anbieterspezifische Logik.