الهجمات الإلكترونية المدعومة بالذكاء الاصطناعي: كيفية الكشف عن التهديدات الذكية ومنعها والدفاع ضدها

اقرأ الآن
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

الحماية من هجمات إلغاء التسلسل في سبرينغ لأباتشي كافكا

ب OPSWAT
شارك هذا المنشور
صورة احترافية لكل من نجوين فو هونغ وتران آنه هوي اللذين يمثلان انتماءهما إلى جامعة العلوم والتكنولوجيا في مدينة كمبوديا وجامعة العلوم في مدينة كمبوديا.

يمكن أن تؤدي هجمات إعادة التسلسل - أي التلاعب غير المصرح به بالبيانات المتسلسلة لتنفيذ تعليمات برمجية خبيثة - إلى إلحاق أضرار جسيمة بالمؤسسات. يجب على المطورين وفرق الأمن تحديد نقاط الضعف الرئيسية بشكل استباقي والتي تكشف عن كيفية حدوث الهجوم ومتى وأين حدث.  

أحد الأمثلة الحديثة على هذا التهديد هو CVE-2023-3404040، وهو ناقل هجوم إلغاء التهيئة في Spring ل Apache Kafka والذي يمكن أن يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE). في الواقع، تم تسليط الضوء على انتشار ثغرات إلغاء التهيئة من خلال قائمة OWASP لأهم 10 ثغرات، والتي تتضمن "إلغاء تهيئة البيانات غير الموثوق بها" كواحدة من أهم 10 مخاطر أمنية لتطبيقات الويب.  

تُعدّ أدوات مثل OPSWAT MetaDefender Core™ مع محرك SBOMSoftware فاتورة الموادSoftware ) الخاص بها ضرورية في اكتشاف هجمات إلغاء التحويل ومنعها. فهي تسمح للمطوّرين بفحص وتحليل التعليمات البرمجية الخاصة بهم بكفاءة، مما يضمن عدم التغاضي عن أي ثغرات أمنية.  

سيناقش زملاؤنا الخريجون في هذه المدونة تفاصيل CVE-2023-340404040 واستغلالها، وكيفية تأمين المكونات مفتوحة المصدر ضد التهديدات المماثلة. 

حول CVE-2023-3404040

يكشف CVE-2023-3404040 عن ناقل هجوم إلغاء التسلسل في Spring لـ Apache Kafka، والذي يمكن استغلاله عند تطبيق تكوين غير عادي. تسمح هذه الثغرة الأمنية للمهاجمين بإنشاء كائن متسلسل خبيث في أحد رؤوس سجلات الاستثناءات لإلغاء التسلسل، مما قد يؤدي إلى حدوث عملية استيلاء على RCE. تؤثر هذه الثغرة على إصدارات Spring for Apache Kafka من 2.8.1 إلى 2.9.10 و3.0.0 إلى 3.0.9.

لقطة شاشة تعرض درجات الخطورة CVSS 3.x للثغرات الأمنية، مع مستويات خطورة عالية ومتوسطة من NIST و VMware.

على وجه التحديد، يكون التطبيق/المستهلك عرضة للخطر في ظل التكوينات والشروط المحددة التالية: 

  • لم يتم تكوين فئة ErrorHandlingDeserializer لمفتاح و/أو قيمة السجل. 
  • يتم تعيين خاصيتي checkDeserExWhenKeyNull و/أو checkDeserExWhenValueNull للمستهلك على صواب. 
  • يُسمح للمصادر غير الموثوقة بالنشر إلى موضوع كافكا.

أباتشي كافكا

أباتشي كافكا، الذي طورته مؤسسة أباتشي Software هو عبارة عن منصة تدفق أحداث موزعة مصممة لالتقاط تدفقات البيانات في الوقت الحقيقي ومعالجتها والاستجابة لها وتوجيهها من مصادر مختلفة، بما في ذلك قواعد البيانات وأجهزة الاستشعار والأجهزة mobile . 

على سبيل المثال، يمكنه بث الإشعارات إلى الخدمات التي تتفاعل مع أنشطة العملاء، مثل إكمال عملية دفع المنتج أو إجراء عملية دفع.

رسم تخطيطي يوضح خط أنابيب معالجة البيانات القائم على Apache Kafka، ويربط الخدمات المصغرة للمنتج بالخدمات المصغرة للرسائل النصية القصيرة والإشعارات الفورية وخدمات البريد الإلكتروني المصغرة.

