
قناة تحكم وأوامر مبسطة تعتمد على FTP لربط الأنظمة البعيدة.
SharpFtpC2 هو مشروع صغير تجريبي يهدف إلى استكشاف إمكانية استخدام FTP(S) لنقل الأوامر والردود بين جهازي كمبيوتر عن بُعد. يستخدم بروتوكول FTP كنفق مؤقت يمكن من خلاله للجهازين، اللذين يعملان كعملاء متصلين بخادم FTP، التواصل. يتم استخدام نظام إدارة جلسات بسيط لتتبع تبادل الطلبات والاستجابات.
يستخدم SharpFtpC2 نظام إدارة جلسات أساسي. على الرغم من أنه بسيط إلى حد كبير، إلا أنه يخدم غرض الحفاظ على تزامن الاتصالات وربطها، وهو أمر ضروري للتبادل بين الأنظمة البعيدة.
تجدر الإشارة إلى أنه يمكن نقل هذا المشروع بسهولة باستخدام أنظمة التحكم في الإصدارات مثل git أو svn أو البروتوكولات المماثلة.
إذا كنت مهتمًا بأدق التفاصيل في الاتصالات الشبكية، أو ترغب فقط في العبث بلغة C# و.NET Core، فقد يكون SharpFtpC2 نقطة بداية مثيرة للاهتمام. لا تتوقع جوهرة مصقولة، ولكن ربما، فقط ربما، قد تتعلم شيئًا مثيرًا للاهتمام من العبث به.
SharpFtpC2 هو مشروع تجريبي تم إنشاؤه لاستكشاف تعليمي لاستخدام FTP(S) كقناة اتصال بين جهازي كمبيوتر عن بُعد. من المهم أن نفهم أن المشروع صُمم كمورد تعليمي للأفراد المهتمين بالاتصالات الشبكية، وC#، ومحاكاة الخصم، والفريق الأحمر، والبرامج الضارة. بصفتي المنشئ، أحث المستخدمين على عدم تقديم طلبات للحصول على وظائف إضافية أو استخدام هذا المشروع لأي شكل من أشكال التسليح أو النية الخبيثة. النية الأساسية هي تعليمية، ومن المتوقع أن يتفاعل المستخدمون مع المحتوى بمسؤولية وأخلاقية.
وُلد SharpFtpC2 من الرغبة في المساهمة في مشروع Unprotect، خاصةً فئة التهرب الشبكي الخاصة به.
تعود جذور فكرة استخدام FTP كنفق إلى الماضي البعيد. في الواقع، إنها تستحضر ذكريات جميلة من حوالي عام 2005 عندما كنت لا أزال أتعلم أساسيات عالم البرمجة. في ذلك الوقت، صادفت شخصًا فرنسيًا مبدعًا بشكل لافت كان يُعرف باسم BlasterWar. لقد تصور مشروعًا يُسمى BlasterX، والذي، على الرغم من ضياعه مع الزمن، كان طليعيًا لعصره.
كانت عبقرية BlasterWar في مشروعه هي تقديم بديل للاتصال العكسي التقليدي، حيث يحتاج الوكيل إلى إنشاء اتصال عكسي بجهاز التحكم أو القرصنة.
بدلاً من ذلك، اختار BlasterWar استخدام FTP (بروتوكول نقل الملفات) كوسيلة بديلة وبنى حوله أداة تحكم عن بُعد شاملة. تضمنت الأداة ميزات مثل التقاط الشاشة، وتسجيل المفاتيح، وإدارة النظام، جميعها تُنقل عبر نفق FTP. في ذلك الوقت، كان FTP شائعًا على نطاق واسع وقدمت مجموعة كبيرة من المواقع خوادم FTP مجانية للجمهور. جعل هذا منه بديلاً مثاليًا للاتصالات العكسية أو المباشرة، التي تتضمن إعادة توجيه المنفذ. علاوة على ذلك، قدم طبقة إضافية من التعتيم لأمر السيطرة والتحكم (C2) حيث لم يتم كشف عنوان IP لجهاز الهاكر مباشرة.
اليوم، استخدام FTP كنفق ليس مفهومًا جديدًا، حيث اعتمدت مجموعة قليلة من أطر عمل السيطرة والتحكم (C2) هذا البروتوكول. ومع ذلك، فإن استخدام FTP بهذه الطريقة محفوف بالمخاطر. على وجه الخصوص، نقل FTP لبيانات الاعتماد بنص عادي عبر الشبكة، بالإضافة إلى ضرورة امتلاك كلا الطرفين لهذه البيانات، يجعله عرضة لمجموعة كبيرة من الهجمات. على الرغم من أن خوادم FTP أحرزت تقدمًا في معالجة هذه المشكلات الأمنية من خلال اعتماد FTPS بشكل متزايد، الذي يدمج تشفير SSL/TLS، إلا أن هذا التكيف لم يكن علاجًا شاملاً لجميع المخاطر الكامنة.
مع قليل من البراعة واستلهام الأفكار من البروتوكولات الحالية، من الممكن معالجة عدد كبير من المخاطر الحالية.
لتجميع هذا المشروع، تحتاج إلى مكونين: Visual Studio وتبعية لوحدة التحكم تُسمى CommandLineUtils.
نظرًا لأن هذا المشروع يستخدم .NET Core، يمكن تجميعه لمنصات مختلفة بسهولة، دون الحاجة إلى أي تعديلات على الكود. ومع ذلك، قد تحتاج إلى تنفيذ ميزات محددة مخصصة للمنصة المستهدفة.
لبدء اختبار هذا المشروع بسرعة، أوصي باستخدام Docker مع صورة stilliard/pure-ftpd. تدعم هذه الصورة مجموعة من الخيارات، مما يمكنك من إعداد خادم FTP خاص بك بسرعة وسهولة.
docker pull stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x --tls=2" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark -e "TLS_CN=localhost" -e "TLS_ORG=maislaf" -e "TLS_C=FR" stilliard/pure-ftpd
لا تتردد في تخصيص الإعدادات وفقًا لمتطلباتك. ومع ذلك، أنصح بشدة بعدم تعريض خادم FTP الاختباري هذا للشبكات المحلية أو العامة. سيكون من الأفضل تقييد تعرض هذه الحاوية لجهاز المضيف فقط.
يتيح لك خيار ADDED_FLAGS ضبط خادم pure-ftpd بدقة. يمكن العثور على شرح لجميع العلامات هنا.
قد تتطلب بعض العلامات تعديلات على طريقة عمل بروتوكول C2. على سبيل المثال، إذا استخدمت الخيار -K للاحتفاظ بجميع الملفات، فسيتم تعطيل القدرة على حذف الملفات عبر FTP. نظرًا لأن بروتوكول C2 الحالي يستخدم هذه الميزة، قد تحتاج إلى التفكير في طرق بديلة، مثل إعادة تسمية الملفات أو نقلها.
لضمان سلامة وسرية جميع الاتصالات بين العملاء وC2، تم دمج التشفير بسلاسة في بروتوكول الاتصال، باستخدام كل من خوارزميات RSA وAES-GCM 256 بت. الهدف الأساسي من هذه الميزة هو إحباط إمكانية قيام خادم FTP مخترق بتسليم أوامر ضارة. باستخدام التشفير، يصبح حقن الأوامر مستحيلًا دون الوصول إلى المفتاح العام للعميل. وبالمثل، لا يمكن حقن استجابات عميل مزيفة دون امتلاك المفتاح العام لـ C2.
لتسهيل عملية إنشاء أزواج المفاتيح الخاصة بك (زوج مفاتيح للعميل وزوج لـ C2)، قمت بتضمين أداة تابعة لجهة خارجية تُسمى RSAKeyHelper. في كل مرة تقوم فيها بتشغيل التطبيق، سيعرض عليك زوجًا جديدًا من المفاتيح العامة والخاصة، والتي يمكن استخدامها داخل البرنامج إذا اخترت استخدام التشفير.

للتحقق من أن كل شيء يعمل كما هو متوقع، قمت أيضًا بدمج ميزة داخل نفس الأداة تسمح لك باختبار تشفير السلاسل النصية.

يمثل إصدار "3.0 النهائي" تتويجًا لهذا المشروع. لن أقوم بإضافة أي ميزات أخرى؛ كان الهدف من هذا الإثبات العملي هو توضيح إنشاء C2 موثوق وآمن باستخدام FTP(S). أنت مدعو لتطوير نسختك الخاصة مع وظائف مخصصة. كتمرين، قد تفكر في تنفيذ مهام متعددة الخيوط لمنع تعليق التطبيق أثناء المهام طويلة المدة.
سأستمر، مع ذلك، في تقديم الدعم للمشروع فيما يتعلق بمعالجة الأخطاء المحتملة أو فرص التحسين.
(قائمة العملاء)

(تنفيذ أمر للعميل النشط (السياق))

(نافذة تصحيح العميل مع تأكيد المستخدم للإجراء الخطير)
