
نص برمجي يفحص الأنظمة المعرضة للخطر من Log4j (CVE-2021-44228) باستخدام حقن الحمولة في رؤوس HTTP الشائعة.
الجمعة 10 ديسمبر 2021 تم نشر إثبات مفهوم جديد 1 يعالج ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) في مكتبة Java 'log4j' 2. لم يتم الكشف عن هذه الثغرة لمطوري البرنامج مسبقًا. يتم تتبع الثغرة تحت المعرف CVE-2021-44228 3. يمكن العثور على مزيد من المعلومات حول الثغرة في استجابة التهديد من Northwave 4.
قامت Northwave بإنشاء برنامج اختبار يتحقق من الأنظمة الضعيفة باستخدام حقن الحمولة في رؤوس HTTP الشائعة وكجزء من طلب HTTP GET. يتم اكتشاف الأنظمة الضعيفة عن طريق الاستماع لطلبات DNS الواردة التي تحتوي على UUID تم إنشاؤه خصيصًا للهدف. من خلال الاستماع إلى DNS الوارد بدلاً من نشر (على سبيل المثال) خادم LDAP، نزيد من احتمالية اكتشاف الأنظمة الضعيفة التي لديها تصفية لحركة المرور الصادرة. عمليًا، غالبًا ما يُسمح بـ DNS الصادر. يُتوقع معدل سلبي كاذب مرتفع، يرجى قراءة إخلاء المسؤولية.
يتم تغطية رؤوس HTTP التالية:
X-Api-VersionUser-AgentRefererX-Druid-CommentOriginLocationX-Forwarded-ForCookieX-Requested-WithX-Forwarded-HostAcceptلكل حقنة، يتم التحقق من بادئات JNDI التالية:
jndi:rmijndi:ldapjndi:dnsjndi:${lower:l}${lower:d}apلاحظ أن البرنامج النصي يقوم فقط بإجراء فحصين محددين: رؤوس HTTP وطلب HTTP GET. سيؤدي ذلك إلى نتائج سلبية كاذبة في الحالات التي يلزم فيها استهداف رؤوس أخرى، أو حقول إدخال محددة، وما إلى ذلك لإثارة الثغرة. هذا أمر محتمل جدًا.
هام: في الحالات التي يُرجع فيها المدقق 'لم يتم اكتشاف ثغرة'، تابع مع فحوصات نظام الملفات كما هو موضح في استجابة التهديد من Northwave 4. فقط تشغيل هذا المدقق غير كافٍ لتحديد ما إذا كان النظام ضعيفًا أم لا.
أولاً، نحتاج إلى نطاق فرعي يمكننا استخدامه لتلقي طلبات DNS الواردة. في هذه الحالة، نستخدم المنطقة log4jdnsreq.northwave.nl وننشر البرنامج النصي الخاص بنا على log4jchecker.northwave.nl. قم بتكوين إدخال DNS على النحو التالي:
log4jdnsreq 3600 IN NS log4jchecker.northwave.nl.
نقوم الآن بإعداد خادم DNS BIND على نظام Debian باستخدام apt install bind9 ونضيف ما يلي إلى ملف /etc/bind/named.conf.options:
recursion no;
allow-transfer { none; };
يؤدي هذا إلى تعطيل التكرار لأننا لا نريد تشغيل خادم DNS مفتوح. قم بتكوين التسجيل في /etc/bind/named.conf.local عن طريق إضافة التكوين التالي:
logging {
channel querylog {
file "/var/log/named/query.log";
severity debug 3;
print-time yes;
};
category queries { querylog;};
};
لا تنس إعادة تشغيل BIND باستخدام systemctl restart bind9. تحقق من عمل التسجيل عن طريق إجراء استعلام DNS لـ xyz.log4jdnsreq.northwave.nl. يجب أن يظهر استعلام واحد أو أكثر في /var/log/named/query.log.
من المهم التحقق من أن عمليات البحث عن أسماء الخوادم يتم تسجيلها بالفعل. لا يمكن لهذا البرنامج النصي اكتشاف المواقع الضعيفة ما لم يقم إعداد خادم الأسماء الخاص بك بتسجيل الطلبات
اختبر خادمك عن طريق إجراء بحث اختباري (يفضل من جهاز مختلف):
dig test.log4jchecker.northwave.nl
لا تتوقع ردًا، ولكن يجب أن تتوقع إدخالاً في ملف السجل (cat /var/log/named/query.log). قد يبدو هذا الإدخال مشابهًا لـ:
14-Dec-2021 13:36:01.402 client @0x7f8b180a9b30 requester-ip#58755 (test.log4jchecker.northwave.nl): query: test.log4jchecker.northwave.nl IN A -E(0)DC (your-ip)
لا تستمر ما لم يظهر رد في السجلات. لن يعمل البرنامج النصي دون ذلك.
قم بتثبيت أي تبعيات Python باستخدام pip install -r requirements.txt. قم بتحرير البرنامج النصي لتغيير السطر التالي إلى منطقة DNS التي قمت بتكوينها:
HOSTNAME = "log4jdnsreq.northwave.nl"
يمكنك الآن تشغيل البرنامج النصي عن طريق توفير عنوان URL واحد باستخدام المعامل -u أو قائمة عناوين URL باستخدام المعامل -l:
usage: nw_log4jcheck.py [-h] [-l LIST] [-u URL] [-w WAIT] [-t TIMEOUT]
optional arguments:
-h, --help show this help message and exit
-l LIST, --list LIST A text file with a list of URLs to check (one url per line)
-u URL, --url URL URL to check (for example: http://yoururl.com)
-w WAIT, --wait WAIT Number of seconds to wait before checking DNS logs (default: 15)
-t TIMEOUT, --timeout TIMEOUT
HTTP timeout in seconds to use (default: 5)
يظهر السطر الأخير من الإخراج ما إذا تم العثور على النظام ضعيفًا:
NO VULNERABILITY DETECTED. Proceed with on-server checking. No incoming DNS request to 3414db71-309a-4288-83d4-aa3f103db97c.log4jdns.northwave.nl was seen
في حالة عدم اكتشاف ثغرة، تابع مع فحوصات نظام الملفات كما هو موضح في استجابة التهديد من Northwave 4. مرة أخرى، فقط تشغيل هذا المدقق غير كافٍ لتحديد ما إذا كان النظام ضعيفًا أم لا.
Log4jcheck هو برنامج مفتوح المصدر مرخص بموجب ترخيص MIT.