يسعدني أن أعلن لكم عن اطلاق الاصدار 0.1 من iCommander, نظام Command & Contorl Centre يمكننا استخدامه للتحكم بعدّة سيرفرات من سيرفر واحد. iCommander هو ثاني مشاريع iSecur1ty بعد iScanner وهو مجاني ومفتوح المصدر تحت بنود رخصة GPL وبرمج باستخدام لغة Ruby طبعاً :). الهدف من هذا المشروع هو تسهيل عمل مدراء السيرفرات عن طريق توفير وسيلة سهلة تمكّنهم من ارسال أوامر لعدّة سيرفرات والتحكم بها من مكان واحد وبنفس الوقت عند الحاجة لذلك. يتم تركيب iCommander Server على السيرفر الذي سيستخدم للتحكم بالسيرفرات المطلوبة وتركيب iCommander Client على باقي السيرفرات, ثم من سيرفر iCommander يمكن ارسال ملفات تنفيذية أو أوامر (داخل Shell Script) ليتم تنفيذها على جميع السيرفرات التي تم تركيب iCommander Client عليها. هل تظن أن الفكرة خطيرة؟ أكمل القراءة لتعلم ما هي الميزات وحلول الأمان التي تم توفيرها في iCommander.

منذ البدء ببرمجة هذا المشروع موضوع الحماية كان له الأولوية القصوى وعلى أساسه تم برمجة iCommander مع التركيز على ثبات السيرفر وخفّة عمله. الفكرة بدأت بأسلوب بسيط جداً وهي عبارة عن استخدام سيرفر HTTP جاهز وكل ما على العميل فعله هو تحميل هذا الملف وتشغيل محتوياته ثم ارسال المخرجات لايميل يحدده مدير السيرفر. لكن مع بدء البرمجة, تبيّن أن هذه الفكرة ليست عمليّة والأمور تغيّرات خصوصاً فيما يتعلّق بموضوع الحماية والأداء لذلك عوضاً عن الاعتماد على سيرفر جاهز انتهيت ببرمجة سيرفر وعميل من الصفر يستخدمان بروتوكول خاص بهم يدعم التشفير بشكل كامل بالاعتماد على خوارزمية خاصّة أيضاً (بسيطة لكنها تفي بالغرض).

يمكن تشغيل iCommander Server على أي منفذ تختاره, الافتراضي هو 2012 وتشغيله لا يتطلب صلاحيات رووت طالما اخترت منفذ أكبر من 1024. لا يمكن للسيرفر أن يعمل بدون تحديد كلمة مرور (لأنها ستستخدم لتسجيل دخول العملاء وفي تشفير الاتصال أيضاً) وفي حال عدم تحديدها سيعمل السيرفر بعد أن يقوم بتوليد كلمة سر عشوائية مؤلّفة من 10 أحرف يجب استخدامها في سيرفر العميل لتتمكن من الاتصال بسيرفر التحكم.

iCommander Server 0.1

iCommander Client 0.1

بالاضافة لكلمة المرور يمكنك تحديد أيبيات السيرفرات التي يسمح لها بالاتصال مع سيرفر iCommander مع القدرة على تحديد نطاق شبكة في حال أردت ذلك أو ابقاء امكانية الاتصال مفتوحة للجميع. عند حدوث أي اتصال مع سيرفر iCommander أول ما سيقوم به السيرفر هو التأكد من الأيبي إن كان معروف أم لا ثم سيطلب السيرفر من العميل كلمة المرور بعد ذلك سيتم الاتصال بينهم. ما يجب معرفته أن الاتصال بين العميل والسيرفر مشفّر بالكامل وهنا أقصد تشفير وليس encoding فالبيانات المارّة بالشبكة لا يمكن فك تشفيرها الا بعد معرفة كلمة المرور فمفاتيح التشفير المستخدمة ستتغيّر بشكل كامل اذا تغيّر حرف واحد من كلمة المرور.

