
أدوات مفتوحة المصدر لإيقاف التصيد عبر ICS (دعوات التقويم الخبيثة)
هذه المجموعة الأدوات لمعالجة دعوات التقويم الضارة صُممت لمساعدة الفرق التي تستخدم حلول أمان البريد الإلكتروني التي لا تعالج هذه الهجمات بشكل أصلي.
إذا كنت تستخدم Sublime، فلن تحتاج إلى هذه المجموعة لأن المعالجة مدعومة أصلاً.
تم توفير نصوص برمجية مستقلة خاصة بكل رُكُز (مثل proofpoint-microsoft365.py، mimecast-google-workspace.py) لكل مجموعة من مزودي أمان البريد الإلكتروني ومزودي التقويم:
مزودو أمان البريد الإلكتروني:
مزودو التقويم:
انتقل إلى البدء السريع لتبدأ فوراً!
لا ترى رُكُزك؟ لا تتردد في إخبارنا بالرُّكُز الذي تريد دعمه على [email protected].
تتطلب هذه النصوص البرمجية حلاً لأمان البريد الإلكتروني يكتشف بالفعل رسائل التصيد عبر ICS، لكنه لا يزيل أحداث التقويم الناتجة عن تلك الرسائل.
إذا لم يكن لديك حل لأمان البريد الإلكتروني يكتشف التصيد عبر ICS، فإن Sublime Core تقدم أمان بريد إلكتروني مجاني وقابل للاستضافة الذاتية مع كشف مدمج للتصيد عبر ICS ومعالجة تلقائية للتقويم.
التصيد عبر ICS هو هجوم ذو شقين يُوصِل حمولات ضارة إلى كل من صندوق الوارد والتقويم الخاص بالمستخدم في وقت واحد. شهد هذا المتجه الهجومي زيادة تقدر بحوالي 100 ضعف من الربع الأول إلى الربع الرابع من عام 2025، وفقاً لتقرير Sublime تقرير أبحاث تهديدات البريد الإلكتروني لعام 2026، حيث استخدم أكثر من 20% من هجمات التصيد بالاتصال العكسي في الربع الرابع دعوات التقويم كآلية توصيل.
الفجوة الأمنية الحرجة: أحداث التقويم تبقى حتى عندما تقوم حلول أمان البريد الإلكتروني بعزل أو حذف البريد الإلكتروني الضار. وهذا يؤثر على كل من بوابات البريد الإلكتروني الآمنة (SEGs) والحلول الأمنية القائمة على API، حيث أن معظمها لا ينظف أحداث التقويم الضارة حتى فبراير 2026.
بناءً على المعالجة المدمجة من Sublime لأحداث التقويم الضارة، تقوم هذه النصوص البرمجية بلغة Python بحذف الأحداث الضارة عندما يعزل حل أمان البريد الإلكتروني رسائل التصيد عبر ICS. تقوم النصوص البرمجية بما يلي:
.ics الخاصة بالتقويم ومرفقات أخرى متوافقة مع iCalendar من تلك الرسائلباعتبارها نصوصاً برمجية خالصة بلغة Python، يمكنك تشغيل هذه النصوص في العديد من منصات SOAR، بما في ذلك Tines وSplunk SOAR وCortex XSOAR.
نعمل أيضاً على أدلة إرشادية خاصة بـ SOAR. يرجى التواصل مع [email protected] إذا كنت بحاجة إلى مساعدة أو ترغب في تلقي إشعار عند نشر وثائق لـ SOAR معينة.
يتطلب كل نص برمجي مستقل ما يلي:
يمكنك تشغيل هذه النصوص البرمجية في أي بيئة تحتوي على:
requirements.txt (requests وPyJWT)بالنسبة للنشر في الإنتاج، ستحتاج أيضاً إلى جدولة النص البرمجي للتشغيل بانتظام، مثلاً باستخدام وظيفة cron.
تعمل النصوص البرمجية في وضع التشغيل الجاف افتراضياً لمنع الحذف العرضي للأحداث. انظر خيارات الإعداد لمعرفة كيفية تمكين الحذف وكيفية تنفيذ منطق مخصص استجابةً لاكتشاف الدعوات والأحداث الضارة.
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 لواجهة API v2.0 الخاصة بـ MimecastMIMECAST_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 ADMICROSOFT_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 والمنطق الخاص بالمزود.