
PolarDNS هو خادم DNS موثوق متخصص مناسب لاختبار الاختراق وبحوث الثغرات الأمنية.
PolarDNS هو خادم DNS موثوق ومتخصص مكتوب بلغة Python 3.x، تم تطويره أصلاً كأداة لاختبار أمان محلّلات DNS التكرارية من جانب الخادم.
_
يمكن استخدام PolarDNS لاختبار:
يدعم كلًا من بروتوكولي UDP وTCP، ويمنح المشغل تحكمًا كاملاً في طبقة بروتوكول DNS.
يمكن لخادم PolarDNS إنتاج مجموعة متنوعة من استجابات DNS غير القياسية وغير الممتثلة، واستجابات DNS المخالفة لمواصفات RFC، بما في ذلك استجابات DNS غير الطبيعية تمامًا والمشوهة.
يمكن أن يكون هذا مفيدًا لـ:
هناك ثلاث طرق متاحة لتثبيت PolarDNS.
يتطلب PolarDNS إصدار Python 3.11 أو أحدث وليس له تبعيات إضافية.
هذه هي أسهل طريقة لتثبيت وتشغيل PolarDNS:
pip install polardns
polardns
يمكنك أيضًا استنساخ المستودع وتشغيل PolarDNS مباشرة:
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
هذه الطريقة موصى بها إذا كنت تخطط لتصحيح الكود أو تعديله، أو إضافة ميزات جديدة.
يمكنك أيضًا تشغيل PolarDNS في حاوية Docker:
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
يمكن تكوين خادم PolarDNS عبر ملف الإعدادات polardns/polardns.toml.
عند بدء تشغيل PolarDNS، يجب أن ترى إخراجًا مشابهًا لما يلي:
python polardns.py
1741599804.9039893 | PolarDNS v1.6.1 server starting up
1741599804.9039893 | Using '/path/to/your/polardns/polardns.toml' config file
1741599804.9039893 | Starting listener at tcp://0.0.0.0:53
1741599804.9039893 | Starting listener at udp://0.0.0.0:53
يشير هذا إلى أن الخادم يعمل.
بشكل افتراضي، يبدأ الخادم بالاستماع على جميع الواجهات على المنفذ 53 UDP وTCP (0.0.0.0:53)، جاهزًا للإجابة على استعلامات DNS.
يمكنك اختباره محليًا عن طريق طرح الاستعلام النموذجي التالي، والذي يجب أن يحل دائمًا إلى شيء ما.
اطرح في وضع UDP:
dig always.yourdomain.com @127.0.0.1
اطرح في وضع TCP:
dig always.yourdomain.com @127.0.0.1 +tcp
يجب أن تحصل على سجل A بعنوان IP 2.3.4.5، كما في لقطة الشاشة هذه:

يشير هذا إلى أن الخادم يعمل بشكل صحيح.
من خلال مطالبة خادم PolarDNS بحل شيء ما، فإنك تعطيه تعليمات حول كيفية الرد عليك. هذا يعني أنك (العميل) تملي على خادم PolarDNS نوع الاستجابة التي يجب أن ينتجها لك.
على سبيل المثال، ضع في اعتبارك الاستعلام التالي:
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
يجب أن تحصل على سجل A بعنوان IP 2.3.4.5 مرة أخرى، ولكن هذه المرة بقيمة TTL تبلغ 2,000,000,000 (63.4 سنة) وبعد تأخير قدره 1.5 ثانية:

