Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/fabioeletto/hka-seminar-log4shell
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubfabioeletto/hka-seminar-log4shell

hka-seminar-log4shell

عرض عملي لثغرة Log4Shell الأمنية (CVE-2021-44228)

عرض المستودع
1منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مشروع بحثي - عرض توضيحي لثغرة Log4Shell (CVE-2021-44228)

تنبيه أمني

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

قائمة المحتويات

  • 1. وصف المشروع

    • 1.1 هدف المشروع البحثي
    • 1.2 نظرة عامة على العرض التوضيحي
  • 2. ما هي Log4Shell؟

  • 3. المكونات التقنية بالتفصيل

    • 3.1 Log4j - آلية العمل
    • 3.2 JNDI - آلية الاستعلام (Lookup)
    • 3.3 LDAP - البنية والدور
    • 3.4 التدفق العام لـ Log4Shell
  • 4. هيكل المشروع والإعداد

    • 4.1 نظرة عامة على الدلائل
    • 4.2 المتطلبات
    • 4.3 الإعداد
  • 5. عرض المشروع

  • 6. إجراءات الحماية

  • 7. الخلاصة

  • 8. المصادر

1. وصف المشروع

1.1 هدف المشروع البحثي

الهدف من هذا المشروع البحثي هو توفير فهم عميق لثغرة Log4Shell الأمنية (CVE-2021-44228)، التي أصبحت معروفة في ديسمبر 2021 وصُنّفت كواحدة من أخطر الثغرات الأمنية في السنوات الأخيرة. يشرح العمل المبادئ النظرية ويعرض أيضًا عرضًا توضيحيًا عمليًا للثغرة.

1.2 نظرة عامة على العرض التوضيحي

لتوضيح ثغرة Log4Shell الأمنية عمليًا، تم بناء بيئة معزولة وقائمة على الحاويات (Containerized) في هذا المستودع، تعرض مسار الهجوم الكامل بشكل قابل لإعادة الإنتاج. يعتمد العرض التوضيحي على ثلاثة مكونات رئيسية:

  • vulnerable-app: تطبيق Spring Boot ضعيف عمدًا باستخدام Log4j في الإصدار 2.14.1. يسجّل ترويسة User-Agent من طلب HTTP، والتي يمكن للمهاجم التلاعب بها لاستغلال الثغرة.
  • ldap-server: نسخة Fork من الأداة المعروفة marshalsec، وتعمل كخادم LDAP. يخضع هذا الخادم لسيطرة المهاجم ويوفّر مرجعًا إلى فئة Java خبيثة سيتم تنفيذها لاحقًا.
  • payload-server: خادم HTTP بسيط يسلّم فئة Java خبيثة (Exploit.class). ومثل خادم LDAP، يخضع هذا الخادم لسيطرة المهاجم.

ملاحظة: توجد معلومات أكثر تفصيلاً حول الإعداد وتنفيذ العرض التوضيحي في القسم 4. هيكل المشروع والإعداد و5. عرض المشروع.

2. ما هي Log4Shell؟

Log4Shell هو اسم ثغرة أمنية حرجة في مكتبة Java Log4j تُعرف باسم CVE-2021-44228. تتيح للمهاجم تنفيذ كود عشوائي على خادم بعيد بأقل جهد (Remote Code Execution، واختصارًا RCE).

تؤثر الثغرة على Log4j في الإصدارات 2.0 إلى 2.14.1 وهي خطيرة لدرجة أنها صُنّفت من قبل العديد من الجهات الأمنية، بما في ذلك BSI (Bundesamt für Sicherheit in der Informationstechnik)، في أعلى مستوى خطر.

لذلك تُعد Log4Shell خطيرة بشكل خاص لأن ...

  • Log4j واسع الانتشار للغاية؛ إذ يُستخدم من خوادم الألعاب إلى تطبيقات المؤسسات.
  • لا تتطلب أي مصادقة؛ حيث يمكن لأي مهاجم خارجي مجهول إلحاق الضرر.
  • ناقل الهجوم تافه؛ فغالبًا ما يكفي إرسال سلسلة نصية معدّلة إلى التطبيق.
  • الوظيفة في Log4j المستخدمة لاستغلال هذه الثغرة مفعّلة افتراضيًا.

يكمن السبب الجذري في وظيفة من وظائف Log4j تسمح بتحميل محتويات ديناميكية في رسائل السجل عبر ما يسمى Lookups. وبالاقتران مع JNDI (Java Naming and Directory Interface) وبروتوكول LDAP (Lightweight Directory Access Protocol)، يتيح ذلك تحميل وتنفيذ فئات Java خبيثة عن بُعد.

أدى اكتشاف الثغرة ونشرها إلى موجة أمنية عالمية؛ إذ كان لا بد من تحديث (Patch) أو إيقاف تشغيل العديد من الأنظمة على الفور. وفي الفترة اللاحقة ظهرت ثغرات أخرى ذات صلة (مثل CVE-2021-45046)، مما يوضح مدى عمق وخطورة هذه المشكلة.

