أصبحت تطبيقات الويب التي تسهل تحميل الملفات ضرورية للعديد من المؤسسات، حيث تعمل كبوابات للعملاء والشركاء والموظفين لمشاركة أنواع مختلفة من المستندات والملفات. على سبيل المثال، قد تمكّن شركة الموارد البشرية المستخدمين من تحميل السير الذاتية، أو يمكن لشركة ما أن تسهّل على الشركاء مشاركة الملفات عبر منصة ويب متخصصة.
حتى مع التدابير الأمنية المعززة وعمليات التحقق من الصحة الأكثر صرامة، يستمر المهاجمون في استغلال الثغرات الأمنية باستخدام أساليب متطورة. فالملفات التي تبدو حميدة، مثل الصور، يمكن التلاعب بها لاختراق أمن خادم الويب.
الملفات متعددة اللغات هي الملفات التي يمكن أن تكون صالحة كأنواع متعددة في وقت واحد، مما يسمح للمهاجمين بتجاوز تدابير الأمان القائمة على نوع الملف. ومن الأمثلة على ذلك GIFAR، الذي يعمل كملف GIF وملف RAR في آنٍ واحد، وملفات متعددة اللغات (JavaScript/JPEG) التي يتم تفسيرها على أنها ملفات JavaScript وJPEG، وملفات Phar-JPEG، التي يتم التعرف عليها كأرشيف Phar وصورة JPEG في آنٍ واحد. هذه الملفات متعددة اللغات يمكن أن لا يتم اكتشافها من خلال امتدادات خادعة أو فارغة "تخدع" الأنظمة لتعتقد أنها نوع ملف حميد (مثل صورة أو ملف PDF) بينما تحتوي على تعليمات برمجية خبيثة لم يتم اكتشافها.
التحقق من صحة تحميل الملفات
يشكل السماح بتحميل الملفات من المستخدمين دون التحقق من صحتها بشكل مناسب أو شامل تهديدًا كبيرًا لتطبيقات الويب. إذا نجح أحد المهاجمين بتحميل ملف خبيث، مثل ملف خبيث على الويب، فمن المحتمل أن يتمكن من السيطرة على الخادم، مما يعرض النظام والبيانات الحساسة للخطر. وللتخفيف من هذه المخاطر، تم وضع أفضل الممارسات لتوجيه المطورين في تطبيق تدابير التحقق الفعالة. تساعد هذه الممارسات على ضمان المعالجة الآمنة لعمليات تحميل الملفات، وبالتالي تقليل مخاطر الاستغلال.
تشمل مجالات التركيز الرئيسية لتأمين تحميل الملفات ما يلي:
- التحقق من صحة الامتدادات: تنفيذ قائمة حظر أو قائمة سماح لملحقات الملفات لضمان قبول أنواع الملفات المسموح بها فقط.
- تعقيم اسم الملف: إنشاء سلاسل عشوائية لأسماء الملفات عند التحميل.
- التحقق من صحة نوع المحتوى: تحقق من نوع MIME للملف الذي تم تحميله للتأكد من مطابقته للتنسيق المتوقع.
- التحقق من صحة رأس الصورة: بالنسبة لتحميلات الصور، يمكن استخدام دوال مثل getimagesize() في PHP لتأكيد صلاحية الملف عن طريق التحقق من رأسه.
تجاوز عامل تصفية تحميل الملفات
وعلى الرغم من تطبيق هذه التدابير الوقائية، إلا أن المهاجمين يطورون باستمرار أساليبهم لتجاوز آليات التحقق من الصحة. يمكن لتقنيات مثل حقن الأحرف الفارغة والامتدادات المزدوجة والامتدادات الفارغة أن تقوض التحقق من صحة الامتدادات: قد يظهر الملف باسم مثل "file.php.jpg" أو "file.php%00.jpg" أو "file.PhP" أو "file.php/" للتهرب من الكشف. يمكن التحايل على التحقق من صحة نوع MIME من خلال تعديل البايتات السحرية الأولية للملف، مثل تغييرها إلى GIF89a، وهو الرأس المرتبط بملفات GIF، والذي يمكن أن يخدع النظام لتحديد الملف كتنسيق شرعي. بالإضافة إلى ذلك، يمكن تحميل ملف htaccess خبيث للتلاعب بتكوينات الخادم، مما يسمح بتنفيذ ملفات ذات امتدادات غير مصرح بها.
هجمات الملفات متعددة اللغات
حتى مع تطبيق عمليات التحقق الصارمة التي تجمع بين تدابير أمنية متعددة لمنع تقنية تجاوز عامل تصفية تحميل الملفات، تظل الهجمات المتطورة التي تستهدف الملفات متعددة اللغات، أو الصور متعددة اللغات، تهديداً أمنياً كبيراً. تُمكّن هذه الطريقة المهاجمين من صياغة ملفات - مثل الصور - تتوافق مع البنية الثنائية المتوقعة لملفات الصور، ولكن يمكنها في الوقت نفسه تنفيذ تعليمات برمجية خبيثة عند تفسيرها في سياق مختلف. تسمح الطبيعة المزدوجة لهذه الملفات بتجاوز آليات التحقق التقليدية واستغلال الثغرات الأمنية في سيناريوهات محددة.
ملف بسيط متعدد اللغات باستخدام ExifTool
من الأساليب البسيطة لإنشاء صورة متعددة اللغات استخدام ExifTool. تم تصميم هذا التطبيق القوي لقراءة وكتابة وتعديل تنسيقات البيانات الوصفية المختلفة، مثل EXIF و XMP و JFIF و Photoshop IRB. ومع ذلك، يمكن للأفراد الخبيثين الاستفادة من ExifTool لتنفيذ إجراءات ضارة، بما في ذلك إنشاء صورة متعددة اللغات بقصد خبيث. من خلال استخدام ExifTool لتضمين تعليمات برمجية خبيثة في بيانات EXIF الوصفية للصورة - خاصةً في حقول مثل UserComment و ImageDescription - يمكن للمهاجمين إنشاء صورة متعددة اللغات وزيادة فرصهم في الاستغلال الناجح.
يعرض ما يلي بيانات EXIF الوصفية للصورة، والتي توفر معلومات شاملة تتعلق بها.
من خلال استخدام ExifTool، يمكن لجهة تهديدية تضمين كود خبيث داخل بيانات EXIF الوصفية للصورة، وبالتالي إنشاء ملف متعدد اللغات قد يتحايل على آليات التحقق من الصحة.
على الرغم من أن التحقق من صحة نوع MIME يمكن أن يقيد تحميل ملفات قذيفة الويب الأساسية، إلا أن هذه الصورة متعددة اللغات يمكن أن تتجاوز هذه القيود، مما يسمح للمهاجم بتحميل قذيفة ويب متعددة اللغات.
يمكن للمهاجم بعد ذلك استغلال قذيفة الويب متعددة اللغات للسيطرة على خادم الويب.
ملف متعدد اللغات Javascript/JPEG متعدد اللغات
تتم هيكلة ملف متعدد اللغات JPEG/JPEG ليكون صالحًا كصورة JPEG وبرنامج نصي JavaScript. لتحقيق ذلك، يجب أن يكون لدى الجهة الخبيثة فهم شامل للبنية الداخلية لملف JPEG. تتيح هذه المعرفة إمكانية تضمين البيانات الثنائية الخبيثة بدقة داخل الصورة، مما يضمن إمكانية معالجتها بواسطة محرك JavaScript دون التأثير على صلاحيتها كصورة JPEG.
تحتوي صورة JPEG على البنية التالية:
بايت | اسم |
0xFF، 0xD8 | بداية الصورة |
0xFF، 0xE0، 0x00، 0x10، ... | العنوان الافتراضي |
0XFF، 0XFE، ... | تعليق على الصورة |
0xFF، 0xDB، ... | جدول تحديد الكمية |
0xFF، 0xC0، ... | بداية الإطار |
0xFF، 0xC4، ... | جدول هوفمان |
0xFF، 0xDA، ... | بدء المسح الضوئي |
0xFF، 0xD9 | نهاية الصورة |
تنسيق JPEG - المصدر: https://github.com/corkami/formats/blob/master/image/JPEGRGB_dissected.png
في بنية صورة JPEG، يتبع الرأس معلومات الطول. كما هو موضح في المثال السابق، يبدأ الرأس بالتسلسل 0xFF 0xE0 0xFF 0xE0 0x00 0x10، حيث يمثل 0x00 0x10 طول المقطع تحديداً، مما يشير إلى 16 بايت. تشير العلامة 0xFF 0xFF 0xD9 إلى نهاية الصورة.
لإنشاء ملف متعدد اللغات JavaScript/JPEG، من الضروري تعديل القيم السداسية العشرية للصورة لضمان قدرة محرك JavaScript على التعرف عليها ومعالجتها.
أولاً، في JavaScript، يمكن تفسير التسلسل 0xFF 0xD8 0xFF 0xFF 0xFF 0xE0 كقيم غير ASCII، لكن 0x00 0x10 غير صالح ويجب تغييره. الاستبدال المناسب لهذه القيم السداسية هو 0x2F 0x2A، وهو التمثيل السداسي العشري لـ /*، وهي صيغة تُستخدم لفتح تعليق في JavaScript. يسمح هذا الاستبدال بتجاهل البيانات الثنائية المتبقية كجزء من التعليق.
ومع ذلك، نظرًا لأن 0x00 0x10 يمثل في الأصل طول رأس JPEG، فإن تغييره إلى 0x2F 0x2A، والذي يساوي بالعشري 12074، يتطلب إعادة تعريف رأس JPEG للحفاظ على صلاحيته. ولتحقيق ذلك، يجب إضافة وحدات بايت فارغة، ويجب وضع حمولة JavaScript بعد علامة 0xFF 0xFE 0xFF 0xFE، التي تشير إلى تعليق الصورة في بنية JPEG.
على سبيل المثال، إذا كانت الحمولة هي *//=alert(document.domain)؛ /*، والتي يبلغ طولها 28 بايت، فسيتم حساب البايتات الفارغة المطلوبة على النحو التالي 12074 (الطول الجديد) - 16 (طول الرأس الأصلي) - 2 (للعلامة 0xFF 0xFE ) - 28 (طول الحمولة) = 12,028 بايت فارغة.
وبالتالي، فإن شفرة JavaScript داخل صورة JPEG ستشبه ما يلي:
أخيرًا، يجب وضع التسلسل 0x2A 0x2A 0x2F 0x2F 0x2F 0x2F 0x2F 0x2F 0x2F 0x2F 0x2F (المقابل لـ *////) قبل علامة نهاية JPEG 0xFF 0xFF 0xD9 مباشرة. تغلق هذه الخطوة تعليق JavaScript وتضمن تنفيذ الحمولة بشكل صحيح دون تعطيل بنية ملف JPEG.
بعد هذا التعديل، لا يزال من الممكن تفسير الصورة كصورة صالحة مع احتوائها في الوقت نفسه على كود JavaScript قابل للتنفيذ.
عندما يقوم ملف HTML بتحميل هذه الصورة كشيفرة مصدرية لـ JavaScript، فإنها تظل صالحة ويمكنها تنفيذ شيفرة JavaScript المضمنة:
تمثل ملفات الصور متعددة اللغات مخاطر ليس فقط للاستغلال من جانب العميل ولكن أيضًا في الهجمات من جانب الخادم في ظل ظروف معينة. مثال على ذلك هو الملف متعدد اللغات Phar/JPEG، والذي يمكن تفسيره كأرشيف PHP (Phar) وكصورة JPEG. تسمح بنية ملف Phar بتضمين البيانات المتسلسلة في البيانات الوصفية مما يشكل خطرًا محتملاً لثغرات إلغاء التسلسل، خاصة في بعض إصدارات PHP. ونتيجة لذلك، يمكن الاستفادة من ملفات Phar/JPEG متعددة اللغات لتجاوز التحقق من صحة تحميل الملفات واستغلال الخوادم الضعيفة.
يتم وضع تنسيق ملف Phar على شكل كعب/مانيفست/محتويات/توقيع، ويخزن المعلومات المهمة لما هو مضمن في أرشيف Phar في بيانه:
- كعب: العقب هو جزء من كود PHP يتم تنفيذه عند الوصول إلى الملف في سياق قابل للتنفيذ. لا توجد قيود على محتويات كعب الملف، باستثناء شرط أن ينتهي ب __HALT_COMPILER()؛
- البيان: يحتوي هذا القسم على بيانات وصفية حول الأرشيف ومحتوياته، والتي قد تتضمن بيانات وصفية متسلسلة من Phar مخزنة بتنسيق serialize().
- محتويات الملف: الملفات الأصلية المضمنة في الأرشيف.
- التوقيع (اختياري): يحتوي على معلومات التوقيع للتحقق من النزاهة.
نظرًا لأن كعب الملف لا يفرض أي قيود على المحتوى بخلاف ما ينص عليه _HALT_COMPILER()، يمكن لممثل التهديد حقن القيم السداسية العشرية للصورة في كعب الملف. من خلال وضع هذه القيم في بداية ملف PHAR، يمكن تحديدها كصورة صالحة. وبالتالي، يمكن إنشاء ملف PHAR/JPEG متعدد التكتلات بسهولة عن طريق إلحاق البايتات السداسية العشرية لصورة JPEG في البداية، كما هو موضح في المثال التالي:
من خلال هذه الطريقة، يعمل الملف متعدد اللغات الذي تم إنشاؤه كصورة صالحة وملف PHAR شرعي وبالتالي يمكن استخدامه لتجاوز بعض آليات التحقق من صحة تحميل الملفات.
على الرغم من أن هذا الملف متعدد اللغات يمكن أن يتجاوز مرشحات تحميل الملفات، إلا أنه غير قادر حاليًا على استغلال خادم الويب. لاستغلال خادم الويب واختراقه بنجاح باستخدام ملف PHAR أو ملف PHAR متعدد اللغات PHAR، من الضروري حقن بيانات وصفية متسلسلة خبيثة في بيان الملف.
عندما يتم الوصول إلى ملف PHAR من خلال غلاف PHAR (phar://) في بعض دوال PHP (PHP ≤7.x) المرتبطة بعمليات الملفات - مثل ملف() أو ملف_يوجد() أو ملف_يوجد() أو ملف_يحصل_على_المحتويات() أو فتح() أو إعادة تسمية() أو إلغاء الربط() - يتم تشغيل دالة إلغاء التسلسل() للبيانات الوصفية المتسلسلة. في نهاية المطاف، من خلال استخدام PHPGGC، وهي أداة مستخدمة على نطاق واسع لإنشاء سلاسل أدوات PHP، يمكن للجهات الفاعلة في مجال التهديد استغلال ثغرة إلغاء التسلسل عبر ملف PHAR متعدد التكتل، وبالتالي اختراق خادم تطبيق الويب.
يمكّن الجمع بين ملفات PHAR/JPEG متعددة اللغات وثغرات إلغاء التهيئة المهاجمين من التسلل إلى خادم تطبيق ويب، حتى عند تنفيذ مرشحات تحميل الملفات. والجدير بالذكر أن هذا الاختراق يمكن أن يحدث حتى أثناء معالجة ملف الصورة.
من خلال الاستفادة من الملفات متعددة اللغات لتجاوز مرشحات تحميل الملفات وإلحاق غلاف PHAR (phar://) بموقع الملف، يمكن للمهاجمين التلاعب بخادم الويب للتعامل مع الملف كأرشيف PHAR. يمكن أن يؤدي هذا التلاعب لاحقًا إلى حدوث ثغرة في إلغاء التسلسل، مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد من خلال وظائف تشغيل الملف.
لنقل المخاطر المرتبطة بالملفات متعددة اللغات في تطبيقك، قمنا بمحاكاة بيئة يستخدم فيها التطبيق مرشحات تحميل ملفات صارمة لمنع تحميل الملفات الضارة أو قذائف الويب. وعلى الرغم من هذه الإجراءات الوقائية، يمكن للصورة متعددة اللغات أن تتجاوز عملية التحقق من الصحة، وفي سياقات معينة، قد تؤدي إلى تنفيذ التعليمات البرمجية عن بُعد، مما يؤدي في النهاية إلى تعريض خادم تطبيق الويب الضعيف للخطر.
يوضح هذا المثال تطبيق ويب تقليدي يتيح مشاركة الملفات بين العملاء والشركاء والمؤسسات:
MetaDefender Core و MetaDefender ICAP Server يحمي تطبيقات الويب الخاصة بك من هذه التهديدات ويعزز أمن شبكتك وبنيتك التحتية.
MetaDefender ICAP Server و MetaDefender Core معًا لحماية خادم الويب الخاص بك من الهجمات المعقدة التي تتضمن ملفات PHAR/JPEG متعددة اللغات الخبيثة بالطرق التالية:
عندما يتم تحميل ملف متعدد اللغات PHAR/JPEG إلى تطبيق الويب، يتم أولاً إعادة توجيهه إلى MetaDefender Core من خلال MetaDefender ICAP Server لإجراء عملية تعقيم شاملة باستخدام تقنية Deep CDR ™ الخاصة بنا. وعلى عكس أدوات التحقق من نوع الملف البسيط، يقوم Deep CDR بتحليل بنية الملف الذي تم تحميله تحليلاً شاملاً وإزالة البرامج النصية ووحدات الماكرو والمحتوى الخارج عن السياسة، وإعادة بناء ملف JPEG ليشمل بياناته الضرورية فقط.
تقوم هذه العملية بإزالة محتوى PHAR الضار الملحق بعد علامة نهاية JPEG(0xFF 0xD9)، مما يضمن أن الملف المعقّم هو ملف JPEG فقط. ونتيجة لذلك، يكون تطبيق الويب محميًا من هجمات PHAR/JPEG متعددة اللغات؛ حتى إذا تمكن أحد المهاجمين من تغيير مخطط معالجة الملفات لحقن غلاف PHAR، فلن يتمكن من استغلال خادم الويب.
يمكن للمؤسسات التي لديها بنية تحتية راسخة لأمن الشبكة - سواء كانت تستخدم جدران حماية تطبيقات الويب (WAFs) أو جدران حماية تطبيقات الويب أو البروكسي أو وحدات التحكم في الدخول - أن تعزز الآن آلياتها الدفاعية من خلال MetaDefender ICAP Server .ينشئ هذا الحل واجهة بين خوادم الويب الحالية و MetaDefender Core ، مما يؤدي إلى إنشاء نقطة تفتيش أمنية شفافة لجميع الملفات الواردة. سيتم فحص ومعالجة أي محتوى يتم توجيهه من خلال واجهة ICAP ، قبل أن يصل إلى خادم الويب الخاص بك، مما يضمن أن المحتوى الآمن والشرعي فقط هو الذي يدخل شبكتك ويصل إلى المستخدمين النهائيين.
يعني هذا النهج أنه يمكن للمؤسسات الاستفادة من استثماراتها الأمنية الحالية مع إضافة طبقة إضافية قوية من الحماية. يمكن للمؤسسات التي تستخدم وحدة التحكم في دخول NGINX دمج MetaDefender ICAP Server مع بنيتها التحتية الحالية عبر تكوين الوكيل.
OPSWATيتجاوز النهج الذي يتّبعه هذا البرنامج مجرد الكشف عن التهديدات التقليدية. فبدلاً من الاكتفاء بالإبلاغ عن الملفات المشبوهة، يقوم MetaDefender Core بتحييد التهديدات المحتملة بشكل فعال، وتحويل الملفات الخطرة إلى محتوى آمن وقابل للاستخدام. عند تكامله مع خادم الويب الخاص بك، يوفر MetaDefender ICAP Server حماية شاملة ضد تهديدات يوم الصفر والهجمات متعددة اللغات.
مدعوم بـ "لا تثق بأي ملف. لا تثق بأي جهاز. ™"، OPSWAT ، تحل تحديات العملاء في جميع أنحاء العالم بتقنيات حاصلة على براءة اختراع على كل مستوى من مستويات البنية التحتية، وتؤمن شبكاتك وبياناتك وأجهزتك، وتمنع التهديدات المعروفة وغير المعروفة، هجمات فورية والبرامج الضارة.