في المثال أعلاه، استخدمنا الميزة الأساسية always (التي تحل دائمًا إلى شيء ما)، ودمجناها مع معدّل ttl لضبط قيمة TTL ومعدّل slp للانتظار قبل إرسال الاستجابة.
يحتوي PolarDNS على الوظائف الرئيسية التالية:
هناك أكثر من 70 ميزة مختلفة و19 معدّل استجابة منفذة حاليًا. باستخدام ميزات مختلفة ودمجها معًا مع معدّلات استجابة مختلفة، من الممكن إنتاج عدد لا يحصى من المتغيرات لاستجابة معينة.
راجع الفهرس المرفق لجميع الميزات ومعدّلات الاستجابة المنفذة.
يمنح هذا PolarDNS القدرة على إنتاج استجابات DNS غير عادية للغاية، وغير طبيعية، وحتى مشوهة، مما يسمح للمشغل برؤية كيف يتعامل الطرف المتلقي مع مثل هذه المواقف وما إذا كان الطرف المتلقي قويًا وناضجًا تقنيًا.
بعض الأمثلة على استجابات DNS التي يمكن لـ PolarDNS إنتاجها تشمل:
يمكن أن تؤدي هذه إلى اكتشاف ثغرات متنوعة مثل:
راجع عروض BlackHat MEA 2023 (بما في ذلك الشرائح الإضافية BONUS) لمزيد من التفاصيل، والعديد من الأمثلة وحالات الاستخدام.
فيما يلي نظرة عامة عالية المستوى لما تحتاجه لبدء اختبار خوادم DNS التكرارية.
example123.com باستخدام مسجل النطاقات المفضل لديك.polardns/polardns.toml على كل نسخة وقم بتغيير اسم النطاق وعناوين IP الخاصة بخادم الأسماء وفقًا لذلك - نفس الإعدادات على كليهما.الآن يجب أن تكون بنيتك التحتية جاهزة لاختبار أي محلّل DNS تكراري تختاره.
من أجل بدء اختبار هدف محلّل DNS تكراري، يجب عليك توجيه استعلاماتك إلى محلّل DNS الهدف، على سبيل المثال:
dig always.example123.com @<TARGET-RESOLVER-IP>
على سبيل المثال، لاختبار DNS العام لـ CloudFlare:
dig always.example123.com @1.1.1.1
أثناء التحليل، سيتصل محلّل DNS الهدف بخوادم الأسماء الموثوقة PolarDNS الخاصة بك (التي تدير نطاق الاختبار example123.com) لحل الاستعلام.
سيستجيب أحد خوادم PolarDNS الخاصة بك لمحلّل DNS الهدف. سيتلقى المحلّل الاستجابة من PolarDNS ويحللها ويعالجها. بعد ذلك، سيعيد الإجابة النهائية إليك (العميل).
فيما يلي نظرة عامة مرئية لعملية الاختبار:

من خلال توجيه محلّل DNS لحل نطاقات فرعية مختلفة تحت نطاق example123.com الخاص بك، يمكنك اختبار سلوك محلّل DNS بشكل فعال ومعرفة كيفية تعامله مع المواقف (الاستجابات) غير المتوقعة المختلفة.
على سبيل المثال، كيف يتعامل مع موقف يحصل فيه على استجابة DNS مشوهة، أو استجابة تحتوي على سجل محقون، أو سجل يحتوي على أحرف غير قانونية، وما نوع الإجابة التي يرسلها إليك في النهاية، العميل؟
يمكن دمج PolarDNS مع مجموعة متنوعة من محلّلات DNS لتشغيل مجموعة اختبارات شاملة من النهاية إلى النهاية (E2E) لخادم DNS.
يتم تشغيل هذا التكامل بواسطة GitHub Actions، مع قوالب مرجعية (سير عمل) متاحة حاليًا لمحلّلات DNS الستة التالية:
عند تشغيل إجراء GitHub (على سبيل المثال، عند الالتزام أو يدويًا)، يقوم سير العمل بالخطوات التالية:
لإضافة اختبارات E2E الخاصة بك، ما عليك سوى وضعها في دليل test-e2e/.
هل تبحث عن مجموعة اختبارات E2E كاملة الميزات لخادم DNS؟ تواصل مع [email protected].
إضافة ميزات جديدة إلى PolarDNS أمر ضروري لاكتشاف مشكلات DNS جديدة حقًا. ومع PolarDNS، يمكنك القيام بذلك بسهولة نسبية.
يتيح لك PolarDNS إضافة ميزة جديدة بسرعة، وتجربة أفكارك، أو تطوير إثبات المفهوم (PoC) دون الحاجة إلى بناء خادم DNS الخاص بك. كل ما تحتاجه هو القدرة على فهم كود Python وفضول لتجربة بروتوكول DNS.
هناك دليل مساهمة مفصل خطوة بخطوة لتبدأ. ستجد هناك ليس فقط كيفية إضافة ميزات جديدة ولكن أيضًا كيفية تصحيح أخطاء PolarDNS، وتقديم المشكلات، ومشاركة الأفكار، والمزيد.
فيما يلي بعض الموارد الممتازة المفيدة عند العمل مع PolarDNS.
روابط متعلقة ببروتوكول DNS:
خوادم DNS:
شكرًا لكل من ساهم في PolarDNS! ❤️