
Strumenti open source per fermare il phishing ICS (inviti di calendario dannosi)
Questo toolkit per la bonifica di inviti calendario dannosi è progettato per aiutare i team che utilizzano soluzioni di sicurezza email che non bonificano nativamente questi attacchi.
Se stai usando Sublime, non hai bisogno di questo toolkit perché la bonifica è nativamente supportata.
Script autonomi specifici per stack (ad es. proofpoint-microsoft365.py, mimecast-google-workspace.py) sono forniti per ogni combinazione di questi provider di sicurezza email e provider di calendario:
Provider di sicurezza email:
Provider di calendario:
Vai a Quickstart per iniziare subito!
Non vedi il tuo stack? Non esitare a dirci quale stack vuoi supportato all'indirizzo [email protected].
Questi script richiedono una soluzione di sicurezza email che stia già rilevando le email di phishing ICS, ma che non stia rimuovendo gli eventi calendario creati tramite quelle email.
Se non hai una soluzione di sicurezza email che rileva il phishing ICS, Sublime Core offre sicurezza email gratuita e auto-ospitabile con rilevamento phishing ICS integrato e bonifica automatica del calendario.
Il phishing ICS è un attacco a due punte che consegna payload dannosi sia alla casella di posta che al calendario di un utente contemporaneamente. Questo vettore d'attacco ha visto un aumento di ~100x dal Q1 al Q4 2025, secondo il Rapporto di Ricerca sulle Minacce Email 2026 di Sublime, con oltre il 20% degli attacchi di phishing callback del Q4 che utilizzano inviti calendario come meccanismo di consegna.
Il divario critico di sicurezza: gli eventi calendario persistono anche quando le soluzioni di sicurezza email mettono in quarantena o cancellano l'email dannosa. Questo colpisce sia i gateway di posta elettronica sicuri (SEG) che le soluzioni di sicurezza email basate su API, la maggior parte delle quali non ripulisce gli eventi calendario dannosi a partire da febbraio 2026.
Basandosi sulla bonifica integrata di Sublime degli eventi calendario dannosi, questi script Python cancellano gli eventi dannosi quando la tua soluzione di sicurezza email mette in quarantena le email di phishing ICS. Gli script:
.ics e altri allegati conformi a iCalendar da quei messaggiEssendo Python puro, puoi eseguire questi script in molti SOAR, inclusi Tines, Splunk SOAR e Cortex XSOAR.
Stiamo anche lavorando a guide specifiche per SOAR. Contattaci a [email protected] se hai bisogno di aiuto o vuoi essere avvisato quando pubblichiamo documentazione per un particolare SOAR.
Ogni script autonomo richiede:
Puoi eseguire questi script in qualsiasi ambiente con:
requirements.txt (requests e PyJWT)Per distribuzioni in produzione, vorrai anche programmare l'esecuzione regolare dello script, ad es. con un cron job.
Gli script vengono eseguiti in modalità dry-run per prevenire la cancellazione accidentale di eventi. Vedi opzioni di configurazione per sapere come abilitare la cancellazione e come implementare logiche personalizzate in risposta alla scoperta di inviti e eventi dannosi.
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-client-secret"
PROOFPOINT_CLIENT_ID: ID client OAuth 2.0 per l'API Proofpoint Cloud Threat ResponsePROOFPOINT_CLIENT_SECRET: Segreto client OAuth 2.0export MIMECAST_CLIENT_ID="your-client-id"
export MIMECAST_CLIENT_SECRET="your-client-secret"
export MIMECAST_REGION="global" # Opzioni: global, us, uk (default: global)
MIMECAST_CLIENT_ID: ID client OAuth 2.0 per l'API Mimecast 2.0MIMECAST_CLIENT_SECRET: Segreto client OAuth 2.0MIMECAST_REGION: Endpoint API della regione (opzionale, default: global)Permessi API richiesti:
Services | Threat Remediation | ReadGateway | Tracking | ReadArchive | Readexport ABNORMAL_API_KEY="your-api-key"
ABNORMAL_API_KEY: Chiave API dalla piattaforma Abnormal Security# Opzione 1: File dell'account di servizio
export GOOGLE_SERVICE_ACCOUNT_FILE="/path/to/service-account.json"
# Opzione 2: JSON dell'account di servizio (in linea)
export GOOGLE_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'
GOOGLE_SERVICE_ACCOUNT_FILE: Percorso del file JSON della chiave dell'account di servizioGOOGLE_SERVICE_ACCOUNT_JSON: Credenziali dell'account di servizio in linea come stringa JSONConfigurazione richiesta:
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 applicazione (client) di Azure ADMICROSOFT_CLIENT_SECRET: Segreto client dell'applicazione Azure ADMICROSOFT_TENANT_ID: ID directory (tenant) di Azure ADPermesso API richiesto: Calendars.ReadWrite (Permesso applicazione)
export ICS_PHISHING_REMEDIATION_MODE="dry_run" # "dry_run" è il default
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
Per impostazione predefinita, tutti gli script vengono eseguiti in modalità dry-run per prevenire cancellazioni accidentali. In questa modalità, lo script:
Questo ti permette di verificare che lo script funzioni correttamente prima di abilitare la cancellazione effettiva.
Per cancellare effettivamente gli eventi calendario, imposta la variabile d'ambiente ICS_PHISHING_REMEDIATION_MODE:
export ICS_PHISHING_REMEDIATION_MODE="delete_events"
Valori validi:
dry_run (default) - Anteprima delle azioni senza cancellaredelete_events - Cancella effettivamente gli eventi calendario corrispondentiValori non validi genereranno un errore per prevenire configurazioni errate.
Tutti gli script cercano messaggi in quarantena all'interno di una finestra temporale configurabile:
export MESSAGE_LOOKBACK_MINUTES=10 # Opzionale, default a 5 minuti
Importante: Questo valore dovrebbe corrispondere alla frequenza della tua pianificazione cron con un piccolo buffer per assicurarsi che nessun messaggio venga perso. Ad esempio, se eseguito ogni 5 minuti, imposta la finestra di lookback a 10 minuti.
Per integrazioni aggiuntive, come con sistemi di logging o strumenti di monitoraggio, puoi implementare callback personalizzati nel tuo script e passarli alla funzione delete_events_from_remediated_emails:
on_invitation_found_callback(invitation: CalendarInvitation) - Chiamato quando un invito calendario viene trovato in un messaggio in quarantenaon_event_found_callback(invitation: CalendarInvitation, event: CalendarEvent) - Chiamato per ogni evento calendario corrispondenteEsempio:
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", # Sovrascrive la modalità dry_run predefinita
on_invitation_found_callback=log_invitation,
on_event_found_callback=log_event
)
Nota: Gli errori nei callback vengono registrati ma non interrompono l'elaborazione degli eventi.
Tutti gli script seguono un pattern comune definito in 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"""
Implementazioni specifiche per stack gestiscono l'autenticazione API e la logica specifica del provider.