
Ferramenta de código aberto para combater phishing ICS (convites de calendário maliciosos)
Este kit de ferramentas para remediar convites de calendário maliciosos foi projetado para ajudar equipas que utilizam soluções de segurança de e-mail que não remediam nativamente esses ataques.
Se você usa o Sublime, não precisa deste kit porque a remediação é suportada nativamente.
Scripts independentes específicos para cada stack (ex.: proofpoint-microsoft365.py, mimecast-google-workspace.py) são fornecidos para cada combinação destes provedores de segurança de e-mail e provedores de calendário:
Provedores de segurança de e-mail:
Provedores de calendário:
Vá para Quickstart para começar!
Não está vendo o seu stack? Não hesite em nos dizer qual stack você deseja suportado em [email protected].
Estes scripts requerem uma solução de segurança de e-mail que já esteja detectando e-mails de phishing ICS, mas que não esteja removendo os eventos de calendário criados através desses e-mails.
Se você não tem uma solução de segurança de e-mail detectando phishing ICS, o Sublime Core oferece segurança de e-mail gratuita e auto-hospedável com detecção integrada de phishing ICS e remediação automática de calendário.
Phishing ICS é um ataque de duas frentes que entrega payloads maliciosos tanto na caixa de entrada do usuário quanto no calendário simultaneamente. Este vetor de ataque teve um aumento de aproximadamente 100x do primeiro ao quarto trimestre de 2025, segundo o Relatório de Pesquisa de Ameaças de E-mail 2026 da Sublime, com mais de 20% dos ataques de phishing de callback no quarto trimestre usando convites de calendário como mecanismo de entrega.
A lacuna crítica de segurança: os eventos de calendário persistem mesmo quando as soluções de segurança de e-mail colocam em quarentena ou excluem o e-mail malicioso. Isso afeta tanto os gateways de e-mail seguros (SEGs) quanto as soluções de segurança de e-mail baseadas em API, a maioria das quais não limpa eventos de calendário maliciosos a partir de fevereiro de 2026.
Com base na remediação integrada do Sublime de eventos de calendário maliciosos, estes scripts Python excluem eventos maliciosos quando sua solução de segurança de e-mail coloca em quarentena e-mails de phishing ICS. Os scripts:
.ics de calendário e outros anexos compatíveis com iCalendar dessas mensagensSendo Python puro, você pode executar estes scripts em muitos SOARs, incluindo Tines, Splunk SOAR e Cortex XSOAR.
Também estamos trabalhando em guias específicos para SOAR. Entre em contato em [email protected] se precisar de ajuda ou quiser ser notificado quando publicarmos documentação para um SOAR específico.
Cada script independente requer:
Você pode executar estes scripts em qualquer ambiente com:
requirements.txt (requests e PyJWT)Para implantações em produção, você também vai querer agendar o script para ser executado regularmente, por exemplo, com um cron job.
Os scripts são executados em modo dry-run por padrão para evitar exclusão acidental de eventos. Consulte opções de configuração para saber como habilitar a exclusão e como implementar lógica personalizada em resposta à descoberta de convites e eventos maliciosos.
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-client-secret"
PROOFPOINT_CLIENT_ID: ID do cliente OAuth 2.0 para a API de Resposta a Ameaças do Proofpoint CloudPROOFPOINT_CLIENT_SECRET: Segredo do cliente OAuth 2.0export MIMECAST_CLIENT_ID="your-client-id"
export MIMECAST_CLIENT_SECRET="your-client-secret"
export MIMECAST_REGION="global" # Opções: global, us, uk (padrão: global)
MIMECAST_CLIENT_ID: ID do cliente OAuth 2.0 para a API 2.0 do MimecastMIMECAST_CLIENT_SECRET: Segredo do cliente OAuth 2.0MIMECAST_REGION: Endpoint da região da API (opcional, padrão é global)Permissões de API necessárias:
Services | Threat Remediation | ReadGateway | Tracking | ReadArchive | Readexport ABNORMAL_API_KEY="your-api-key"
ABNORMAL_API_KEY: Chave de API da plataforma Abnormal Security# Opção 1: Arquivo de conta de serviço
export GOOGLE_SERVICE_ACCOUNT_FILE="/path/to/service-account.json"
# Opção 2: JSON da conta de serviço (inline)
export GOOGLE_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'
GOOGLE_SERVICE_ACCOUNT_FILE: Caminho para o arquivo de chave JSON da conta de serviçoGOOGLE_SERVICE_ACCOUNT_JSON: Credenciais da conta de serviço inline como string JSONConfiguração necessária:
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 do aplicativo (cliente) do Azure ADMICROSOFT_CLIENT_SECRET: Segredo do cliente do aplicativo do Azure ADMICROSOFT_TENANT_ID: ID do diretório (inquilino) do Azure ADPermissão de API necessária: Calendars.ReadWrite (Permissão de aplicativo)
export ICS_PHISHING_REMEDIATION_MODE="dry_run" # "dry_run" is 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
Por padrão, todos os scripts são executados em modo dry-run para evitar exclusões acidentais. Neste modo, o script irá:
Isso permite verificar se o script está funcionando corretamente antes de ativar a exclusão real.
Para realmente excluir eventos de calendário, defina a variável de ambiente ICS_PHISHING_REMEDIATION_MODE:
export ICS_PHISHING_REMEDIATION_MODE="delete_events"
Valores válidos:
dry_run (padrão) - Visualizar ações sem excluirdelete_events - Excluir realmente os eventos de calendário correspondentesValores inválidos gerarão um erro para evitar configuração incorreta.
Todos os scripts pesquisam mensagens em quarentena dentro de uma janela de tempo configurável:
export MESSAGE_LOOKBACK_MINUTES=10 # Opcional, padrão é 5 minutos
Importante: Este valor deve corresponder à frequência do seu cron job com uma pequena margem para garantir que nenhuma mensagem seja perdida. Por exemplo, se for executado a cada 5 minutos, defina a janela de retrospectiva para 10 minutos.
Para integrações adicionais, como com sistemas de registro ou ferramentas de monitoramento, você pode implementar callbacks personalizados em seu script e passá-los para a função delete_events_from_remediated_emails:
on_invitation_found_callback(invitation: CalendarInvitation) - Chamado quando um convite de calendário é encontrado em uma mensagem em quarentenaon_event_found_callback(invitation: CalendarInvitation, event: CalendarEvent) - Chamado para cada evento de calendário correspondenteExemplo:
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", # Override default dry_run mode
on_invitation_found_callback=log_invitation,
on_event_found_callback=log_event
)
Nota: Erros nos callbacks são registrados, mas não interrompem o processamento de eventos.
Todos os scripts seguem um padrão comum definido em 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"""
Implementações específicas de cada stack lidam com autenticação de API e lógica específica do provedor.