في هذا المقال سوف نتعرف على طريقة عمل البرمجية Hammertoss ، ونوضح مفهوم C&C server مع إعطاء مثال عملي باستخدام لغة البرمجه بايثون.
هامرتوس هي برمجية روسية من ضمن اأذكي البرمجيات الخبيثة التي قد تراها بسبب الطريقة التي تعمل بها فهي -علي عكس معظم البرمجيات التي تستخدم C&C server- لا تتصل بـسيرفر بشكل مباشر ولكن تستخدم عدة مواقع معروفة مثل Github و Twitter للتواصل مع مطورين البرمجية وبهذه الطريقة تتخطى كل الحمايات ويصعب تعقبها.
ولعدم الخوض في تفاصيل البرمجية ، هذا فيديو لشركة FireEye تشرح الطريقة التي تعمل بها البرمجية من هنا
الآن كما يتضح من الفيديو فإن أول ما تقوم به البرمجية هو البحث في تويتر عن تغريدة وضعها أصحاب البرمجية والتي تحتوي على رابط و هاشتاج كجزء من التشفير و لكن ألم تسأل نفسك كيف يتم البحث في تويتر؟
الإجابة هي أنك لكي ترى تغريدات شخص ما لا يلزم أن تكون قد قمت بتسجيل الدخول إلي حسابك و هذا ما اعتمدت عليه البرمجية.
و ليست التغريدات فقط بل المعلومات الشخصية أيضا ، فقد قمت مثلا ببرمجة سكربت من قبل لجلب معلومات أي مستخدم تويتر تستطيع أن تراه من هنا و للقرائة أكثر عن هذه البرمجية من هنا
المثال السابق كان فقط لإيضاح كيف تقوم البرمجيات باستخدام المواقع الشهيرة كسيرفر C&C ، و الآن و بشكل سريع ما هو C&C Server؟
C&C هو اختصار Command and Control و هو يكون كالوسيط مابين المخترق و الجهاز المخترق و يستخدم في الغالب في الـ Botnets فهو يكون السيرفر الذي ينفذ المخترق الأوامر من خلاله.
الآن سأقوم بشرح استخدام موقع معروف آخر لتكتمل الفكرة و هو موقع Cl1p ..
هذا الموقع يسمح لك أن تقوم بتأليف أي كلمة مميزة و تستخدمها في رابط خاص بك و عندك دخولك إلى هذا الرابط تستطيع أن تكتب اي شئ ثم تقوم بحفظه و إرساله لأي شخص آخر.
عندما يقوم هذا الشخص بفتح الرابط فسوف يري ما كتبته بداخله ثم بعد ذلك يُمسح ما كتبته ، مما يعني أنك تستطيع استخدام نفس الكلمة مره أخري و هكذا.
عندما يقوم هذا الشخص بفتح الرابط فسوف يري ما كتبته بداخله ثم بعد ذلك يُمسح ما كتبته ، مما يعني أنك تستطيع استخدام نفس الكلمة مره أخري و هكذا.
الآن سأوضح كيف من الممكن استخدام هذا الموقع كـ C&C Server بلغة البايثون (إصدار 3)
أول شئ سأقوم بعمل دالة وظيفتها توليد اسم عشوائي ليتم استخدامه في الرابط و سيكون طول الكلمه 30 رمز
للإيضاح فقد قمت أولا بعمل متغير فارغ و من ثم قمت بعمل حلقه أو Loop عن طريق For تقوم باختيار رمزا عشوائيا واحدا من كل الحروف الأبجدية و الأرقام و من ثم تضيفه للمتغير حتي يصبح طوله 30 رمز و تنتهي
الآن نبدأ بفرز الموقع لنرى كيف نستحدمه و لنفرض مثلا أن الكلمة العشوائية هي ELMOBARMEG ، فيكون الرابط https://cl1p.net/ELMOBARMEG .
من الواضح أن هذه Form بسيطة تقوم بعمل طلب من نوع POST و ترسله إلي نفس الرابط و هذا ما يتضح عند النظر في الكود المصدري للصفحة
الآن النص الذي نكتبه يكون في الصندوق النصي المسمى Content و الذي يتم إرسال محتواه في الطلب و لكي نقوم بارسال طلب بنفس الطريقة في لغة البايثون سنستخدم مكتبة requests فيكون الكود الآتي:
بعد تنفيذ الكود نقوم بفتح الرابط فنجد النتيجة:
تم عرض النص مما يعني أن الكود يعمل
والأن لنكتب كود آخر ليجلب النص من الصفحة و سأستخدم فيه مكتبة re مع مكتبة requests
فتكون النتيجة:
الأن لنصعب الأمر قليلا ..
سأقوم بتقسيم النص إلي عدة أجزاء فيكون كل جزء منهم عبارة عن كلمة و كل كلمة نضعها في رابط وحدها ثم نقوم بترميزها على شكل Base64 حتى نتفادي الأخطاء التي قد تحدث عند إرسال نص و به فاصلة أو ما شابه.
و لفعل ذلك سنقوم بعمل دالتين ، دالة خاصة بالإرسال و دالة بالاستقبال و لكن كيف سنقوم بربط الكلمات ببعضها و كل كلمة في رابط بمفردها؟
الحل بسيط و هو أن نأتي بالكلمة العشوائية التي سنستخدمها في الرابط و نقوم بإضافة رقم عليها مع كل كلمة في رابط ، فمثلا النص “Test1 Test2 Test3” يُقسم كالآتي:
فتكون الدوال بالشكل الآتي:
فلنبسط الأمور قليلا ..
دالة rand شُرحت من قبل
دالة send
أول شئ قمت به هو تقسيم النص إلى كلمات في المتغير msgs و بعدها المتغير word و هو الكلمة العشوائية التي سنستخدمها و من ثم يوجد المتغير n و الذي سنستخدمه في العد و ساخبركم لماذا بعد قليل ، و الآن لقد قمت بعمل حلقة تأخذ كل كلمة فتضيف للمتغير word المتغير n و من ثم تضيف المتغير word بعد الإضافة للرابط في المتغير link و من ثم الآن نرسل طلب كما شرحنا من قبل و لكن هذه المرة نقوم بترميز الكلمة التي سنرسلها بترميز base64 و نضيف 1 إلي المتغير n و في النهاية بعد انتهاء الحلقة نقوم بطباعة المتغير n على أنه هو المفتاح و ستعرفون السبب في دالة الأستقبال.
أول شئ قمت به هو تقسيم النص إلى كلمات في المتغير msgs و بعدها المتغير word و هو الكلمة العشوائية التي سنستخدمها و من ثم يوجد المتغير n و الذي سنستخدمه في العد و ساخبركم لماذا بعد قليل ، و الآن لقد قمت بعمل حلقة تأخذ كل كلمة فتضيف للمتغير word المتغير n و من ثم تضيف المتغير word بعد الإضافة للرابط في المتغير link و من ثم الآن نرسل طلب كما شرحنا من قبل و لكن هذه المرة نقوم بترميز الكلمة التي سنرسلها بترميز base64 و نضيف 1 إلي المتغير n و في النهاية بعد انتهاء الحلقة نقوم بطباعة المتغير n على أنه هو المفتاح و ستعرفون السبب في دالة الأستقبال.
الآن دالة receive
قمنا فيها بأخذ متغيرين و هما word و key فالمتغير الأول سيكون الكلمة التي استخدمت في الرابط و المتغير الثاني key سيخبرنا بعدد الروابط و بعدها نقوم بتجهيز الريجيكس الذي سنستخرج به النص (للفهم أكثر اقرأ عن الـ Regluar expressions) و الآن نقوم بعمل حلقة و مداها المتغير key و من ثم نقوم بنفس الخطوات كما شرحنا من قبل حتي نقوم في النهاية بطباعة النص كلمة كلمة و كل كلمة منفصلة عن الأخرى بمسافة.
قمنا فيها بأخذ متغيرين و هما word و key فالمتغير الأول سيكون الكلمة التي استخدمت في الرابط و المتغير الثاني key سيخبرنا بعدد الروابط و بعدها نقوم بتجهيز الريجيكس الذي سنستخرج به النص (للفهم أكثر اقرأ عن الـ Regluar expressions) و الآن نقوم بعمل حلقة و مداها المتغير key و من ثم نقوم بنفس الخطوات كما شرحنا من قبل حتي نقوم في النهاية بطباعة النص كلمة كلمة و كل كلمة منفصلة عن الأخرى بمسافة.
كان هذه شرحا بسيطا للأمر و السكربت يحتاج الكثير من التطوير و لكنك الآن تستطيع أن تخزن رسالة سرية مثلا على الموقع و من ثم لا يستطيع أحد و معه السكربت أن يقرأها الا لو كانت بحوزته الكلمة و المفتاح.
و لقد قمت بتطوير هذا السكربت فجعلته سكربت لإرسال و استقبال الرسائل بسرية ، تستطيع أن ترى الكود الكامل من هنا
والآن كما ترى فقد يقوم الهاكر باستغلال الموقع عبر إرسال أوامر عليه و يقوم الجهاز المخترق بقرائتها و تنفيذها و لكن قد يخطر على بالك كيف سيعرف الجهاز المخترق بأمر الكلمة والمفتاح حتى يقرأها؟
بالنسبه للكلمة قد تكون كلمة محددة و ليست كلمة عشوائية و يقوم الجهاز المخترق بتفقد الرابط كل فترة زمنية حتى يقوم الهاكر بكتابة أمر فيه ، و بالنسبة للمفتاح فمن الممكن أن يقوم الهاكر باستخدام مفتاح ثابت دائما.
انتهى المقال عند هذا الحد ، أرجو أن يكون الشرح واضحا و أن تكونوا قد استفدتم منه.



