भाग I: लॉग इन कैसे करें
हम मान लेंगे कि आप पहले से ही जानते हैं कि लॉगिन + पासवर्ड एचटीएमएल फॉर्म कैसे बनाया जाता है, जो प्रमाणीकरण के लिए सर्वर साइड पर एक स्क्रिप्ट के मूल्यों को पोस्ट करता है। नीचे दिए गए खंड ध्वनि व्यावहारिक स्थिति के लिए पैटर्न से निपटेंगे, और सबसे आम सुरक्षा नुकसान से कैसे बचें।
HTTPS को या HTTPS को नहीं?
जब तक कनेक्शन पहले से ही सुरक्षित नहीं है (अर्थात, SSL / TLS का उपयोग करके HTTPS के माध्यम से टनल किया जाता है), आपके लॉगिन फ़ॉर्म मान क्लियरटेक्स्ट में भेजे जाएंगे, जो किसी को भी ब्राउज़र और वेब सर्वर के बीच की लाइन पर evesdropping की अनुमति देता है, क्योंकि वे लॉगिन को पढ़ सकेंगे के माध्यम से। इस प्रकार के वायरटैपिंग को सरकारों द्वारा नियमित रूप से किया जाता है, लेकिन सामान्य तौर पर, हम यह कहने के अलावा 'स्वामित्व' तारों को संबोधित नहीं करेंगे: बस HTTPS का उपयोग करें।
संक्षेप में, लॉगिन के दौरान वायरटैपिंग / पैकेट सूँघने से बचाने का एकमात्र व्यावहारिक तरीका HTTPS या किसी अन्य प्रमाणपत्र-आधारित एन्क्रिप्शन स्कीम (उदाहरण के लिए, TLS ) या एक सिद्ध और परीक्षण की गई चुनौती-प्रतिक्रिया योजना (उदाहरण के लिए, Diffie-Hellman) का उपयोग करके है -बेड एसआरपी)। किसी भी अन्य विधि को आसानी से एक कल्पित हमलावर द्वारा दरकिनार किया जा सकता है ।
बेशक, यदि आप थोड़ा अव्यवहारिक होना चाहते हैं, तो आप दो-कारक प्रमाणीकरण योजना (जैसे कि Google प्रमाणक ऐप, एक भौतिक 'शीत युद्ध शैली' कोडबुक, या एक आरएसए कुंजी जनरेटर डोंगल) को भी नियोजित कर सकते हैं। यदि सही तरीके से लागू किया जाता है, तो यह असुरक्षित कनेक्शन के साथ भी काम कर सकता है, लेकिन यह कल्पना करना मुश्किल है कि एक देव टू-फैक्टर की स्थिति को लागू करने के लिए इच्छुक होगा, लेकिन एसएसएल नहीं।
(न करें) रोल-अपना-अपना जावास्क्रिप्ट एन्क्रिप्शन / हैशिंग
अपनी वेबसाइट पर SSL प्रमाणपत्र स्थापित करने की कथित (हालांकि अब टालने योग्य ) लागत और तकनीकी कठिनाई को देखते हुए , कुछ डेवलपर्स को असुरक्षित वायर पर क्लीयरटेक्स लॉगिन से बचने के लिए अपने स्वयं के ब्राउज़र हैशिंग या एन्क्रिप्शन योजनाओं को रोल करने का प्रलोभन दिया जाता है।
हालांकि यह एक नेक विचार है, यह अनिवार्य रूप से बेकार है (और यह एक सुरक्षा दोष हो सकता है ) जब तक कि यह उपरोक्त में से किसी एक के साथ संयुक्त न हो - यानी या तो मजबूत एन्क्रिप्शन के साथ लाइन को सुरक्षित करना या कोशिश की गई और चुनौती-प्रतिक्रिया का उपयोग करना तंत्र (यदि आप नहीं जानते कि क्या है, तो बस यह जान लें कि यह साबित करना सबसे कठिन है, डिजाइन करना सबसे कठिन है और डिजिटल सुरक्षा में अवधारणाओं को लागू करना सबसे मुश्किल है)।
हालांकि यह सच है कि पासवर्ड हैशिंग पासवर्ड के प्रकटीकरण के खिलाफ प्रभावी हो सकता है , यह फिर से खेलना हमलों, मैन-इन-द-मिडिल अटैक / हाईजैकिंग के प्रति संवेदनशील है (यदि कोई हमलावर आपके असुरक्षित HTML में कुछ बाइट्स इंजेक्ट कर सकता है इससे पहले कि यह आपके तक पहुंच जाए ब्राउज़र, वे केवल जावास्क्रिप्ट में हैशिंग को टिप्पणी कर सकते हैं), या जानवर बल के हमले (क्योंकि आप हमलावर को उपयोगकर्ता नाम, नमक और हैशेड पासवर्ड दोनों सौंप रहे हैं)।
मानवता के खिलाफ कैप्चा
कैप्चा का मतलब किसी विशिष्ट श्रेणी के हमले को विफल करना है: स्वचालित शब्दकोश / जानवर बल परीक्षण और कोई मानव ऑपरेटर के साथ त्रुटि। इसमें कोई संदेह नहीं है कि यह एक वास्तविक खतरा है, हालांकि, इसके साथ निपटने के तरीके हैं जो कि कैप्चा की आवश्यकता नहीं है, विशेष रूप से ठीक से डिज़ाइन किए गए सर्वर-साइड लॉगिन थ्रॉटलिंग योजनाओं - हम बाद में उन पर चर्चा करेंगे।
पता है कि कैप्चा कार्यान्वयन समान रूप से नहीं बनाए गए हैं; वे अक्सर मानव-सॉल्व नहीं होते हैं, उनमें से अधिकांश वास्तव में बॉट्स के खिलाफ अप्रभावी होते हैं, उनमें से सभी सस्ते तीसरे-विश्व श्रम के खिलाफ अप्रभावी होते हैं ( ओडब्ल्यूएएसपी के अनुसार , वर्तमान स्वेटशोप दर $ 500 प्रति 500 परीक्षण है), और कुछ कार्यान्वयन हो सकते हैं कुछ देशों में तकनीकी रूप से अवैध है (देखें OWASP ऑथेंटिकेशन चीट शीट )। यदि आप कैप्चा का उपयोग करना चाहते हैं, तो Google के reCAPTCHA का उपयोग करें , क्योंकि यह परिभाषा के अनुसार ओसीआर-हार्ड है (क्योंकि यह पहले से ही ओसीआर-मिसकॉलिफाइड बुक स्कैन का उपयोग करता है) और उपयोगकर्ता के अनुकूल होने के लिए बहुत कठिन प्रयास करता है।
व्यक्तिगत रूप से, मैं कैप्चास को परेशान करने की कोशिश करता हूं, और उन्हें केवल अंतिम उपाय के रूप में उपयोग करता हूं जब उपयोगकर्ता कई बार लॉग इन करने में विफल रहा है और थ्रॉटलिंग देरी को अधिकतम किया जाता है। यह स्वीकार्य होने के लिए शायद ही कभी पर्याप्त होगा, और यह पूरे सिस्टम को मजबूत करता है।
पासवर्डों / सत्यापन लॉगिनों को संग्रहीत करना
हाल के वर्षों में देखे गए सभी अत्यधिक प्रचारित हैक और उपयोगकर्ता डेटा लीक के बाद यह अंततः सामान्य ज्ञान हो सकता है, लेकिन यह कहा जाना चाहिए: अपने डेटाबेस में पासवर्ड क्लियरटेक्स्ट में स्टोर न करें। उपयोगकर्ता डेटाबेस नियमित रूप से हैक किए जाते हैं, लीक होते हैं या SQL इंजेक्शन के माध्यम से चमकते हैं, और यदि आप कच्चे, सादे पासवर्डों को संग्रहीत कर रहे हैं, तो यह आपकी लॉगिन सुरक्षा के लिए त्वरित गेम है।
इसलिए यदि आप पासवर्ड को स्टोर नहीं कर सकते हैं, तो आप कैसे जांचते हैं कि लॉगिन फॉर्म से POSTed लॉगिन + पासवर्ड संयोजन सही है? इसका उत्तर हैशिंग व्युत्पन्न फ़ंक्शन का उपयोग करके हैशिंग । जब भी कोई नया उपयोगकर्ता बनाया जाता है या कोई पासवर्ड बदला जाता है, तो आप पासवर्ड लेते हैं और उसे केडीएफ के माध्यम से चलाते हैं, जैसे कि Argon2, bcrypt, scrypt या PBKDF2, क्लीयरटेक् ट पासवर्ड ("correcthorsebystystaple") को एक लंबे, यादृच्छिक-दिखने वाले स्ट्रिंग में बदल देते हैं। , जो आपके डेटाबेस में संग्रहीत करने के लिए बहुत सुरक्षित है। एक लॉगिन को सत्यापित करने के लिए, आप दर्ज किए गए पासवर्ड पर एक ही हैश फ़ंक्शन चलाते हैं, इस बार नमक में गुजर रहा है और परिणामी हैश स्ट्रिंग की आपके डेटाबेस में संग्रहीत मान से तुलना करें। आर्गन 2, bcrypt और scrypt नमक को पहले से ही हैश के साथ स्टोर करता है। अधिक विस्तृत जानकारी के लिए sec.stackexchange पर इस लेख को देखें।
नमक का उपयोग करने का कारण यह है कि अपने आप में हैशिंग पर्याप्त नहीं है - आप इंद्रधनुष टेबल के खिलाफ हैश की रक्षा के लिए एक तथाकथित 'नमक' जोड़ना चाहते हैं । एक नमक दो पासवर्डों को प्रभावी ढंग से रोकता है जो बिल्कुल समान हैश मान के रूप में संग्रहीत होने से बचाता है, अगर एक हमलावर एक पासवर्ड अनुमान लगाने वाले हमले को अंजाम दे रहा है तो पूरे डेटाबेस को एक रन में स्कैन किया जा सकता है।
पासवर्ड के भंडारण के लिए एक क्रिप्टोग्राफ़िक हैश का उपयोग नहीं किया जाना चाहिए क्योंकि उपयोगकर्ता द्वारा चयनित पासवर्ड पर्याप्त रूप से मजबूत नहीं होते हैं (यानी आमतौर पर पर्याप्त एन्ट्रॉपी नहीं होते हैं) और एक पासवर्ड का अनुमान लगाकर हमला करने वाले के पास पहुंच के साथ एक हमलावर द्वारा अपेक्षाकृत कम समय में पूरा किया जा सकता है। यही कारण है कि केडीएफ का उपयोग किया जाता है - ये प्रभावी रूप से "कुंजी को स्ट्रेच" करते हैं , जिसका अर्थ है कि प्रत्येक पासवर्ड का अनुमान है कि एक हमलावर हैश एल्गोरिथ्म के कई दोहराव का कारण बनता है, उदाहरण के लिए 10,000 बार, जो हमलावर को पासवर्ड का 10,000 गुना धीमा होने का अनुमान लगाता है।
सत्र डेटा - "आप स्पाइडरमैन 69 के रूप में लॉग इन हैं"
एक बार जब सर्वर ने आपके उपयोगकर्ता डेटाबेस के खिलाफ लॉगिन और पासवर्ड को सत्यापित किया है और एक मैच पाया है, तो सिस्टम को यह याद रखने का एक तरीका चाहिए कि ब्राउज़र को प्रमाणित किया गया है। इस तथ्य को केवल सत्र डेटा में सर्वर साइड संग्रहीत किया जाना चाहिए।
यदि आप सत्र डेटा से अपरिचित हैं, तो यहां बताया गया है कि यह कैसे काम करता है: एक एकल बेतरतीब ढंग से उत्पन्न स्ट्रिंग को एक एक्सपायरिंग कुकी में संग्रहीत किया जाता है और डेटा के एक संग्रह को संदर्भित करने के लिए उपयोग किया जाता है - सत्र डेटा - जो सर्वर पर संग्रहीत होता है। यदि आप MVC फ्रेमवर्क का उपयोग कर रहे हैं, तो यह निस्संदेह पहले से ही नियंत्रित है।
यदि संभव हो, तो सुनिश्चित करें कि सत्र कुकी ब्राउज़र में भेजे जाने पर सुरक्षित और HTTP केवल फ़्लैग सेट है। HttpOnly ध्वज XSS हमले के माध्यम से पढ़ा जा रहा कुकी के खिलाफ कुछ सुरक्षा प्रदान करता है। सुरक्षित ध्वज यह सुनिश्चित करता है कि कुकी केवल HTTPS के माध्यम से वापस भेजी जाए, और इसलिए नेटवर्क सूँघने के हमलों से बचाता है। कुकी का मूल्य अनुमानित नहीं होना चाहिए। जहां एक गैर-मौजूद सत्र को संदर्भित करने वाला एक कुकी प्रस्तुत किया जाता है, सत्र निर्धारण को रोकने के लिए इसके मूल्य को तुरंत बदल दिया जाना चाहिए ।
भाग II: कैसे बने रहे लॉग इन करें - बदनाम "मुझे याद रखें" चेकबॉक्स
लगातार लॉगिन कुकीज़ ("मुझे याद रखें" कार्यक्षमता) एक खतरे का क्षेत्र है; एक ओर, वे पूरी तरह से पारंपरिक लॉगिन के रूप में सुरक्षित हैं जब उपयोगकर्ता समझते हैं कि उन्हें कैसे संभालना है; और दूसरी ओर, वे लापरवाह उपयोगकर्ताओं के हाथों में एक बहुत बड़ा सुरक्षा जोखिम हैं, जो सार्वजनिक कंप्यूटर पर उनका उपयोग कर सकते हैं और लॉग आउट करना भूल सकते हैं, और जो नहीं जानते कि ब्राउज़र कुकीज़ क्या हैं या उन्हें कैसे हटाएं।
व्यक्तिगत रूप से, मैं उन वेबसाइटों के लिए लगातार लॉगिन पसंद करता हूं जिन्हें मैं नियमित रूप से देखता हूं, लेकिन मुझे पता है कि उन्हें कैसे सुरक्षित रूप से संभालना है। यदि आप सकारात्मक हैं कि आपके उपयोगकर्ता एक ही जानते हैं, तो आप साफ विवेक के साथ लगातार लॉगिन का उपयोग कर सकते हैं। यदि नहीं - ठीक है, तो आप उस दर्शन की सदस्यता ले सकते हैं जो उपयोगकर्ता अपने लॉगिन क्रेडेंशियल्स के साथ लापरवाह हैं, यदि वे हैक किए गए हैं तो यह स्वयं पर लाया गया है। ऐसा नहीं है कि हम अपने उपयोगकर्ता के घरों में जाते हैं और उन सभी फेसपालम-उत्प्रेरण पोस्ट-इट नोटों को फाड़ देते हैं जो पासवर्ड के साथ अपने मॉनिटर के किनारे पर खड़े होते हैं।
बेशक, कुछ सिस्टम किसी भी खाते को हैक करने का जोखिम नहीं उठा सकते हैं ; ऐसी प्रणालियों के लिए, कोई रास्ता नहीं है कि आप लगातार लॉगिन होने का औचित्य साबित कर सकें।
यदि आप लगातार लॉगिन कुकीज़ को लागू करने का निर्णय लेते हैं, तो आप इसे कैसे करते हैं:
सबसे पहले, विषय पर पैरागॉन पहल के लेख को पढ़ने के लिए कुछ समय लें । आपको तत्वों का एक समूह प्राप्त करने की आवश्यकता होगी, और लेख प्रत्येक को समझाने का एक बड़ा काम करता है।
और सबसे आम नुकसानों में से एक को दोहराने के लिए, अपने दैनिक आधार पर व्यक्तिगत लॉग कूकी (टोकेन) से अधिक न लें, केवल आईटी का एक बड़ा हिस्सा! लॉगिन टोकन पासवर्ड समतुल्य है, इसलिए अगर किसी हमलावर को आपके डेटाबेस पर हाथ मिला, तो वे टोकन का उपयोग किसी भी खाते में लॉग इन करने के लिए कर सकते हैं, जैसे कि वे लॉगिन-पासवर्ड संयोजन के स्पष्ट थे। इसलिए, हैशिंग का उपयोग करें ( https://security.stackexchange.com/a/63438/5002 के अनुसार एक कमजोर हैश इस उद्देश्य के लिए बस ठीक करेगा) जब लगातार लॉगिन टोकन संग्रहीत करते हैं।
भाग III: गुप्त प्रश्नों का उपयोग करना
'गुप्त प्रश्न' लागू न करें । 'गुप्त प्रश्न' सुविधा एक सुरक्षा प्रतिमान है। MUST-READ सूची से लिंक नंबर 4 से पेपर पढ़ें। आप सारा पॉलिन से उसके बारे में पूछ सकते हैं, उसके याहू के बाद! ईमेल खाते को पिछले राष्ट्रपति अभियान के दौरान हैक कर लिया गया था क्योंकि उसके सुरक्षा प्रश्न का उत्तर था ... "वासिला हाई स्कूल"!
उपयोगकर्ता द्वारा निर्दिष्ट प्रश्नों के साथ भी, यह अत्यधिक संभावना है कि अधिकांश उपयोगकर्ता या तो चुनेंगे:
एक 'मानक' गुप्त प्रश्न जैसे माँ का पहला नाम या पसंदीदा पालतू जानवर
सामान्य ज्ञान का एक सामान्य टुकड़ा जिसे कोई भी अपने ब्लॉग, लिंक्डइन प्रोफ़ाइल, या इसी तरह से उठा सकता है
कोई भी सवाल जो उनके पासवर्ड का अनुमान लगाने से आसान है। जो, किसी भी अच्छे पासवर्ड के लिए, हर सवाल है जिसकी आप कल्पना कर सकते हैं
अंत में, सुरक्षा प्रश्न स्वाभाविक रूप से लगभग सभी रूपों और रूपों में असुरक्षित हैं, और किसी भी कारण से प्रमाणीकरण योजना में नियोजित नहीं किया जाना चाहिए।
जंगली में भी सुरक्षा के प्रश्न मौजूद होने का असली कारण यह है कि वे उन उपयोगकर्ताओं से आसानी से कुछ समर्थन कॉल की लागत बचाते हैं जो पुन: सक्रियण कोड प्राप्त करने के लिए अपने ईमेल तक नहीं पहुंच सकते हैं। यह सुरक्षा और सारा पॉलिन की प्रतिष्ठा की कीमत पर। इसके लायक? शायद ऩही।
भाग IV: पासवर्ड कार्यक्षमता भूल गए
मैंने पहले ही उल्लेख किया है कि आपको भूल गए / खोए हुए उपयोगकर्ता पासवर्ड को संभालने के लिए सुरक्षा प्रश्नों का उपयोग क्यों नहीं करना चाहिए ; यह यह कहे बिना भी चला जाता है कि आपको उपयोगकर्ताओं को कभी भी उनके वास्तविक पासवर्ड को ई-मेल नहीं करना चाहिए। इस क्षेत्र में बचने के लिए कम से कम दो और सर्व-सामान्य नुकसान हैं:
ऑटोजेनरेटेड मजबूत पासवर्ड के लिए एक भूल गए पासवर्ड को रीसेट न करें - इस तरह के पासवर्ड को याद रखना बेहद मुश्किल है, जिसका अर्थ है कि उपयोगकर्ता को या तो इसे बदलना होगा या इसे लिखना होगा - कहें, उनके मॉनिटर के किनारे पर एक चमकदार पीले पोस्ट-इट पर। एक नया पासवर्ड सेट करने के बजाय, बस उपयोगकर्ताओं को एक नया तुरंत लेने दें - जो कि वैसे भी वे करना चाहते हैं। (इसका एक अपवाद यह हो सकता है कि यदि उपयोगकर्ता पासवर्ड को संग्रहीत / प्रबंधित करने के लिए सार्वभौमिक रूप से एक पासवर्ड प्रबंधक का उपयोग कर रहे हैं, जो आमतौर पर इसे लिखे बिना याद रखना असंभव होगा)।
डेटाबेस में हमेशा खो पासवर्ड कोड / टोकन है। फिर से , यह कोड एक पासवर्ड समतुल्य का एक और उदाहरण है, इसलिए हमलावर द्वारा आपके डेटाबेस से हाथ मिलाने की स्थिति में यह जरूरी है। जब एक खो पासवर्ड कोड का अनुरोध किया जाता है, तो उपयोगकर्ता के ईमेल पते पर सादा कोड भेजें, फिर इसे हैश करें, अपने डेटाबेस में हैश को सहेजें - और मूल को फेंक दें । बस पासवर्ड या लगातार लॉगिन टोकन की तरह।
एक अंतिम नोट: हमेशा सुनिश्चित करें कि 'खो पासवर्ड कोड' दर्ज करने के लिए आपका इंटरफ़ेस कम से कम आपके लॉगिन फ़ॉर्म के रूप में सुरक्षित है, या कोई हमलावर इसके बजाय पहुंच प्राप्त करने के लिए इसका उपयोग करेगा। यह सुनिश्चित करना कि आप बहुत लंबे 'खो पासवर्ड कोड' उत्पन्न करते हैं (उदाहरण के लिए, 16 केस-संवेदी अल्फ़ान्यूमेरिक वर्ण) एक अच्छी शुरुआत है, लेकिन उसी थ्रॉटलिंग योजना को जोड़ने पर विचार करें जो आप लॉगिन फॉर्म के लिए करते हैं।
PART V: पासवर्ड स्ट्रेंथ की जाँच
सबसे पहले, आप एक वास्तविकता की जाँच के लिए इस छोटे से लेख को पढ़ना चाहेंगे: 500 सबसे आम पासवर्ड
ठीक है, इसलिए हो सकता है कि सूची किसी भी सिस्टम पर कभी भी किसी भी सिस्टम पर सबसे आम पासवर्ड की कैनोनिकल सूची नहीं है , लेकिन यह इस बात का एक अच्छा संकेत है कि जब कोई लागू नीति नहीं होती है तो लोग अपने पासवर्ड को कैसे चुनेंगे। साथ ही, सूची भयावह रूप से घर के करीब दिखती है जब आप इसकी तुलना हाल ही में चुराए गए पासवर्डों के सार्वजनिक रूप से उपलब्ध विश्लेषणों से करते हैं।
तो: कोई न्यूनतम पासवर्ड शक्ति आवश्यकताओं के साथ, 2% उपयोगकर्ता शीर्ष 20 सबसे आम पासवर्डों में से एक का उपयोग करते हैं। अर्थ: यदि किसी हमलावर को सिर्फ 20 प्रयास मिले, तो आपकी वेबसाइट पर 50 में से 1 अकाउंट क्रैकेबल होगा।
इसे शुरू करने के लिए पासवर्ड की एन्ट्रापी की गणना करना और फिर एक सीमा लागू करना आवश्यक है। नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी (NIST) स्पेशल पब्लिकेशन 800-63 में बहुत अच्छे सुझावों का एक सेट है। कि, जब एक शब्दकोश और कीबोर्ड लेआउट विश्लेषण के साथ संयुक्त (उदाहरण के लिए, 'qwertyuiop' एक खराब पासवर्ड है), तो एंट्रॉपी के 18 बिट्स के स्तर पर सभी खराब चयनित पासवर्डों में से 99% को अस्वीकार कर सकता है । बस पासवर्ड की ताकत की गणना और एक उपयोगकर्ता के लिए एक दृश्य शक्ति मीटर दिखाना अच्छा है, लेकिन अपर्याप्त है। जब तक इसे लागू नहीं किया जाता है, तब तक बहुत सारे उपयोगकर्ता इसकी उपेक्षा करेंगे।
और उच्च-एन्ट्रापी पासवर्डों के उपयोगकर्ता-मित्रता पर ताज़ा करने के लिए, रान्डेल मुनरो के पासवर्ड स्ट्रेंथ xkcd की अत्यधिक अनुशंसा की जाती है।
सार्वजनिक डेटा उल्लंघनों में समझौता किए गए पासवर्ड के खिलाफ उपयोगकर्ताओं के पासवर्ड की जांच करने के लिए ट्रॉय हंट आई हैव आई पीनड एपीआई का उपयोग करें।
भाग VI: बहुत अधिक - या: रैपिड-फायर लॉगिन प्रयासों को रोकना
सबसे पहले, संख्याओं पर एक नज़र डालें: पासवर्ड रिकवरी गति - आपका पासवर्ड कितनी देर तक खड़ा रहेगा
यदि आपके पास उस लिंक में तालिकाओं को देखने का समय नहीं है, तो यहां उनकी सूची दी गई है:
एक कमजोर पासवर्ड को क्रैक करने में लगभग समय नहीं लगता है , भले ही आप इसे एबेकस से क्रैक कर रहे हों
यदि यह असंवेदनशील है, तो अल्फ़ान्यूमेरिक 9-कैरेक्टर पासवर्ड को क्रैक करने में लगभग समय नहीं लगता है
लगभग 8 वर्ण से कम लंबे समय तक एक जटिल, प्रतीकों और अक्षरों-और-संख्याओं, ऊपरी-और-लोअरकेस पासवर्ड को क्रैक करने में लगभग कोई समय नहीं लगता है (एक डेस्कटॉप पीसी एक मामले में 7 वर्णों तक पूरे कीस्पेस को खोज सकता है दिन या घंटे भी)
हालाँकि, यदि आप प्रति सेकंड एक प्रयास तक सीमित थे , तो भी 6-वर्ण पासवर्ड को क्रैक करने के लिए समय की एक विषम राशि ले सकते हैं !
तो हम इन नंबरों से क्या सीख सकते हैं? ठीक है, बहुत सारे, लेकिन हम सबसे महत्वपूर्ण हिस्से पर ध्यान केंद्रित कर सकते हैं: यह तथ्य कि बड़ी संख्या में तेजी से आग लगने की लगातार कोशिशों को रोकना (यानी, क्रूर बल हमला) वास्तव में उतना मुश्किल नहीं है। लेकिन इसे रोकने का अधिकार के रूप में आसान के रूप में ऐसा लगता है नहीं है।
सामान्यतया, आपके पास तीन विकल्प होते हैं जो सभी जानवर-बल के हमलों (और शब्दकोश हमलों) के खिलाफ प्रभावी होते हैं , लेकिन चूंकि आप पहले से ही एक मजबूत पासवर्ड नीति को नियोजित कर रहे हैं, इसलिए उन्हें कोई मुद्दा नहीं होना चाहिए) :
एन असफल प्रयासों के बाद एक कैप्चा पेश करें (नरक और अक्सर अप्रभावी के रूप में कष्टप्रद - लेकिन मैं यहाँ खुद को दोहरा रहा हूं)
एन विफल प्रयासों के बाद खातों को लॉक करना और ईमेल सत्यापन की आवश्यकता (यह एक DoS हमला होने की प्रतीक्षा में है)
और अंत में, थ्रॉटलिंग लॉगिन करें : अर्थात, एन विफल प्रयासों के बाद प्रयासों के बीच एक समय की देरी सेट करना (हाँ, DoS हमले अभी भी संभव हैं, लेकिन कम से कम उनकी संभावना कम है और खींचने के लिए बहुत अधिक जटिल है)।
सर्वश्रेष्ठ अभ्यास # 1: असफल प्रयासों की संख्या के साथ कम समय की देरी, जैसे:
- 1 असफल प्रयास = कोई देरी नहीं
- 2 विफल प्रयास = 2 सेकंड देरी
- 3 विफल प्रयास = 4 सेकंड देरी
- 4 विफल प्रयास = 8 सेकंड देरी
- 5 असफल प्रयास = 16 सेकंड देरी
- आदि।
इस योजना पर हमला करना बहुत ही अव्यावहारिक होगा, क्योंकि परिणामस्वरूप लॉकआउट का समय पिछले लॉकआउट समय के योग से थोड़ा बड़ा होता है।
स्पष्ट करने के लिए: ब्राउज़र की प्रतिक्रिया वापस करने से पहले विलंब देरी नहीं है। यह एक टाइमआउट या दुर्दम्य अवधि की तरह अधिक है, जिसके दौरान किसी विशिष्ट खाते में या किसी विशिष्ट आईपी पते से लॉगिन करने का प्रयास स्वीकार या मूल्यांकन नहीं किया जाएगा। यही है, सही क्रेडेंशियल्स एक सफल लॉगिन में वापस नहीं आएंगे, और गलत क्रेडेंशियल्स देरी में वृद्धि को ट्रिगर नहीं करेंगे।
सर्वश्रेष्ठ अभ्यास # 2: एक मध्यम लंबाई की देरी जो एन विफल प्रयासों के बाद प्रभावी हो जाती है, जैसे:
- 1-4 विफल प्रयास = कोई देरी नहीं
- 5 विफल प्रयास = 15-30 मिनट देरी
इस योजना पर हमला करना काफी अव्यवहारिक होगा, लेकिन निश्चित रूप से उल्लेखनीय है। इसके अलावा, यह नोट करना प्रासंगिक हो सकता है कि वैध उपयोगकर्ता के लिए इतनी लंबी देरी बहुत कष्टप्रद हो सकती है। भुलक्कड़ उपयोगकर्ता आपको नापसंद करेंगे।
सर्वश्रेष्ठ अभ्यास # 3: दो दृष्टिकोणों को मिलाकर - या तो एक निश्चित, थोड़े समय की देरी जो एन विफल प्रयासों के बाद प्रभावी हो जाती है, जैसे:
- 1-4 विफल प्रयास = कोई देरी नहीं
- 5+ विफल प्रयास = 20 सेकंड देरी
या, एक निश्चित ऊपरी सीमा के साथ बढ़ती देरी, जैसे:
- 1 असफल प्रयास = 5 सेकंड देरी
- 2 असफल प्रयास = 15 सेकंड देरी
- 3+ विफल प्रयास = 45 सेकंड की देरी
यह अंतिम योजना OWASP सर्वोत्तम प्रथाओं के सुझावों (MUST-READ सूची से लिंक 1) से ली गई थी और इसे सर्वश्रेष्ठ व्यवहार माना जाना चाहिए, भले ही यह प्रतिबंधात्मक पक्ष पर हो।
हालाँकि, अंगूठे के एक नियम के रूप में, मैं कहूंगा: आपकी पासवर्ड नीति जितनी मजबूत होगी, आपको उपयोगकर्ताओं को देरी से कम करना होगा। यदि आपको मजबूत (केस-संवेदी अल्फ़ान्यूमेरिक्स + आवश्यक संख्या और प्रतीक) 9+ वर्ण पासवर्ड की आवश्यकता है, तो आप थ्रॉटलिंग को सक्रिय करने से पहले उपयोगकर्ताओं को 2-4 गैर-विलंबित पासवर्ड प्रयास दे सकते हैं।
इस अंतिम लॉगिन थ्रॉटलिंग योजना पर हमला करना बहुत ही अव्यवहारिक होगा। और अंतिम स्पर्श के रूप में, हमेशा निरंतर (कुकी) लॉगिन (और / या कैप्चा-सत्यापित लॉगिन फ़ॉर्म) से गुजरने की अनुमति देते हैं, इसलिए हमले के दौरान वैध उपयोगकर्ताओं को भी देरी नहीं होगी । इस तरह, बहुत ही अव्यावहारिक DoS हमला एक अत्यंत अव्यवहारिक हमला बन जाता है ।
इसके अतिरिक्त, यह व्यवस्थापक खातों पर अधिक आक्रामक थ्रॉटलिंग करने के लिए समझ में आता है, क्योंकि वे सबसे आकर्षक प्रवेश बिंदु हैं
भाग VII: वितरित सेना बल हमलों
एक तरफ के रूप में, और अधिक उन्नत हमलावर 'अपनी गतिविधियों को फैलाने' द्वारा लॉगिन थ्रॉटलिंग को दरकिनार करने की कोशिश करेंगे:
आईपी पते को रोकने के लिए एक बोटनेट पर प्रयासों को वितरित करना
एक उपयोगकर्ता को चुनने और 50.000 सबसे सामान्य पासवर्ड (जो वे हमारे थ्रॉटलिंग की वजह से नहीं कर सकते हैं) को आज़माने के बजाय, वे सबसे सामान्य पासवर्ड चुनेंगे और इसके बजाय 50.000 उपयोगकर्ताओं के खिलाफ प्रयास करेंगे। इस तरह, न केवल उन्हें कैप्चा और लॉगिन थ्रॉटलिंग जैसे अधिकतम-प्रयास उपायों के आसपास मिलता है, उनकी सफलता की संभावना भी बढ़ जाती है, क्योंकि नंबर 1 सबसे आम पासवर्ड नंबर 49.995 की तुलना में कहीं अधिक संभावना है
प्रत्येक उपयोगकर्ता खाते के लिए लॉगिन अनुरोधों को कहते हैं, कहते हैं, 30 सेकंड के अलावा, रडार के नीचे घुसने के लिए
यहां, सबसे अच्छा अभ्यास विफल लॉगिन की संख्या, सिस्टम-वाइड लॉगिंग होगा , और आपकी साइट के खराब-लॉगिन आवृत्ति के एक औसत चलने का उपयोग करके ऊपरी सीमा के आधार के रूप में जो आप तब सभी उपयोगकर्ताओं पर थोपते हैं।
बहुत सार? मुझे rephrase दें:
मान लें कि आपकी साइट पर पिछले 3 महीनों में प्रतिदिन औसतन 120 खराब लॉगिन हुए हैं। उस (औसत रनिंग) का उपयोग करते हुए, आपका सिस्टम वैश्विक सीमा को 3 गुना निर्धारित कर सकता है - यानी। 24 घंटे की अवधि में 360 असफल प्रयास। फिर, यदि सभी खातों में विफल प्रयासों की कुल संख्या एक दिन के भीतर उस संख्या से अधिक हो जाती है (या इससे भी बेहतर, गणना थ्रेशोल्ड पर त्वरण और ट्रिगर की दर की निगरानी करें), यह सिस्टम-वाइड लॉगिन थ्रॉटलिंग को सक्रिय करता है - जिसका अर्थ है कि सभी उपयोगकर्ताओं के लिए कम देरी (अभी भी, कुकी लॉगिन और / या बैकअप कैप्चा लॉगिन के अपवाद के साथ)।
मैंने अधिक विवरण के साथ एक प्रश्न भी पोस्ट किया और वितरित ब्रूट बल हमलों को रोकने में मुश्किल पिटफ़ल से बचने के लिए बहुत अच्छी चर्चा की।
भाग आठ: दो-कारक प्रमाणीकरण और प्रमाणीकरण प्रदाता
क्रेडेंशियल से समझौता किया जा सकता है, चाहे कारनामों द्वारा, पासवर्ड नीचे लिखे और खोए हुए हों, चाबी के साथ लैपटॉप चोरी हो रहे हों, या उपयोगकर्ता फ़िशिंग साइटों में प्रवेश कर रहे हों। लॉगइन को दो-कारक प्रमाणीकरण के साथ आगे संरक्षित किया जा सकता है, जो एक फोन कॉल, एसएमएस संदेश, ऐप या डोंगल से प्राप्त एकल-उपयोग कोड जैसे आउट-ऑफ-बैंड कारकों का उपयोग करता है। कई प्रदाता दो-कारक प्रमाणीकरण सेवाएं प्रदान करते हैं।
प्रमाणीकरण को पूरी तरह से एकल-साइन-ऑन सेवा पर सौंपा जा सकता है, जहां एक और प्रदाता क्रेडेंशियल्स एकत्र करने का काम करता है। यह समस्या को एक विश्वसनीय तृतीय पक्ष तक पहुंचाता है। Google और Twitter दोनों मानक-आधारित SSO सेवाएँ प्रदान करते हैं, जबकि Facebook एक समान स्वामित्व समाधान प्रदान करता है।
MUST-READ कड़ियाँ वेब प्रमाणीकरण के बारे में
- OWASP गाइड टू ऑथेंटिकेशन / OWASP ऑथेंटिकेशन चीट शीट
- वेब पर क्लाइंट प्रमाणीकरण का डॉस और डॉनट्स (बहुत पठनीय एमआईटी शोध पत्र)
- HTTP कुकी
- फ़ॉलबैक प्रमाणीकरण के लिए व्यक्तिगत ज्ञान के प्रश्न: फेसबुक के युग में सुरक्षा प्रश्न (बहुत पठनीय बर्कले शोध पत्र)