
خادم MITM DNS مبني على Python ويعتمد على التعبيرات النمطية (regular expressions) مع دعم لهجمات إعادة ربط DNS (DNS Rebinding).
تحديث 4/14/2020 - تمت إزالة دعم Python 2 وتم تبديل الكود إلى Python3
الآن مع round-robin وخيارات محسّنة!
الأخطاء: @crypt0s - Twitter
[email protected] - البريد الإلكتروني
خادم DNS قائم على التعبيرات النمطية بلغة Python!
USAGE:
./fakedns.py [-h] -c Config path [-i interface IP address] [--rebind]
يجب ضبط ملف dns.conf بالطريقة التالية:
[RECORD TYPE CODE] [python regular expression] [answer] [rebind answer]
يمكن أن يكون الجواب عنوان IP أو سلسلة نصية self،
سيتم تحويل السكر النحوي self إلى عنوان IP المحلي لجهازك الحالي، مثل 192.168.1.100.
إذا لم يتم تحقيق تطابق، سيحاول خادم DNS حل الطلب باستخدام خادم DNS المضبوط على جهازك المحلي وسيقوم بتمرير الطلب إلى ذلك الخادم نيابةً عن المستخدم الطالب.
- A
- TXT
- AAAA
- PTR
- SOA
- MX
- CNAME
- يدعم DNS Rebinding
- يدعم round-robin
تم تنفيذ قواعد round-robin. في كل مرة يطلب فيها عميل قاعدة مطابقة، سيقدم FakeDNS عنوان IP التالي في قائمة عناوين IP المقدمة في القاعدة.
قائمة عناوين IP تكون مفصولة بفواصل.
على سبيل المثال:
A robin.net 1.2.3.4,1.1.1.1,2.2.2.2
هي قاعدة round-robin لـ robin.net ستقدم استجابات تشير إلى 1.2.3.4 و1.1.1.1 و2.2.2.2، وتتنقل عبر هذا الترتيب في كل مرة يقدم فيها أي عميل طلبًا لإدخال robin.net.
ملاحظة : عناوين IP هذه غير مدرجة كقائمة للعميل في الاستجابة - فما زال يحصل على عنوان IP واحد فقط في الاستجابة (قد يتغير ذلك لاحقًا)
يدعم FakeDNS قواعد rebinding، والتي تعني أساسًا أن الخادم يقبل عددًا معينًا من الطلبات من عميل لنطاق معين حتى حد معين (افتراضيًا طلب واحد) ثم يغير عنوان IP إلى عنوان مختلف.
على سبيل المثال:
A rebind.net 1.1.1.1 10%4.5.6.7
يعني أن لدينا سجل A لـ rebind.net يُحل إلى 1.1.1.1 في أول 10 محاولات. وفي الطلب الحادي عشر من عميل قدم 10 طلبات بالفعل، يبدأ FakeDNS في تقديم العنوان الثاني، 4.5.6.7
يمكنك استخدام قائمة عناوين هنا وسيقوم FakeDNS بتطبيق round-robin عليها نيابةً عنك، تمامًا كما في القاعدة "العادية".
(localhost فقط بدون خطوات إضافية)
لقد حققت نجاحًا كبيرًا في اختبار/تطوير FakeDNS في Docker لأنه أسهل من تشغيله محليًا على توزيعات Ubuntu الحديثة التي تشغل خدمات DNS الخاصة بها على المنفذ 53 بالفعل.
إذا كنت تريد تجربته، يمكنك القيام بذلك دون عناء كبير باتباع هذه الخطوات:
بافتراض أنك داخل دليل FakeDns: sudo docker run --interactive --tty --volume \pwd`:/opt/FakeDns -p 5353:53/udp python:3.8 /opt/FakeDns/fakedns.py -c /opt/FakeDns/dns.conf.example. وللاختبار يمكنك تشغيل nslookup -port=5353 testrule.test 127.0.0.1والذي يجب أن يعيد1.1.1.1` في طلبك الأول
أو، إذا كنت تفضل استخدام docker-compose، فما عليك سوى تشغيل docker-compose up واستخدام نفس الاختبار أعلاه.