
ورشة عمل حول تطوير البرامج الضارة
في عصر أنظمة الكشف والاستجابة للمؤسسات (EDR)، لم يعد بإمكان مشغلي الفرق الحمراء (Red Team) استخدام الحمولات المُجمَّعة مسبقًا. ونتيجة لذلك، أصبح تطوير البرمجيات الخبيثة (MalDev) مهارة حيوية لأي مشغل. قد يبدو البدء في هذا المجال شاقًا، لكنه في الواقع سهل جدًا. ستُظهر لك هذه الورشة كل ما تحتاجه للبدء!
يحتوي هذا المستودع على الشرائح والتمارين المصاحبة لورشة عمل "MalDev for Dummies" التي تم / سيتم تنظيمها في مؤتمري Hack in Paris 2022 و X33fcon 2023. على الرغم من أن الشرائح صُممت لتقديمها "شخصيًا"، إلا أن المواد والتمارين ستبقى متاحة هنا لإكمالها وفقًا لسرعتك الخاصة - لا ينبغي أبدًا استعجال عملية التعلم! نرحب بالمشكلات وطلبات السحب (Pull Requests) إلى هذا المستودع التي تحتوي على أسئلة و/أو اقتراحات.
⚠ إخلاء مسؤولية: تطوير البرمجيات الخبيثة هي مهارة يمكن -ويجب- استخدامها للخير، لتعزيز مجال الأمن (الهجومي) والحفاظ على دفاعاتنا حادة. إذا استخدمت هذه المهارة مطلقًا لتنفيذ أنشطة ليس لديك إذن بها، فأنت دمى أكبر مما تستهدفه هذه الورشة ويجب عليك المغادرة فورًا.
مع ازدياد نضج أدوات مكافحة الفيروسات (AV) والكشف والاستجابة للمؤسسات (EDR) دقيقة بعد دقيقة، يُجبر الفريق الأحمر على البقاء في صدارة المنحنى. لقد ولَّت أيام execute-assembly وإسقاط الحمولات غير المعدلة على القرص - إذا كنت تريد أن تستمر مهامك لأكثر من أسبوع، فسيتعين عليك رفع مستوى إنشاء الحمولات وتطوير البرمجيات الخبيثة. قد يكون البدء في هذا المجال صعبًا، لكن العثور على الموارد المناسبة ليس سهلاً دائمًا.
تستهدف هذه الورشة المبتدئين في هذا المجال وسترشدك خلال خطواتك الأولى كمطور للبرمجيات الخبيثة. وهي موجهة في المقام الأول للممارسين الهجوميين، ولكن الممارسين الدفاعيين مرحب بهم أيضًا لحضور الورشة وتوسيع مجموعة مهاراتهم.
خلال الورشة، سنتناول بعض الجوانب النظرية، وبعدها سنقوم بإعداد بيئة مختبرية لك. ستكون هناك تمارين متنوعة يمكنك إكمالها اعتمادًا على مجموعة مهاراتك الحالية ومستوى راحتك مع الموضوع. ومع ذلك، فإن الهدف من الورشة هو التعلم، وليس إكمال جميع التمارين بشكل صريح. أنت حر في اختيار لغة البرمجة المفضلة لديك لتطوير البرمجيات الخبيثة، لكن الدعم خلال الورشة يُقدم بشكل أساسي للغتي C# و Nim.
سنناقش خلال الورشة المواضيع الرئيسية المطلوبة للبدء في بناء برمجياتك الخبيثة الخاصة. يتضمن ذلك (على سبيل المثال لا الحصر):
للبدء في تطوير البرمجيات الخبيثة، ستحتاج إلى جهاز تطوير حتى لا تُزعجك أي أدوات دفاعية قد تعمل على جهازك المضيف. أفضّل استخدام Windows للتطوير، لكن Linux أو MacOS سيكونان جيدين أيضًا. قم بتثبيت المحرر/بيئة التطوير المتكاملة (IDE) التي تختارها (أستخدم VS Code لكل شيء تقريبًا باستثناء C#، حيث أستخدم Visual Studio)، ثم قم بتثبيت سلاسل الأدوات (Toolchains) المطلوبة للغة تطوير البرمجيات الخبيثة (MalDev) التي اخترتها:
لا تنسَ تعطيل Windows Defender أو إضافة الاستثناءات المناسبة، حتى لا يتم وضع عملك الشاق في الحجر الصحي! لاحقًا، يمكننا الاختبار على جهاز منفصل به ضوابط دفاعية مثل مكافحة الفيروسات مفعلة.
ℹ ملاحظة: غالبًا، يمكن استخدام مديري الحزم مثل apt أو أدوات إدارة البرامج مثل Chocolatey أو Winget (مدمجة الآن!) لأتمتة تثبيت وإدارة التبعيات بطريقة مريحة وقابلة للتكرار. لكن كن واعيًا أن الإصدارات في مديري الحزم قد تكون متأخرة بضع إصدارات عن الشيء الحقيقي! أدناه مثال لأمر لتثبيت الأدوات المذكورة دفعة واحدة.
choco install -y nim choosenim go rust vscode visualstudio2019community dotnetfx
اللغات التي سنناقشها خلال هذه الورشة هي لغات مُجمَّعة (compiled)، مما يعني استخدام مُجمِّع (compiler) لترجمة شفرتك المصدرية إلى ملفات تنفيذية ثنائية بالتنسيق الذي تختاره. تختلف عملية التجميع حسب اللغة.
يمكن تجميع كود C# (ملفات .cs) إما مباشرة (باستخدام الأداة المساعدة csc) أو عبر Visual Studio نفسه. يمكن تجميع معظم الشفرة المصدرية في هذا المستودع (باستثناء حل التمرين الإضافي 3) كما يلي.
ℹ ملاحظة: تأكد من تشغيل الأمر أدناه في "موجه أوامر مطور Visual Studio" (Visual Studio Developer Command Prompt) حتى يعرف مكان العثور على
csc، ويُوصى باستخدام "موجه أوامر الأدوات الأصلية x64" (x64 Native Tools Command Prompt) لإصدار Visual Studio الخاص بك. ستكون العلامة/unsafeمطلوبة لمعظم النصوص البرمجية حيث نصل إلى وظائف منخفضة المستوى مباشرة.
csc filename.exe
يمكنك تمكين تحسينات وقت التجميع باستخدام العلامة /optimize. يمكنك أيضًا إخفاء نافذة وحدة التحكم بإضافة /target:winexe، أو التجميع كـ DLL باستخدام /target:library (لكن تأكد من أن بنية الكود الخاص بك مناسبة لذلك).
يتم تجميع كود Nim (ملفات .nim) باستخدام الأمر nim c. يمكن تجميع الشفرة المصدرية في هذا المستودع كما يلي.
nim c filename.nim
إذا كنت تريد تحسين البناء من حيث الحجم وتجريد معلومات التصحيح (أفضل بكثير للأمان العملياتي opsec!)، يمكنك إضافة العلامات التالية.
nim c -d:release -d:strip --opt:size filename.nim
يمكنك أيضًا إخفاء نافذة وحدة التحكم بإضافة --app:gui.
يتم تجميع كود Golang (ملفات .go) باستخدام الأمر go build. يمكن تجميع الشفرة المصدرية في هذا المستودع كما يلي.
GOOS=windows go build
إذا كنت تريد تحسين البناء من حيث الحجم وتجريد معلومات التصحيح (أفضل بكثير للأمان العملياتي!)، يمكنك إضافة العلامات التالية.
GOOS=windows go build -ldflags "-s -w"
يتم تجميع كود Rust (ملفات .rs) عبر الأمر cargo. يمكن استخدام Cargo لإدارة تبعياتك وبناء مشروعك. يمكن تجميع الشفرة المصدرية في هذا المستودع بالانتقال إلى مجلد المشروع وتشغيل الأمر التالي.
cargo build
إذا كنت تريد تحسين البناء من حيث الحجم وتجريد معلومات التصحيح، يمكنك إضافة العلامات التالية. راجع أيضًا قسم [profile.release] في كل ملف Cargo.toml للحصول على بعض خيارات الأمان العملياتي في وقت التجميع.
cargo build --release
يمكن تجميع معظم الحلول بدون تبعيات. في حالة الحاجة إلى تبعيات، يتم توفير مشروع Visual Studio يرتبط بحزم NuGet المناسبة.
تعتمد معظم برامج Nim على مكتبة تسمى "Winim" للتفاعل مع واجهة برمجة تطبيقات Windows. يمكنك تثبيت المكتبة باستخدام مدير الحزم Nimble كالتالي (بعد تثبيت Nim):
nimble install winim
يتم استخدام بعض التبعيات في الشفرة المصدرية لهذا المستودع. يمكنك تثبيتها كالتالي (بعد تثبيت Go):
go mod tidy
تعتمد بعض الأمثلة على crate windows-sys لاستدعاء واجهة برمجة تطبيقات Windows. نظرًا لأننا نستخدم Cargo، سيتم إدارة الحزم تلقائيًا عند تجميع بناء اختبار أو إصدار.
تشير شرائح الورشة إلى بعض الموارد التي يمكنك استخدامها للبدء. الموارد الإضافية، مثل المدونات ذات الصلة أو مقتطفات الشفرة، مدرجة في ملفات README.md لكل تمرين!