iCommander TCP Stream

من الميزات الأخرى الموجودة في iCommander هي خاصيّة التحديث, هذه كانت من الأمور الشائكة في البداية لعدّة أسباب أهمها ضرورة توفير طريقة سهلة تمكن مدير السيرفرات من تحديث الخادم والعميل بنفس الوقت لضمان التوافقية فيما بينهم في حال تم تغيير بعض الأمور في السيرفر أو في البروتوكول المستخدم, لذلك تم برمجة السيرفر ليقوم بالتأكد من توافقية العميل مع الخادم قبل ارسال أي أوامر واذا قمت بتحديث السيرفر وكان هناك تحديث للعميل سيطلب السيرفر بشكل تلقائي من العميل تحديث نفسه ثم سيعاود الاتصال به. بهذه الحالة تستطيع تحديث 20 سيرفر عميل مثلاً بشكل تلقائي وذلك بتحديث السيرفر الرئيسي فقط!

أمر آخر تم توفيره هو ملفّات log مفصّلة فكوننا نتعامل مع نظام عميل وخادم من الضروري توفير طريقة تمكّن مدير الشبكة من معرفة ما يحصل تماماً في سيرفر التحكم وفي سيرفر العميل أيضاً ليكون على علم بأدق التفاصيل. iCommander يحتوي على نظام log يوضح كل خطوة قام بها سيرفر التحكم أو العميل مع تسجيل جميع الطلبات المرسلة والمستقبلة بالاضافة لأي أخطاء أو تحذيرات حدثت أثناء العمل.

iCommander Server Log

 

أسئلة شائعة:

أليس أسلوب عمل iCommander هو نفسه المستخدم في التحكم بشبكات الـ Botnet ؟
هذا هو أول سؤال طرح علي عند عرض iCommander على بعض الأصدقاء, الجواب كفكرة نعم لكن كأسلوب وغاية الجواب سيكون لا طبعاً. أنا أدرك تماماً من امكانية استغلال iCommander بأمور غير شرعية وأعلم أنه من الممكن انشاء شبكة Botnet بمزيات متطوّرة باستخدامه لكن هذه لم تكن غاية iCommander فالفكرة موجّهة أساساً لمدراء السيرفرات ولاظهار كيف يمكننا استخدام أفكار ضارّة في أمور مفيدة. كما أن المخربين لا ينقصهم نظام تحكم مثل iCommander بسبب اعتمادهم على سيرفرات IRC موجودة و iCommander لا يناسبهم بسبب لغة البرمجة المستخدم وخصوصاً أنه لا يدعم أنظمة ويندوز بالوقت الحالي.

كيف يتعامل iCommander Client مع الأوامر المرسلة من السيرفر؟
عندما يستقبل العميل الأوامر من السيرفر أول ما سيقوم به هو التأكد اذا قام بتشغيل هذه الأوامر سابقاً أم لا, بعد ذلك سيحفظ الأوامر في ملف داخل المجلد executed ويقوم بتشغيلها ثم ارسال المخرجات للايميل في حال تم تحديده مسبقاً. عند الانتهاء من ذلك سيقطع العميل الاتصال مع الخادم وينتظر حتى انتهاء المدة التي تم تحديدها بين كل طلب ويعيد الاتصال مرّة أخرى بانتهائها الا اذا تم تفعيل الخيار -x فبهذه الحالة سيخرج العميل بعد تشغيل الأوامر (هذا في حال اردت الاعتماد على cron job أو برنامج آخر لتحديد متى يجب أن يتصل العميل بالخادم).

كيف يمكنني تنصيب iCommander؟
بالوقت الحالي iCommander لا يحتوي على Installer لأنك لن تحتاجه ببساطة! البرنامج لا يعتمد على أي مكتبات خارجية وكل ما يحتاجه هو وجود مفسّر روبي على النظام والذي يمكن تنصيبه بسهولة (في حال لم يكن موجود) باستخدام مدير الحزم الموجود في التوزيعة أو من خلال موقع روبي الرسمي. يمكن أن تجعل iCommander يعمل بالخلفية ومع بدء تشغيل النظام باستخدام ملف shell script يحتوي على:

