
دليل باللغة النرويجية لثغرات Log4j (CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2019-17571) مع نصوص الكشف، خطوات التخفيف، وخرائط ذهنية لتحديد الأنظمة المتأثرة ومعالجتها.
تحديث 19.12.2021: يتم اكتشاف ثغرات جديدة وطرق جديدة لاستغلالها في Log4j باستمرار. أضفنا ثلاث خرائط ذهنية (mind maps) في المستودع تصف على التوالي الإصدارات الضعيفة من Log4j، كيفية التحقق مما إذا كنت عرضة للثغرة و تخفيف الثغرات المختلفة.
حدد البرامج التي تستخدم Log4j الإصدار 2.x
خفف من ثغرات Log4j
إذا لم يكن ما سبق ممكنًا
Context Lookups في Pattern Layouts في إعدادات Log4j2حدد البرامج التي تستخدم Log4j الإصدار 1.x.
إذا تم استخدام Log4j الإصدار 1.x في المؤسسة، تواصل مع المورد واطلب منهم
الذئب الكبير القبيح بين ثغرات Log4j. يتم استغلال الثغرة عندما يتم تسجيل متغير من السلسلة ${jndi:ldap://\<رمز_الهجوم>/a} بواسطة Log4j. CVSS 10.0، تنفيذ أكواد عن بعد (RCE).
ليست بنفس خطورة CVE-2021-44228، لكنها قبيحة بنفس القدر. تتطلب إعدادًا غير قياسي لـ Log4j. CVSS 9.0، RCE و DoS.
ليست بنفس خطورة CVE-2021-44228، وأقل قبيحًا بقليل. CVSS 7.5، DoS
ينطبق فقط على Log4j الإصدار 1.x. يتطلب استخدام Log4j لـ JMSAppender. CVSS 6.6، RCE يتطلب الاستغلال أن يستخدم Log4j JMSAppender. إما عن طريق تكوين JMSAppender مباشرة - وهو أمر غير شائع - أو عن طريق قيام المهاجم بإضافته إلى إعدادات Log4j. بالإضافة إلى ذلك، يجب أن يكون لدى المهاجم صلاحية تعديل إعدادات JMSAppender. إذا كان الأمر كذلك، فعادة ما يكون المهاجم قد حصل بالفعل على وصول إلى النظام. لذلك تعتبر الثغرة ذات أهمية قليلة.
ينطبق فقط على Log4j الإصدار 1.x. يتطلب استخدام Log4j لـ SocketServer. CVSS 9.8، RCE يمنح المهاجم الذي لديه وصول شبكي إلى المقبس (socket) المعني القدرة على تنفيذ الأكواد. كود الاستغلال متاح للعموم.
بالنسبة لـ Java 8، الإصدار 2.17.0 هو أحدث إصدار من Log4j. يخفف من جميع الثغرات المذكورة أعلاه.
الإصدار 2.16.0 يخفف من أسوأ الثغرات.
بالنسبة لـ Java 7، تم إصدار Log4j في الإصدار 2.12.2. هذا الإصدار لا يخفف من CVE-2021-45105. يقول فريق Log4j أيضًا أن Java 6 أو Java 7 لم يعد مدعومًا. من غير المعروف ما إذا كانوا سيصدرون تحديثًا أمنيًا آخر لـ Log4j على Java 7.
خريطة التفكير "Mind map #1" تعطي نظرة عامة جيدة على الظروف التي تحدد ما إذا كنت مصابًا بالثغرات المختلفة.

من إعداد Loïc Castel. مأخوذ من github.
جزء من التحدي هو أن الخوادم المعرضة للثغرة ليست بالضرورة تلك التي تواجه الإنترنت مباشرة. قد تكون الثغرة في خادم أبعد في 'السلسلة' يستقبل نفس البيانات ويقوم بتسجيلها. هذا قد يجعل من الصعب معرفة ما هو معرض وما هو غير معرض.

من إعداد Loïc Castel. مأخوذ من github.


- User-agent
- حقل البحث
- اسم المستخدم
- ...
4. تابع نتائج الكاناري واكتشف أين يعمل log4j.
مرجع: تغريدة من Florian Roth
هذا يأخذ جميع الأقراص، بما في ذلك محركات الأقراص الشبكية المعينة:
Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
مرجع: https://twitter.com/0gtweet/status/1469661769547362305
إذا كنت ترغب فقط في فحص الأقراص المحلية:
Get-CimInstance win32_volume | Where-Object { $_.DriveType -eq 3 -and $_.DriveLetter -ne $null} | ForEach-Object {(gci ($_.DriveLetter+"\") -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
مرجع: https://twitter.com/webmastir/status/1470386184052486155?s=20
إذا كنت ترغب أيضًا في فحص سجل الأحداث على الجهاز:
Get-WinEvent -ListLog * |
foreach { get-winevent @{logname=$_.logname; } -ea 0 } |
where message -match 'jndi'
#!/bin/bash
find / -name '*log4j*.jar' -print0 2>/dev/null -print0 | while read -d $'\0' log4j; do
echo -en "${log4j}: "$(unzip -p "${log4j}" | strings | grep -Po '^Implementation-Version:\s+([0-9\.]+)' | awk '{ print $NF }')"\n"
done
exit 0
يتم تشغيله كجذر (root)
lsof | grep log4j-core
خريطة التفكير "Mind map #3" تعطي نظرة عامة على خيارات التخفيف.

من إعداد Loïc Castel. مأخوذ من github.
أدناه قمنا بإدراج بعض الموارد لتنفيذ التخفيفات.
قم بتحديث Log4j إلى الإصدار 2.17.0
قم بتحديث Log4j إلى الإصدار 2.12.2 ملاحظة لا يخفف من CVE-2021-45105
⚠️ لم يعد تعتبر هذه الطريقة حلاً كافياً لأنها لا تخفف من جميع الثغرات في جميع الحالات.
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
ملاحظة: يتطلب إعادة التشغيل
من https://twitter.com/CyberRaiju/status/1469505680138661890
"‐Dlog4j2.formatMsgNoLookups=True"
مثال على سطر الأوامر:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
أو مع قيمة -Xmx:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
مثال على تكوين Systemd:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
أو مع قيمة -Xmx:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'
يتم تحميل هذا عند إعادة تشغيل التطبيق من https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7
احذف ملف JndiLookup.class من ملف jar الخاص بـ log4j.
ملف jar هو أرشيف (ملف zip) ويمكن فتحه. يمكن بعد ذلك إزالة الملفات. يمكن القيام بذلك يدويًا باستخدام أدوات مثل 7-zip (انظر الصورة) أو باستخدام سكريبت.
يتطلب إعادة تشغيل التطبيق
مرجع: https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn = 'JndiLookup.class' #Denne filen slettes!
$Stream = New-Object IO.FileStream($JarFilLokasjon, [IO.FileMode]::Open)
$ZipMode = [IO.Compression.ZipArchiveMode]::Update
$Zip = New-Object IO.Compression.ZipArchive($stream, $ZipMode)
($zip.Entries | Where-Object { $Filnavn -contains $_.Name }) | ForEach-Object { $_.Delete() }
$zip.Dispose()
$stream.Close()
$stream.Dispose()
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class