वेब अनुप्रयोगों के साथ समस्या यह है कि वे खुले तौर पर अरबों इंटरनेट उपयोगकर्ताओं के संपर्क में हैं, जिनमें से कई इसके सुरक्षा उपायों को तोड़ना चाहते हैं – जो भी कारण हैं.
इंटरनेट के शुरुआती दिनों में, सबसे आम हमले के तरीकों में से एक बुनियादी, सरल जानवर बल था। बॉट्स ने आम तौर पर इन हमलों को अंजाम दिया – उन लोगों के साथ बहुत समय तक – जिन्होंने उपयोगकर्ता नाम और पासवर्ड के संयोजन की कोशिश की जब तक कि उन्हें एक ऐसा नहीं मिला जो लक्ष्य एप्लिकेशन तक पहुंच प्रदान करेगा.
ब्रूट बल के हमलों को अब कोई खतरा नहीं है, पासवर्ड नीतियों, सीमित लॉगिन प्रयासों और कैप्चा के लिए धन्यवाद। लेकिन साइबर अपराधियों को नए कारनामों की खोज करना और नए प्रकार के हमले करने के लिए उनका उपयोग करना पसंद है। बहुत पहले, उन्हें पता चला कि अनुप्रयोगों या वेब पेजों पर टेक्स्ट फ़ील्ड का उपयोग करके उनका शोषण किया जा सकता है-उनके साथ अप्रत्याशित टेक्स्ट दर्ज करने से जो एप्लिकेशन को ऐसा करने के लिए मजबूर करेगा, जिसे वह करने वाला नहीं था। इस तरह, तथाकथित इंजेक्शन हमले के दृश्य में प्रवेश किया.
इंजेक्शन के हमलों का उपयोग न केवल उपयोगकर्ता नाम और पासवर्ड जानने के लिए एक आवेदन में लॉग इन करने के लिए किया जा सकता है, बल्कि निजी, गोपनीय या संवेदनशील जानकारी को उजागर करने के लिए, या यहां तक कि एक पूरे सर्वर को हाईजैक करने के लिए भी किया जा सकता है। यही कारण है कि ये हमले न केवल वेब अनुप्रयोगों के लिए खतरा हैं, बल्कि उन उपयोगकर्ताओं के लिए भी हैं जिनका डेटा उन अनुप्रयोगों पर रहता है, और सबसे खराब स्थिति में, अन्य जुड़े अनुप्रयोगों और सेवाओं के लिए।.
Contents
कोड इंजेक्शन
कोड इंजेक्शन सबसे आम प्रकार के इंजेक्शन हमलों में से एक है। यदि हमलावर प्रोग्रामिंग भाषा, फ्रेमवर्क, डेटाबेस या किसी वेब एप्लिकेशन द्वारा उपयोग किए जाने वाले ऑपरेटिंग सिस्टम को जानते हैं, तो वे वेबसर्वर को वह करने के लिए मजबूर करने के लिए टेक्स्ट इनपुट फ़ील्ड के माध्यम से कोड इंजेक्ट कर सकते हैं, जो वे चाहते हैं.
इस प्रकार के इंजेक्शन हमले उन अनुप्रयोगों पर संभव हैं जिनमें इनपुट डेटा सत्यापन की कमी है। यदि कोई पाठ इनपुट फ़ील्ड उपयोगकर्ताओं को जो कुछ भी चाहते हैं, उन्हें दर्ज करने देता है, तो एप्लिकेशन संभावित रूप से शोषक है। इन हमलों को रोकने के लिए, एप्लिकेशन को उतना ही प्रतिबंधित करना होगा जितना कि इनपुट उपयोगकर्ताओं को प्रवेश करने की अनुमति हो.
उदाहरण के लिए, इसे अपेक्षित डेटा की मात्रा को सीमित करने की आवश्यकता है, इसे स्वीकार करने से पहले डेटा प्रारूप की जांच करना और अनुमत वर्णों के सेट को प्रतिबंधित करना है।.
कोड इंजेक्शन भेद्यता को खोजने के लिए आसान हो सकता है, बस विभिन्न प्रकार की सामग्री के साथ एक वेब अनुप्रयोग के पाठ इनपुट का परीक्षण करके। जब पाया जाता है, तो कमजोरियों का शोषण करने के लिए मध्यम कठिन होता है। लेकिन जब एक हमलावर इन कमजोरियों में से एक का फायदा उठाने का प्रबंधन करता है, तो प्रभाव में गोपनीयता, अखंडता, उपलब्धता, या कार्यक्षमता की हानि शामिल हो सकती है।.
एसक्यूएल इंजेक्षन
एक समान फैशन में कोड इंजेक्शन के लिए, इस हमले में एक पाठ इनपुट क्षेत्र में क्वेरी संचालन करने के लिए अधिकांश डेटाबेस द्वारा उपयोग की जाने वाली SQL स्क्रिप्ट-भाषा सम्मिलित होती है। स्क्रिप्ट को एप्लिकेशन को भेजा जाता है, जो इसे सीधे अपने डेटाबेस पर निष्पादित करता है। नतीजतन, हमलावर लॉगिन स्क्रीन से गुजर सकता है या अधिक खतरनाक चीजें कर सकता है, जैसे डेटाबेस से सीधे संवेदनशील डेटा पढ़ना, डेटाबेस डेटा को संशोधित या नष्ट करना, या डेटाबेस पर व्यवस्थापक संचालन को निष्पादित करना।.
PHP और ASP एप्लिकेशन SQL इंजेक्शन हमलों के कारण इसके पुराने कार्यात्मक इंटरफेस के लिए प्रवण हैं। J2EE और ASP.Net ऐप्स आमतौर पर इन हमलों के खिलाफ अधिक संरक्षित हैं। जब एक SQL इंजेक्शन भेद्यता पाया जाता है – और उन्हें आसानी से पाया जा सकता है – संभावित हमलों की भयावहता केवल हमलावर के कौशल और कल्पना से सीमित होगी। इस प्रकार, एक SQL इंजेक्शन हमले का प्रभाव निस्संदेह अधिक है.
कमान इंजेक्शन
ये हमले मुख्य रूप से अपर्याप्त इनपुट सत्यापन के कारण भी संभव हैं। वे कोड इंजेक्शन हमलों से भिन्न होते हैं जिसमें हमलावर प्रोग्रामिंग कोड या स्क्रिप्ट के टुकड़ों के बजाय सिस्टम कमांड सम्मिलित करता है। इसलिए, हैकर को उस प्रोग्रामिंग भाषा को जानने की जरूरत नहीं है जिसमें एप्लिकेशन आधारित है या डेटाबेस द्वारा उपयोग की जाने वाली भाषा है। लेकिन उन्हें होस्टिंग सर्वर द्वारा उपयोग किए जाने वाले ऑपरेटिंग सिस्टम को जानने की आवश्यकता है.
सम्मिलित सिस्टम कमांड को होस्ट ऑपरेटिंग सिस्टम द्वारा एप्लिकेशन के विशेषाधिकारों के साथ निष्पादित किया जाता है, जो सर्वर पर रहने वाली मनमानी फाइलों की सामग्री को उजागर करने की अनुमति दे सकता है, सर्वर की निर्देशिका संरचना दिखाने के लिए, उपयोगकर्ता पासवर्ड बदलने के लिए, अन्य बातों के अलावा।.
एक सर्वर पर चल रहे वेब एप्लिकेशन के सिस्टम एक्सेस स्तर को सीमित करके, इन हमलों को एक sysadmin द्वारा रोका जा सकता है.
क्रॉस साइट स्क्रिप्टिंग
जब भी कोई एप्लिकेशन आउटपुट के भीतर किसी उपयोगकर्ता से इनपुट सम्मिलित करता है, तो इसे सत्यापित या एन्कोडिंग किए बिना, यह एक हमलावर को एक अलग एंड-यूज़र के लिए दुर्भावनापूर्ण कोड भेजने का अवसर देता है। क्रॉस-साइट स्क्रिप्टिंग (XSS) हमले इन अवसरों को विश्वसनीय वेबसाइटों में दुर्भावनापूर्ण स्क्रिप्ट को इंजेक्ट करने के लिए लेते हैं, जो अंततः एप्लिकेशन के अन्य उपयोगकर्ताओं को भेजा जाता है, जो हमलावर के शिकार बन जाते हैं.
पीड़ितों का ब्राउज़र दुर्भावनापूर्ण स्क्रिप्ट पर अमल करेगा, बिना यह जाने कि उस पर भरोसा नहीं किया जाना चाहिए। इसलिए, ब्राउज़र इसे ब्राउज़र द्वारा संग्रहीत सत्र टोकन, कुकीज़, या संवेदनशील जानकारी तक पहुंचने देगा। यदि ठीक से प्रोग्राम किया गया है, तो स्क्रिप्ट भी HTML फ़ाइल की सामग्री को फिर से लिख सकती है.
XSS हमलों को आम तौर पर दो अलग-अलग श्रेणियों में विभाजित किया जा सकता है: संग्रहीत और प्रतिबिंबित.
में संग्रहीत XSS हमला, दुर्भावनापूर्ण स्क्रिप्ट स्थायी रूप से लक्ष्य सर्वर पर, संदेश मंच में, डेटाबेस में, विज़िटर लॉग में आदि पर रहता है। पीड़ित को यह तब मिलता है जब उसका ब्राउज़र संग्रहीत जानकारी का अनुरोध करता है। में प्रतिबिंबित XSS हमले, दुर्भावनापूर्ण स्क्रिप्ट एक प्रतिक्रिया में परिलक्षित होती है जिसमें सर्वर को भेजे गए इनपुट शामिल होते हैं। यह एक त्रुटि संदेश या खोज परिणाम हो सकता है, उदाहरण के लिए.
XPath इंजेक्शन
इस प्रकार का हमला तब संभव है जब कोई वेब एप्लिकेशन एक्सएमएल डेटा के लिए XPath क्वेरी बनाने के लिए उपयोगकर्ता द्वारा दी गई जानकारी का उपयोग करता है। जिस तरह से ये हमला काम करता है वह एसक्यूएल इंजेक्शन के समान है: हमलावर एक्सएमएल डेटा को कैसे संरचित करते हैं, यह पता लगाने के लिए आवेदन में विकृत जानकारी भेजते हैं, और फिर वे उस डेटा तक पहुंचने के लिए फिर से हमला करते हैं।.
XPath एक मानक भाषा है जिसके साथ SQL, आप उन विशेषताओं को निर्दिष्ट कर सकते हैं जिन्हें आप खोजना चाहते हैं। XML डेटा पर एक क्वेरी करने के लिए, वेब एप्लिकेशन उपयोगकर्ता इनपुट का उपयोग एक पैटर्न सेट करने के लिए करते हैं जो डेटा से मेल खाना चाहिए। विकृत इनपुट भेजकर, पैटर्न एक ऑपरेशन में बदल सकता है जिसे हमलावर डेटा पर लागू करना चाहता है.
XPath में SQL के साथ क्या होता है, इसके विपरीत, कोई भिन्न संस्करण नहीं हैं। इसका मतलब है कि XPath इंजेक्शन किसी भी वेब एप्लिकेशन पर किया जा सकता है जो कार्यान्वयन की परवाह किए बिना XML डेटा का उपयोग करता है। इसका मतलब यह भी है कि हमले को स्वचालित किया जा सकता है; इसलिए, SQL इंजेक्शन के विपरीत, इसमें उद्देश्यों की एक मनमानी संख्या के खिलाफ निकाल दिया जा सकता है.
मेल कमांड इंजेक्शन
अनुचित तरीके से मान्य उपयोगकर्ता इनपुट के साथ IMAP या SMTP स्टेटमेंट बनाने वाले ईमेल सर्वर और एप्लिकेशन का फायदा उठाने के लिए इस हमले के तरीके का इस्तेमाल किया जा सकता है। कभी-कभी, IMAP और SMTP सर्वरों को हमलों के खिलाफ मजबूत सुरक्षा नहीं मिलती है, क्योंकि यह अधिकांश वेब सर्वरों के मामले में होगा, और इसलिए यह अधिक शोषक हो सकता है। एक मेल सर्वर के माध्यम से प्रवेश करना, हमलावर कैप्चा जैसे प्रतिबंधों को सीमित कर सकते हैं, सीमित संख्या में अनुरोध, आदि.
एक SMTP सर्वर का फायदा उठाने के लिए, हमलावरों को इंजेक्शन के साथ संदेश भेजने के लिए एक वैध ईमेल खाते की आवश्यकता होती है। यदि सर्वर असुरक्षित है, तो यह हमलावरों के अनुरोधों का जवाब देगा, उन्हें अनुमति देता है, उदाहरण के लिए, सर्वर प्रतिबंधों को ओवरराइड करने और स्पैम भेजने के लिए अपनी सेवाओं का उपयोग करने के लिए।.
IMAP इंजेक्शन मुख्य रूप से वेबमेल अनुप्रयोगों पर किया जा सकता है, संदेश पढ़ने की कार्यक्षमता का फायदा उठा सकता है। इन मामलों में, हमले को केवल एक वेब ब्राउज़र के एड्रेस बार, इंजेक्शन वाले कमांड के साथ एक यूआरएल में दर्ज करके किया जा सकता है.
CRLF इंजेक्शन
कैरिज रिटर्न और लाइन फीड कैरेक्टर-इनकंबिनेशन की प्रविष्टि को CRLF के रूप में जाना जाता है, जो वेब फॉर्म इनपुट फ़ील्ड्स में CRLF इंजेक्शन नामक एक हमले के तरीके का प्रतिनिधित्व करता है। ये अदृश्य अक्षर कई पारंपरिक इंटरनेट प्रोटोकॉल जैसे कि HTTP, MIME या NNTP में एक पंक्ति के अंत या कमांड के अंत का संकेत देते हैं.
उदाहरण के लिए, एक HTTP अनुरोध में CRLF की प्रविष्टि, कुछ HTML कोड के बाद, वेबसाइट के आगंतुकों के लिए कस्टम वेब पेज भेज सकते हैं।.
यह हमला उन कमजोर वेब अनुप्रयोगों पर किया जा सकता है जो उपयोगकर्ता इनपुट पर उचित फ़िल्टरिंग लागू नहीं करते हैं। यह भेद्यता अन्य प्रकार के इंजेक्शन हमलों जैसे कि XSS और कोड इंजेक्शन के लिए दरवाजा खोलती है, और अपहृत होने वाली वेबसाइट में भी प्राप्त कर सकती है.
होस्ट हैडर इंजेक्शन
कई वेबसाइटों या वेब एप्लिकेशन को होस्ट करने वाले सर्वरों में, होस्ट हेडर यह निर्धारित करने के लिए आवश्यक हो जाता है कि कौन-सी निवासी वेबसाइट या वेब एप्लिकेशन हैं-उनमें से जिन्हें वर्चुअल होस्ट के रूप में जाना जाता है- को आने वाले अनुरोध को संसाधित करना चाहिए। हेडर का मान सर्वर को बताता है कि वर्चुअल होस्ट्स में से किसको अनुरोध भेजना है। जब सर्वर को एक अमान्य होस्ट हेडर प्राप्त होता है, तो यह आम तौर पर इसे सूची में पहले वर्चुअल होस्ट पर भेजता है। यह एक भेद्यता का गठन करता है जो हमलावरों को सर्वर में पहले वर्चुअल होस्ट के लिए मनमाने होस्ट हेडर भेजने के लिए उपयोग कर सकते हैं.
होस्ट हेडर का हेरफेर आमतौर पर PHP अनुप्रयोगों से संबंधित होता है, हालांकि यह अन्य वेब विकास तकनीकों के साथ भी किया जा सकता है। होस्ट हेडर हमले अन्य प्रकार के हमलों, जैसे कि वेब-कैश पॉइज़निंग, के लिए एनबलर के रूप में काम करते हैं। इसके परिणामों में हमलावरों द्वारा संवेदनशील संचालन का निष्पादन शामिल हो सकता है, उदाहरण के लिए, पासवर्ड रीसेट.
LDAP इंजेक्शन
LDAP एक प्रोटोकॉल है जो किसी नेटवर्क में संसाधनों (उपकरणों, फ़ाइलों, अन्य उपयोगकर्ताओं) की खोज को सुविधाजनक बनाने के लिए डिज़ाइन किया गया है। यह इंट्रानेट के लिए बहुत उपयोगी है, और जब एक ही साइन-ऑन सिस्टम के हिस्से के रूप में उपयोग किया जाता है, तो इसका उपयोग उपयोगकर्ता नाम और पासवर्ड संग्रहीत करने के लिए किया जा सकता है। LDAP क्वेरी में विशेष नियंत्रण वर्णों का उपयोग शामिल होता है जो इसके नियंत्रण को प्रभावित करते हैं। हमलावर संभवतः LDAP क्वेरी के इच्छित व्यवहार को बदल सकते हैं यदि वे इसमें नियंत्रण वर्ण सम्मिलित कर सकते हैं.
फिर, LDAP इंजेक्शन हमलों की अनुमति देने वाली मूल समस्या अनुचित रूप से मान्य उपयोगकर्ता इनपुट है। यदि उपयोगकर्ता द्वारा किसी एप्लिकेशन को भेजे जाने वाले पाठ का उपयोग एलडीएपी क्वेरी के हिस्से के रूप में किया जाता है, तो इसे साफ किए बिना, क्वेरी सभी उपयोगकर्ताओं की सूची को पुनः प्राप्त कर सकती है और इसे एक हमलावर को दिखा सकती है, बस सही में तारांकन चिह्न (*) का उपयोग करके। एक इनपुट स्ट्रिंग के अंदर जगह.
इंजेक्शन के हमलों को रोकना
जैसा कि हमने इस लेख में देखा, सभी इंजेक्शन हमलों को किसी भी इंटरनेट उपयोगकर्ता के लिए खुली पहुंच के साथ सर्वर और अनुप्रयोगों की ओर निर्देशित किया जाता है। इन हमलों को रोकने की जिम्मेदारी आवेदन डेवलपर्स और सर्वर प्रशासकों के बीच वितरित की जाती है.
एप्लिकेशन डेवलपर्स को उपयोगकर्ता इनपुट के गलत सत्यापन में शामिल जोखिमों को जानना होगा और जोखिम निवारण उद्देश्यों के साथ उपयोगकर्ता इनपुट को साफ करने के लिए सर्वोत्तम प्रथाओं को सीखना होगा। सर्वर प्रशासकों को कमजोरियों का पता लगाने और उन्हें जल्द से जल्द सही करने के लिए अपने सिस्टम को समय-समय पर ऑडिट करने की आवश्यकता होती है। इन ऑडिट को करने के लिए कई विकल्प हैं, या तो ऑन-डिमांड या स्वचालित रूप से.