
ETS5 Password Recovery Tool هي إثبات مفهوم لـ CVE-2021-36799
هل نسيت كلمة المرور لأحد مشاريع ETS5 الخاصة بك ولم تعد قادرًا على الوصول إلى تكوين تثبيت KNX؟ تتيح لك أداة استعادة كلمة مرور ETS5 استرداد كلمة مرور المشروع وأسرار أخرى محفوظة في مخزن مشروع ETS5. هذا ممكن لأن ETS5 يحتوي على عيب تصميمي كبير، حيث يستخدم كلمة مرور ثابتة وملح (salt) مشفرين في الكود لتشفير معلومات المشروع (CVE-2021-36799).
تخزين الأسرار التشفيرية في كود المصدر أمر غير مستحسن لأنه يمكن استعادتها عن طريق الهندسة العكسية للبرنامج، مما يوفر حماية قليلة تزيد عن تخزين المعلومات كنص واضح. قد يشكل ذلك تهديدًا لأمان تثبيتات KNX. إذا تمكن المهاجم من الوصول إلى الملفات في مخزن المشروع، فيمكنه فك تشفيرها على الرغم من عدم معرفة كلمة مرور المشروع. تسمح المعلومات الموجودة بداخلها بالتنصت وانتحال الهوية وإعادة تكوين أجهزة KNX. هذه مشكلة خاصة لأن ETS5 يعطي المستخدمين انطباعًا بأن كلمة مرور المشروع ستُستخدم لتشفير معلومات المشروع، وليس فقط للمشاريع المصدرة. لذا، فمن المحتمل أن العديد من المستخدمين ومتكاملي الأنظمة لم يتخذوا خطوات إضافية لضمان سرية مخزن المشروع. إذا قام ETS5 بتنفيذ التشفير بشكل صحيح وتم اختيار كلمة مرور قوية للمشروع، فسيشكل تحديًا أكبر للمهاجم، حتى إذا تمكن من الوصول عن بُعد إلى الكمبيوتر.
المعلومات السرية التالية غير مشفرة بشكل صحيح:
أداة استعادة كلمة مرور ETS5 هي إثبات مفهوم يوضح المشكلة عن طريق فك تشفير المعلومات الحساسة وعرضها. تم تطويرها كجزء من الإفصاح المنسق عن الثغرات وتم إصدارها بإذن من رابطة KNX. نشر الأداة يخدم الأغراض التالية:
تحذير: استخدم هذه الأداة فقط إذا كنت مخولًا قانونيًا لعرض معلومات المشروع. تجاوز التدابير الأمنية، حتى غير الفعالة، للحصول على معلومات لا يُسمح لك برؤيتها قد يكون جريمة في منطقتك القضائية.
يمكن تنزيل الملف التنفيذي من قسم الإصدارات. لا يحتاج إلى تثبيت ويمكن وضعه في أي دليل تختاره.
بدلاً من ذلك، إذا كنت لا ترغب في تشغيل برنامج غير موثوق على نظامك، يمكنك فك تشفير السمات الفردية من ملفات XML الخاصة بالمشروع على موقع CyberChef.
يعتمد البرنامج على .NET Framework 4.6 أو أحدث. يتضمن Windows 10 بالفعل إصدار .NET مناسب افتراضيًا. سيتعين على مستخدمي إصدارات Windows الأقدم تثبيت إصدار حالي من .NET Framework لتشغيل البرنامج.
على عكس ما توحي به واجهة المستخدم، لا يقوم ETS5 بتشفير ملفات المشروع المخزنة محليًا في C:\ProgramData\KNX\ETS5\ProjectStore بكلمة مرور المشروع. بدلاً من ذلك، يستخدم كلمة المرور الثابتة ETS5Password والملح Ivan Medvedev لإخفاء سمات محددة في ملفات XML الخاصة بالمشروع. الأسرار التشفيرية الثابتة هي ضد أفضل الممارسات، كما هو موضح في CWE-798 و CWE-321.
عملية إزالة الإخفاء هي:
Ivan Medvedev كسلسلة مشفرة بـ ASCII أو UTF-8.ETS5Password ككلمة مرور، وتمثيل البايت لـ Ivan Medvedev كملح. سيتم استخدام أول 32 بايت من مخرجات اشتقاق المفتاح كمفتاح، و16 بايت التالية كمتجه تهيئة (IV).يمكن العثور على تنفيذ لإزالة الإخفاء في ملف Deobfuscator.cs. نظرًا لأن كلمة المرور والملح ثابتان، سيكون من الممكن حساب المفتاح و IV مسبقًا لتخطي اشتقاق المفتاح. لا يتم ذلك في تنفيذ هذا البرنامج، لأنه يهدف إلى عرض جميع خطوات إزالة الإخفاء. ومع ذلك، إذا كنت بحاجة إلى المفتاح و IV، فهما مدرجان أدناه.
| Hex | Base64 | |
|---|---|---|
| المفتاح | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
ملفات المشاريع المصدرة (.knxproj) لا تتأثر بهذا العيب التصميمي، وبالتالي لا يمكن استخدام هذه الأداة لاستعادة كلمة مرور المشروع لها. ملف .knxproj هو ملف ZIP يحتوي على ملف ZIP آخر به المعلومات الحساسة. يستخدم الأخير ضغط Deflate وتشفير ZipCrypto / PKWARE وكلمة مرور المشروع لاشتقاق مفتاح التشفير.
أثناء التحضير لأطروحتي "تحليل أمان بروتوكول KNXnet/IP الآمن"، قمت بالتحقيق في كيفية تخزين ETS5 لمعلومات المشروع. نظرًا لأن ETS يولد ويخزن مفاتيح وكلمات مرور تشفيرية تُستخدم بواسطة أجهزة KNX IP Secure لمصادقة بعضها البعض، وتوفير السرية للاتصالات المتعددة البث، وتأمين تكوين الأجهزة، فمن المهم الحفاظ على سرية المعلومات. إذا تمكن المهاجم من الوصول إلى معلومات المشروع المخزنة بواسطة ETS، فسيؤدي ذلك إلى اختراق أمان تثبيت KNX بالكامل.
لهذا السبب، تم فحص مخزن مشروع ETS5 للتحقق مما إذا كانت البيانات مخزنة بطريقة تضمن السرية. ملفات المشروع في C:\ProgramData\KNX\ETS5\ProjectStore قابلة للقراءة بواسطة كل حساب مستخدم، ولا يلزم وجود صلاحيات مسؤول. تم العثور على المؤشرات التالية التي أثارت الشك في أن البيانات غير مشفرة بشكل صحيح:
أشارت النقطة الأخيرة بوضوح إلى أن كلمة مرور المشروع لم تُستخدم في الخوارزمية التي تعدل قيم السمات. يمكن رؤية مثال أدناه، حيث تم تعيين رموز مصادقة الأجهزة في مشروعين P-02FB و P-0117 إلى قيم متطابقة. المخرجات المخفية هي نفسها أيضًا، على الرغم من استخدام كلمات مرور مشروع مختلفة. نظرًا لعدم وجود طلب لإدخال أي شيء بخلاف كلمة مرور المشروع عند فتح المشروع في ETS5، فهذا يعني أن المفتاح إما يجب أن يكون مخزنًا في مكان ما أو أنه خوارزمية إخفاء بسيطة لا تتطلب أي مفتاح. بدا من المحتمل أن الحل لم يكن مثاليًا لضمان السرية وقد يعرض تثبيتات KNX للخطر.
بما أن ETS5 يعتمد على إطار عمل .NET، والذي كان واضحًا فورًا من ملفات DLL المستخدمة، كان من الممكن إجراء عملية التفكيك بسهولة من خلال ILSpy. تم تشويش الثنائي باستخدام Dotfuscator، على الأرجح لجعل جهود الهندسة العكسية أكثر صعوبة. ومع ذلك، تم ترك أسماء الفئات والوظائف سليمة في الغالب بشكل مفاجئ. ومن ثم، كان النهج المختار هو البحث عن الفئات والوظائف التي تبدو مرتبطة بمعالجة ملفات XML، التشفير، فك التشفير، التشويش، إزالة التشويش، المفاتيح أو كلمات المرور. أدى هذا إلى اكتشاف Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble و Knx.Ets.ObjectModel.Import.Encryption.EncryptString، والتي يتم استدعاؤها على القيم المشوشة للسمات المخزنة في ملفات XML. لم يتم تمرير أي مادة مفتاح إلى الوظائف، فقد استخدمت فقط قيمًا ثابتة لاشتقاق مفتاح تم استخدامه بعد ذلك لتشفير / فك تشفير السمات باستخدام AES-256 في وضع CBC. كان من الواضح أنه تم استخدام بيانات اعتماد مشفرة بشكل ثابت (hard-coded) لاشتقاق مفتاح. قام Dotfuscator بتغيير تدفق التحكم وأدخل عمليات زائدة، لكن استدعاءات الوظائف من إطار عمل .NET لم يكن من الممكن إخفاؤها. وهكذا، كان من الممكن كتابة مواصفات لعملية (إزالة) التشويش في هذه المرحلة لنهج شبه نظيف الغرفة (semi-clean-room). الجزء المفقود الوحيد هو السلسلة المستخدمة في اشتقاق المفتاح والتي تم إخفاؤها بواسطة dotfuscator. تم اختيار De4dot لعكس تشويش السلسلة، مما كشف عن كلمة المرور ETS5Password. كان IV قابلاً للقراءة بالفعل قبل تطبيق De4dot حيث تم تعريفه كتسلسل بايت. بدافع الفضول الشخصي، تم اكتشاف أن تلك لم تكن بايتات عشوائية، ولكنها في الواقع تمثيل بايت ASCII/UTF-8 للسلسلة Ivan Medvedev.
نظرًا لأن الخلل التصميمي يشكل خطرًا على تركيبات KNX، كان لا بد من الإبلاغ عن المشكلة إلى جمعية KNX. كانت هناك حاجة إلى تطبيق إثبات المفهوم (proof of concept) لضمان إمكانية إثبات المشكلة إذا طُلب ذلك. لتجنب أي انتهاكات لحقوق النشر، تم تنفيذ إثبات المفهوم بناءً على المواصفات التي تم تدوينها. تم ذلك لتجنب أي إعادة استخدام للكود من البرنامج الأصلي. كما أن تطبيق Dotfuscator جعل الكود الأصلي وحتى غير المشوش غير صالح للاستخدام لتنفيذ نظيف على أي حال، مما يضمن أنه حتى النسخ غير المقصود للأصل كان غير مرجح.
للحصول على تفاصيل حول الإفصاح المنسق بعد تطوير إثبات المفهوم، انظر القسم الإفصاح المنسق عن الثغرات الأمنية.
لسوء الحظ، اعتبارًا من 2021-07-18، لا يوجد إصدار ETS مصحح متاح. لذلك، من الضروري اتخاذ تدابير إضافية خارج ETS5 لمعالجة المخاطر. تشرح الأقسام الفرعية أدناه أساليب مختلفة يمكن اتخاذها اعتمادًا على نموذج التهديد الذي تفترضه وتحاول الحماية منه.
C:\ProgramData\KNX\ETS5\ProjectStore وجميع الملفات الموجودة بداخله باستخدام نظام تشفير الملفات (EFS) في Windows.C:\ProgramData\KNX\ETS5\ProjectStore.وفقًا لـ Joost Demarest، المدير التقني والمالي لجمعية KNX، لن يتلقى ETS5 أي تصحيحات حيث تم الانتهاء من تطوير تلك النسخة. لقد سمح بالنشر الفوري للمشكلة في 2021-07-12، متخليًا عن التأخير لمدة 90 يومًا المعروض للإفصاح.
بسبب سوء فهم، ادعى ملف README سابقًا أن جمعية KNX تخطط لمعالجة المشكلة في ETS6. هذا ليس صحيحًا. أوضحت جمعية KNX في 2021-10-25 أنها لا تخطط لإصلاح هذه المشكلة، لأنها لا تعتبر من مسؤولية ETS تخزين مواد المفتاح التشفيري بشكل آمن عندما لا يتم تصديرها.
لقد تواصلت معي جمعية KNX وشرحت أنهم راجعوا خططهم. إنهم يعتزمون الآن توثيق أوجه القصور في إصدار ETS الحالي وتشفير مخزن المشروع بشكل صحيح في إصدار مستقبلي من ETS6.
يتم توزيع المشروع بموجب رخصة MIT.
تجزئة الالتزام:
تنزيل:
التغييرات: