
ThePhish: أداة تحليل تلقائي لرسائل البريد الإلكتروني التصيدية
ThePhish هي أداة تحليل آلي لرسائل البريد الإلكتروني التصيدية تعتمد على TheHive و Cortex و MISP. وهي تطبيق ويب مكتوب بلغة Python 3 ويستند إلى Flask، يقوم بأتمتة عملية التحليل بأكملها بدءًا من استخراج المؤشرات (observables) من عنوان الرسالة ومحتواها وصولاً إلى صياغة حكم نهائي في معظم الحالات. بالإضافة إلى ذلك، فإنه يسمح للمحلل بالتدخل في عملية التحليل والحصول على تفاصيل إضافية حول البريد الإلكتروني الذي يتم تحليله إذا لزم الأمر. للتفاعل مع TheHive و Cortex، يستخدم TheHive4py و Cortex4py، وهما عميلا Python API اللذان يسمحان باستخدام REST APIs المتاحة من TheHive و Cortex على التوالي.
يوضح الرسم البياني التالي كيفية عمل ThePhish على مستوى عالٍ:
يهدف هذا المثال إلى توضيح كيف يمكن للمستخدم إرسال بريد إلكتروني إلى ThePhish لتحليله، وكيف يمكن للمحلل تحليل هذا البريد الإلكتروني فعليًا باستخدام ThePhish.
يمكن للمستخدم إرسال بريد إلكتروني إلى عنوان البريد الإلكتروني الذي يستخدمه ThePhish لجلب رسائل البريد الإلكتروني لتحليلها. يجب إعادة توجيه البريد الإلكتروني كمرفق بتنسيق EML لمنع تلوث عنوان البريد الإلكتروني. في هذه الحالة، عميل البريد المستخدم هو Mozilla Thunderbird وعنوان البريد المستخدم هو عنوان Gmail.
ينتقل المحلل إلى صفحة الويب الخاصة بـ ThePhish وينقر على زر "قائمة رسائل البريد الإلكتروني" للحصول على قائمة رسائل البريد الإلكتروني لتحليلها.
عندما ينقر المحلل على زر "تحليل" الخاص بالبريد الإلكتروني المحدد، يبدأ التحليل ويظهر تقدمه على واجهة الويب.
في هذه الأثناء، يقوم ThePhish باستخراج المؤشرات (عناوين URL، النطاقات، عناوين IP، عناوين البريد الإلكتروني، المرفقات وتجزئة تلك المرفقات) من البريد الإلكتروني ثم يتفاعل مع TheHive لإنشاء الحالة.
يتم إنشاء ثلاث مهام داخل الحالة.
بعد ذلك، يبدأ ThePhish في إضافة المؤشرات المستخرجة إلى الحالة.
في هذه المرحلة، يتم إخطار المستخدم عبر البريد الإلكتروني بأن التحليل قد بدأ بفضل مستجيب Mailer.
يسمح وصف المهمة الأولى لمستجيب Mailer بإرسال الإشعار عبر البريد الإلكتروني.
بعد إغلاق المهمة الأولى، تبدأ المهمة الثانية ويتم تشغيل المحللات على المؤشرات. يظهر تقدم التحليل على واجهة الويب أثناء تشغيل المحللات.
يمكن أيضًا عرض تقدم التحليل على TheHive، بفضل البث المباشر الخاص به.
بمجرد انتهاء جميع المحللات من تنفيذها، تُغلق المهمة الثانية وتُبدأ المهمة الثالثة، ثم يحسب ThePhish الحكم. نظرًا لأن الحكم هو "ضار"، يتم وضع علامة على جميع المؤشرات التي تبين أنها ضارة كمؤشرات خطر (IoC). في هذه الحالة، يتم وضع علامة على مؤشر واحد فقط كمؤشر خطر.
ثم يتم تصدير الحالة إلى MISP كحدث (event)، مع سمة واحدة تمثل المؤشر المذكور أعلاه.
بعد ذلك، يرسل ThePhish الحكم عبر البريد الإلكتروني إلى المستخدم بفضل مستجيب Mailer.
أخيرًا، يتم إغلاق كل من المهمة والحالة. يسمح وصف المهمة الثالثة لمستجيب Mailer بإرسال الحكم عبر البريد الإلكتروني. علاوة على ذلك، تم إغلاق الحالة بعد خمس دقائق وتم حلها على أنها "إيجابية حقيقية" مع "لا تأثير"، مما يعني أنه تم اكتشاف الهجوم قبل أن يتمكن من إحداث أي ضرر.
بمجرد إغلاق الحالة، يصبح الحكم متاحًا للمحلل على واجهة الويب مع سجل كامل لتقدم التحليل.
في هذه المرحلة، يمكن للمحلل العودة وتحليل بريد إلكتروني آخر. كانت الحالة الموضحة أعلاه متعلقة ببريد إلكتروني تصيدي، ولكن يمكن ملاحظة سير عمل مشابه عندما يتم تصنيف البريد الإلكتروني الذي تم تحليله على أنه "آمن". في الواقع، تُغلق الحالة ويُرسل الحكم عبر البريد الإلكتروني إلى المستخدم.
ثم يتم عرض الحكم أيضًا للمحلل على واجهة الويب.
من ناحية أخرى، عندما يتم تصنيف بريد إلكتروني على أنه "مشبوه"، يتم عرض الحكم فقط للمحلل على واجهة الويب.
في هذه المرحلة، يحتاج المحلل إلى استخدام الأزرار الموجودة على الجانب الأيسر من الصفحة لاستخدام TheHive و Cortex و MISP لإجراء مزيد من التحليل. وذلك لأن التحليل لم يكتمل بعد، وبالتالي يتم إخطار المستخدم فقط بأن تحليل البريد الإلكتروني الذي أرسله إلى ThePhish قد بدأ. في الواقع، لم يتم إغلاق المهمة الأخيرة والحالة بعد حيث يحتاج المحلل نفسه إلى إغلاقها بمجرد صياغة حكم نهائي.
يمكن للمحلل عرض تقارير جميع المحللات على TheHive و Cortex، وإذا تبين أن ذلك غير كافٍ، فيمكنه أيضًا تنزيل ملف EML الخاص بالبريد الإلكتروني وتحليله يدويًا.
عندما ينهي المحلل التحليل، يمكنه ملء نص البريد الإلكتروني لإرساله إلى المستخدم في وصف المهمة الأخيرة، وتشغيل مستجيب Mailer، وتصدير الحالة إلى MISP إذا كان الحكم "ضارًا" عن طريق النقر على زر "تصدير"، ثم إغلاق الحالة.
ThePhish هو تطبيق ويب مكتوب بلغة Python 3. يتم تنفيذ خادم الويب باستخدام Flask، بينما يتم تنفيذ جزء الواجهة الأمامية من التطبيق، وهو الصفحة الديناميكية المكتوبة بلغة HTML و CSS و JavaScript، باستخدام Bootstrap. بصرف النظر عن وحدة خادم الويب، يتكون منطق الواجهة الخلفية للتطبيق من ثلاث وحدات Python تغلف منطق التطبيق نفسه وفئة Python تُستخدم لدعم وظيفة التسجيل عبر بروتوكول WebSocket. إذا كنت تريد رؤية تمثيل بياني لمنطق التطبيق، انقر هنا. علاوة على ذلك، هناك العديد من ملفات التكوين التي تستخدمها الوحدات المذكورة أعلاه والتي تخدم أغراضًا متنوعة.
عندما ينتقل المحلل إلى عنوان URL الأساسي للتطبيق، يتم تحميل صفحة الويب الخاصة بـ ThePhish ويتم إنشاء اتصال ثنائي الاتجاه مع الخادم. يتم ذلك باستخدام مكتبة JavaScript Socket.IO في صفحة الويب التي تتيح التواصل في الوقت الفعلي وثنائي الاتجاه والقائم على الأحداث بين المتصفح والخادم. يتم إنشاء هذا الاتصال باستخدام اتصال WebSocket كلما أمكن، وسيستخدم الاستقصاء الطويل HTTP كبديل. لكي يعمل هذا، يستخدم تطبيق الخادم مكتبة Python Flask-SocketIO، التي توفر تكامل Socket.IO لتطبيقات Flask. ثم يتم استخدام هذا الاتصال بواسطة ThePhish لعرض تقدم التحليل على واجهة الويب.
في كل مرة يقوم فيها المحلل بإجراء على واجهة الويب، يتم إرسال طلب AJAX إلى الخادم، وهو طلب HTTP غير متزامن يسمح بتبادل البيانات مع الخادم في الخلفية وتحديث الصفحة دون إعادة تحميلها. يتيح ذلك للمحلل عرض قائمة رسائل البريد الإلكتروني لتحليلها وكذلك بدء التحليل.
يتفاعل ThePhish مع TheHive و Cortex بفضل TheHive4py و Cortex4py. علاوة على ذلك، يتفاعل مع خادم IMAP لاسترداد رسائل البريد الإلكتروني لتحليلها.
نظرًا لأن تثبيت وتكوين خدمات TheHive و Cortex و MISP من الصفر لبيئة إنتاج قد لا يكون مباشرًا للغاية، يوفر TheHive Project صور Docker وقوالب Docker Compose هنا لتسهيل عملية التثبيت. من أجل البساطة، القوالب المقدمة مبسطة، دون توفير خيارات التكوين الكاملة لكل صورة Docker.
إذا كنت ترغب فقط في تجربة ThePhish أو تريد تشغيله في أسرع وقت ممكن، يمكنك استخدام قالب Docker المقدم في مجلد docker، وهو إصدار معدل من أحد قوالب Docker المقدمة من TheHive Project والذي يسمح أيضًا بإنشاء حاوية ThePhish. لتثبيت ThePhish باستخدام Docker و Docker Compose، يرجى الرجوع إلى هذا الدليل. أوصي بشدة بتثبيته بهذه الطريقة على الأقل في المرة الأولى التي تستخدمه فيها حتى تتمكن من تعلم الأساسيات وكيفية تكوينه بتكوين بسيط يجب أن يعمل من المحاولة الأولى. في الواقع، يوفر الدليل المرتبط سابقًا أيضًا إجراءً خطوة بخطوة لتكوين مثيلات TheHive و Cortex و MISP.
يشير هذا الدليل إلى تثبيت ThePhish فقط، والذي يتطلب:
من أجل تثبيت وتكوين ودمج مثيلات TheHive و Cortex و MISP، يرجى الرجوع إلى وثائقها الرسمية:
يُنصح بأن يكون عنوان البريد الإلكتروني الذي يجلب منه ThePhish رسائل البريد الإلكتروني لتحليلها عنوان Gmail لأنه الأكثر اختبارًا مع ThePhish. من الأفضل أن يكون الحساب حديث الإنشاء، بغرض استخدامه فقط بواسطة ThePhish. يتم شرح إجراء تنشيط كلمة مرور التطبيق (app password) المطلوبة من قبل ThePhish للاتصال بصندوق البريد وجلب رسائل البريد الإلكتروني هنا.
تم اختبار إجراء التثبيت هذا على جهاز افتراضي يعمل بنظام Ubuntu 20.04.3 LTS مع تثبيت Python 3.8 والإصدارات من TheHive و Cortex و MISP الموضحة في ملف docker-compose.yml هذا.
بمجرد تكوين TheHive و Cortex و MISP والاستماع على عنوان URL معين، ويكون عنوان البريد الإلكتروني جاهزًا للاستخدام، يمكنك تثبيت وتكوين ThePhish.
استنساخ المستودع
$ git clone https://github.com/emalderson/ThePhish.git
إنشاء بيئة افتراضية Python وتفعيلها (هي ممارسة جيدة ولكنها ليست مطلوبة)
$ cd ThePhish/app
$ sudo apt install python3-venv
$ python3 -m venv venv
$ source venv/bin/activate
تثبيت المتطلبات
$ pip install -r requirements.txt
إضافة الدالة run_responder() إلى ملف api.py الخاص بـ TheHive4py
من أجل إرسال رسائل البريد الإلكتروني إلى المستخدم، يستخدم ThePhish مستجيب Mailer. نظرًا لأن ThePhish يستخدم TheHive4py للتفاعل مع TheHive، هناك حاجة إلى دالة تسمح بتشغيل مستجيب بواسطة معرفه. لسوء الحظ، هذه الدالة ليست جزءًا من TheHive4py حتى الآن، ولكن تم تقديم طلب سحب لإضافتها إلى TheHive4py (#219). أثناء انتظار إضافتها، يجب إضافتها يدويًا باستخدام الأمر التالي لكي يعمل ThePhish بشكل صحيح (استبدل إصدار Python في الأمر إذا كنت تستخدم إصدارًا مختلفًا من Python):
$ (cat << _EOF_
def run_responder(self, responder_id, object_type, object_id):
req = self.url + "/api/connector/cortex/action"
try:
data = json.dumps({ "responderId": responder_id, "objectType": object_type, "objectId": object_id})
return requests.post(req, headers={"Content-Type": "application/json"}, data=data, proxies=self.proxies, auth=self.auth, verify=self.cert)
except requests.exceptions.RequestException as e:
raise TheHiveException("Responder run error: {}".format(e))
_EOF_
) | tee -a venv/lib/python3.8/site-packages/thehive4py/api.py > /dev/null
يمكن لـ ThePhish تشغيل محلل أو مستجيب فقط إذا كان ممكّنًا ومُهيأً بشكل صحيح على Cortex. يشرح هذا الجزء من الوثائق كيفية تمكينها، بينما يسرد هذا الجزء المحللات والمستجيبين المتاحين مع معلمات التهيئة الخاصة بهم. تجدر الإشارة إلى أنه على الرغم من أن العديد من المحللات مجانية الاستخدام، إلا أن بعضها يتطلب وصولًا خاصًا والبعض الآخر يستلزم اشتراك خدمة صالحًا أو ترخيص منتج.
يقوم كل محلل بإخراج تقرير بتنسيق JSON يحتوي على مستوى ضار للملاحظة يمكن أن يكون واحدًا من "info" أو "safe" أو "suspicious" أو "malicious". ومع ذلك، على الرغم من أن هيكل التقرير يتبع عادةً اصطلاحًا، إلا أن هذا الاصطلاح لا يُحترم دائمًا. علاوة على ذلك، بعد تحليل كود العديد من المحللات والعديد من الاختبارات، تم اكتشاف أن بعض المحللات تحتوي على أخطاء. لهذا السبب، تم استخدام بعض التعديلات والحلول البديلة إما للحصول على مستويات الضرر التي توفرها هذه المحللات على أي حال أو لمنع تعطل التطبيق بسبب تلك الأخطاء.
علاوة على ذلك، لا تمثل هذه المستويات دائمًا مستوى الضرر الحقيقي للملاحظة. نظرًا لأن هذا يعتمد على كيفية برمجة المحللات نفسها، يأتي ThePhish مع ملف تهيئة آخر يسمى analyzers_level_conf.json، والذي يمكن من خلاله إنشاء تعيين بين مستويات الضرر الفعلية التي يوفرها أي محلل والمستويات التي يقررها المحلل. إلى جانب ذلك، يسمح هذا الملف للمحلل باختيار أنواع الملاحظات التي يجب تطبيق هذه التعديلات عليها. يجب أن يتبع الملف الهيكل الموضح في المثال هنا، باستخدام الاسم الدقيق للمحللات المراد تهيئتها مع المستوى المطلوب على اليمين. إذا لم يتم إدراج محلل في هذا الملف، فإن مستويات الضرر التي يوفرها تترك كما هي. يجب أن يتبع الملف الهيكل الموضح في المثال التالي، باستخدام الاسم الدقيق للمحللات المراد تهيئتها مع المستوى المطلوب على اليمين. إذا لم يتم إدراج محلل في هذا الملف، فإن مستويات الضرر التي يوفرها تترك كما هي.```json
{
"DomainMailSPFDMARC_Analyzer_1_1" : {
"dataType" : ["url", "ip", "domain", "mail"],
"levelMapping" : {
"malicious" : "suspicious",
"suspicious" : "suspicious",
"safe" : "safe",
"info" : "info"
}
},
"MISP_2_1" : {
"dataType" : ["url", "ip", "domain", "mail"],
"levelMapping" : {
"malicious" : "malicious",
"suspicious" : "malicious",
"safe" : "safe",
"info" : "info"
}
}
}
في هذا المثال، يتم رفع مستوى "مشبوه" لمحلل *MISP_2_1* إلى "خبيث" لأنه يشير إلى أن بعض العناصر القابلة للمراقبة في البريد الإلكتروني الذي يتم تحليله حالياً قد شوهدت بالفعل في بريد إلكتروني تم تحليله سابقاً وكان حكمه "خبيث". وعلى العكس، يتم خفض مستوى "خبيث" لمحلل *DomainMailSPFDMARC_Analyzer_1_1* إلى "مشبوه"، نظراً لأن العديد من النطاقات الشرعية لا تحتوي على سجلات DMARC وSPF مهيأة.
يمكنك إضافة أو إزالة المحللين في هذا الملف كما تشاء، لكنني أوصي بترك المحللين الموجودين بالفعل في الملف دون تغيير لأن تلك التعديلات كانت مدفوعة بالعديد من الاختبارات التي أجريت على الكثير من رسائل البريد الإلكتروني المختلفة.
### المحللون المختبرون
تم اختبار ThePhish مع المحللين التاليين:
- AbuseIPDB_1_0
- AnyRun_Sandbox_Analysis_1_0
- CyberCrime-Tracker_1_0
- Cyberprotect_ThreatScore_3_0
- *DomainMailSPFDMARC_Analyzer_1_1*
- DShield_lookup_1_0
- EmailRep_1_0
- FileInfo_8_0
- Fortiguard_URLCategory_2_1
- IPinfo_Details_1_0
- **IPVoid_1_0**
- KasperskyThreatIntelligencePortal_1_0
- Maltiverse_Report_1_0
- *Malwares_GetReport_1_0*
- *Malwares_Scan_1_0*
- MaxMind_GeoIP_4_0
- MetaDefenderCloud_GetReport_1_0
- *MISP_2_1*
- NERD_1_0
- *Onyphe_Summary_1_0*
- OTXQuery_2_0
- PassiveTotal_Enrichment_2_0
- *PassiveTotal_Malware_2_0*
- PassiveTotal_Osint_2_0
- PassiveTotal_Ssl_Certificate_Details_2_0
- PassiveTotal_Ssl_Certificate_History_2_0
- PassiveTotal_Unique_Resolutions_2_0
- PassiveTotal_Whois_Details_2_0
- PhishTank_CheckURL_2_1
- **Pulsedive_GetIndicator_1_0**
- *Robtex_Forward_PDNS_Query_1_0*
- *Robtex_IP_Query_1_0*
- *Robtex_Reverse_PDNS_Query_1_0*
- Shodan_DNSResolve_1_0
- **Shodan_Host_1_0**
- **Shodan_Host_History_1_0**
- Shodan_InfoDomain_1_0
- **SpamhausDBL_1_0**
- StopForumSpam_1_0
- *Threatcrowd_1_0*
- UnshortenLink_1_2
- **URLhaus_2_0**
- Urlscan_io_Scan_0_1_0
- *Urlscan_io_Search_0_1_1*
- VirusTotal_GetReport_3_1
- VirusTotal_Scan_3_1
- Yara_2_0
المحللون المميزون بخط *مائل* هم الذين تم تعديل مستوياتهم (ولكن يمكن تجاوزها، على الرغم من أنه لا يُنصح بذلك)، بينما المحللون المميزون بخط **عريض** هم الذين تتم معالجتهم مباشرة في كود ThePhish إما لأنهم لا يحترمون الاتفاقية الخاصة بهيكل التقرير، أو لأن لديهم أخطاء. علاوة على ذلك، تتم معالجة المحللين التاليين في كود ThePhish لاستخدامهم بأفضل طريقة ممكنة:
- **DomainMailSPFDMARC_Analyzer_1_1**: يتم تشغيله فقط على النطاقات التي يُفترض أنها قادرة على إرسال رسائل البريد الإلكتروني.
- **MISP_2_1**: يُستخدم للتكامل مع MISP.
- **UnshortenLink_1_2**: يتم تشغيله قبل أي محلل آخر على عنوان URL وذلك لإمكانية فك اختصار الرابط وإضافة الرابط المفكوك كعنصر قابل للمراقبة إضافي.
- **Yara_2_0**: هو المحلل الوحيد الذي يتم تشغيله على مرفق EML.
### تفعيل محلل *MISP*
من أجل دمج Cortex مع MISP، يجب عليك تفعيل محلل *MISP_2_1* وتكوينه بمفتاح المصادقة الخاص بالمستخدم الذي تم إنشاؤه على MISP والذي سيستخدمه Cortex للتفاعل مع MISP. هذا يعني أنه يجب إنشاء مؤسسة ومستخدم بدور `sync_user` في تلك المؤسسة على MISP مسبقاً (يمكنك تعلم كيفية القيام بذلك والحصول على مفتاح المصادقة [هنا (وثائق ThePhish، الموصى بها)](https://github.com/emalderson/ThePhish/tree/master/docker#configure-the-misp-container) أو [هنا (وثائق MISP)](https://www.circl.lu/doc/misp/administration/#users)).
### تفعيل محلل *Yara*
إذا كنت ترغب في استخدام محلل *Yara_2_0*، فيجب عليك إنشاء مجلد على الجهاز الذي يعمل عليه Cortex يحتوي على:
- قواعد Yara، حيث تكون كل قاعدة ملفاً بامتداد `.yar`
- ملف باسم `index.yar`، يحتوي على سطر لكل قاعدة Yara في ذلك المجلد يتوافق مع الصياغة التالية: `include "yara_rule_name.yar"`
ثم، يجب عليك تكوين مسار هذا المجلد على Cortex. على سبيل المثال، إذا قمت بإنشاء المجلد `yara_rules` في المسار `/opt/cortex`، فستحتاج إلى تكوين المسار `/opt/cortex/yara_rules` على Cortex (على الواجهة الإلكترونية).
## تفعيل المستجيب *Mailer*
من أجل إرسال رسائل البريد الإلكتروني إلى المستخدمين، يجب تفعيل المستجيب *Mailer* وتكوينه بشكل صحيح. الإجراء المستخدم لتفعيل مستجيب مماثل للإجراء المستخدم لتفعيل محلل. إذا كنت تستخدم عنوان Gmail، فهذه هي المعاملات الصحيحة التي يجب تعيينها:
- from: `<YourGmailEmailAddress>`
- smtp_host :`smtp.gmail.com`
- smtp_port: `587`
- smtp_user: `<YourGmailEmailAddress>`
- smtp_pwd: `<YourGmailEmailAddressAppPassword>`
## استخدام القائمة البيضاء
يسمح ThePhish بإنشاء قائمة بيضاء لتجنب تحليل العناصر القابلة للمراقبة التي قد تسبب نتائج إيجابية خاطئة أو التي يقرر المحلل أنه لا ينبغي أخذها في الاعتبار أثناء التحليل. تحتوي القائمة البيضاء على ملف يُسمى `whitelist.json` وتتكون من العديد من القوائم المختلفة لتوفير مرونة كبيرة من حيث أنواع العناصر القابلة للمراقبة للتطابق وأنماط التطابق. وهي تدعم أنماط التطابق التالية:
- مطابقة السلسلة النصية التامة لعناوين البريد الإلكتروني، وعناوين IP، وعناوين URL، والنطاقات، وأسماء الملفات، وأنواع الملفات، وقيم التجزئة
- مطابقة التعبيرات النمطية (Regex) لعناوين البريد الإلكتروني، وعناوين IP، وعناوين URL، والنطاقات، وأسماء الملفات
- مطابقة التعبيرات النمطية للنطاقات الفرعية، وعناوين البريد الإلكتروني، وعناوين URL التي تحتوي على النطاقات المحددة
فيما يلي مثال توضيحي لملف `whitelist.json`.```json
{
"exactMatching": {
"mail" : [],
"ip" : [
"127.0.0.1",
"8.8.8.8",
"8.8.4.4"
],
"url" : [],
"domain" : [
"adf.ly",
"paypal.com"
],
"filename" : [],
"filetype" : [
"application/pdf"
],
"hash" : []
},
"domainsInSubdomains" : [
"paypal.com"
],
"domainsInURLs" : [
"paypal.com"
],
"domainsInEmails" : [
"paypal.com"
],
"regexMatching" : {
"mail" : [],
"ip" : [
"10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",
"172\\.16\\.\\d{1,3}\\.\\d{1,3}",
"192\\.168\\.\\d{1,3}\\.\\d{1,3}"
],
"url" : [],
"domain" : [],
"filename" : []
}
}
بينما يتم استخدام الأجزاء المتعلقة بالمطابقة التامة والمطابقة بالتعبيرات العادية دون أي تعديل، تُستخدم الأجزاء المتبقية لإنشاء ثلاث قوائم إضافية من التعبيرات العادية. ليس مطلوبًا منك تصميم تعبيرات عادية معقدة لتفعيل هذه الميزات، بل تحتاج فقط إلى إضافة النطاقات إلى القوائم الصحيحة وسيقوم ThePhish بالباقي. على سبيل المثال، في المثال الموضح أعلاه، لا يتم تصفية النطاق "paypal.com" فحسب، بل يتم أيضًا تصفية أي نطاق فرعي وعنوان URL وعنوان بريد إلكتروني يحتوي على النطاق "paypal.com". تم تصميم هذه التعبيرات العادية لتجنب بعض السلوكيات غير المرغوب فيها، على سبيل المثال، تمنع النطاقات مثل "paypal.com.attacker.com" من الإدراج في القائمة البيضاء عن طريق الخطأ.
ملاحظة: إذا أضفت نطاقًا تحت "domainsInSubdomains"، فسيتم تصفية النطاق نفسه أيضًا. لذلك، فإن إضافة نفس النطاق إلى قائمة النطاقات تحت "exactMatching" ليس ضروريًا. يتم التمييز للحالات التي تحتاج فيها فقط إلى إدراج النطاق نفسه في القائمة البيضاء، وليس نطاقاته الفرعية. وبالتالي، في هذا المثال، فإن تضمين "paypal.com" في كلا القائمتين يعد غير ضروري.
ملف القائمة البيضاء المقدم في هذا المستودع مليء بالفعل ببعض العناصر المراقبة المدرجة في القائمة البيضاء، لكنه مجرد مثال، يمكنك (ويجب عليك) تحريره ليناسب احتياجاتك عن طريق إزالة العناصر أو إضافتها.
يستخدم ThePhish ميزة رائعة من TheHive وهي إمكانية تصدير حالة إلى MISP كحدث. هذا يجعل من الممكن استخدام محلل MISP_2_1 للبحث عن تطابق بين عنصر مراقب في حالة وسمة من أحد تلك الأحداث على MISP. لسوء الحظ، خلال المراحل الأولى من تطوير ThePhish، لم تكن دالة تسمح بذلك عبر API بلغة Python متاحة في TheHive4py بعد. لهذا السبب، تم تقديم طلب سحب (#187) إلى TheHive4py لإضافة هذه الوظيفة. تم قبول طلب السحب وتمت إضافة الدالة export_to_misp() إلى الإصدار 1.8.0 من TheHive4py.
يعتمد ThePhish بشكل كبير على المحللين الذين يوفرهم Cortex. لضمان استمرار عملهم كما هو مقصود، يتم تقديم طلبات سحب إلى المستودع الذي يحتوي عليهم. فيما يلي قائمة محدثة بهذه طلبات السحب:
ThePhish هو برنامج مفتوح المصدر ومجاني تم إصداره بموجب AGPL (رخصة أفيرو العمومية العامة).
بدأ هذا المشروع في عام 2020، وتم تقديم نسخة مبكرة وغير كاملة منه كعملي النهائي للتخرج في Cybersecurity HackAdemy التي نظمتها جامعة نابولي فيديريكو الثاني. لذلك، أود أن أشكر روبرتو تشيلتي على الفكرة الأولية وفريقي الذي تألف من gianpor وMrFelpon وxdinax، الذين ساعدوني في المراحل المبكرة من تطوير التطبيق من خلال النشر الأولي والاختبارات الأولى.
ثم قمت بإعادة تصميم الأداة بالكامل من حيث الوظائف والشعار وواجهة المستخدم، وأضفت دعم Docker وكتبت وثائق شاملة ليتم تقديمها كأطروحة التخرج لدرجة الماجستير في الهندسة الحاسوبية في عام 2021 في جامعة نابولي فيديريكو الثاني بإشراف سيمون بيترو رومانو (spromano).
كما أود أن أشكر كزافييه ميرتنز (xme) على تطويره IMAP2TheHive ونشره على GitHub، حيث كان الشرارة الأولية التي أدت إلى تطوير هذا المشروع والذي استلهم منه كود ThePhish.
التكوين
ملف configuration.json هو ملف التكوين العام الذي يسمح بتعيين معلمات الاتصال بصندوق البريد وبمثيلات TheHive و Cortex و MISP. كما يسمح بتعيين معلمات متعلقة بالحالات التي سيتم إنشاؤها على TheHive.
{
"imap" : {
"host" : "imap.gmail.com",
"port" : "993",
"user" : "",
"password" : "",
"folder" : "inbox"
},
"thehive" : {
"url" : "http://thehive:9000",
"apikey" : ""
},
"cortex" : {
"url" : "http://cortex:9001",
"apikey" : "",
"id" : "local"
},
"misp" : {
"id" : "MISP THP"
},
"case" : {
"tlp" : "2",
"pap" : "2",
"tags" : ["email", "ThePhish"]
}
}
يمكنك تعلم كيفية إنشاء مؤسسة ومستخدم بدور org-admin في تلك المؤسسة على TheHive والحصول على مفتاح API الخاص به هنا (وثائق ThePhish، موصى بها) أو هنا (وثائق TheHive). وبالمثل، يمكنك تعلم كيفية إنشاء مؤسسة ومستخدم بأدوار read, analyze في تلك المؤسسة على Cortex والحصول على مفتاح API الخاص به هنا (وثائق ThePhish، موصى بها) أو هنا (وثائق Cortex).
يجب أن تكون عناوين URL والمعرفات التي تم تعيينها في هذا الملف هي نفسها التي تم تعيينها في ملف تكوين TheHive المسمى application.conf، والذي يحتوي على جزء متعلق بـ Cortex وجزء متعلق بـ MISP. المعلمات التي يجب أن تبحث عنها هي name و url في كلا الجزأين، والتي تتوافق مع معرفات وعناوين URL لمثيلات Cortex و MISP. يمكن أيضًا العثور على المعرفات في نافذة حول على واجهة الويب الخاصة بـ TheHive. يظهر مثال حيث معرف Cortex هو السلسلة local ومعرف MISP هو السلسلة MISP THP في الشكل التالي:
يتم استخدام ملف application.conf لدمج TheHive مع Cortex و MISP. يمكنك تعلم كيفية إعداد التكامل مع Cortex هنا (وثائق ThePhish، موصى بها) أو هنا (وثائق TheHive)، بينما بالنسبة للتكامل مع MISP يمكنك الذهاب هنا (وثائق ThePhish، موصى بها) أو هنا (وثائق TheHive).يجب أيضًا استبدال عناوين URL التي يمكن من خلالها الوصول إلى مثيلات TheHive وCortex وMISP في الملف templates/index.html حتى تتمكن الأزرار الموجودة في واجهة الويب من الوصول إليها. للقيام بذلك، استبدل آخر ثلاث href في هذا الجزء من الكود:
<ul class="navbar-nav text-light" id="accordionSidebar">
<li class="nav-item"><a class="nav-link active" href="/" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="https://raw.githubusercontent.com/emalderson/thephish/static/assets/img/logo_rounded.png" style="margin-top: 0px;margin-left: 0px;"></a></li>
<li class="nav-item"><a class="nav-link" href="http://thehive:9000" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="https://raw.githubusercontent.com/emalderson/thephish/static/assets/img/thehive.png" style="margin-right: 0px;margin-left: 0px;"></a></li>
<li class="nav-item"><a class="nav-link" href="http://cortex:9001" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="https://raw.githubusercontent.com/emalderson/thephish/static/assets/img/cortex.png" style="transform: translate(0px);"></a></li>
<li class="nav-item"><a class="nav-link" href="https://misp" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="https://raw.githubusercontent.com/emalderson/thephish/static/assets/img/misp.png" style="transform: translate(0px);"></a></li>
</ul>
تشغيل التطبيق
$ python3 thephish_app.py
الخادم الذي سيتم استخدامه لتشغيل التطبيق هو خادم WSGI المقدم من eventlet، حيث أنه مدرج في المتطلبات. وهو ضروري لكي يعمل بروتوكول WebSocket وتجنب العودة إلى الاستقصاء الطويل HTTP. بدون eventlet، سيتم استخدام خادم Flask WSGI الافتراضي (Werkzeug). إذا كنت ترغب في استخدام خادم WSGI آخر (مثل Gunicorn) أو استخدام وكيل عكسي (مثل NGINX)، فإن وثائق Flask-SocketIO تشرح كيفية القيام بذلك.
الآن يجب أن يكون التطبيق قابلاً للوصول على http://localhost:8080.
⚠️ تحذير: إذا كنت تستخدم Mozilla Firefox لاستخدام ThePhish ولسبب ما ظهرت رسالة خطأ أثناء التحليل، فقد تجد الحل هنا.