
Инструменты с открытым исходным кодом для предотвращения ICS-фишинга (вредоносные приглашения в календарь)
Этот набор инструментов для исправления вредоносных приглашений в календаре предназначен для команд, использующих решения для обеспечения безопасности электронной почты, которые изначально не исправляют такие атаки.
Если вы используете Sublime, этот набор инструментов вам не нужен, поскольку исправление уже встроено.
Стековые автономные скрипты (например, proofpoint-microsoft365.py, mimecast-google-workspace.py) предоставлены для каждой комбинации этих поставщиков безопасности электронной почты и календарей:
Поставщики безопасности электронной почты:
Поставщики календарей:
Перейдите к Quickstart, чтобы сразу приступить к работе!
Не видите свой стек? Не стесняйтесь сообщить нам, какой стек вы хотите видеть поддерживаемым, по адресу [email protected].
Эти скрипты требуют решения для обеспечения безопасности электронной почты, которое уже обнаруживает ICS-фишинговые письма, но не удаляет события календаря, созданные через эти письма.
Если у вас нет решения для безопасности электронной почты, обнаруживающего ICS-фишинг, Sublime Core предлагает бесплатную и самоустанавливаемую безопасность электронной почты со встроенным обнаружением ICS-фишинга и автоматическим исправлением календаря.
ICS-фишинг — это двунаправленная атака, которая одновременно доставляет вредоносные полезные нагрузки как в почтовый ящик, так и в календарь пользователя. Этот вектор атаки увеличился примерно в 100 раз с первого по четвертый квартал 2025 года, согласно Отчету об исследовании угроз электронной почты на 2026 год от Sublime, причем более 20% фишинговых атак с обратным звонком в четвертом квартале использовали приглашения в календаре в качестве механизма доставки.
Критический пробел в безопасности: события календаря сохраняются, даже если решения безопасности электронной почты помещают в карантин или удаляют вредоносное письмо. Это затрагивает как защищенные почтовые шлюзы (SEG), так и API-ориентированные решения безопасности электронной почты, большинство из которых по состоянию на февраль 2026 года не очищают вредоносные события календаря.
Основываясь на встроенном исправлении Sublime вредоносных событий календаря, эти скрипты Python удаляют вредоносные события, когда ваше решение безопасности электронной почты помещает в карантин ICS-фишинговые письма. Скрипты:
.ics календаря и другие вложения, совместимые с iCalendar, из этих писемЧистый Python позволяет запускать эти скрипты во многих SOAR, включая Tines, Splunk SOAR и Cortex XSOAR.
Мы также работаем над руководствами для конкретных SOAR. Пожалуйста, обращайтесь к [email protected], если вам нужна помощь или вы хотите получить уведомление, когда мы опубликуем документацию для конкретного SOAR.
Каждый автономный скрипт требует:
Вы можете запускать эти скрипты в любой среде с:
requirements.txt (requests и PyJWT)Для производственных развертываний вам также понадобится запланировать регулярный запуск скрипта, например, с помощью cron.
По умолчанию скрипты запускаются в режиме пробного запуска (dry-run), чтобы предотвратить случайное удаление событий. См. параметры конфигурации для получения информации о том, как включить удаление и как реализовать пользовательскую логику в ответ на обнаружение вредоносных приглашений и событий.
export PROOFPOINT_CLIENT_ID="your-client-id"
export PROOFPOINT_CLIENT_SECRET="your-client-secret"
PROOFPOINT_CLIENT_ID: OAuth 2.0 идентификатор клиента для API Proofpoint Cloud Threat ResponsePROOFPOINT_CLIENT_SECRET: Секрет клиента OAuth 2.0export MIMECAST_CLIENT_ID="your-client-id"
export MIMECAST_CLIENT_SECRET="your-client-secret"
export MIMECAST_REGION="global" # Варианты: global, us, uk (по умолчанию: global)
MIMECAST_CLIENT_ID: OAuth 2.0 идентификатор клиента для Mimecast API 2.0MIMECAST_CLIENT_SECRET: Секрет клиента OAuth 2.0MIMECAST_REGION: Конечная точка региона API (необязательно, по умолчанию global)Требуемые разрешения API:
Services | Threat Remediation | ReadGateway | Tracking | ReadArchive | Readexport ABNORMAL_API_KEY="your-api-key"
ABNORMAL_API_KEY: Ключ API из платформы Abnormal Security# Вариант 1: Файл сервисного аккаунта
export GOOGLE_SERVICE_ACCOUNT_FILE="/path/to/service-account.json"
# Вариант 2: JSON сервисного аккаунта (встроенный)
export GOOGLE_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'
GOOGLE_SERVICE_ACCOUNT_FILE: Путь к файлу ключа JSON сервисного аккаунтаGOOGLE_SERVICE_ACCOUNT_JSON: Встроенные учетные данные сервисного аккаунта в виде строки JSONНеобходимая настройка:
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 (клиента)MICROSOFT_CLIENT_SECRET: Секрет клиента приложения Azure ADMICROSOFT_TENANT_ID: Идентификатор каталога Azure AD (тенанта)Требуемое разрешение API: Calendars.ReadWrite (разрешение приложения)
export ICS_PHISHING_REMEDIATION_MODE="dry_run" # "dry_run" установлен по умолчанию
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
По умолчанию все скрипты запускаются в режиме пробного запуска, чтобы предотвратить случайное удаление. В этом режиме скрипт будет:
Это позволяет проверить правильность работы скрипта перед включением фактического удаления.
Чтобы фактически удалять события календаря, установите переменную окружения ICS_PHISHING_REMEDIATION_MODE:
export ICS_PHISHING_REMEDIATION_MODE="delete_events"
Допустимые значения:
dry_run (по умолчанию) — предварительный просмотр действий без удаленияdelete_events — фактически удалять соответствующие события календаряНедопустимые значения вызовут ошибку, чтобы предотвратить неправильную конфигурацию.
Все скрипты ищут сообщения в карантине в пределах настраиваемого временного окна:
export MESSAGE_LOOKBACK_MINUTES=10 # Необязательно, по умолчанию 5 минут
Важно: Это значение должно соответствовать частоте вашего расписания cron с небольшим запасом, чтобы ни одно сообщение не было пропущено. Например, если запуск происходит каждые 5 минут, установите окно поиска на 10 минут.
Для дополнительных интеграций, например, с системами ведения журнала или мониторинга, вы можете реализовать пользовательские обратные вызовы в своем скрипте и передать их в функцию delete_events_from_remediated_emails:
on_invitation_found_callback(invitation: CalendarInvitation) — вызывается, когда приглашение календаря найдено в сообщении в карантинеon_event_found_callback(invitation: CalendarInvitation, event: CalendarEvent) — вызывается для каждого соответствующего события календаряПример:
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", # Переопределение режима пробного запуска по умолчанию
on_invitation_found_callback=log_invitation,
on_event_found_callback=log_event
)
Примечание: Ошибки в обратных вызовах регистрируются, но не останавливают обработку событий.
Все скрипты следуют общему шаблону, определенному в common.py:
class MessageFetcher:
def yield_remediated_emails(self) -> Iterator[Message]:
"""Получить сообщения в карантине из вашего решения безопасности электронной почты"""
class EventDeleter:
def delete_matching_events(
self,
invitation: CalendarInvitation,
mode: Mode,
on_event_found_callback: Optional[Callable[[CalendarInvitation, CalendarEvent], None]]
) -> None:
"""Удалить события календаря, соответствующие вложению ICS"""
Реализации для конкретных стеков обрабатывают аутентификацию API и специфичную для поставщика логику.