
Outil open source pour arrêter le phishing ICS (invitations de calendrier malveillantes)
Cette trousse de correction des invitations de calendrier malveillantes est conçue pour aider les équipes utilisant des solutions de sécurité email qui ne corrigent pas nativement ces attaques.
Si vous utilisez Sublime, vous n'avez pas besoin de cette trousse car la correction est prise en charge nativement.
Des scripts autonomes spécifiques à chaque stack (par ex., proofpoint-microsoft365.py, mimecast-google-workspace.py) sont fournis pour chaque combinaison de ces fournisseurs de sécurité email et de fournisseurs de calendrier :
Fournisseurs de sécurité email :
Fournisseurs de calendrier :
Rendez-vous dans la section Démarrage rapide pour commencer directement !
Vous ne voyez pas votre stack ? N'hésitez pas à nous indiquer la stack que vous souhaitez voir prise en charge à l'adresse [email protected].
Ces scripts nécessitent une solution de sécurité email qui détecte déjà les emails de phishing ICS, mais qui ne supprime pas les événements de calendrier créés via ces emails.
Si vous ne disposez pas d'une solution de sécurité email détectant le phishing ICS, Sublime Core propose une sécurité email gratuite et auto-hébergeable avec une détection intégrée du phishing ICS et une correction automatique des calendriers.
Le phishing ICS est une attaque à deux volets qui délivre des charges utiles malveillantes à la fois dans la boîte de réception et le calendrier d'un utilisateur. Ce vecteur d'attaque a connu une augmentation d'environ 100× du T1 au T4 2025, selon le Rapport de recherche sur les menaces email 2026 de Sublime, avec plus de 20 % des attaques de phishing de rappel du T4 utilisant des invitations de calendrier comme mécanisme de livraison.
La faille de sécurité critique : les événements de calendrier persistent même lorsque les solutions de sécurité email mettent en quarantaine ou suppriment l'email malveillant. Cela affecte à la fois les passerelles de sécurité email (SEG) et les solutions de sécurité email basées sur API, dont la plupart ne nettoient pas les événements de calendrier malveillants en date de février 2026.
En se basant sur la correction intégrée de Sublime pour les événements de calendrier malveillants, ces scripts Python suppriment les événements malveillants lorsque votre solution de sécurité email met en quarantaine les emails de phishing ICS. Les scripts :
.ics et autres pièces jointes conformes à iCalendar de ces messagesEn tant que Python pur, vous pouvez exécuter ces scripts dans de nombreux SOAR, notamment Tines, Splunk SOAR et Cortex XSOAR.
Nous travaillons également sur des guides spécifiques aux SOAR. Veuillez contacter [email protected] si vous avez besoin d'aide ou souhaitez être averti lorsque nous publierons de la documentation pour un SOAR particulier.
Chaque script autonome nécessite :
Vous pouvez exécuter ces scripts dans tout environnement disposant de :
requirements.txt (requests et PyJWT)Pour les déploiements en production, vous souhaiterez également planifier l'exécution régulière du script, par exemple avec une tâche cron.
Les scripts s'exécutent en mode dry-run par défaut pour éviter la suppression accidentelle d'événements. Consultez les options de configuration pour savoir comment activer la suppression et comment implémenter une logique personnalisée en réponse à la découverte d'invitations et d'événements malveillants.
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-client-secret"
PROOFPOINT_CLIENT_ID : ID client OAuth 2.0 pour l'API Proofpoint Cloud Threat ResponsePROOFPOINT_CLIENT_SECRET : secret client OAuth 2.0export MIMECAST_CLIENT_ID="your-client-id"
export MIMECAST_CLIENT_SECRET="your-client-secret"
export MIMECAST_REGION="global" # Options: global, us, uk (default: global)
MIMECAST_CLIENT_ID : ID client OAuth 2.0 pour l'API Mimecast 2.0MIMECAST_CLIENT_SECRET : secret client OAuth 2.0MIMECAST_REGION : endpoint régional de l'API (optionnel, par défaut global)Autorisations API requises :
Services | Threat Remediation | ReadGateway | Tracking | ReadArchive | Readexport ABNORMAL_API_KEY="your-api-key"
ABNORMAL_API_KEY : clé API de la plateforme Abnormal Security# Option 1 : Fichier de compte de service
export GOOGLE_SERVICE_ACCOUNT_FILE="/path/to/service-account.json"
# Option 2 : JSON du compte de service (en ligne)
export GOOGLE_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'
GOOGLE_SERVICE_ACCOUNT_FILE : chemin vers le fichier de clé JSON du compte de serviceGOOGLE_SERVICE_ACCOUNT_JSON : identifiants du compte de service en ligne sous forme de chaîne JSONConfiguration requise :
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 : ID d'application (client) Azure ADMICROSOFT_CLIENT_SECRET : secret client de l'application Azure ADMICROSOFT_TENANT_ID : ID de répertoire (locataire) Azure ADAutorisation API requise : Calendars.ReadWrite (autorisation d'application)
export ICS_PHISHING_REMEDIATION_MODE="dry_run" # "dry_run" est la valeur par défaut
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
Par défaut, tous les scripts s'exécutent en mode dry-run pour éviter les suppressions accidentelles. Dans ce mode, le script va :
Cela vous permet de vérifier que le script fonctionne correctement avant d'activer la suppression réelle.
Pour supprimer réellement les événements de calendrier, définissez la variable d'environnement ICS_PHISHING_REMEDIATION_MODE :
export ICS_PHISHING_REMEDIATION_MODE="delete_events"
Valeurs valides :
dry_run (par défaut) – Aperçu des actions sans suppressiondelete_events – Supprime réellement les événements de calendrier correspondantsLes valeurs invalides déclencheront une erreur pour éviter une mauvaise configuration.
Tous les scripts recherchent les messages mis en quarantaine dans une fenêtre temporelle configurable :
export MESSAGE_LOOKBACK_MINUTES=10 # Optionnel, par défaut 5 minutes
Important : Cette valeur doit correspondre à la fréquence de votre tâche cron avec une petite marge pour garantir qu'aucun message n'est oublié. Par exemple, si vous exécutez toutes les 5 minutes, définissez la fenêtre de recherche sur 10 minutes.
Pour des intégrations supplémentaires, par exemple avec des systèmes de journalisation ou des outils de surveillance, vous pouvez implémenter des callbacks personnalisés dans votre script et les passer à la fonction delete_events_from_remediated_emails :
on_invitation_found_callback(invitation: CalendarInvitation) – Appelé lorsqu'une invitation de calendrier est trouvée dans un message mis en quarantaineon_event_found_callback(invitation: CalendarInvitation, event: CalendarEvent) – Appelé pour chaque événement de calendrier correspondantExemple :
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", # Remplace le mode dry_run par défaut
on_invitation_found_callback=log_invitation,
on_event_found_callback=log_event
)
Remarque : Les erreurs dans les callbacks sont journalisées mais n'interrompent pas le traitement des événements.
Tous les scripts suivent un modèle commun défini dans common.py :
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"""
Les implémentations spécifiques à chaque stack gèrent l'authentification API et la logique propre au fournisseur.