#!/bin/bash
/full/path/to/icommander [options] > /dev/null 2>&1

مع استبدال [options] بالخيارات المطلوبة, ثم أضفه الى الملف التالي ليعمل مع بدء التشغيل:

/etc/rc.local

ما هي الأنظمة التي يدعمها iCommander ؟
حالياً تم اختبار البرنامج على نظام Linux فقط ومن المفترض أن يعمل على جميع أنظمة Unix-like مثل FreeBSD, Mac OS X… كما تم اختباره على جميع اصدارات روبي المتوفّرة حالياً. أما من يسأل عن ويندوز فدعمه قد يأتي لاحقاً رغم أن هذه الخطوة قد تسبب خطورة بالغة لاحتمال استخدام بعض المخربين iCommander في بناء شبكة Botnet وهذا شيء لا أريده أن يحصل طبعاً. لكن بجميع الأحوال يمكن في المستقبل توفير اصدار من iCommander يعتمد على Java Virtual Machine عوضاً عن مفسّر روبي بالاعتماد على JRuby وبهذه الحالة سيصبح خيار أفضل للشركات لعدم الحاجة لتنصيب روبي على السيرفر اذا كانت الجافا موجودة! هذه الخطوة قد تؤدي لدعم المزيد من الأنظمة, ما رأيك أن تتحكم في موبايل يعمل بنظام iPhone أو Android أيضاً باستخدام iCommander ؟

هل يوجد أي أمور سيتم تطويرها في المستقبل؟
إن شاء الله سنعمل على اضافة Installer في الاصدارات القادمة ليتم تنصيب iCommander بشكل خدمة على النظام بالاضافة لملف اعدادات لكل من العميل والخادم وبهذه الحالة سيسهل التعامل معه أكثر ومن الممكن اضافة خاصية الى iCommander Server تسمح بتصنيف السيرفرات المراد التحكّم بها وبهذه الحالة سنتمكّن من تخصيص أوامر محددة لكل سيرفر أو مجموعة من السيرفرات تختلف عن غيرها بحسب Profile يتم تحديده. أمر آخر أفكّر به هو ارسال مخرجات الأوامر الى سيرفر التحكم نفسه وعرضها باستخدام Web Interface جميلة وبسيطة مثلاً عوضاً عن الاعتماد على الايميل في ذلك. هل يوجد لديك مزيد من الاقتراحات؟

في النهاية قد يلاحظ بعضكم قلّة المحتوى المطروح بالوقع في الفترة الحالية, هذا لأننا بدأنا في iSecur1ty التركيز أكثر على تطوير المشاريع وبرمجة الأدوات المفتوحة المصدر ورغم أن ذلك يتطلب جهد ووقت ليس بالقليل على حساب محتوى الموقع لكننا نعتبره أمر ضروري كرد ولو جزء قليل لمجتمع الأوبن سورس. مجتمع iSecur1ty لن يبقى عبارة عن موقع يحتوي أخبار وشروحات فقط فخططنا أكبر من ذلك بكثير تصب في زيادة المساهمات العربية بمجال الحماية واختبار الاختراق بالاضافة لدعم المحتوى العربي وستحتوي الفترة القادمة على عدّة مشاريع أخرى ومفاجأت ستعلمون بها قريباً ان شاء الله.

هذا كل شيء بالوقت الحالي, أتمنى لكم استخدام موفّق وفي حال وجود أي مشاكل أو اقتراحات يمكنكم مراسلتنا على الايميل: projects[AT]isecur1ty[DOT]org

موقع البرنامج: iCommander – Command & Control Centre

تحياتي,
عبدالمهيمن الآغا – فريق عمل iSecur1ty.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn