
أشياء سيئة من أشخاص سيئين
تم اختيار عينة Hive التي تم تحليلها والإشارة إليها في هذا المستند عشوائيًا من هذه القائمة التي أنشأها @rivitna والذي أتوجه إليه بأحر الشكر. القطع الأثرية متاحة على منصة VirusTotal.
في هذا المستند، تم اتخاذ الملف a0h2uih3d2.exe كمرجع
MD5: 15CF5E0DA094ACDD751A513402A8C941
SHA-1: 72E15AC4473903C814E65E3C06F54EB0399580AA
SHA-256: 335D2E4A743D059955760ECF2EC25EE86D36AA60B096C9180E860C64EF78EE55
للحصول على فكرة عن مدى تعقيد برنامج الفدية هذا، يرجى إلقاء نظرة على هذا التحليل المنشور من قبل مركز Microsoft لاستخبارات التهديدات (MSTIC).
يرجى قراءة المستند بأكمله بعناية قبل البدء بالتعامل مع الكود!
في الأشهر الأخيرة، وجهت معظم طاقتي نحو دراسة وهندسة عكسية لخوارزمية تشفير Hive v5. كان لي شرف التعاون مع محلل برمجيات خبيثة ومهندس عكسي بارع @rivitna الذي قام في الماضي بتحليل الإصدارات السابقة من Hive ونشر أكوادًا وبراهين مفاهيم (PoCs) تتعلق بآليات التشفير الخاصة بها. لقد ساهم (وليس بقليل) في تحديد المكونات المشاركة في عمليات تشفير Hive v5، والتي أصبح تحليلها أكثر صعوبة لكونها مكتوبة بلغة RUST. لقد وجدت بعض القواسم المشتركة مع Babuk، وهو برنامج فدية مهم جدًا آخر تم الكشف عن مصادره في يونيو 2021:
عند تشغيل برنامج الفدية Hive v5 على نظام الضحية، فإنه يولد مفتاحين بنص واضح، باستخدام الخوارزمية الموضحة في الدليل أدناه، والمعتمدة على واجهتي برمجة تطبيقات Windows QueryPerformanceCounter و QueryPerformanceFrequency.
يرجى إلقاء نظرة على هذه الصفحة من Microsoft لمزيد من المعلومات حول واجهات برمجة التطبيقات QueryPerformanceCounter، وهنا لـ QueryPerformanceFrequency.
QueryPerformanceCounter هو عداد وقت دقيق جدًا. عند استدعائه، فإنه يعيد الوقت المنقضي منذ آخر مرة تم فيها تشغيل الكمبيوتر.
QueryPerformanceFrequency يعيد قيمة (تردد) عداد الأداء. له قيمة ثابتة تبلغ 0x989680. وهذا يعني أن قيمة QueryPerformanceCounter يتم تحديثها 0x989680 مرة في الثانية، أي 10,000,000 مرة.
يبلغ حجم المفتاحين ذوي النص الواضح 0xCFFF00 بايت، ويتم توليدهما واحدًا تلو الآخر بايتًا ببايت. أدناه المقتطف الذي يتيح إنشاء مصفوفة من 0xA00000 بايت، وهو الجزء الأكبر مما يسمى بمفتاح النص الواضح الذي يستخدمه Hive لتشفير الملفات على جهاز الكمبيوتر الخاص بالضحية.

يتم الحصول على كل بايت من المفتاح بأخذ قيمة سجل AL. يحتوي سجل EAX على نتيجة الدالة 0044ADE0 التي أعيدت تسميتها بالعلامة createByte والتي تنفذ الفرق بين اللحظة الزمنية الحالية وقيمة البذرة الأولية، المحسوبة عند أول استدعاء للدالة 0044A850 التي أعيدت تسميتها بالعلامة call_to_QueryPerformanceCounter.
فيما يلي الكود المكتوب بلغة C++ لتوليد مفتاح نص واضح:

الخوارزمية بسيطة جدًا، حتى وإن كانت داخل الدالة 0044ADE0 قد أُدرجت تعليمات تنفذ عمليات زائدة وقفزات شرطية متنوعة في محاولة لتأخير زمن تنفيذ الكود أثناء توليد مفتاح النص الواضح:

في المجلد HiveRansomwareV5_custom_keygen_PoC ستجد الكود الخام المستخرج بالهندسة العكسية من عينة Hive v5 التي تم تحليلها. إنه ليس كودًا محسنًا مثل الموجود في البرمجية الخبيثة، لأنني كنت بحاجة إلى عدم تفويت سطر واحد من الكود في النسخة المترجمة.
في المجلد HiveRansomwareV5_custom_keygen_PoC-optimized ستجد الكود المحسن المشتق من الكود الخام المذكور أعلاه. في هذه النسخة، يكون الكود أسهل بكثير في القراءة من الكود الخام، وذلك لفهم الوظيفة التي ينفذها.
كلا النسختين تحتاجان إلى تخصيص باسم المستخدم الخاص بك قبل تشغيلهما من أجل حفظ مفتاح النص الواضح المُولَّد على سطح المكتب لديك.
يتم توليد كلا مفتاحي النص الواضح باستخدام نفس الخوارزمية.
يتكون مفتاح النص الواضح من 0xA00000 بايت مولدة عشوائيًا بشكل آمن. ثم يتم نسخ أول 0x2FFF00 بايت في النهاية، مما ينشئ مفتاح نص واضح نهائيًا بحجم 0xCFFF00 بايت.

ثم يستخدم Hive المفتاحين المُولَّدين لتشفير الملفات، لكن قبل كل شيء، يقوم برنامج الفدية Hive v5 بتشفير المفاتيح المُولَّدة في بنية مخصصة (يشار إليها فيما بعد باسم تدفقات المفاتيح) ويضعها في جذر كل محرك أقراص يقوم بتشفيره باستخدام امتداد .key. على سبيل المثال، إذا كان لديك محركا الأقراص C وD مثبتين على نظامك، فستكون تدفقات المفاتيح المشفرة موجودة في جذر كل محرك.

يستخدم برنامج الفدية Hive v5 مفاتيح النص الواضح المُولَّدة لتشفير الملفات باستخدام تعليمة XOR، لذا فنحن أمام تشفير متماثل سريع جدًا على معالجات x86/x64 الحديثة.
يحتاج برنامج الفدية Hive v5 إلى حماية مفتاح النص الواضح المُولَّد بتشفيره مرتين، وسنسمي هاتين المرحلتين فيما بعد بالجولات. يتطلب الأمر جولتين من التشفير للحصول على تدفق المفاتيح النهائي.
لتحقيق ذلك، يتم تنفيذ الخطوات التالية في كل جولة:
تضمن الخطوة 3 إنشاء تدفق مفاتيح يمكن فتحه بزوج مزدوج من المفاتيح الخاصة: تلك التي يولدها Hive أثناء التشفير، وتلك التي ولدها شريك Hive عندما قام بتجميع برنامج الفدية من أجلنا.

في نهاية هذا الوصف، هناك نقطة معينة تتضح: مفتاح النص الواضح، والمفتاح الخاص، وقيمة nonce المستخدمة في جولتي التشفير يتم توليدها جميعًا بواسطة نفس الدالة أعلاه (0044ADE0 والمعروفة أيضًا باسم createByte). الدالة 0044ADE0 مشروطة بالوقت الذي تستغرقه وحدة المعالجة المركزية (CPU) لتنفيذ الكود المُستدعى داخل حلقة for.
بإلقاء نظرة على الشكل أعلاه الذي يبرز بنية تدفق المفاتيح بعد جولتي التشفير، يتضح أن لدينا وصولًا حرًا فقط إلى قيمة nonce (وإلا لما عرف شركاء Hive كيفية فك تشفير الملفات).
لذا دعونا نركز على قيمة NONCE، التي يبلغ طولها 24 بايت:
NONCE: 40 A4 08 6C D0 D0 34 98 FC 60 C4 28 8C F0 F0 54 B8 1C 80 E4 48 AC AC 10
الفرق بين بايت من قيمة nonce والبايت التالي له (بالقيمة المطلقة) يمثل الوقت المنقضي بين تكرار وآخر. نقدم بهذا التعريف مفهوم البصمة.
بصمة NONCE: 64 9c 64 64 00 9c 64 64 9c 64 9c 64 64 00 9c 64 9c 64 64 9c 64 00 9c