في Apache Kafka، يعمل الحدث - الذي يشار إليه أيضًا باسم السجل أو الرسالة - كوحدة بيانات تمثل حدثًا في التطبيق كلما تمت قراءة البيانات أو كتابتها. يتضمن كل حدث مفتاحًا وقيمة وطابعًا زمنيًا ورؤوس بيانات وصفية اختيارية.

مفتاح ثنائي
(يمكن أن يكون فارغًا)
قيمة-ثنائية
(يمكن أن تكون فارغة)
نوع الضغط
[لا شيء، gzip، gzip، snappy، lz4، zstd]
الرؤوس (اختياري)
المفتاحقيمة
المفتاحقيمة
التقسيم + الإزاحة
الطابع الزمني (تعيين النظام أو المستخدم)

يتم تخزين الأحداث بشكل دائم وتنظيمها في مواضيع. يُطلق على تطبيقات العميل التي ترسل (تكتب) الأحداث إلى مواضيع كافكا اسم "المنتجين"، بينما تُعرف التطبيقات التي تشترك في الأحداث (تقرأ وتعالج) باسم "المستهلكين". 

مخطط انسيابي يوضح كيفية معالجة مدخلات المستخدم من خلال منتج وتسجيلها واستهلاكها وتسليمها إلى نقطة نهاية.

سبرينغ لأباتشي كافكا

لربط Apache Kafka مع نظام Spring البيئي، يمكن للمطورين استخدام Spring for Apache Kafka، مما يبسط التكامل في تطبيقات Java.  

يوفر Spring for Apache Kafka أدوات وواجهات برمجة تطبيقات قوية تبسّط عملية إرسال الأحداث واستقبالها مع Kafka، مما يمكّن المطورين من إنجاز هذه المهام دون الحاجة إلى ترميز واسع ومعقد.

رسم بياني يعرض شعارات Spring Boot و Apache Kafka، للدلالة على التكامل للتطبيقات التي تعتمد على الأحداث.

التسلسل وإلغاء التسلسل

التسلسل هو آلية لتحويل حالة الكائن إلى سلسلة أو دفق بايت. في المقابل، فإن إعادة التسلسل هي العملية العكسية حيث يتم تحويل البيانات المتسلسلة إلى الكائن أو بنية البيانات الأصلية. تسمح التسلسلية بتحويل البيانات المعقدة بحيث يمكن حفظها في ملف أو إرسالها عبر شبكة أو تخزينها في قاعدة بيانات. التسلسل وإلغاء التسلسل ضروريان لتبادل البيانات في الأنظمة الموزعة وتعزيز التواصل بين المكونات المختلفة لتطبيق برمجي. في جافا، يتم استخدام كتابة كائن() للتسلسل وقراءة كائن() لإلغاء التسلسل.

مخطط تقني يوضح كيفية تسلسل كائنات البيانات في الذاكرة أو الملفات أو قواعد البيانات ثم إعادة تسلسلها لاحقًا إلى كائنات.

نظرًا لأن إعادة التهيئة تسمح بتحويل دفق البايت أو السلسلة إلى كائن، فإن المعالجة غير السليمة أو عدم التحقق من صحة البيانات المدخلة بشكل صحيح يمكن أن يؤدي إلى ثغرة أمنية كبيرة، مما قد يؤدي إلى هجوم RCE.

تحليل نقاط الضعف

وفقًا لوصف مكافحة التطرف العنيف، قام زملاء OPSWAT بتهيئة CheckDeserExWhenKeyNull و checkDeserExWhenValueNull إلى صواب من أجل تفعيل الثغرة الأمنية. من خلال إرسال سجل بمفتاح/قيمة فارغ وإجراء تحليل مفصل عن طريق تصحيح أخطاء المستهلك أثناء تلقيه سجل كافكا من المنتج، اكتشف زملاؤنا الخريجون سير العمل التالي أثناء معالجة السجل 

الخطوة 1: استلام السجلات (الرسائل)

عند تلقي السجلات، يقوم المستهلك باستدعاء طريقة invokeIfHaveRecords() ، والتي تستدعي بعد ذلك طريقة invokeListener() لتشغيل مستمع سجلات مسجل (فئة مشروحة بشرح @KafkaListener ) للمعالجة الفعلية للسجلات. 

لقطة شاشة لرمز جافا يُعرّف حاوية مستمع رسائل كافكا لمعالجة السجلات في نظام يحركه الحدث.

ثم يستدعي أسلوب invokeListener() أسلوب invokeOnMessage().

الخطوة 2: التحقق من السجلات

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

مقتطف شيفرة جافا مميز يوضح معالجة الاستثناءات لإلغاء تهيئة الرسائل في مستهلك كافكا.

