شرح هجمة Punycode 0-Click Account Takeover

ZeoniX

مقدمة

في عالم تتزايد فيه التهديدات السيبرانية و تتطور فيه تقنيات الهندسة الاجتماعية, تظهر لنا بين الحين و الأخر أساليب جديدة تستغل الثغرات بطرق لاتخطر على بالك. من بين هذه الأساليب, يبرز هجوم 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؟

عندما تقوم بكتابة اسم نطاق فيه أحرف غير إنجليزية — مثل: (مثال.com)
يتم تحويله في الخلفية إلى صيغة مشفّرة تبدو بهذا الشكل: (xn--mgbh0fb.com)

هذا الشكل الغريب هو ما يُعرف بـ Punycode.

البشر يرون اسمًا مألوفًا بلغة طبيعية مثل اسم "زيرو" لكن المتصفح أو السيرفر لا يرى ذلك و سيقوم بترجمها الى نسخة مشفرة قابلة للفهم من قبل بروتوكول الأنترنت

كيف يتم استخدام  Punycode في الهجمات؟ 

المشكلة تبدأ عندما يستغل المهاجمون هذا النظام لتسجيل نطاقات تبدو مطابقة تماما لأسماء نطاقات مشهورة, لكن باستخدام أحرف متشابهة من لغات أخرى (مثل السيريلية أو اليونانية)
مثال:

النطاق الحقيقي: apple.com

النطاق المزيف: аррӏе.com باستخدام Punycode -> يظهر في بعض المتصفحات على شكل apple.com
لكن في الحقيقة هو: xn--80ak6aa92e.com

هذه الحيلة تُستخدم لخداع المستخدمين أو النظم الآلية، وتُعد من أساليب الهندسة الاجتماعية التقنية المتقدم

ما هي 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؟

خطوات اثبات هجمة Zero-Click Account Tackover من خلال ثغرة في PunyCode تحديدا داخل الMysql:
  • انشاء حساب ب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_general_ci
استخدم: utf8_bin

أو أي collation لا يتجاهل الفرق بين `a` و `à`.

الحماية من هجمات Punycode و0-Click لا تأتي من فحص "الشكل الظاهري" فقط، بل من فهم كيف يعالج النظام البيانات في العمق — من قاعدة البيانات إلى المتصفح، ومن التحقق إلى التصرفات الآلية.

حسابنا علي منصة | X
قناتنا علي منصة | Telegram 
شبكة قنوات الفريق 
يمكنك الإنضمام للبوت الذي يضم جميع شروحات وكتب وكورسات الامن السيبراني👇🏻

إرسال تعليق