الهدف: عرض استغلال ثغرة Log4Shell (CVE-2021-44228) داخل بيئة تطبيق بنكي محاكاة.
الهدف: توضيح استغلال ثغرة Log4Shell (CVE-2021-44228) داخل بيئة تطبيق مصرفي مُحاكاة.
النطاق:
لنبدأ في صياغة حمولة لاستغلال ثغرة Log4Shell (CVE-2021-44228) وتحقيق تنفيذ التعليمات البرمجية عن بُعد ضمن سيناريو تمرين الآلة الافتراضية الخيالي.
لصياغة الحمولة، نحتاج إلى فهم طبيعة الثغرة. تسمح ثغرة Log4Shell للمهاجمين بحقن تعليمات برمجية ضارة في ملف تكوين مكتبة Log4j، والتي يتم تنفيذها بعد ذلك بواسطة التطبيق المتأثر. سيتم تصميم الحمولة لتشغيل هذه الثغرة وتنفيذ تعليمات برمجية عشوائية على النظام المستهدف.
فيما يلي مخطط أساسي لخطوات صياغة الحمولة:
تحديد ملف تكوين Log4j: تحديد موقع ملف تكوين Log4j داخل بيئة التطبيق المصرفي المستهدف. عادةً، يُسمى هذا الملف log4j2.xml أو log4j.properties.
صياغة حمولة الاستغلال: إنشاء تكوين Log4j ضار يتضمن استعلام JNDI (Java Naming and Directory Interface) لتنفيذ تعليمات برمجية عشوائية. يمكن تضمين هذه الحمولة داخل ملف log4j2.xml.
xml
استبدل "your-attacker-server" بعنوان IP أو اسم المضيف لجهاز المهاجم الذي يستمع على المنفذ 4444.
استضافة الحمولة: إعداد مستمع على جهاز المهاجم لاستقبال الاتصال وتنفيذ التعليمات البرمجية العشوائية.
إعلان XML:
xml
إعلان XML قياسي.
عنصر Configuration:
xml
العنصر الجذري لتكوين Log4j.
Appenders:
xml
يُعرّف مُلحق Socket باسم "evil".
تحدد السمة host خادم المهاجم.
تحدد السمة port المنفذ على خادم المهاجم.
يشير SerializedLayout إلى أن أحداث السجل سيتم تسلسلها وإرسالها عبر الشبكة، مما قد يشكل خطرًا أمنيًا لأنه قد يسمح بتنفيذ التعليمات البرمجية عن بُعد (RCE) عبر هجمات إزالة التسلسل.
Loggers:
xml
<Loggers>
<Root level="all">
<AppenderRef ref="evil" />
</Root>
</Loggers>
يُعرّف مستوى التسجيل بأنه all، مما يعني التقاط جميع رسائل السجل (تصحيح، معلومات، تحذير، خطأ، إلخ).
يشير AppenderRef إلى مُلحق "evil" المُعرّف سابقًا، مما يعني إرسال جميع رسائل السجل إلى خادم المهاجم.
تعليقات
المخاطر الأمنية:
تنفيذ التعليمات البرمجية عن بُعد (RCE): يمكن أن يسمح استخدام SerializedLayout مع مُلحق Socket عن بُعد للمهاجم بتنفيذ تعليمات برمجية عشوائية على النظام إذا تحكموا في الخادم وأرسلوا حمولة ضارة. هذه ثغرة أمنية حرجة.
استخراج البيانات: يمكن أن يؤدي هذا التكوين بسهولة إلى إرسال بيانات حساسة إلى خادم بعيد غير مصرح به، مما يؤدي إلى تسرب البيانات.
ممارسات التسجيل غير الصحيحة:
يُعد تسجيل الدخول إلى خادم بعيد غير موثوق به أمرًا غير آمن للغاية ويتعارض مع أفضل الممارسات للتسجيل الآمن.
يمكن أن يؤدي التسجيل على مستوى all في بيئة إنتاج إلى فيضان السجلات ومشكلات في الأداء واحتمال تعرض المعلومات الحساسة.
توصيات التخفيف:
تجنب التنسيقات المسلسلة: لا تستخدم SerializedLayout في أي تكوين تسجيل إلا إذا كان ضروريًا للغاية وتأكد من أن الخادم المستلم موثوق وآمن.
التحقق من نقاط نهاية التسجيل: تأكد من أن جميع نقاط نهاية التسجيل تقع ضمن بيئات موثوقة ومُتحكم بها.
استخدام تنسيقات آمنة: استخدم تنسيقات أكثر أمانًا مثل PatternLayout التي لا تشكل مخاطر إزالة التسلسل.
تقييد مستويات التسجيل: استخدم مستويات التسجيل المناسبة (مثل info، warn، error) وتجنب استخدام all إلا لأغراض تصحيح محددة في بيئة آمنة.
مثال على تكوين أكثر أمانًا
فيما يلي مثال على تكوين Log4j أكثر أمانًا:
xml
nc -nlvp 4444
تشغيل الثغرة: نشر ملف تكوين Log4j المُصمم داخل البيئة المستهدفة، واستبدال ملف التكوين الأصلي.
تنفيذ الاستغلال: بمجرد تحميل التكوين الضار بواسطة مثيل Log4j الضعيف، سيحاول إنشاء اتصال بخادم المهاجم، مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد.
التحقق من التنفيذ: تحقق من المستمع على جهاز المهاجم لتأكيد تنفيذ الحمولة بنجاح.
من المهم ملاحظة أن هذه الحمولة مخصصة للأغراض التعليمية والاختبارية ضمن بيئة مُتحكم بها. في السيناريوهات الواقعية، يُعد استغلال الثغرات مثل Log4Shell دون إذن أمرًا غير قانوني وغير أخلاقي. تأكد دائمًا من حصولك على إذن وتفويض صريح قبل إجراء أي اختبارات أمنية أو اختبارات اختراق.