إذا كان السجل يحتوي على مفتاح أو قيمة فارغة وتم تعيين خاصيتي checkDeserExWhenKeyNull و/أو checkDeserExWhenValueNull على صواب، فسيتم استدعاء أسلوب checkDeser() لفحص السجل.

الخطوة 3: التحقق من الاستثناء من الرؤوس

في checkDesr()، يستدعي المستهلك باستمرار getExceptionFromHeader() لاسترداد أي استثناءات من البيانات الوصفية للسجل، إن وجدت، ويخزن النتيجة في متغير يسمى استثناء.

يقوم أسلوب جافا checkDeser باستدعاء getExceptionFromHeader لمعالجة استثناءات إلغاء التسلسل في معالجة رسائل كافكا.

الخطوة 4: استخراج الاستثناء من الرؤوس

تم تصميم طريقة getExceptionFromHeader() لاستخراج استثناء من رأس سجل كافكا وإرجاعه. يسترجع أولاً رأس السجل ثم يحصل على قيمة الرأس، والتي يتم تخزينها في مصفوفة بايت.

تقوم طريقة جافا getExceptionFromHeader باستخراج استثناءات إلغاء التحويل من رؤوس رسائل كافكا

بعد ذلك، يُعيد توجيه مصفوفة البايت من قيمة الرأس إلى أسلوب byteArrayToDeserializationException() لمزيد من المعالجة. 

الخطوة 5: إعادة ترميز البيانات

