
एक स्क्रिप्ट जो सामान्य HTTP हेडर्स में पेलोड इंजेक्ट करके कमजोर Log4j (CVE-2021-44228) सिस्टम की जाँच करती है।
शुक्रवार, 10 दिसंबर 2021 को एक नया प्रूफ-ऑफ-कॉन्सेप्ट 1 प्रकाशित किया गया जो जावा लाइब्रेरी 'log4j' 2 में एक रिमोट कोड एक्जीक्यूशन (RCE) कमजोरी को संबोधित करता है। यह कमजोरी पहले से सॉफ्टवेयर के डेवलपर्स को प्रकट नहीं की गई थी। इस कमजोरी को CVE-2021-44228 3 के रूप में ट्रैक किया जा रहा है। कमजोरी के बारे में अधिक जानकारी Northwave थ्रेट रिस्पॉन्स 4 में पाई जा सकती है।
Northwave ने एक परीक्षण स्क्रिप्ट बनाई है जो सामान्य HTTP हैडर में पेलोड इंजेक्ट करके और HTTP GET अनुरोध के भाग के रूप में कमजोर सिस्टम की जाँच करती है। कमजोर सिस्टम का पता लगाने के लिए इनकमिंग DNS अनुरोधों को सुनकर किया जाता है जिनमें लक्ष्य के लिए विशेष रूप से बनाया गया UUID होता है। (उदाहरण के लिए) LDAP सर्वर तैनात करने के बजाय इनकमिंग DNS सुनकर, हम इस संभावना को बढ़ाते हैं कि कमजोर सिस्टम का पता लगाया जा सकता है जिनमें आउटबाउंड ट्रैफिक फ़िल्टरिंग लागू है। व्यवहार में, आउटबाउंड 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.
अब हम Debian सिस्टम पर apt install bind9 का उपयोग करके BIND DNS सर्वर सेट करते हैं और /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 का उपयोग करके पुनरारंभ करना न भूलें। xyz.log4jdnsreq.northwave.nl के लिए DNS क्वेरी करके लॉगिंग काम कर रही है यह जाँचें। /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"
अब आप -u पैरामीटर का उपयोग करके एक एकल URL या -l पैरामीटर का उपयोग करके URLs की एक सूची प्रदान करके स्क्रिप्ट चला सकते हैं:
usage: nw_log4jcheck.py [-h] [-l LIST] [-u URL] [-w WAIT] [-t TIMEOUT]
optional arguments:
-h, --help यह सहायता संदेश दिखाएँ और बाहर निकलें
-l LIST, --list LIST जाँचने के लिए URLs की सूची वाली एक टेक्स्ट फ़ाइल (प्रति पंक्ति एक url)
-u URL, --url URL जाँचने के लिए URL (उदाहरण: http://yoururl.com)
-w WAIT, --wait WAIT DNS लॉग जाँचने से पहले प्रतीक्षा करने के लिए सेकंड की संख्या (डिफ़ॉल्ट: 15)
-t TIMEOUT, --timeout TIMEOUT
HTTP टाइमआउट सेकंड में उपयोग करने के लिए (डिफ़ॉल्ट: 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 लाइसेंस के तहत ओपन-सोर्स सॉफ्टवेयर है।