security - थ्रॉटलिंग लॉगिन प्रयास




language-agnostic login (4)

(यह प्रिंसिपल एक भाषा-अज्ञेय प्रश्न है, हालांकि मेरे मामले में मैं एएसपी.नेट 3.5 का उपयोग कर रहा हूं)

मैं मानक asp.NET लॉगिन नियंत्रण का उपयोग कर रहा हूं और निम्न असफल लॉगिन प्रयास थ्रॉटलिंग तर्क को लागू करना चाहता हूं।

  • OnLoginError ईवेंट को संभाल और सत्र में , विफल लॉगिन प्रयासों की गिनती
  • जब यह गिनती [कुछ विन्यास योग्य मूल्य] हो जाती है, तो मूलभूत आईपी पते से या उस उपयोगकर्ता / उन उपयोगकर्ताओं के लिए 1 घंटे के लिए आगे लॉगिन प्रयास ब्लॉक करें

क्या यह ध्वनि एक समझदार दृष्टिकोण की तरह है? क्या मैं एक स्पष्ट माध्यम से गायब हूं जिसके द्वारा ऐसे चेक को नजरअंदाज किया जा सकता है?

नोट: एएसपी.एन.नेट सत्र कुकी के उपयोग से उपयोगकर्ता के ब्राउज़र से जुड़ा हुआ है

संपादित करें

यह एक प्रशासनिक स्थल के लिए है जिसका उपयोग केवल यूके और भारत से किया जा रहा है


आखिरी चीज जो आप करना चाहते हैं डेटाबेस में सभी असफल लॉगिन प्रयासों को संचयित कर रही है, जो अच्छी तरह से काम करेगी लेकिन यह आपके डेटाबेस सर्वर को नीचे लाने के लिए डीडीओएस हमलों के लिए बहुत तुच्छ बनाता है।

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

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

सीमित संख्या में आईपी पते वाले देशों के आगंतुकों के साथ मुद्दों को रोकने की कुंजी, आपके सीमा को बहुत सख्त नहीं बनाना है; यदि आप कुछ सेकंड में कई प्रयास नहीं प्राप्त करते हैं, तो संभवत: आपको पुनः होने की चिंता नहीं है पटकथा जबरदस्ती यदि आप अन्य उपयोगकर्ता के पासवर्ड को मैन्युअल रूप से जानने की कोशिश कर रहे लोगों से अधिक चिंतित हैं, तो आप उपयोगकर्ता नाम के बाद के असफल लॉगिन प्रयासों के लिए व्यापक सीमा निर्धारित कर सकते हैं।

एक अन्य सुझाव, जो आपके प्रश्न का उत्तर नहीं देता, लेकिन कुछ हद तक संबंधित है, आपके एंड-यूज़र पर पासवर्ड की सुरक्षा के एक निश्चित स्तर को लागू करना है। मैं एक मिश्रित-मामले, कम-से-कम एक्स अक्षरों, गैर-शब्दकोश, इत्यादि आदि की आवश्यकता के साथ पानी में नहीं जाऊंगा, क्योंकि आप बग लोगों को ज्यादा पसंद नहीं करना चाहते हैं, जब उन्होंने अभी तक साइन अप नहीं किया है, लेकिन बस अपने उपयोगकर्ता नाम का उपयोग करने से लोगों को रोकना, क्योंकि उनके पासवर्ड को आपकी सेवा और उपयोगकर्ताओं को सबसे ज्यादा नासमझी के खिलाफ बचाने के लिए बहुत लंबा रास्ता तय करना चाहिए - अनुमान लगाते हैं कि वे उन्हें क्रूरता क्यों कहते हैं;) - हमले


मुझे लगता है कि आपको सत्र के बाहर गिनती रखने की ज़रूरत होगी - अन्यथा मामूली हमले प्रत्येक लॉगिन प्रयास से पहले कुकीज़ को साफ़ करना है

अन्यथा एक गिनती और लॉक-आउट उचित है - हालांकि एक आसान समाधान हो सकता है कि प्रत्येक लॉगिन विफलता के बीच दोहरीकरण-समय समाप्त हो। यानी पहला लॉगिन प्रयास के बाद 2 सेकंड, अगले 4 सेकंड के बाद, 8 आदि।

आप समयावधि को टाइमआउट अवधि में लॉग इन करने से इनकार करते हैं - भले ही उपयोगकर्ता सही पासवर्ड देता है - केवल मानव पठनीय पाठ के साथ उत्तर दें कि खाता लॉक-आउट है

इसके अलावा एक ही आईपी / अलग उपयोगकर्ता और उसी उपयोगकर्ता / अलग आईपी के लिए मॉनिटर करें


स्वीकार किए जाते हैं उत्तर, जो लगातार लॉगिन प्रयासों में देरी को बढ़ाता है, एएसपी.नेट में कार्यान्वित किए जाने के आधार पर बहुत खराब प्रदर्शन कर सकता है। ASP.NET सेवा अनुरोधों के लिए एक थ्रेड पूल का उपयोग करता है एक बार थ्रेड पूल समाप्त होने पर, एक थ्रेड उपलब्ध होने तक आवक अनुरोध कतारबद्ध होंगे।

यदि आप थ्रेड का उपयोग करके देरी डालें। नींद (एन), तो आप देरी की अवधि के लिए एक एएसपी.नेट धागा पूल धागा बांधेंगे। यह थ्रेड अब अन्य अनुरोधों को निष्पादित करने के लिए उपलब्ध नहीं होगा। इस परिदृश्य में एक साधारण डॉस शैली का हमला आपके लॉगिन फॉर्म को जमा करना होगा। अंततः अनुरोध निष्पादित करने के लिए उपलब्ध प्रत्येक धागा सो जाएगा (और समय की अवधि बढ़ाने के लिए)

एकमात्र तरीका है कि मैं इस विलंब तंत्र को ठीक से लागू करने का विचार कर सकता हूं एक अतुल्यकालिक HTTP हैंडलर का उपयोग करना है Walkthrough देखें : एक अतुल्यकालिक HTTP हैंडलर बनाना कार्यान्वयन की आवश्यकता होगी:

  1. आरंभप्रक्रिया अनुरोध के दौरान प्रमाणीकरण का प्रयास करें और विफलता पर देरी का निर्धारण करें
  2. IAsyncResult को एक प्रतीक्षाहैंडल को उजागर करें जो देरी के बाद ट्रिगर किया जाएगा
  3. सुनिश्चित करें कि एंड्रॉप्रक्रिया अनुरोध में WaitHandle को ट्रिगर किया गया है (या तब तक ब्लॉक हो)

जेफ एटवुड ने एक और दृष्टिकोण का उल्लेख किया: कई प्रयासों के बाद एक खाते को लॉक करने के बजाय, एक और लॉगिन प्रयास की अनुमति होने तक समय बढ़ाएं:

1st failed login    no delay
2nd failed login    2 sec delay
3rd failed login    4 sec delay
4th failed login    8 sec delay
5th failed login    16 sec delay

इससे जोखिम को कम हो जाएगा कि सेवा के हमलों के इनकार करने के लिए इस सुरक्षा उपाय का दुरुपयोग किया जा सकता है

Http://www.codinghorror.com/blog/archives/001206.html देखें





throttling