
DNSChef (NG) - وكيل DNS لمختبري الاختراق ومحللي البرمجيات الخبيثة
[!NOTE] هذه نسخة محدّثة من DNSChef الذي كُتب في الأصل بواسطة @iphelix``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ /| '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _| | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N
DNSChef هو وكيل DNS عالي التكوين لاختبار الاختراق ومحللي البرامج الضارة. وكيل DNS (يُعرف أيضًا باسم "DNS مزيف") هو أداة تُستخدم لتحليل حركة مرور الشبكة للتطبيقات من بين استخدامات أخرى. على سبيل المثال، يمكن استخدام وكيل DNS لتزييف الطلبات الموجهة إلى "badguy.com" لتشير إلى جهاز محلي لإنهائها أو اعتراضها بدلاً من مضيف حقيقي في مكان ما على الإنترنت.
هناك العديد من وكلاء DNS في السوق. معظمها ببساطة يوجه جميع استعلامات DNS إلى عنوان IP واحد أو ينفذ فقط ترشيحًا بدائيًا. تم تطوير DNSChef كجزء من اختبار اختراق حيث كانت هناك حاجة لنظام أكثر قابلية للتكوين. ونتيجة لذلك، فإن DNSChef هو تطبيق متعدد المنصات قادر على تزوير الاستجابات بناءً على قوائم النطاقات الشاملة والاستبعادية، ودعم أنواع متعددة من سجلات DNS، ومطابقة النطاقات باستخدام أحرف البدل، وتوجيه الاستجابات الحقيقية للنطاقات غير المتطابقة، وتحديد ملفات التكوين الخارجية، و IPv6 والعديد من الميزات الأخرى. يمكنك العثور على شرح مفصل لكل ميزة والاستخدامات المقترحة أدناه.
يوصى باستخدام وكيل DNS في الحالات التي لا يمكن فيها إجبار التطبيق على استخدام خادم وكيل آخر مباشرة. على سبيل المثال، تتجاهل بعض تطبيقات الأجهزة المحمولة إعدادات وكيل HTTP لنظام التشغيل تمامًا. في هذه الحالات، سيسمح لك استخدام خادم وكيل DNS مثل DNSChef بخداع هذا التطبيق لتوجيه الاتصالات إلى الوجهة المطلوبة.
## ميزات جديدة
- يتطلب Python 3.11+
- يدعم نقل الملفات عبر DNS (فقط عبر `A`,`AAAA`,`TXT` في الوقت الحالي...)
- ملف التكوين أصبح الآن TOML
- واجهة برمجة تطبيقات HTTP اختيارية (تتيح لك الاستعلام عن السجلات وتحديث التكوين عن بُعد)
- غير متزامن بالكامل لتحسين الأداء (يستخدم AsyncIO)
- تسجيل منظم وعدد من تحسينات جودة الحياة
- أصبح الآن حزمة Python
- معزول في حاويات (Dockerized)
- يتضمن عددًا من طلبات السحب والإصلاحات من المستودع الأصلي
## التثبيت
لتثبيت أحدث إصدار، يجب عليك استخدام [pipx](https://pypa.github.io/pipx/) (إلا إذا كنت شخصًا حقيرًا تستمتع بشرائح اللحم غير المتقنة):
pipx install dnschef-ng
إذا كنت تريد واجهة HTTP API (تتطلب بعض التبعيات الإضافية):
pipx install dnschef-ng[api]
ثبّت أحدث إصدار من Git باستخدام pipx:
pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git
ثبّت أحدث إصدار من Git باستخدام pipx مع تبعيات واجهة HTTP API:
pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"
## إعداد وكيل DNS
قبل أن تبدأ في استخدام DNSChef، يجب عليك تكوين جهازك لاستخدام خادم أسماء DNS مع تشغيل الأداة عليه. لديك عدة خيارات حسب نظام التشغيل الذي ستستخدمه:
- **Linux** - عدّل */etc/resolv.conf* لإضافة سطر في الأعلى يحتوي على مضيف تحليل حركة المرور الخاص بك (مثلًا أضف "nameserver 127.0.0.1" إذا كنت تعمل محليًا). بدلاً من ذلك، يمكنك إضافة عنوان خادم DNS باستخدام أدوات مثل Network Manager. داخل Network Manager افتح IPv4 Settings، واختر *Automatic (DHCP) addresses only* أو *Manual* من القائمة المنسدلة *Method* وعدّل حقل النص *DNS Servers* ليتضمن عنوان IP مع تشغيل DNSChef.
- **Windows** - اختر *Network Connections* من *Control Panel*. بعد ذلك حدد أحد الاتصالات (مثل "Local Area Connection")، وانقر بزر الماوس الأيمن عليه واختر خصائص. من داخل مربع الحوار الذي يظهر حديثًا، حدد *Internet Protocol (TCP/IP)* وانقر على خصائص. أخيرًا، حدد زر الاختيار *Use the following DNS server addresses* وأدخل عنوان IP مع تشغيل DNSChef. على سبيل المثال، إذا كنت تعمل محليًا أدخل 127.0.0.1.
- **OS X** - افتح *System Preferences* وانقر على أيقونة *Network*. حدد الواجهة النشطة واملأ حقل *DNS Server*. إذا كنت تستخدم Airport فسيتعين عليك النقر على زر *Advanced...* وتحرير خوادم DNS من هناك. بدلاً من ذلك، يمكنك تحرير */etc/resolv.conf* وإضافة خادم أسماء مزيف إلى الأعلى هناك (على سبيل المثال "nameserver 127.0.0.1").
- **iOS** - افتح *Settings* وحدد *General*. بعد ذلك حدد *Wi-Fi* وانقر على السهم الأزرق إلى يمين نقطة الوصول النشطة من القائمة. عدّل إدخال DNS ليشير إلى المضيف الذي يعمل عليه DNSChef. تأكد من تعطيل واجهة Cellular (إن كانت متاحة).
- **Android** - افتح *Settings* وحدد *Wireless and network*. انقر على *Wi-Fi settings* وحدد *Advanced* بعد الضغط على زر *Options* في الهاتف. فعّل خانة الاختيار *Use static IP* وقم بتكوين خادم DNS مخصص.
إذا لم تكن لديك القدرة على تعديل إعدادات DNS الخاصة بالجهاز يدويًا، فلا يزال لديك عدة خيارات تتضمن تقنيات مثل [ARP Spoofing](http://en.wikipedia.org/wiki/ARP_spoofing) و[Rogue DHCP](http://www.yersinia.net/doc.htm) وغيرها من الطرق الإبداعية.
وأخيرًا، تحتاج إلى تكوين خدمة مزيفة حيث سيشير DNSChef إلى جميع الطلبات. على سبيل المثال، إذا كنت تحاول اعتراض حركة مرور الويب، فيجب عليك إما تشغيل خادم ويب منفصل على المنفذ 80 أو إعداد وكيل ويب (مثل Burp) لاعتراض حركة المرور. سيقوم DNSChef بتوجيه الاستعلامات إلى مضيف الوكيل/الخادم الخاص بك مع الخدمات المكوّنة بشكل صحيح.
## تشغيل DNSChef
DNSChef هو تطبيق متعدد المنصات مطور بلغة Python ويعمل على معظم المنصات التي تحتوي على مترجم Python. سيركز هذا الدليل على بيئات Unix؛ ومع ذلك، تم اختبار جميع الأمثلة أدناه للعمل على Windows أيضًا.
دعنا نجرب DNSChef مع وظيفة المراقبة الأساسية الخاصة به. نفّذ الأمر التالي كجذر (مطلوب لبدء خادم على المنفذ 53):
# ./dnschef.py
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
بدون أي معلمات، سيعمل DNSChef في وضع الوكيل الكامل. هذا يعني أن جميع الطلبات ستُوجَّه ببساطة إلى خادم DNS علوي (8.8.8.8 افتراضيًا) وتُعاد إلى المضيف المستعلم. على سبيل المثال، دعنا نستعلم عن سجل "A" لنطاق ونلاحظ النتائج:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
سيعرض DNSChef سطر السجل التالي الذي يوضح الوقت وعنوان IP المصدر ونوع السجل المطلوب والأهم من ذلك الاسم الذي تم الاستعلام عنه:
[23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
هذا الوضع مفيد لمراقبة التطبيقات البسيطة عندما تحتاج إلى معرفة النطاقات التي يستخدمها التطبيق لاتصالاته.
يدعم DNSChef بشكل كامل IPv6 ويمكن تفعيله باستخدام *-6* أو *--ipv6** العلامات. يعمل تمامًا مثل وضع IPv4 باستثناء أن واجهة الاستماع الافتراضية يتم تبديلها إلى ::1 وخادم DNS الافتراضي يتم تبديله إلى 2001:4860:4860::8888. إليك مثال على الإخراج:
# ./dnschef.py -6
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] Using IPv6 mode.
[*] DNSChef started on interface: ::1
[*] Using the following nameservers: 2001:4860:4860::8888
[*] No parameters were specified. Running in full proxy mode
[00:35:44] ::1: proxying the response of type 'A' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'AAAA' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'MX' for thesprawl.org
ملاحظة: بشكل افتراضي، ينشئ DNSChef مستمع UDP. يمكنك استخدام TCP بدلاً من ذلك باستخدام الوسيط *--tcp* الذي سيتم مناقشته لاحقًا.
## تشغيل واجهة DNSChef HTTP API
> [!WARNING]
> لا تحتوي الواجهة على أي مصادقة. اسمح/امنع الوصول على مستوى الشبكة عبر مجموعات الأمان، iptables، جدار الحماية، إلخ.
`uvicorn dnschef.api:app`