مشروع لعميل
القطاع: برمجيات إدارة الخوادم
منصة Dinosoft Fleet Console: لوحة تحكم بالخوادم لا يمكنها إرسال شيفرة برمجية
- PowerShell 5.1
- Laravel 13
- Filament
- PostgreSQL 18
- PHP 8.4
- Docker Compose
- nginx
- DPAPI
مدة التنفيذ: تُحدد بعد دراسة النطاق؛ لا يوجد سجل تسليم موثق منشور.
نظرة عامة
طوّرت DinoSoft منصة Dinosoft Fleet Console لإدارة خوادم Windows التي تشغّل تطبيقات الأعمال وSQL Server. ترسل المنصة تقارير بحالة كل خادم، وتتحقق من النسخ الاحتياطية، وتؤرشف المجلدات، ولا تنفّذ الأوامر الهدّامة مثل حذف الملفات إلا بعد موافقة، وتحدّث برامج الوكيل المثبّتة على الخوادم بنفسها. المنصة مبنية ومختبَرة، لكنها لم تدخل الخدمة الفعلية على الخوادم بعد.
التحدي
لوحة التحكم التي تصل إلى كل الخوادم هي بالضبط ما يبحث عنه المهاجم. فإذا كانت قادرة على إرسال شيفرة برمجية، صار اختراقها مرة واحدة اختراقًا لكل خادم تديره. وأعمال الصيانة مثل حذف الملفات هدّامة بطبيعتها، ومطالبة الفريق بالحرص نيةٌ حسنة وليست آلية حماية. كما كان يجب ألا تتطلب الإدارة فتح أي منفذ للاتصالات الواردة على الخوادم، وألا يحتاج الوكيل إلى تثبيت بيئة تشغيل جديدة عليها.
الحل
بنينا الوكيل بلغة Windows PowerShell 5.1 حتى لا يحتاج إلى تثبيت بيئة تشغيل جديدة على الخوادم. ويقتصر دوره على سحب المهام: لا يُجري إلا اتصالات صادرة عبر HTTPS، ولا يستمع على أي منفذ. ولا تستطيع لوحة التحكم إلا إصدار أوامر من قائمة مغلقة بمعاملات يُتحقق منها، فلا يمكنها أبدًا إرسال شيفرة برمجية. وتمر الأوامر الهدّامة بمرحلتين: خطة أولًا، ثم موافقة مرتبطة ببصمة تلك الخطة (hash)، ويرفض الوكيل التنفيذ إذا لم يعد الخادم مطابقًا لما تمت الموافقة عليه. ويُحفظ المفتاح الخاص لكل وكيل عبر DPAPI على مستوى الجهاز ولا يغادر خادمه أبدًا، فحتى لوحة التحكم المخترقة لا تستطيع انتحال هوية أي وكيل. أما إعدادات الأمان، مثل المواضع المسموح فيها بالحذف وأمر إعادة التشغيل، فتُضبط محليًا على كل خادم ولا يمكن تعديلها عن بُعد. ولا يقبل الوكيل أي تحديث ما لم يكن موقّعًا بمفتاح يُحفظ دون اتصال بالشبكة (offline) ولا يوجد على لوحة التحكم، فاللوحة المخترقة قد تُدرج تحديثًا في قائمة الانتظار لكنها لا تستطيع تزويره. وفحصنا حزمة الاختبارات بالصرامة نفسها، فتبيّن أنها كانت تمسح قاعدة البيانات الرئيسية للتطبيق بدلًا من قاعدة بيانات الاختبار مع كل تشغيل، بما في ذلك حساب المدير، بينما ظلت كل الاختبارات ناجحة طوال الوقت. وكان السبب متغير بيئة في Docker Compose يحجب إعدادات الاختبار، لأن Laravel لا يستبدل متغير بيئة سبق ضبطه. والآن يرفض فحص وقائي أي قاعدة بيانات لا ينتهي اسمها بـ _test.
كيف نتحقق من النجاح
نتفق قبل التنفيذ على خط أساس ومعايير قبول واضحة. ثم نوثق الأداء والفحوصات الأمنية واختبارات الاستعادة والتسليم التشغيلي مقارنة بهذا الأساس. لا ندّعي أي نسبة تحسن دون قياس موثق.