Log4Shell, एक इंटरनेट भेद्यता, ने हाल ही में लाखों मशीनों को प्रभावित किया है। Log4j, सॉफ्टवेयर का एक अस्पष्ट अभी तक लगभग सर्वव्यापी टुकड़ा, इसका कारण बनता है।
Log4j का उपयोग विभिन्न कंप्यूटर सिस्टम में पर्दे के पीछे होने वाली सभी क्रियाओं को लॉग करने के लिए किया जाता है।
यह एक ओपन-सोर्स लॉगिंग लाइब्रेरी पर आधारित है जिसका उपयोग व्यवसायों और यहां तक कि सरकारी संगठनों द्वारा अधिकांश अनुप्रयोगों में किया जाता है।
अब तक के सबसे खराब साइबर सुरक्षा छेदों में से एक होने के नाते, अपने सिस्टम को इस भेद्यता से बचाना महत्वपूर्ण है। पर कैसे?
आइए Log4j भेद्यता और इसके लिए सभी संभावित समाधान समाधानों के बारे में विस्तार से जानें।
Log4j क्या है?
Log4j एक है खुले स्रोत लॉगिंग ढांचा जो सॉफ्टवेयर डेवलपर्स को अपने अनुप्रयोगों के भीतर विभिन्न डेटा रिकॉर्ड करने में सक्षम बनाता है। यह अपाचे लॉगिंग सर्विसेज प्रोजेक्ट का एक घटक है, जो द्वारा चलाया जाता है अपाचे सॉफ्टवेयर फाउंडेशन.
डिबगिंग और अन्य उपयोगों के लिए लॉगिंग डेटा जैसे महत्वपूर्ण संचालन करने के लिए सैकड़ों वेबसाइट और ऐप Log4j का उपयोग करते हैं।
जब आप एक खराब ऑनलाइन लिंक पर इनपुट या क्लिक करते हैं और 404 त्रुटि नोटिस प्राप्त करते हैं, तो यह काम पर Log4j का लगातार उदाहरण है। वेब सर्वर जो उस वेब लिंक का डोमेन चलाता है जिसे आपने एक्सेस करने का प्रयास किया था, आपको सूचित करता है कि ऐसा कोई वेबपेज मौजूद नहीं है। यह सर्वर के सिस्टम एडमिनिस्ट्रेटर के लिए Log4j में इवेंट को भी लॉग करता है।
पूरे सॉफ्टवेयर प्रोग्राम में, इसी तरह के डायग्नोस्टिक सिग्नल कार्यरत हैं। ऑनलाइन गेम Minecraft में, उदाहरण के लिए, सर्वर Log4j का उपयोग गतिविधि को लॉग करने के लिए करता है जैसे कि कुल RAM का उपयोग और कंसोल में भेजे गए उपयोगकर्ता निर्देश।
भेद्यता कैसे होती है?
लुकअप Log4j 2.0 में पेश की गई एक नई सुविधा है, जो लॉग प्रविष्टियों में अतिरिक्त जानकारी को शामिल करने में मदद करती है। इनमें से एक लुकअप जेएनडीआई (जावा नेमिंग एंड डायरेक्ट्री इंटरफेस) लुकअप है, जो एक निर्देशिका सेवा के साथ संचार करने के लिए जावा एपीआई है।
इस दृष्टिकोण का उपयोग करते हुए, आंतरिक उपयोगकर्ता आईडी को वास्तविक उपयोगकर्ता नामों में मैप किया जा सकता है। यह क्वेरी नई खोजी गई आरसीई भेद्यता को उजागर करती है, क्योंकि एलडीएपी सर्वर द्वारा आपूर्ति किए गए डेटा प्रकारों में से एक जावा क्लास को इंगित करने वाला एक यूआरआई है, जिसे बाद में मेमोरी में लोड किया जाता है और लॉग 4j इंस्टेंस द्वारा चलाया जाता है।
Log4j लाइब्रेरी के इनपुट सत्यापन में कमजोरी के कारण, एक अविश्वसनीय स्रोत से एक मनमाना LDAP सर्वर को इंजेक्ट करना संभव है। क्योंकि डेवलपर्स मानते हैं कि लॉग को भेजे गए डेटा को सादे पाठ के रूप में संभाला जाएगा, कोई अतिरिक्त इनपुट सत्यापन नहीं किया जाता है, और खतरनाक उपयोगकर्ता इनपुट लॉग में प्रवेश करता है।
एक लॉग स्टेटमेंट इस तरह दिख सकता है:
एक दुर्भावनापूर्ण उपयोगकर्ता अब एक URL पैरामीटर में एक दुष्ट LDAP सर्वर का जिक्र करते हुए एक JNDI लुकअप सम्मिलित करेगा। जेएनडीआई लुकअप इस प्रकार होगा:
Log4j लाइब्रेरी तब जावा फैक्ट्री और जावा कोडबेस के मूल्यों सहित निर्देशिका जानकारी प्राप्त करने के लिए हमलावर.com पर इस एलडीएपी सर्वर से बात करती है।
इन दो मानों में हमलावर का जावा वर्ग शामिल है, जिसे बाद में मेमोरी में लोड किया जाता है और कोड निष्पादन को पूरा करते हुए Log4j इंस्टेंस द्वारा निष्पादित किया जाता है।
जोखिम में कौन है?
Log4j भेद्यता अविश्वसनीय रूप से व्यापक है, जो व्यावसायिक अनुप्रयोगों, एम्बेडेड उपकरणों और उनके सबसिस्टम को प्रभावित करती है। प्रभावित ऐप्स में सिस्को वीबेक्स, माइनक्राफ्ट और फाइलज़िला एफ़टीपी शामिल हैं।
हालाँकि, यह किसी भी तरह से पूरी सूची नहीं है। यह दोष इनजेनिटी मार्स 2020 हेलिकॉप्टर मिशन को भी प्रभावित करता है, जो इवेंट रिकॉर्डिंग के लिए Apache Log4j का उपयोग करता है।
सुरक्षा समुदाय ने संकलित किया है कमजोर प्रणालियों की सूची. यह ध्यान रखना महत्वपूर्ण है कि ये सूचियां लगातार अपडेट हो रही हैं, इसलिए यदि कोई निश्चित प्रोग्राम या सिस्टम प्रदर्शित नहीं है, तो यह न मानें कि यह प्रभावित नहीं है।
इस भेद्यता के संपर्क में आने की काफी संभावना है, और भले ही कोई विशिष्ट तकनीक का ढेर जावा लागू नहीं करता है, सुरक्षा अधिकारियों को महत्वपूर्ण आपूर्तिकर्ता प्रणालियों, सास आपूर्तिकर्ताओं, क्लाउड होस्टिंग प्रदाताओं और वेब सर्वर प्रदाताओं से ऐसा करने की अपेक्षा करनी चाहिए।
Log4j भेद्यता की जांच कैसे करें?
पहला कदम यह निर्धारित करना है कि क्या हमला पहले ही हो चुका है। आप ऐसा आरसीई पेलोड अंशों के लिए सिस्टम लॉग की जांच करके कर सकते हैं।
यदि "jndi", "ldap", या "$::" जैसे शब्दों की खोज से कोई लॉग प्राप्त होता है, तो सुरक्षा शोधकर्ताओं को यह देखने के लिए आगे की खोज करनी चाहिए कि क्या यह एक वैध हमला था या केवल फिंगरप्रिंटिंग था।
जंगली में कई हमलों की खोज की गई जो किसी भी हानिकारक पेलोड को वितरित नहीं करते थे। बहरहाल, उन्हें सुरक्षा विशेषज्ञों द्वारा यह निर्धारित करने के लिए किया गया था कि इस हमले की चपेट में कितने ऐप थे।
अगला कदम सभी परियोजनाओं की पहचान करने के लिए Log4j पुस्तकालय का उपयोग करना है। यदि 2.0-बीटा9 और 2.14.1 के बीच के संस्करणों का उपयोग किया जाता है, तो परियोजना अतिसंवेदनशील हो सकती है।
यह निर्धारित करने में कठिनाई को देखते हुए कि यह भेद्यता कहाँ मौजूद है, यह मान लेना बेहतर होगा कि परियोजना अतिसंवेदनशील है और कोड निष्पादन के खतरे को दूर करने के लिए पुस्तकालय को अद्यतन करना कार्रवाई का सबसे अच्छा तरीका है।
यदि प्रयुक्त संस्करण 2.0-बीटा 9 से कम है, तो प्रोजेक्ट असुरक्षित नहीं है, हालांकि Log4j लाइब्रेरी को अभी भी अपग्रेड किया जाना चाहिए क्योंकि 1.x श्रेणी के संस्करण पुराने हैं और अब अपडेट नहीं मिलते हैं।
क्या एक अतिसंवेदनशील परियोजना की खोज की गई है, यह सलाह दी जाती है कि यह देखने के लिए जाँच की जाए कि क्या Log4j का उपयोग करके लॉग की गई किसी भी जानकारी में ऐसी जानकारी है जिसे उपयोगकर्ता बदल सकता है। यूआरएल, अनुरोध पैरामीटर, हेडर और कुकी इस डेटा के उदाहरण हैं। यदि इनमें से किसी एक को लॉग किया जाता है, तो परियोजना खतरे में है।
यह ज्ञान आपको सिस्टम लॉग में और गहराई से जाने और यह निर्धारित करने में मदद कर सकता है कि क्या आपके वेब एप्लिकेशन पर पहले ही हमला हो चुका है।
ऐसे नि:शुल्क ऑनलाइन टूल हैं जो यह पता लगा सकते हैं कि कोई वेब एप्लिकेशन असुरक्षित है या नहीं। इन कार्यक्रमों में से एक है Log4शैल शिकारी. यह खुला स्रोत है और पर उपलब्ध है GitHub.
यदि ऑनलाइन आवेदन में कोड का एक संवेदनशील क्षेत्र खोजा जाता है, तो प्रकट उपकरण द्वारा प्रदान किए गए पेलोड का उपयोग इसे वेब एप्लिकेशन में डालने के लिए किया जा सकता है। यदि भेद्यता का शोषण किया गया था, तो परीक्षण उपकरण आपके वेब एप्लिकेशन और उनके LDAP सर्वर के बीच किए गए कनेक्शन को प्रकट करेगा।
Log4j भेद्यता को ठीक करने के उपाय
पहला कदम Log4j को अपडेट करना है, जिसे आप सामान्य पैकेज प्रबंधकों का उपयोग करके या इसे सीधे डाउनलोड करके कर सकते हैं पृष्ठ.
पर्यावरण चर FORMAT MSG NO LOOKUPS को सही पर सेट करके भेद्यता की शोषण क्षमता को कम करना भी संभव है। हालाँकि, यह प्रतिवाद केवल Log4j संस्करणों पर लागू होता है जो 2.10 से अधिक या उसके बराबर होता है।
आइए अब वैकल्पिक विकल्पों पर विचार करें।
1. Log4j संस्करण 2.17.0 . के लिए समाधान
Log4Shell के खिलाफ सुरक्षा के लिए Log2.15.0j संस्करण 4 का उपयोग करने की निश्चित रूप से दृढ़ता से सलाह दी जाती है, हालांकि, यदि यह संभव नहीं है, तो अन्य समाधान उपलब्ध हैं।
संस्करण 2.7.0 और बाद में Log4j: उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा के लिए प्रतिशत m nolookups सिंटैक्स का उपयोग करके लॉग किए जाने वाले ईवेंट के प्रारूप को बदलकर किसी भी हमले से बचाव करना संभव है। इस अद्यतन के लिए प्रोग्राम का नया संस्करण उत्पन्न करने के लिए Log4j कॉन्फ़िगरेशन फ़ाइल को संपादित करने की आवश्यकता है। परिणामस्वरूप, इस नए संस्करण को लागू करने से पहले, तकनीकी और कार्यात्मक सत्यापन चरणों को दोहराया जाना चाहिए।
Log4j संस्करण 2.10.0 और बाद में: log4j2.formatMsgNoLookups कॉन्फ़िगरेशन पैरामीटर को सही पर सेट करके किसी भी हमले से बचाव करना भी संभव है, उदाहरण के लिए, जावा वर्चुअल मशीन को -Dlog4j2 विकल्प के साथ शुरू करते समय। formatMsgNoLookups = true, एक अन्य विकल्प JndiLookup क्लास को क्लासपाथ तर्क से हटाना है, जो मुख्य अटैक वेक्टर को हटा देगा (शोधकर्ता दूसरे अटैक वेक्टर की संभावना से इंकार नहीं करते हैं)।
अमेज़ॅन वेब सर्विसेज एक हॉटपैच प्रदान करती है जिसका "आपके जोखिम पर उपयोग किया जाना चाहिए।" अन्य "तकनीकें", जैसे लॉगआउट4शेल, जो "इस भेद्यता का उपयोग स्वयं के विरुद्ध करती है," प्रकाशित की गई हैं। सुरक्षा विशेषज्ञ इस कदम की वैधता पर सवाल उठाते हैं, जिसमें "इसे ठीक करने के लिए मशीन को हैक करना" शामिल है।
2. समस्या का समाधान Log4j v2.17.0 में किया गया है।
2.10 से अधिक संस्करणों के लिए: Log4j2.formatMsgNoLookups को सत्य पर सेट किया जाना चाहिए।
संस्करण 2.0 से 2.10.0 के लिए: Log4j से LDAP वर्ग को निकालने के लिए निम्न आदेश चलाएँ।
Log4j2.formatMsgNoLookups को सिस्टम सेटिंग्स में सही पर सेट किया जाना चाहिए।
जेवीएम में शमन
JVM मापदंडों के साथ शमन अब एक विकल्प नहीं है। अन्य शमन विधियां सफल होती रहती हैं। यदि संभव हो तो Log4j संस्करण 2.17.0 में अपग्रेड करें। Log4j v1 के लिए एक माइग्रेशन गाइड उपलब्ध है।
यदि कोई अद्यतन संभव नहीं है, तो सुनिश्चित करें कि क्लाइंट-साइड और सर्वर-साइड घटकों में -Dlog4j2.formatMsgNoLookups = true सिस्टम गुण सेट है।
कृपया ध्यान दें कि Log4j v1 अपने जीवन के अंत (ईओएल) तक पहुंच गया है और अब बग फिक्स प्राप्त नहीं करेगा। अन्य आरसीई वैक्टर भी Log4j v1. इसलिए, हम आपसे जल्द से जल्द Log4j 2.17.0 में अपग्रेड करने का आग्रह करते हैं।
3. शमन उपाय
कुछ उदाहरणों में Log4j अतिसंवेदनशील होने पर भी वर्तमान कारनामे काम नहीं कर सकते हैं, जैसे कि होस्ट मशीन 6u212, 7u202, 8u192, या 11.0.2 से अधिक जावा संस्करण चला रही है।
यह वर्तमान संस्करणों में बेहतर जावा नामकरण और निर्देशिका इंटरफ़ेस (जेएनडीआई) रिमोट क्लास लोडिंग सुरक्षा के कारण है, जो हमले को संचालित करने के लिए आवश्यक है।
इसके अलावा, 4 से बड़े Log2.10j संस्करणों के साथ, formatMsgNoLookups सिस्टम मान को सही पर सेट करके, JVM तर्क -Dlog4j2.formatMsgNoLookups = true प्रदान करके, या क्लासपाथ से JndiLookup क्लास को हटाकर समस्या से बचा जा सकता है।
इस बीच, जब तक संवेदनशील उदाहरणों को ठीक नहीं किया जाता है, तब तक नीचे दी गई तकनीकों का उपयोग करके भेद्यता को संबोधित किया जा सकता है:
- >=4 के लिए सिस्टम गुण log2j2.10.formatMsgNoLookups को सही पर सेट करें।
- >=4 के लिए पर्यावरण विकल्प LOG2.10J FORMAT MSG NO LOOKUPS को सही पर सेट करें।
- 2.0-बीटा9 से 2.10.0 के लिए क्लासपाथ से JndiLookup.class निकालें: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
एक अनुशंसित सर्वोत्तम अभ्यास केवल उपयुक्त बंदरगाहों के लिए इंटरनेट पर यातायात को सीमित करना है।
हालांकि क्षेत्र में अधिकांश हमले HTTP पर वितरित किए जाते हैं, लेकिन किसी भी प्रोटोकॉल के माध्यम से भेद्यता का फायदा उठाया जा सकता है जो Log4j का उपयोग करके उपयोगकर्ता इनपुट डेटा लॉग करता है।
हालाँकि, log4j 2.17.0 में अपडेट करना सबसे अच्छा उपाय है क्योंकि कोई व्यक्ति इस मुद्दे के लिए एक अतिरिक्त दृष्टिकोण खोज सकता है। इसके अलावा, बहुत से प्रकाशकों और निर्माताओं ने अपनी सेवाओं या ऐप्स में सुधार की घोषणा की है।
4. Log4Shell भेद्यता पैच
Log4j सर्वव्यापी है, खासकर अब जब भेद्यता का शोषण किया जा रहा है। संक्षेप में, आपको केवल Log4j द्वारा निरीक्षण किए गए लॉग में निम्नलिखित वर्णों को शामिल करने की आवश्यकता है।
और यह यूआरएल के अंत में स्थित जावा फाइल को डाउनलोड और निष्पादित करेगा। यह जितना सीधा है उतना ही नाटकीय भी।
जैसा कि आप जानते हैं, इस Log4Shell भेद्यता (CVE-2.17.0-4) को दूर करने के लिए log2021j को संस्करण> = 44228 में अपग्रेड करना महत्वपूर्ण है।
यदि यह संभव नहीं है:
उन अनुप्रयोगों के लिए जो Log4j लाइब्रेरी संस्करण 2.10.0 और बाद के संस्करण का उपयोग करते हैं, कॉन्फ़िगरेशन पैरामीटर log4j2.formatMsgNoLookups को सत्य पर सेट करके किसी भी हमले के खिलाफ सुरक्षा करना भी संभव है, उदाहरण के लिए, जावा वर्चुअल मशीन को -Dlog4j2.formatMsgNoLookups = true के साथ प्रारंभ करते समय विकल्प।
एक अन्य विकल्प JndiLookup क्लास को क्लासपाथ तर्क से हटाना है, जो प्राथमिक अटैक वेक्टर को हटा देगा (शोधकर्ता किसी अन्य अटैक वेक्टर के अस्तित्व से इंकार नहीं करते हैं)।
नोट
ऐसे संगठन जो अतिसंवेदनशील प्रणालियों में समायोजन करने में हिचकिचाते हैं या अनिच्छुक हैं (या जो अतिरिक्त सुरक्षा उपायों को स्थापित करना चाहते हैं) को इस बारे में सोचना चाहिए:
- सुनिश्चित करें कि सभी ट्रैफ़िक एक iSensor/WAF/आईपीएस। यह हमले को सिस्टम तक पहुंच प्राप्त करने से रोक सकता है।
- संवेदनशील सिस्टम तक पहुंचने वाले ट्रैफ़िक की मात्रा को सीमित करना यदि सिस्टम को इंटरनेट से कनेक्ट होने की आवश्यकता नहीं है, तो केवल आवश्यक और भरोसेमंद IPS और रेंज तक पहुंच को प्रतिबंधित करें।
- होस्ट के अधिकृत आउटगोइंग ट्रैफ़िक को कम करना। क्योंकि यह हमला एक दुष्ट सर्वर से जुड़कर संचालित होता है, सभी अनावश्यक आईपी पते और बंदरगाहों को फ़ायरवॉल पर अवरुद्ध किया जाना चाहिए।
- यदि सेवा की अब आवश्यकता नहीं है, तो इसे तब तक अक्षम किया जाना चाहिए जब तक कि कोई फ़िक्स तैयार न हो जाए।
निष्कर्ष
Log4j खामियों ने हमारे समुदाय को झकझोर दिया और हम सभी को याद दिलाया कि हम ओपन-सोर्स सॉफ्टवेयर पर कितने निर्भर हैं।
Log4j अद्वितीय है। यह न तो एक ऑपरेटिंग सिस्टम है, न ही यह एक ब्राउज़र है, न ही यह एक सॉफ्टवेयर है। इसके बजाय, प्रोग्रामर इसे लाइब्रेरी, पैकेज या कोड मॉड्यूल के रूप में संदर्भित करते हैं। यह सिर्फ एक उद्देश्य को पूरा करता है, वह है, सर्वर पर क्या होता है इसका रिकॉर्ड रखना।
जो लोग कोड लिखते हैं, वे इस बात पर ध्यान केंद्रित करना पसंद करते हैं कि उनके सॉफ़्टवेयर को क्या विशिष्ट बनाता है। वे पहिया को सुदृढ़ करने में रुचि नहीं रखते हैं। नतीजतन, वे मौजूदा कोड पुस्तकालयों के ढेरों पर भरोसा करते हैं, जैसे कि Log4j।
Log4j मॉड्यूल Apache से लिया गया है, जो सबसे व्यापक रूप से उपयोग किया जाने वाला वेब सर्वर सॉफ्टवेयर है। इसलिए इसे लाखों सर्वरों पर खोजा जा सकता है। इसलिए, सुरक्षा खतरों को बढ़ाना।
मुझे आशा है कि उपरोक्त समाधान आपके उपकरणों को सुरक्षित रखने में आपकी सहायता करेंगे।
तकनीक की दुनिया से अधिक उपयोगी जानकारी के लिए हैशडॉर्क के साथ बने रहें।
एक जवाब लिखें