في الدالة byteArrayToDeserializationException()، يتم تجاوز الدالة resolClass() لتقييد إلغاء التحويل إلى فئات مسموح بها فقط. يمنع هذا الأسلوب إلغاء تهيئة أي فئة غير مسموح بها صراحةً. لا يمكن إلغاء تسلسل قيمة مصفوفة البايت للرأس داخل الدالة (byteArrayToDeserializationException() إلا إذا كانت تستوفي الشرط المحدد في الدالة (resolClass()، والتي تسمح بإلغاء التسلسل لفئة DeserializationException حصريًا.

تقوم طريقة جافا byteArrayToDeserializationException بتحويل مصفوفة بايت إلى استثناء إلغاء التسلسل

ومع ذلك، فإن صنف DeserializationException يوسع صنف الاستثناء القياسي ويتضمن مُنشئًا بأربع معلمات. تمثل المعلمة الأخيرة، وهي السبب، الاستثناء الأصلي الذي أدى إلى حدوث DeserializationException، مثل استثناء IOException أو استثناء عدم العثور على الفئة.

مُنشئ جافا ل DeserializationException مع معلمات للرسالة والبيانات وعلامة المفتاح والسبب القابل للرمي

تعمل فئة Throwable كفئة فائقة لجميع الكائنات التي يمكن طرحها كاستثناءات أو أخطاء في Java. في لغة برمجة جافا، يمكن إلغاء تسلسل فئات التعامل مع الاستثناءات مثل Throwable و Exrowception و Error بأمان. عندما يتم إلغاء تسلسل الاستثناء، تسمح جافا بتحميل الفئة القابلة للرمي للفئات القابلة للرمي وتكوينها مع عمليات فحص أقل تطلبًا من تلك المطبقة على الفئات العادية. 

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

الاستغلال

رسم تخطيطي يوضح عملية استغلال هجوم إلكتروني من مهاجم يقوم بإدخال بيانات خبيثة إلى تنفيذ التعليمات البرمجية عن بُعد

كما هو مبين في التحليل، يتطلب استغلال هذه الثغرة إنشاء بيانات خبيثة يتم إرسالها إلى المستهلك عبر سجل رأس كافكا. في البداية، يجب على المهاجم إنشاء فئة خبيثة توسع فئة Throwable ثم استخدام سلسلة أدوات لتحقيق تنفيذ التعليمات البرمجية عن بعد. الأدوات الذكية عبارة عن مقتطفات من التعليمات البرمجية القابلة للاستغلال داخل التطبيق، ومن خلال ربطها معًا، يمكن للمهاجم الوصول إلى "أداة بالوعة" تؤدي إلى إجراءات ضارة. 

فيما يلي فئة خبيثة يمكن استخدامها لاستغلال هذه الثغرة في Spring لـ Apache Kafka: 

فئة Java Class CustomExceptionClass التي توضح ثغرة في تنفيذ الحمولة باستخدام أوامر PowerShell

بعد ذلك، يتم إنشاء مثيل للفئة الخبيثة وتمريره كوسيطة إلى معلمة السبب في مُنشئ فئة DeserializationException. ثم يتم تسلسل مثيل DeserializationException إلى دفق بايت، والذي يُستخدم لاحقًا كقيمة في رأس سجل كافكا الخبيث.

فئة جافا لبناء كائن متسلسل خبيث لاستغلال إعادة التسلسل في عمليات الاستغلال
تقوم طريقة جافا sendMessage بإنشاء رسالة Kafka وإرسالها، مع حقن حمولة متسلسلة خبيثة إذا كان كل من المفتاح والبيانات فارغة

إذا نجح المهاجم في خداع الضحية لاستخدام منتجه الخبيث، يمكنه التحكم في سجلات كافكا المرسلة إلى المستهلك، مما يخلق فرصة لاختراق النظام. 

واجهة المستخدم لإرسال رسائل كافكا، تعرض نموذج رسالة ورسائل مستلمة من منتجين

عندما يتلقى المستهلك الضعيف سجل Kafka من المنتج الخبيث الذي يحتوي على مفاتيح وقيم فارغة، إلى جانب مثيل متسلسل خبيث في رأس السجل، يقوم المستهلك بمعالجة السجل، بما في ذلك عملية إلغاء التسلسل. وهذا يؤدي في النهاية إلى تنفيذ التعليمات البرمجية عن بعد، مما يسمح للمهاجم باختراق النظام.

واجهة المستخدم الطرفية ومرسل رسائل Kafka، مما يوضح حقن الرسائل مع تنفيذ أمر في بيئة Windows

تخفيف حدة CVE-2023-3404040 باستخدام SBOM في MetaDefender Core

للتخفيف بفعالية من المخاطر المرتبطة بفيروس CVE-2023-3404040، تحتاج المؤسسات إلى حل شامل يوفر رؤية وتحكمًا في مكوناتها مفتوحة المصدر.  

توفر SBOM، وهي تقنية أساسية في MetaDefender Core إجابة قوية. من خلال العمل كمخزون شامل لجميع مكونات البرمجيات والمكتبات والتبعيات المستخدمة، تمكّن SBOM المؤسسات من تتبع وتأمين وتحديث مكوناتها مفتوحة المصدر بطريقة استباقية وفعالة.

لقطة شاشة للوحة معلومات تعرض ملف XML محجوباً يحتوي على نقاط ضعف حرجة وعالية

باستخدام SBOM، يمكن للفرق الأمنية

  • تحديد موقع المكونات المعرضة للخطر بسرعة: التحديد الفوري للمكونات مفتوحة المصدر المتأثرة بهجمات إلغاء التسلسل. وهذا يضمن اتخاذ إجراء سريع إما في تصحيح المكتبات الضعيفة أو استبدالها. 
  • ضمان التصحيح والتحديثات الاستباقية: راقب باستمرار المكونات مفتوحة المصدر من خلال SBOM للبقاء في طليعة الثغرات الأمنية في عملية التصحيح. يمكن ل SBOM الكشف عن المكونات القديمة أو غير الآمنة، مما يسمح بإجراء التحديثات في الوقت المناسب وتقليل التعرض للهجمات. 
  • الحفاظ على الامتثال وإعداد التقارير: تساعد SBOM المؤسسات على تلبية متطلبات الامتثال حيث تفرض الأطر التنظيمية بشكل متزايد الشفافية في سلاسل توريد البرمجيات.

الأفكار إغلاق

تعتبر ثغرات إلغاء التهيئة تهديداً أمنياً كبيراً يمكن استخدامه لاستغلال مجموعة واسعة من التطبيقات. تحدث هذه الثغرات عندما يقوم التطبيق بإلغاء تهيئة البيانات الضارة، مما يسمح للمهاجمين بتنفيذ تعليمات برمجية عشوائية أو الوصول إلى معلومات حساسة. تُعد الثغرة الأمنية CVE-2023-3404040 في Spring ل Apache Kafka بمثابة تذكير صارخ بمخاطر هجمات إلغاء التهيئة. 

للوقاية من هجمات التصحيح، من الضروري تطبيق أدوات متقدمة مثل OPSWAT MetaDefender Core وتقنية SBOM الخاصة بها. يمكن للمؤسسات الحصول على رؤية عميقة في سلسلة توريد البرمجيات الخاصة بها، وضمان تصحيح الثغرات الأمنية في الوقت المناسب، وحماية نفسها من مشهد التهديدات المتطور باستمرار. إن تأمين المكونات مفتوحة المصدر بشكل استباقي ليس مجرد ممارسة فضلى - بل هو ضرورة لحماية الأنظمة الحديثة من الاستغلال المحتمل.


العلامات:

ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتلقي آخر تحديثات الشركة, والقصص ومعلومات عن الفعاليات والمزيد.