
الباب الخلفي XZ
بدون أدنى شك تعد حالة الباب الخلفي التي تم اكتشافها في الأداة المساعدة XZ إحدى الحالات التي ستسجل في تاريخ Linux وليس من أجل لا شيء، ولكن كل العمل الذي قام به جيا تان وهو أحد أفضل الأمثلة على الهندسة الاجتماعية التطبيقية، نظرًا لأن العمل المنجز يستحق الإعجاب بلا شك بالنسبة لمقدار الوقت المستثمر، لأننا لا نتحدث عن أسابيع أو أشهر، على الأقل عامين.
لقد جذبت هذه القضية انتباه الكثيرين و لقد بدأ التحليل الهندسي العكسي، والتي وفقا لنتائجها الأولية تكشف عن وجود باب خلفي مضمن في liblzma كجزء من حملة لاختراق حزمة XZ. تم تصميم هذا الباب الخلفي خصيصًا للتأثير على أنظمة x86_64 مع نواة Linux ومكتبة Glibc C، حيث يتم تطبيق تصحيح إضافي على sshd لربطه مع libsystemd.
يذكر الباحثون ذلك كان يُعتقد في البداية أن الباب الخلفي يمكنه تجاوز مصادقة sshd والوصول إلى النظام عبر SSH، لكن التحليل الإضافي كشف عن وجود باب خلفي يسمح بتنفيذ تعليمات برمجية عشوائية على النظام دون ترك آثار في سجلات sshd.
يتم اعتراض وظيفة RSA_public_decrypt بواسطة الباب الخلفي للتحقق من توقيع المضيف باستخدام المفتاح الثابت Ed448. إذا نجح التحقق، فسيتم تنفيذ التعليمات البرمجية التي مررها المضيف الخارجي باستخدام وظيفة النظام () قبل أن يقوم sshd بإعادة تعيين الامتيازات. يتم استخراج بيانات التعليمات البرمجية التي سيتم تنفيذها من المعلمة "N" التي تم تمريرها إلى وظيفة RSA_public_decrypt ويتم التحقق منها وفك تشفيرها باستخدام المفتاح المحدد مسبقًا ChaCha20.
لتفعيل الباب الخلفي في سشد، يستخدم آلية تبادل مفتاح المضيف القياسية ويستجيب فقط للمفتاح الذي أعده المهاجم ويتوافق مع المفتاح الثابت المحدد مسبقًا Ed448. إذا فشل التحقق من توقيع المفتاح العام أو إذا لم يتم تأكيد سلامة بيانات التنفيذ، فسيعيد الباب الخلفي التحكم إلى وظائف SSH القياسية.
يظل المفتاح الخاص للمهاجم مجهولاً، مما يجعل من المستحيل تنفيذ رمز التحقق لتنشيط الباب الخلفي من مصادر خارجية أو تطوير ماسح ضوئي يكتشف المضيفين المخترقين على الشبكة. ومع ذلك، قام الباحثون بتطوير برنامج نصي يوضح كيف يمكن استبدال المفتاح العام في شهادة OpenSSH المرسلة بواسطة عميل SSH، والتي تتم معالجتها بواسطة وظيفة RSA_public_decrypt التي تم اعتراضها بواسطة الباب الخلفي.
وبالإضافة إلى ذلك، اكتشف الباحثون وجود آلية لتحييد الباب الخلفي (killswitch
) على النظام المحلي عن طريق تعيين متغير بيئة قبل بدء تشغيل sshd. كان هناك أيضًا تحليل مفصل لبنيات الصدفة المستخدمة للخلط بين عملية استخراج ملف كائن وباب خلفي واستبداله في المكتبة liblzma.
أثناء تجميع حزمة XZ، تم تنفيذ بعض التعليمات البرمجية من النص «build-to-host.m4
» التي تلاعبت بملف اختبار و أجرى تغييرات معينة على الشخصيات وتحويله إلى ملف سليم، والذي تم استخراج البرنامج النصي شل منه. كان نص الصدفة الناتج قادرًا على استخراج نص شل آخر تدريجيًا من المحتوى، وتخطي تسلسلات معينة مع الأوامر واستبدال الأحرف.
نتيجة لهذه العملية، تم إنشاء برنامج نصي معقد إلى حد ما وواسع النطاق لاستخراج الملف مباشرة من الباب الخلفي من ملف good-large_compressed.lzma، وفك تشفيره، وإدراجه في liblzma. يتضمن هذا البرنامج النصي أيضًا تطبيقًا لآلية البرنامج الإضافي، مما يسمح بتسليم مكونات إضافية قابلة للتنفيذ لاحقًا عن طريق وضع ملفات اختبار جديدة دون تغيير good-large_compressed.lzma وbad-3-corrupt_lzma2.xz، باستخدام البحث عن التوقيع. يشتمل الكود أيضًا على أداة فك تشفير تعتمد على خوارزمية RC4، والتي يتم تنفيذها بلغة AWK.
ومن ناحية أخرى، تجدر الإشارة إلى أنه بناءً على الحادثة، تم تطوير مجموعة من الأدوات تسمى xzbot، ما يشمل:
- مصيدة جذب لإنشاء خوادم وهمية تتظاهر بأنها عرضة لاكتشاف محاولات الاتصال من قبل المهاجمين.
- تصحيح لاستبدال المفتاح العام الموجود في الباب الخلفي داخل liblzma.so بمفتاحك الخاص (للاتصال بالباب الخلفي باستخدام المفتاح الخاص المقابل).
- عرض توضيحي لبدء تنفيذ التعليمات البرمجية على الباب الخلفي المعدل باستخدام المفتاح الخاص المقابل.
إذا كنت مهتمًا بالقدرة على المعرفة المزيد عن ذلك، يمكنك التحقق من التفاصيل في الرابط التالي.