مقدمة
في عالم تتزايد فيه التهديدات السيبرانية و تتطور فيه تقنيات الهندسة الاجتماعية, تظهر لنا بين الحين و الأخر أساليب جديدة تستغل الثغرات بطرق لاتخطر على بالك. من بين هذه الأساليب, يبرز هجوم Punycode 0-Click Account Takeover كواحد من أكثر السيناريوهات خداعا و بساطة في آن واحد, حيث يستطيع المهاجم الاستيلاء على حسابات الضحايا دون أي تفاعل منهم — لانقر, لارابط, ولاحتى كلمة مرور !
تعتمد هذه التقنية على استغلال النظام الترميزي Punycode, وهو معيار يستخدم لتحويل أسماء النطاقات التي تحتوي على حروف غير لاتينية الى صيغة يمكن لأنظمة DNS قراءتها. ولكن, ما لايعرفه الكثيرون هو أن هذه التقنية يمكن أن تكون سلاحا بيد المهاجمين. تُمكنهم من انشاء عناوين بريد الكتروني تبدو مطابقة تماما لعناوين الضحايا, بينما تكون مختلفة تقنيًا.
في هذه المقالة، سنخوض في تفاصيل هذا الهجوم الذكي، بدءًا من شرح مفهوم Punycode، مرورًا بكيفية تنفيذ الهجوم عمليًا، وانتهاءً بإجراءات الحماية التي يجب على المطورين والمنصات اتباعها لتفادي هذا النوع من الاستغلال.
تعريف Punycode
قبل التعمق في شرح Punycode 0-Click Account Takeover دعنا نشرح ماهو Punycode للناس المبتدئة.
ال Punycode هو نظام ترميز يستخدم لتحويل أسماء النطاقات التي تحتوي على أحرف غير لاتينية (مثل العربية، الصينية، الروسية...) إلى صيغة يفهمها نظام أسماء النطاقات (DNS) الذي لا يستطيع التعامل إلا مع الحروف الإنجليزية (A-Z) والأرقام (0-9) والشرطة (-). تم تطوير هذا الترميز كجزء من معيار يُعرف باسم IDN (Internationalized Domain Names)، والذي يسمح للمستخدمين حول العالم باستخدام لغاتهم المحلية عند كتابة أسماء المواقع.
كيف يعمل Punycode؟
يتم تحويله في الخلفية إلى صيغة مشفّرة تبدو بهذا الشكل: (xn--mgbh0fb.com)
كيف يتم استخدام Punycode في الهجمات؟
هذه الحيلة تُستخدم لخداع المستخدمين أو النظم الآلية، وتُعد من أساليب الهندسة الاجتماعية التقنية المتقدم
ما هي Zero-Click Account Takeover ؟
هي نوع من أنواع الاستيلاء على الحسابات يحدث دون أي تفاعل من الضحية، أي لا يحتاج المهاجم إلى أن ينقر الضحية على رابط أو يُدخل كلمة مرور أو يقوم بأي إجراء.
الاستيلاء على الحساب يتم بشكل صامت وخادع، فقط عبر استغلال ثغرات منطقية أو ضعف في التحقق من الهوية، دون علم الضحية."
كيف يُستخدم Punycode لتنفيذ هجمة Zero-Click Account Takeover ؟
المصدر الحقيقي لهذا النوع من الهجمات يكمن في سلوك قواعد البيانات — وخاصة MySQL — عند مقارنة السلاسل النصية Strings , حيث أن MySQL، في إعداداتها الافتراضية (مثل utf8_general_ci أو utf8mb4_general_ci)، تتعامل مع بعض الأحرف المتطابقة بصريًا أو صوتيًا على أنها متساوية.
بمعنى أنه لو كان عندنا مدخل : zeonix@gmàil.com فانه يساوي zeonix@gmail.com!
تتذكر لما أعطيتك مثال بApple ؟ حسنا لو نفترض اننا قمنا بانشاء SMTP وهمي باسم gmàil.com - ماهي الخطوات التالية لتنفيذ هجمة Zero-click Accout tackover؟
- انشاء حساب بemail عادي mohamed@gmail.com
- الدخول الى الموقع المستهدف و عمل نسيت كلمة السر - راح يصلك الى inbox الemail الخاص بك وهاذ منطقي و الكل يعرفه, ادخل الى صفحة انشاء الحسابات و جرب اعمل حساب بmohamed@gmàil.com اذا الوقع قال لك أن الحساب موجود من قبل ! هنا انت في الطريق الصحيح.
- حاليا بعدما تأكدنا من وجود الثغرة ادخل الى صفحة نسيت كلمة السر و ضع mohamed@gmàil.com هاذ تلقائيا سيترجم الى xn--mail-7cd.com لكن من السهل عمل Bypass لها عن طريق التعديل في الreq داخل الBurp و تحويلها يدويا الى gmàil.com
- سيصلك Email الOTP في سيرفر الوهمي و مبروك عليك الحساب
ملاحظة:
تقنيا عندما تنشئ gmàil.com سيتحول الى xn--mail-7cd.com لاتنسى عملية الترجمة التي شرحتها لك مسبقا !
كيف تحمي منصتك من هذا النوع من الهجمات؟
للوقاية من هجمات Punycode + 0-Click Account Takeover يجب أن تدرك أن الخطر لا يكمن فقط في الواجهة الأمامية (Frontend)، بل يتعمق في طريقة تخزين البيانات والتحقق منها داخل النظام، وخاصة عند التعامل مع البريد الإلكتروني، الأسماء، وأسماء المستخدمين.
فرض Normalization على البريد الإلكتروني
طبق Unicode Normalization (NFC أو NFKC) لتحويل الأحرف إلى شكلها الأساسي - استخدم مكتبات مثل unicodedata.normalize() في Python أو ما يعادلها في لغتك.
الهدف منها تحويل à إلى a، و"أحرف السيريلية" إلى اللاتينية إذا أمكن.
رفض أو فلترة أسماء النطاقات التي تستخدم Punycode
تأكد أن اسم النطاق في البريد الإلكتروني لا يحتوي على `xn--` في بدايته - مثل: (user@xn--pple-43d.com)
قارن البريد الإلكتروني على مستوى الـ ASCII فقط
خزن نسخة "مفلترة ومسطّحة" من الإيميل بصيغة lowercase وASCII فقط للمقارنة.
Normalize(lowercase(strip(punycode_decode(email))))
استخدم collation صارم في قواعد البيانات
استخدم: utf8_bin
أو أي collation لا يتجاهل الفرق بين `a` و `à`.
الحماية من هجمات Punycode و0-Click لا تأتي من فحص "الشكل الظاهري" فقط، بل من فهم كيف يعالج النظام البيانات في العمق — من قاعدة البيانات إلى المتصفح، ومن التحقق إلى التصرفات الآلية.