Kaspersky تفك غموض اللغة البرمجية التي كُتب بها تروجان Duqu

الوقت المقدّر لقراءة هذا المقال: 7 دقيقة و 59 ثانية

تم كشف الستار أخيراً عن اللغة البرمجية الغامضة التي ذكرت Kaspersky من فترة قريبة، أن أجزاء كثيرة من إطار عمل Duqu قد كتبت بها، هذا وقد دفع غموض الرماز البرمجي شركة Kaspersky إلى دعوة مجتمع المبرمجين إلى المساهمة بما لديهم من معلومات قد تفيد بمعرفة اللغة التي كتبت بها تلك الأجزاء من Duqu.

Disassembly of the original Duqu code: construction of the linked list class

بعد حصول Kaspersky على أكثر من 200 تعليق و 60 رسالة برريد إلكتروني حول اللغات وأطر العمل المحتمل أنه قد تم استخدامها في كتابة Duqu، تعود Kaspersky علينا بتدوينة بقلم Igor Soumenkov تقول فيها “شكراً جزيلاً!” لكل من ساهم بأي معلومات قد تفيد في تحديد الرماز الغامض.

لنستعرض اللغات التي كانت الأكثر اقتراحاً من قبل المشاركين:

  • أشكال مختلفة من LISP
  • Forth
  • Erlang
  • Google Go
  • Delphi
  • OO C
  • compilers قديمة لـ C++ ولغات أخرى.

وبفضل بعض التعليقات المفيدة جدًا والتي تدل على خبرة كاتبيها، أمكن القول الآن، وبدرجة كبيرة من الوثوق بأن Kaspersky وجدت إجابتها المنشودة.

فيما يلي نقتبس بعض المشاركات التي ساعدت بحل هذا اللغز:

igorsk
Simple Object Orientation (for C)

It seems someone over at reddit (http://www.reddit.com/r/ReverseEngineering/) hit the jackpot: the code snippets look _very_ similar to what this would produce:http://daifukkat.su/wiki/index.php/SOO
There are a few other OO frameworks for C, but they don’t match as well: http://ooc-coding.sourceforge.net/ http://sooc.sourceforge.net/
Jonwil
Re: Other C/C++ compiler?

I have seen how GCC works internally and its ABI (for a number of different versions) and I can confirm that the Duqu code is definitely not generated by GCC. I don’t know how other C++ compilers work but the things I see in the ASM (like where the pointers to the functions go, the way the “this” pointer is passed etc) do not suggest C++ to me but something else entirely. (such as the aforementioned “object-oriented” frameworks for C that exist)
igorsk
Re: Other C/C++ compiler?

I’m 99% sure the machine code was generated by MSVC. It’s something you get a feel with experience, but I can point out two things that are quite characteristic of MSVC: 1) it uses esi as the first candidate for temporary storage; 2) “pop ecx” instead of “add esp, 4”.

حصلت Kaspersky أيضاً على رسالتي بريد إلكتروني ملفتتين للانتباه، حيث اقترح كل من Pascal Bertrand المعروف بـ bps وكاتب آخر -فضل أن تبقى هويته غير معروفة- اقتراحا بأن الكود تمت كتابته بواسطة لغة كائنية التوجه، متفرعة عن لغة C، تدعى “OO C”.

هذا وقد كانت التعليقات مهمة جدًا حيث ساعدت فريق Kaspersky على تتبع المترجم Compiler الذي تم استخدامه في المشروع: Microsoft Visual Studio compiler.

ويقول Igor بأنه قضى بعض الوقت يقوم بتجربة نسخ مختلفة من MSVC compilers وشفرات برمجية مختلفة وخيارات ربط مختلفة، في محاولة منه لتوليد الرماز المصدري الخاص بالتابع الباني المذكور في تدوينته السابقة التي دعى فيها للمساعدة بمعرفة اللغة.

Manually decompiled C code that produces the same code

الكود السابق، عند ترجمته باستخدام MSVC 2008 والخيارات /O1 (minimize size) /Ob1 (expand only __inline) يقوم بتوليد opcodes مطابقة للتي تمت مشاهدتها في النسخة التنفيذية من Duqu.

ويضيف Igor بأنه في حال تم تغيير ترتيب العمليات وكُتل if/else فإن الكود الناتج سيختلف نوعًا ما عند استخدام MSVC 2005. لذلك يمكنهم القول وبدرجة عالية من الوثوق بأن اللغة المستخدمة كانت C وأنه تم استخدام MSVC 2008 مع الخيارات /O1 /Ob1.

ما يعنيه هذا الكلام بشكل مختصر، أنه يوجد احتمالان للسؤال الأساسي:

  1. أن الكود تمت كتابته باستخدام إطار خاص من OO C، بالاعتماد على Macros أو موجهات خاصة للمعالج.
  2. أن الكود بكامله قد كتب بـ OO C يدوياً، بدون أي إضافات إلى اللغة كالـ macros.

ونظرًا للتشابه الكبير في التعليمات في التوابع البناءة والتوابع الأعضاء، أمكن الافتراض بأن الاحتمال الأول هو الأقرب للواقع.

لكن لماذا  OO C بدلاً من C++ ؟

بمناقشة الفكرة مع بعض الأشخاص الذين يفضلون هذه التقنيات، أمكن استخلاص سببين لهذا الأمر:

  1. لا يثقون بـ C++ compilers، وهؤلاء هم غالبًا أناس بدؤوا البرمجة منذ زمن بعيد، عندما كانت المجمّعات assemblers هي الخيار الأمثل. C كانت لغة ثورية في ذلك الوقت تجاوزت لغة التجميع وسرعان ما أصبحت اللغة القياسية في البرمجة. عندما تم نشر C++ فإن الكثيرين من المبرمجين القدامى فضّلوا أن يلتزموا باستخدام C بدلًا منها لعدم ثقتهم بطرق حجز الذاكرة وخصائص أخرى غامضة في اللغة تسمح بتنفيذ كود برمجي بشكل غير مباشر (على سبيل المثال، التوابع البناءة).
  2. الـ portability العالية. حيث يمكن ترجمة كود C باستخدام الكثير من الـ compilers. فمثلًا، منذ زمن طويل (10 – 12 سنة مضت) كان بالإمكان ترجمة كود C++ على MSVC في حين لم يكن بالإمكان ترجمة ذات الكود على Watcom C++ مثلاً. لذلك إن أردت الحصول على منقولية عالية بين المنصات، فعليك البرمجة بلغة C.

هذان السببان يقترحان بشكل غير مباشر أن الفريق المسؤول عن برمجة Duqu مؤلف من مبرمجين مخضرمين، يتبعون لنمط “المدرسة القديمة” في البرمجة.


هل أعجبك هذا المقال؟ أخبر أصدقاءك عنه Share on Facebook0Tweet about this on TwitterShare on Google+8Share on LinkedIn1Buffer this pageEmail this to someoneShare on Reddit0Share on Tumblr0

عن كاتب المقال:

من محاربي الأسمبلي القدامى. أتقن البرمجة بالعديد من اللغات بما يتناسب مع طبيعة المشاريع التي أعمل عليها. مهتم بالنواحي الأمنية للتطبيقات المكتبية، تطبيقات الويب وأمن الشبكات والأنظمة. الرمادي هو لوني المفضّل.

  • انا حبكى بصراحه اصل بعد قراءتى لهذا الكلام الكبير والضخم اصبحت متحير من امرى فانا اود ان اكون محترف فى جميع اللغات البرمجيه

    ولكن بهذا الشكل لا اعتقد انى ساكون محترف بس بحاول ان شاء الله

    • djug

      الاحتراف في جميع اللغات البرمجية عبارة عن حلم خيالي غير قابل للتحقيق.
      الحل هو الاحتراف في لغة واحدة وفي تخصص واحد.
      زمن الـ Super Programmer الذي يعمل كل شيء قد ولى من دون رجعة.

  • السلام عليكم,
    اتمنى أن أعمل في شركة انتي فيروس في تحليل الفيروسات أناوكاتب هذا المقال و صاحب هذه المدونة:), فكم احس بالفرحة عندما استطيع القضاء على فيروس لا يستطيع الانتي فيروس عمل شيئ معه.

  • السلام عليكم ورحمة الله

    اخي وائل يمكنك تكوين مجموعة برمجة(حتى لا أقول شركة) تبرمج مضادات خاصة لفيروسات معينة قد تكون منتشرة بالمناطق العربية أكثر ولم يسمع بها مضدادات الفيروسات الكبيرة

    • djug

      ذكرتي بأيام الفريق العربي للهندسة العكسية، ومحاولات محاربة الفيروسات بملفات Batch 🙂

    • أنت هنا؟! إذاً عليك أن تنضم إلى المجموعة, اشتقنالك, كيف الأمور؟

  • شكرا أخي على الخبر، ما مدى تأثير هذا التروجان Duqu على الحواسب ؟

  • تعددت التحليلات و التروجران واحد

  • انااحب التكنلوجيا و الاختراق و انا مستخدم عادي فكيف يمكنني تطوي مهاراتي

  • حسب خبرتي يتبين انها C x0
    و الله أعلم