في ما يلي، يتم شرح التقنيات المعنية وتفاعلها بالتفصيل من أجل تطوير فهم أعمق للثغرة.

3. المكونات التقنية بالتفصيل

3.1 Log4j - آلية العمل

Log4j هي مكتبة أنشأتها Apache لتسجيل الأحداث في تطبيقات Java. يُعد التسجيل (Logging) أداة مركزية في تطوير البرمجيات لمراقبة الأنظمة أو تحليل الأخطاء. تُعد Log4j واحدة من أشهر أطر عمل التسجيل وأكثرها استخدامًا في النظام البيئي لـ Java، وتُستخدم في التطبيقات الصغيرة وأنظمة المؤسسات الكبيرة على حد سواء.

لماذا التسجيل؟

أثناء تشغيل البرنامج، تحدث على سبيل المثال الأحداث التالية:

  • طلبات المستخدمين
  • تغييرات الحالة الداخلية
  • رسائل الخطأ

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

ماذا تقدم Log4j؟

توفّر Log4j بنية تحتية مرنة وقابلة للتكوين بدرجة كبيرة لإنشاء رسائل السجل ومعالجتها. وتشمل الوظائف الرئيسية:

  • مستويات السجل (Log-Level): توجد مستويات أهمية مختلفة (مثل DEBUG، INFO، WARN، ERROR) يمكن من خلالها التحكم في مدى تفصيل التسجيل.
  • Appenders: يمكن توجيه مخرجات السجل إلى أهداف مختلفة (مثل وحدة التحكم، ملف، أو خوادم بعيدة).
  • Layouts: باستخدام Layouts يمكن تعريف تنسيق رسالة السجل (مثل الطابع الزمني، الخيط، الرسالة).

سيتم تناول ميزات أخرى ذات صلة بالمشروع البحثي في أقسام لاحقة، ولا سيما وظيفة العناصر النائبة (Placeholder) ووظيفة الاستعلام (Lookup).

مثال بسيط```java

import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;

public class Example { private static final Logger logger = LogManager.getLogger();

public static void main(String[] args) {
    logger.info("Starte Anwendung...");
}

}

في هذا المثال البسيط، يتم إنشاء مثيل Logger أو استرجاعه إذا كان موجودًا بالفعل. بعد ذلك، يتم إخراج رسالة سجل على مستوى `INFO`. يتولى Log4j تنسيق الرسالة وإخراجها، استنادًا إلى الإعدادات. قد تبدو إعدادات المثال على النحو التالي:```xml
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

هذا التكوين يُعرّف مُلحق (Appender) يخرج رسائل السجل بالتنسيق Datum Uhrzeit Log-Level Loggername - Nachricht على وحدة التحكم. ثم يُعيَّن هذا المُلحق إلى مسجّل الجذر (Root-Logger)، الذي يعالج جميع رسائل السجل ابتداءً من المستوى INFO.

قد يبدو الإخراج بعد ذلك على النحو التالي:``` 2023-10-01 12:00:00 INFO Example - Starte Anwendung...

الآن دعونا ننتقل إلى الميزات المحددة لـ Log4j الأكثر صلة بثغرة Log4Shell.

#### العناصر النائبة في رسائل السجل

من الميزات المفيدة بشكل خاص في Log4j دعم **العناصر النائبة** في رسائل السجل. بهذه الطريقة يمكن إدراج محتوى ديناميكي في وقت التشغيل في مخرجات السجل:```java
String username = "Alice";
logger.info("Benutzer angemeldet: {}", username);

أثناء التشغيل، يتم استبدال {} بالقيمة الفعلية للمتغير username. يؤدي هذا إلى الإخراج التالي:```text "Benutzer angemeldet: Alice"

#### التعبيرات الديناميكية المسماة Lookups

إلى جانب العناصر النائبة البسيطة، يوفر Log4j أيضًا إمكانية حل تعبيرات أكثر تعقيدًا مباشرة في رسالة السجل. تُسمى هذه الوظيفة **Lookup**: وهي تسمح بإدراج قيم ديناميكيًا في وقت التشغيل (مثل متغيرات البيئة أو معلومات النظام أو قيم التكوين)

أمثلة على هذه التعبيرات الديناميكية:

- `${env:HOME}` - يعيد قيمة متغير البيئة `HOME`. على Linux / macOS سيكون مثلًا `/home/username`.
- `${docker:...}` - قد يوفر معلومات حول حاوية Docker التي يعمل فيها التطبيق.
- `${jndi:...}` - ينفذ بحث JNDI لتحميل موارد داخلية أو خارجية.

في القسم التالي، سننظر في وظيفة JNDI عن كثب، لأنها تلعب دورًا محوريًا في ثغرة Log4Shell الأمنية.

### 3.2 JNDI - آلية البحث

**JNDI** تعني _Java Naming and Directory Interface_ وهي واجهة برمجة تطبيقات Java موحدة تتيح الوصول إلى **خدمات الأسماء والدليل**. باستخدام JNDI، يمكن لتطبيقات Java الإشارة إلى الموارد ليس مباشرة عبر مسارات تقنية، بل عبر أسماء رمزية.
تنزيل الأداة