सबसे अच्छा वितरित ब्रूट फोर्स प्रतिवाद क्या है?


151

सबसे पहले, एक छोटी सी पृष्ठभूमि: यह कोई रहस्य नहीं है कि मैं CodeIgniter के लिए एक ऑर्ट + + सिस्टम लागू कर रहा हूं, और अब तक मैं जीत रहा हूं (बोलने के लिए)। लेकिन मैं एक बहुत ही गैर-तुच्छ चुनौती में भागता हूं (एक जो कि अधिकांश सामान्य पुस्तकालयों को पूरी तरह से याद आती है, लेकिन मैं इसे ठीक से संभालने पर जोर देता हूं): बड़े पैमाने पर, वितरित, चर-उपयोगकर्ता-नाम-वार बल के हमलों के साथ समझदारी से कैसे निपटें ।

मैं सभी सामान्य चाल जानता हूं:

  1. IP / होस्ट के अनुसार विफल प्रयासों की # सीमा और अपराधियों की पहुँच से इनकार करना (जैसे Fail2Ban) - जो अब काम नहीं करते क्योंकि botnets होशियार हो गए हैं
  2. ज्ञात 'खराब' IP / होस्ट (जैसे DenyHosts) की एक ब्लैकलिस्ट के साथ उपरोक्त संयोजन - जो # 1 के लिए गिरने वाले बॉटनेट पर निर्भर करता है, जो वे तेजी से नहीं करते हैं
  3. आईपी ​​/ होस्ट श्वेतसूची पारंपरिक वस्तु के साथ संयुक्त (गतिशील आईपी उपयोगकर्ताओं के साथ व्यर्थ और अधिकांश वेब साइटों पर उच्च मंथन)
  4. एन मिनट / घंटे की अवधि में विफल प्रयासों के # पर एक सीमा निर्धारण सीमा निर्धारित करना , और थ्रॉटलिंग (निलंबित करना) उसके बाद के सभी लॉगिन प्रयास मिनट / घंटे की संख्या के लिए (इस समस्या के साथ कि आप पर हमला करना बॉटनेट बच्चे का खेल बन जाता है)
  5. अनिवार्य डिजिटल हस्ताक्षर (सार्वजनिक कुंजी प्रमाण पत्र) या आरएसए हार्डवेयर सभी उपयोगकर्ताओं के लिए कोई लॉगिन / पासवर्ड विकल्प के साथ टोकन (प्रश्न के बिना एक चट्टान-ठोस समाधान, लेकिन केवल बंद, समर्पित सेवाओं के लिए व्यावहारिक)
  6. लागू की गई अल्ट्रा-स्ट्रॉन्ग पासवर्ड योजनाएं (उदाहरण के लिए> प्रतीकों के साथ 25 बकवास पात्र - फिर से, आकस्मिक उपयोगकर्ताओं के लिए अव्यावहारिक)
  7. और अंत में, CAPTCHAs (जो ज्यादातर मामलों में काम कर सकता है, लेकिन उपयोगकर्ताओं के लिए कष्टप्रद है और एक निर्धारित, संसाधन हमलावर के खिलाफ लगभग बेकार है )

अब, ये केवल सैद्धांतिक रूप से व्यावहारिक विचार हैं। कर रहे हैं बहुत सारे बकवास विचारों कि (तुच्छ Dos हमले करने के लिए जैसे) खुली साइट उड़ाने की। मैं जो चाहता हूं वह कुछ बेहतर है। और बेहतर तरीके से, मेरा मतलब है:

  • इसे डीओएस और ब्रूट-फोर्स हमलों के खिलाफ सुरक्षित (+) किया जाना है, और किसी भी नई कमजोरियों को पेश नहीं करना है जो रडार के तहत संचालन जारी रखने के लिए थोड़ा स्निकियर बॉट की अनुमति दे सकती है

  • इसे स्वचालित करना होगा। यदि इसे प्रत्येक लॉगिन को सत्यापित करने या संदिग्ध गतिविधि की निगरानी के लिए एक मानव ऑपरेटर की आवश्यकता होती है, तो यह वास्तविक दुनिया के परिदृश्य में काम करने वाला नहीं है

  • यह मुख्यधारा के वेब उपयोग के लिए संभव है (यानी उच्च मंथन, उच्च मात्रा, और खुले पंजीकरण जो गैर-प्रोग्रामर द्वारा किए जा सकते हैं)

  • यह उपयोगकर्ता के अनुभव को उस बिंदु तक नहीं पहुंचा सकता है जहां आकस्मिक उपयोगकर्ता नाराज या निराश हो जाएंगे (और संभवतः साइट को छोड़ दें)

  • इसमें बिल्ली के बच्चे शामिल नहीं हो सकते, जब तक कि वे वास्तव में सुरक्षित बिल्ली के बच्चे न हों

(+) 'सुरक्षित' से मेरा अभिप्राय कम से कम उतना ही सुरक्षित है जितना कि किसी उपयोक्ता की अपने पासवर्ड को गुप्त रखने की क्षमता

तो - चलो इसे सुनते हैं! आप इसे कैसे करेंगे ? क्या आप एक सर्वोत्तम-प्रथा के बारे में जानते हैं, जिसका मैंने उल्लेख नहीं किया है (ओह कृपया आप कहते हैं)? मेरा मानना ​​है कि मुझे अपना खुद का एक विचार है (3 और 4 से विचारों का संयोजन), लेकिन मैं सच्चे विशेषज्ञों को खुद को शर्मिंदा करने से पहले बोलने दूंगा ;-)

जवाबों:


68

सब ठीक है, पर्याप्त स्टालिंग; यहाँ मैं अब तक के साथ आया हूँ

(क्षमा करें, लंबी पोस्ट आगे। बहादुर बनो, दोस्त, यात्रा इसके लायक होगी)

मूल पद से 3 और 4 के तरीकों को मिलाकर एक तरह की 'फजी' या गतिशील श्वेतसूची, और फिर - और यहाँ की चाल है - गैर-श्वेतसूची वाले आईपी को अवरुद्ध नहीं करना, बस उन्हें नरक और वापस थ्रोटलिंग करना

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

हमले के परिदृश्य के बारे में अनुमान

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

इसलिए हमें कुछ और करने की जरूरत है।

प्रतिवाद का पहला भाग: श्वेतसूची

हम काफी हद तक निश्चित हो सकते हैं, यह है कि हमलावर हमारे उपयोगकर्ताओं (+) के कई हजार के आईपी पते का पता लगाने और गतिशील रूप से खराब करने में सक्षम नहीं है। जो श्वेत प्रदर को संभव बनाता है। दूसरे शब्दों में: प्रत्येक उपयोगकर्ता के लिए, हम उस (हैशेड) आईपी की एक सूची संग्रहीत करते हैं जहां से उपयोगकर्ता ने पहले (हाल ही में) लॉग इन किया है।

इस प्रकार, हमारी श्वेतसूची योजना एक लॉक 'फ्रंट डोर' के रूप में कार्य करेगी, जहां उपयोगकर्ता को लॉग इन करने के लिए अपने मान्यता प्राप्त 'अच्छे' आईपी में से एक से जुड़ा होना चाहिए। इस 'सामने के दरवाजे' पर एक क्रूर बल हमला व्यावहारिक रूप से असंभव (+) होगा।

(+) जब तक हमलावर 'सर्वर' का मालिक नहीं होता, तब तक हमारे सभी उपयोगकर्ता बॉक्स, या स्वयं कनेक्शन - और उन मामलों में, अब हमारे पास 'प्रमाणीकरण' समस्या नहीं है, हमारे पास एक वास्तविक फ्रैंचाइज़ी आकार का पुल है -प्लग फ्यूबर की स्थिति

प्रतिवाद का दूसरा भाग: गैर - मान्यता प्राप्त आईपी के सिस्टम-वाइड थ्रॉटलिंग

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

मेरी योजना में, यह एक की स्थापना द्वारा हासिल की है बहुत से अधिक अननुमोदित आईपी से विफल लॉगिन प्रयास की प्रतिबंधात्मक अधिकतम संख्या, कहते हैं, एक 3 घंटे की अवधि, (यह सेवा के प्रकार के आधार कम या लंबी अवधि का उपयोग करने के लिए समझदार हो सकता है) और उस प्रतिबंध को वैश्विक बनाना , अर्थात। सभी उपयोगकर्ता खातों के लिए।

यहां तक ​​कि एक धीमी (प्रयासों के बीच 1-2 मिनट) क्रूर बल का पता लगाया जाएगा और इस पद्धति का उपयोग करके जल्दी और प्रभावी रूप से विफल किया जाएगा। बेशक, एक बहुत ही धीमी गति से चलने वाली बल बल अभी भी किसी का ध्यान नहीं जा सकता है, लेकिन बहुत धीमी गति से जानवर बल के हमले के बहुत उद्देश्य को पराजित करता है।

इस थ्रॉटलिंग मैकेनिज्म से मैं जो उम्मीद कर रहा हूं, वह यह है कि अगर अधिकतम सीमा पूरी हो जाए, तो हमारा 'कैट डोर' स्लैम कुछ समय के लिए बंद हो जाता है, लेकिन हमारा फ्रंट डोर सामान्य तरीकों से कनेक्ट करने वाले वैध उपयोगकर्ताओं के लिए खुला रहता है:

  • या तो उनके किसी मान्यता प्राप्त आईपी से जुड़कर
  • या लगातार लॉगिन कुकी का उपयोग करके (कहीं से भी)

केवल वैध उपयोगकर्ता जो किसी हमले के दौरान प्रभावित होंगे - यानी। जबकि थ्रॉटलिंग सक्रिय हो गया था - बिना किसी निरंतर स्थान के लॉग इन कुकीज़ वाले उपयोगकर्ता होंगे जो किसी अज्ञात स्थान से या डायनामिक आईपी से लॉग इन कर रहे थे। उन उपयोगकर्ताओं को तब तक लॉगिन करने में असमर्थ होगा जब तक कि थ्रॉटलिंग बंद नहीं हो जाती (जो संभावित रूप से थोड़ी देर लग सकती है, अगर हमलावर ने थ्रॉटलिंग के बावजूद अपने बॉटनेट को चालू रखा)।

उपयोगकर्ताओं के इस छोटे उपसमूह को अन्यथा सील बिल्ली के दरवाजे के माध्यम से निचोड़ने की अनुमति देने के लिए, भले ही बॉट अभी भी इस पर दूर से हथौड़ा मार रहे थे, मैं कैप्चा के साथ एक 'बैकअप' लॉगिन फ़ॉर्म को नियुक्त करूंगा। ताकि, जब आप "क्षमा करें, लेकिन आप इस आईपी पते से पल में लॉग इन न कर सकें" संदेश प्रदर्शित करते हैं, तो एक लिंक शामिल करें जो कहता है कि " सुरक्षित बैकअप लॉगिन - HUMANS ONLY ( bots: no lie ) "। एक तरफ मजाक करें, जब वे उस लिंक पर क्लिक करते हैं, तो उन्हें साइट-थ्रॉटलिंग को दरकिनार करने वाले reCAPTCHA-प्रमाणीकृत लॉगिन फ़ॉर्म दें। इस तरह, यदि वे मानव हैं और सही लॉगिन + पासवर्ड जानते हैं (और कैप्चा पढ़ने में सक्षम हैं), तो उन्हें कभी भी सेवा से वंचित नहीं किया जाएगा , भले ही वे एक अज्ञात होस्ट से कनेक्ट हो रहे हों और ऑटोलॉगिन कुकी का उपयोग न कर रहे हों।

ओह, और सिर्फ स्पष्ट करने के लिए: चूंकि मैं CAPTCHAs को आम तौर पर बुरा मानता हूं, इसलिए 'बैकअप' लॉगिन विकल्प केवल तब दिखाई देगा जब थ्रॉटलिंग सक्रिय था

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

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

(इसके अलावा, ध्यान दें कि अगर हमले का वर्णन मेरे द्वारा बताए गए खराब वितरित संस्करण की तुलना में हमले से कम नहीं है, तो ऐसा कुछ नहीं है। यदि हमला केवल कुछ आईपी से हो रहा है या केवल कुछ उपयोगकर्ता नामों को मार रहा है, तो यह बहुत पहले ही विफल हो जाएगा। और कोई साइट-व्यापी परिणाम नहीं)


इसलिए, यह प्रतिवाद है जिसे मैं अपने ऑर्टिकल लाइब्रेरी में लागू करूंगा, एक बार मुझे यकीन हो जाएगा कि यह ध्वनि है और यह बहुत सरल समाधान नहीं है जिसे मैंने याद किया है। तथ्य यह है कि, सुरक्षा में चीजों को गलत करने के बहुत सारे सूक्ष्म तरीके हैं, और मैं गलत धारणाएं या निराशाजनक दोषपूर्ण तर्क देने से ऊपर नहीं हूं। तो कृपया, किसी भी और सभी प्रतिक्रिया, आलोचना और सुधार, सूक्ष्मता आदि की बहुत सराहना की जाती है।


1
हो सकता है कि आप प्रत्येक उपयोगकर्ता के लिए एक 'विशेष' पासवर्ड उत्पन्न कर सकते थे जो लॉक-डाउन मोड (यदि वे नए आईपी आदि से कनेक्ट कर रहे हैं) में उपयोग कर सकते हैं, तो वह विशेष पासवर्ड पर्याप्त रूप से जटिल हो सकता है जो जानवर-बल के लिए संभव नहीं है?
डगलस लीडर

1
यह काम कर सकता है, लेकिन केवल अगर उपयोगकर्ता उन पासवर्डों को याद करते हैं, भले ही उन्होंने उन्हें पहले इस्तेमाल नहीं किया हो (इन प्रकार के हमले आम नहीं हैं, और उनके नमक के लायक कोई भी बोटमास्टर थ्रोट होने के बाद लंबे समय तक चलने को परेशान नहीं करेगा)। जोखिम बहुत महान है कि वे बस याद नहीं कर सकते।
जेन्स रोलैंड २

1
हालाँकि, एक विधि जो निश्चित रूप से काम कर सकती है, वह है कि उन उपयोगकर्ताओं के लिए 'मुझे लॉकडाउन कोड भेजें' लिंक प्रदान करें, जिससे उन्हें एक एकल-उपयोग, उपयोगकर्ता-विशिष्ट टोकन युक्त एक ईमेल प्राप्त करने की अनुमति मिलती है जो उन्हें सुविधा को दरकिनार करके लॉगिन करने की अनुमति देता है थ्रॉटलिंग।
जेन्स रोलैंड २

1
@Abtin: अच्छा विचार, सिवाय इसके कि 'हथियारों की दौड़ में प्रवेश' होगा - यानी। शब्दकोश हमलों के लिए पासवर्ड सूची बनाने वाले लोगों के साथ who कौन किसे बाहरी व्यक्ति ’कह सकता है। मुझे लगता है कि एक बेहतर तरीका एक मजबूत पासवर्ड नीति को लागू करने के लिए किया जाएगा तो वहाँ रहे हैं कोई कमज़ोर पासवर्ड
जेन्स रोलाण्ड

1
@OrestisP .: आप वितरित हमले के बिंदु को याद कर रहे हैं - प्रत्येक आईपी से अवैध प्रयासों का # न्यूनतम है, इसलिए प्रति-आईपी अवरुद्ध काम कर सकता है। इसके अलावा, सवाल विशेष रूप से एक स्वचालित ब्रूट बल हमले का वर्णन करता है, इसलिए 1) हमलावर मानव नहीं है, बल्कि ज़ोंबी मशीनों का बॉटनेट (जो कैप्चा लॉगिन का उपयोग नहीं कर सकता है); और 2) हमले की क्रूरता की प्रकृति को सफलता सुनिश्चित करने के लिए बहुत अधिक संख्या में लॉगिन प्रयासों की आवश्यकता होती है, जिसका अर्थ है कि पसीने की दुकान के लिए कैप्चा हल करने की खेती कहीं संभव नहीं है (यदि संभव हो तो हमलावर अच्छी तरह से वित्त पोषित और निर्धारित होता है) बस)।
जेन्स रोलैंड

17

कुछ सरल कदम:

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

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

सबसे सरल चीजों में से एक आप लोगों को बता सकते हैं जब किसी ने अपने खाते में लॉग इन करने की कोशिश की, और उन्हें इस घटना की रिपोर्ट करने के लिए एक लिंक दे, अगर यह उन्हें नहीं था। जब वे लॉग इन करते हैं तो एक सरल संदेश "किसी ने आपके खाते में 4:20 AM बुधवार को ब्ला ब्ला में लॉग इन करने की कोशिश की। यदि यह आप नहीं थे तो यहां क्लिक करें।" यह आपको हमलों पर कुछ आंकड़े रखने देता है। यदि आप देखते हैं कि अचानक धोखाधड़ी में वृद्धि हुई है, तो आप निगरानी और सुरक्षा उपायों को आगे बढ़ा सकते हैं।


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

'लास्ट अटेस्टेड लॉगइन टाइम' के संबंध में, यह पावर यूजर्स के लिए एक अच्छी रणनीति है (जिसके कारण मैं शर्त लगाता हूं कि एसओ ऐसा क्यों करता है), लेकिन इसकी दो कमजोरियां हैं: (ए) यह घुसपैठ की समस्या का समाधान नहीं करता है, यह केवल रिपोर्ट कि ऐसा हुआ हो सकता है, और (बी), अधिकांश उपयोगकर्ता को अभी याद नहीं है / देखभाल
जेन्स रोलैंड

1
यूप, हनीपोट और उपयोगकर्ता रिपोर्टिंग जानकारी एकत्र करने के बारे में अधिक हैं। वे कुछ मूल्यवान मैट्रिक्स प्रदान कर सकते हैं ताकि आपको पता चल सके कि क्या / जब एक धीमी गति से बल हमला हो रहा है।
patros

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

11

अगर मैं ब्रूट फोर्स के एमओ को ठीक से समझता हूं, तो एक या एक से अधिक उपयोगकर्ता नामों को लगातार करने की कोशिश की जाती है।

दो सुझाव हैं जो मुझे नहीं लगता कि मैंने अभी तक यहाँ देखा है:

  • मैंने हमेशा सोचा था कि प्रत्येक उपयोगकर्ता के लिए गलत लॉगिन के बाद मानक अभ्यास में थोड़ी देरी (एक या दूसरी) होनी थी। यह क्रूरता को रोकता है, लेकिन मुझे नहीं पता कि कब तक एक सेकंड में एक डिक्शनरी बे पर अटैक करेगी। (१०,००० शब्दों का शब्दकोश == १०,००० सेकंड == लगभग ३ घंटे। हम्म। बहुत अच्छा नहीं।)
  • साइट-वाइड धीमा होने के बजाय, उपयोगकर्ता-नाम थ्रॉटल क्यों नहीं। प्रत्येक गलत प्रयास (एक सीमा तक, मुझे लगता है कि वास्तविक उपयोगकर्ता अभी भी लॉगिन कर सकता है) से थ्रॉटल तेजी से कठोर हो जाता है

संपादित करें : एक उपयोगकर्ता नाम थ्रॉटल पर टिप्पणियों के जवाब में: यह हमले के स्रोत की परवाह किए बिना एक उपयोगकर्ता-विशिष्ट थ्रॉटल है।

यदि उपयोगकर्ता नाम को कुचला जाता है, तो यहां तक ​​कि एक समन्वित उपयोगकर्ता नाम हमला (मल्टी आईपी, आईपी प्रति एकल अनुमान, एक ही उपयोगकर्ता नाम) पकड़ा जाएगा। व्यक्तिगत उपयोगकर्ता नाम थ्रॉटल द्वारा सुरक्षित हैं, भले ही हमलावर किसी अन्य उपयोगकर्ता की कोशिश करने के लिए स्वतंत्र हों / टाइमआउट के दौरान पास हो।

हमलावरों के दृष्टिकोण से, टाइमआउट के दौरान आप 100 पासवर्ड पर पहली बार अनुमान लगाने में सक्षम हो सकते हैं, और जल्दी से प्रति खाते में एक गलत पासवर्ड की खोज कर सकते हैं। आप केवल एक ही समय अवधि के लिए 50 सेकंड का अनुमान लगाने में सक्षम हो सकते हैं।

उपयोगकर्ता खाते के दृष्टिकोण से, यह अभी भी पासवर्ड को तोड़ने के लिए अनुमानों की एक ही औसत संख्या लेता है, भले ही अनुमान कई स्रोतों से आ रहे हों।

हमलावरों के लिए, कम से कम, यह 100 खातों को तोड़ने का एक ही प्रयास होगा क्योंकि यह 1 खाता होगा, लेकिन जब से आप किसी साइट पर व्यापक रूप से थ्रॉटलिंग नहीं कर रहे हैं, तो आप थ्रॉटल को बहुत तेज़ी से रैंप कर सकते हैं।

अतिरिक्त शोधन:

  • IP का पता लगाएं जो कई खातों का अनुमान लगा रहे हैं - 408 अनुरोध टाइमआउट
  • IP का पता लगाएं जो एक ही खाते का अनुमान लगा रहे हैं - अनुमानों की एक बड़ी (100) संख्या के बाद 408 अनुरोध टाइमआउट।

UI विचार (इस संदर्भ में उपयुक्त नहीं हो सकते हैं), जो उपरोक्त को भी परिष्कृत कर सकता है:

  • यदि आप पासवर्ड सेटिंग के नियंत्रण में हैं, तो उपयोगकर्ता को यह दिखाना कि उनका पासवर्ड कितना मजबूत है, उन्हें बेहतर तरीके से चुनने के लिए प्रोत्साहित करता है।
  • यदि आप एक उपयोगकर्ता नाम के अनुमानों की एक छोटी (10 की संख्या) के बाद लॉगिन पृष्ठ के नियंत्रण में हैं, तो कैप्चा की पेशकश करें।

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

2
संपादन के लिए धन्यवाद, jamesh अब हम बात कर रहे हैं। मैं 408 के विचार से प्यार करता हूं। हालांकि, सख्त उपयोगकर्ता नामकरण के साथ, कई उपयोगकर्ताओं पर हमला करने वाला एक बॉटनेट अभी भी काम करेगा। और एक उपयोगकर्ता के खिलाफ शीर्ष 5000 पासवर्ड की जाँच करना कम से कम 5000 उपयोगकर्ताओं पर शीर्ष 1 पासवर्ड की जाँच करने में सफल होने की संभावना है
जेन्स रोलैंड

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

2
दरअसल, मुझे अपने पिछले बयान पर गणित को फिर से जांचना पड़ सकता है। एक बार जब आप शीर्ष एन सबसे आम पासवर्ड से इनकार कर देते हैं, तो उपयोगकर्ता के पासवर्ड # (एन + 1) होने की संभावना काफी अंतर को भी बढ़ा सकती है। हालाँकि यह वक्र संभवत: पर्याप्त है कि ऐसा न हो
जेन्स रोलैंड

9

प्रमाणीकरण के तीन कारक हैं:

  1. एक उपयोगकर्ता कुछ जानता है (यानी, एक पासवर्ड)
  2. एक उपयोगकर्ता के पास कुछ है (यानी, एक कुंजी फ़ॉब)
  3. एक उपयोगकर्ता है कुछ (यानी, रेटिना स्कैन)

आमतौर पर, वेबसाइटें केवल # 1 नीति लागू करती हैं। यहां तक ​​कि अधिकांश बैंक केवल नीति लागू करते हैं। वे इसके बजाय दो-कारक प्रमाणीकरण के लिए "कुछ और जानते हैं" पर भरोसा करते हैं। (IE: एक उपयोगकर्ता अपने पासवर्ड और अपनी मां के नाम को जानता है।) यदि आप सक्षम हैं, तो प्रमाणीकरण के दूसरे कारक में जोड़ने का एक तरीका बहुत मुश्किल नहीं है।

यदि आप यादृच्छिकता के लगभग 256 वर्णों को उत्पन्न कर सकते हैं, तो आप संरचना कर सकते हैं कि 16 × 16 तालिका में, और फिर उपयोगकर्ता से सेल ए -14 की तालिका में आपको मूल्य देने के लिए कहें, उदाहरण के लिए। जब कोई उपयोगकर्ता अपना पासवर्ड साइन अप या बदलता है, तो उन्हें तालिका दें और उन्हें इसे प्रिंट करने और इसे बचाने के लिए कहें।

उस दृष्टिकोण के साथ कठिनाई यह है कि जब कोई उपयोगकर्ता अपना पासवर्ड भूल जाता है, जैसा कि वे करेंगे, तो आप मानक "इस प्रश्न का उत्तर और एक नया पासवर्ड डाल सकते हैं" की पेशकश नहीं कर सकते हैं, क्योंकि यह जानवर-बल के लिए भी असुरक्षित है। इसके अलावा, आप इसे रीसेट नहीं कर सकते हैं और उन्हें एक नया ईमेल कर सकते हैं, क्योंकि उनके ईमेल के साथ भी समझौता किया जा सकता है। (देखें: Makeuseof.com और उनका चुराया हुआ डोमेन।)

एक अन्य विचार (जिसमें बिल्ली के बच्चे शामिल हैं) है, जो BOA SiteKey कहता है (मेरा मानना ​​है कि उन्होंने नाम को ट्रेडमार्क किया है)। संक्षेप में, आपके पास उपयोगकर्ता है जब वे पंजीकरण करते हैं तो एक छवि अपलोड करते हैं, और जब वे लॉगिन करने का प्रयास करते हैं, तो उन्हें अपनी छवि को 8 या 15 (या अधिक) यादृच्छिक लोगों में से चुनने के लिए कहें। इसलिए, यदि कोई उपयोगकर्ता अपने बिल्ली के बच्चे की तस्वीर अपलोड करता है, तो सैद्धांतिक रूप से वे ही जानते हैं कि कौन सी तस्वीर बाकी सभी बिल्ली के बच्चे (या फूल या जो भी) की है। इस दृष्टिकोण का एकमात्र वास्तविक व्यवहार्य है, मध्य-हमला।

एक और विचार (कोई बिल्ली का बच्चा नहीं है), आईपी को ट्रैक करना है जो उपयोगकर्ता सिस्टम तक पहुंचते हैं, और उन्हें अतिरिक्त प्रमाणीकरण (कैप्चा, किटी चुनें, इस तालिका से एक कुंजी चुनें) की आवश्यकता होती है जब वे एक पते से लॉग इन करते हैं 'पहले। इसके अलावा, GMail के समान, उपयोगकर्ता को यह देखने की अनुमति दें कि उन्होंने हाल ही में कहां से लॉग इन किया है।

संपादित करें, नया विचार:

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

इस मामले में कुंजी, सबसे महत्वपूर्ण पहलू है। उन्हें उत्पन्न करने का एक सामान्य तरीका उपयोगकर्ता के डेटा, उनके आईपी और इसे प्रस्तुत करने के समय का कुछ संयोजन है।


मुझे यकीन है कि इसमें और भी बहुत कुछ है, लेकिन अगर साइटके विचार बिल्कुल वही है जो आपने उल्लेख किया है, एक हमलावर को MITM होना जरूरी नहीं है, वह उस उपयोगकर्ता के लिए दो या तीन लॉगिन प्रयास चला सकता है, और उस छवि को चुन सकता है यादृच्छिक लोगों के बीच दोहरा रहा है। भले ही 8-15 चित्रों का सेट उपयोगकर्ता X के लिए स्थिर हो,
जेन्स रोलैंड

(जारी) शायद सही को चुनना बहुत मुश्किल नहीं होगा, क्योंकि लोग अनुमानित प्रकार के चित्र (यहां तक ​​कि अपने स्वयं के फ़्लिकर एल्बम से छवियां लेने के लिए जाते हैं!)
जेन्स रोलैंड २

2
हाँ, मैं उस बिंदु के बारे में सोचता हूँ जो आपने कल रात घर आने के बाद उठाया था। मुझे लगता है कि इसे ठीक करने का तरीका है: जब कोई उपयोगकर्ता लॉग इन करता है और एक सही पासवर्ड प्रदान करता है, तो उनकी छवि और कुछ अन्य यादृच्छिक संख्याएं प्रदर्शित करें। जब वे सही पासवर्ड प्रदान नहीं करते हैं, तो
davethegr8

1
छवियाँ + 1, जिसमें अपनी छवि शामिल हो सकती है या नहीं। इसके अलावा, मेरे पास एक और विचार था, पोस्ट में संपादित देखें। लेकिन हाँ, ये विचार थोड़े कठिन / जटिल हैं।
davethegr8

1
वह "काम" कर सकता था, लेकिन मुझे कुछ समस्याएं दिखाई देती हैं। यदि फ़ोटो स्वामी छवि हटाता है तो क्या होता है? आप यह कैसे सुनिश्चित कर सकते हैं कि आपके द्वारा लौटाए गए चित्र आपके उपयोगकर्ता के लिए आक्रामक नहीं होंगे? एक उपयोगकर्ता को कैसे याद है कि उन्होंने कहाँ क्लिक किया है? (यह भूलना मुश्किल लगता है)
davethegr8

7

मैंने पहले भी इसी तरह के एक प्रश्न का उत्तर दिया था कि मैं PHP में उपयोगकर्ता लॉगिन प्रयासों को कैसे समाप्त कर सकता हूं । मैं यहां प्रस्तावित समाधान दोहराऊंगा क्योंकि मेरा मानना ​​है कि आप में से कई लोग इसे वास्तविक वास्तविक कोड देखने के लिए सूचनात्मक और उपयोगी पाएंगे। कृपया ध्यान में रखें कि आजकल कैप्चा बस्टरों में उपयोग किए जा रहे सटीक एल्गोरिदम के कारण कैप्चा का उपयोग करना सबसे अच्छा समाधान नहीं हो सकता है:

आप बस एक आईपी या उपयोगकर्ता नाम के लिए थ्रॉटलिंग का पीछा करके DoS हमलों को रोक नहीं सकते हैं। नरक, आप वास्तव में इस पद्धति का उपयोग करके रैपिड-फायर लॉगिन प्रयासों को भी नहीं रोक सकते।

क्यों? क्योंकि हमला आपके थ्रॉटलिंग प्रयासों को दरकिनार करने के लिए कई आईपी और उपयोगकर्ता खातों को जोड़ सकता है।

मैंने कहीं और पोस्ट किया है कि आदर्श रूप से आपको साइट पर सभी विफल लॉगिन प्रयासों को ट्रैक करना चाहिए और उन्हें टाइमस्टैम्प में जोड़ना चाहिए, शायद:

CREATE TABLE failed_logins(
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(16) NOT NULL,
    ip_address INT(11) UNSIGNED NOT NULL,
    attempted DATETIME NOT NULL
) engine=InnoDB charset=UTF8;

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


10 failed attempts = 1 second
20 failed attempts = 2 seconds
30 failed attempts = reCaptcha

किसी निश्चित समय के लिए असफल लॉगिन की संख्या को खोजने के लिए हर असफल लॉगिन प्रयास पर तालिका को छोड़ें, 15 मिनट का कहना है:


SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute);

यदि दिए गए समय की अवधि में प्रयासों की संख्या आपकी सीमा से अधिक है, तो या तो थ्रॉटलिंग लागू करें या सभी उपयोगकर्ता को कैप्चा (यानी reCaptcha) का उपयोग करने के लिए मजबूर करें, जब तक कि दिए गए समय अवधि में विफल प्रयासों की संख्या सीमा से कम न हो।

// array of throttling
$throttle = array(10 => 1, 20 => 2, 30 => 'recaptcha');

// assume query result of $sql is stored in $row
$sql = 'SELECT MAX(attempted) AS attempted FROM failed_logins';
$latest_attempt = (int) date('U', strtotime($row['attempted']));
// get the number of failed attempts
$sql = 'SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute)';
// assume the number of failed attempts was stored in $failed_attempts
krsort($throttle);
foreach ($throttle as $attempts => $delay) {
    if ($failed_attempts > $attempts) {
        // we need to throttle based on delay
        if (is_numeric($delay)) {
            $remaining_delay = time() - $latest_attempt - $delay;
            // output remaining delay
            echo 'You must wait ' . $remaining_delay . ' seconds before your next login attempt';
        } else {
            // code to display recaptcha on login form goes here
        }
        break;
    }
}

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


6

मुझे पूछना है कि क्या आपने इस समस्या का लागत-लाभ विश्लेषण किया है; ऐसा लगता है कि आप अपने आप को एक हमलावर से बचाने की कोशिश कर रहे हैं, जिसके पास बहुत सारे पासवर्ड मौजूद होने का अनुमान लगाने के लिए पर्याप्त वेब मौजूदगी है, प्रति आईपी में 3-5 अनुरोध भेजना (क्योंकि आपने आईपी थ्रॉटलिंग को खारिज कर दिया है)। उस हमले की लागत कितनी होगी (मोटे तौर पर)? क्या यह उन खातों के मूल्य से अधिक महंगा है जिन्हें आप संरक्षित करने की कोशिश कर रहे हैं? कितने अभिमानी बॉटनेट्स चाहते हैं कि आपको क्या मिला है?

इसका उत्तर शायद नहीं है - लेकिन अगर ऐसा है, तो मुझे उम्मीद है कि आपको किसी प्रकार के सुरक्षा पेशेवर से मदद मिल रही है; प्रोग्रामिंग कौशल (और StackOverflow स्कोर) सुरक्षा पता करने के लिए दृढ़ता से सहसंबंधित नहीं है।


(आपके कहने का मतलब है कि यदि उत्तर 'नहीं' है - यानी कि बॉटनेट हमले का खर्च खातों के संबंध में बहुत अधिक नहीं है)
जेन्स रोलैंड

लेकिन वैसे भी, आप एक महत्वपूर्ण बिंदु लाते हैं। अपने स्वयं के उपयोग के लिए, मुझे किसी भी बोटनेट ऑपरेटर से कम से कम देखभाल करने की उम्मीद नहीं है, लेकिन मैं किसी के लिए स्रोत कोड जारी कर रहा हूं, जो अपने वेब ऐप के लिए सभ्य सुरक्षा चाहते हैं, और मुझे नहीं पता कि अन्य क्या करने की कोशिश कर सकते हैं। रक्षा करें, या उनके दुश्मन कौन हैं
जेन्स रोलैंड

यह कोई फर्क नहीं पड़ता कि राष्ट्रीय रहस्यों की रक्षा क्या होगी (आधिकारिक प्रणालियों को विशेष प्रमाणीकरण की आवश्यकता है, और मुझे पूरा यकीन है कि PHP पर निर्मित कुछ भी योग्यता प्राप्त नहीं कर सकता है), लेकिन सभी वेब अनुप्रयोगों को सुरक्षित स्थिति की आवश्यकता होती है, इसलिए यदि मैं इसे जारी कर रहा हूं, तो ' घ मैं अविश्वसनीय रूप से गैर-जिम्मेदाराना व्यवहार नहीं कर सकता जहाँ भी मैं कर सकता हूँ
जेन्स रोलैंड

1
तो मेरा संक्षिप्त जवाब है: मैं इसका निर्माण कर रहा हूं क्योंकि 99.9% वेब साइटों और ऐप्स में भयावह सुरक्षा है (यहां तक ​​कि बड़ी लीग में भी: एओएल, ट्विटर, माइस्पेस सभी से पहले समझौता किया गया है), और ज्यादातर मामलों में क्योंकि वे घटिया स्थिति पुस्तकालयों का उपयोग करना।
जेन्स रोलैंड

इसके अलावा, नील्स प्रोवोस एट अल द्वारा पेपर "टू कैच ए प्रीडेटर" पढ़ें। 2008 USENIX कार्यवाही से (लिंक: usenix.org/events/sec08/tech/small.html ) यह एक आंख खोलने वाला है: 2 महीने, एक हनीपोट: लगभग 30.000 अलग-अलग आईपी से 368,000 हमले, 5,600 से अधिक बॉटनेट से आ रहे हैं!
जेन्स रोलैंड

5

एक छद्म राज्य संक्रमण आरेख / नियम के रूप में जेन्स योजना को संक्षेप में प्रस्तुत करने के लिए:

  1. उपयोगकर्ता + पासवर्ड -> प्रविष्टि
  2. उपयोगकर्ता +! पासवर्ड -> अस्वीकृत
  3. उपयोगकर्ता + ज्ञात_आईपी (उपयोगकर्ता) -> सामने का दरवाजा, // never throttle
  4. उपयोगकर्ता + अज्ञात_आईपी (उपयोगकर्ता) -> कैटफ़्लैप
  5. (#denied> n) कैटफ़्लैप्स (साइट) के माध्यम से -> थ्रॉटल कैटफ़्लैप्स (साइट) // slow the bots
  6. catflap + थ्रॉटल + पासवर्ड + कैप्चा -> प्रविष्टि // humans still welcome
  7. catflap + थ्रॉटल + पासवर्ड +! कैप्चा -> अस्वीकृत // a correct guess from a bot

टिप्पणियों:

  • कभी भी सामने के दरवाजे को न काटें। एल्बोनियन राज्य पुलिस के पास आपका कंप्यूटर है, आपके घर में है, लेकिन आपसे पूछताछ करने में असमर्थ हैं। जानवर बल आपके कंप्यूटर से एक व्यवहार्य दृष्टिकोण है।
  • यदि आप "अपना पासवर्ड भूल गए?" लिंक, फिर आपका ईमेल खाता हमले की सतह का हिस्सा बन जाता है।

ये अवलोकन उन लोगों पर एक अलग प्रकार के हमले को कवर करते हैं जिन्हें आप काउंटर करने की कोशिश कर रहे हैं।


बिल्कुल ईमेल खाता हमले की सतह का हिस्सा है। मेरी सुरक्षा प्रदान करने वाली सुरक्षा पर मेरे पास ऊपरी-बाध्य मान्यताओं का एक सेट है और सबसे कम बाध्य उपयोगकर्ता की अपनी ईमेल सुरक्षा है। यदि कोई हमलावर किसी उपयोगकर्ता के ईमेल को तोड़ता है, तो सभी दांव बंद हो जाते हैं।
जेन्स रोलैंड

इसके अलावा, मुझे लगता है कि आपके राज्य संक्रमण आरेख को कुछ विवरणों की आवश्यकता है: # 3 और # 4 में पासवर्ड शामिल होना चाहिए; # 1 और # 2 में ज्ञात_आईपी (उपयोगकर्ता) शामिल होना चाहिए क्योंकि लॉगिन में हमेशा ज्ञात या अज्ञात आईपी होता है; और # 6 'थ्रॉटल के बावजूद प्रवेश' है
जेन्स रोलैंड

4

लगता है कि आप धीमे वितरित ब्रूट बल से बचाव करने की कोशिश कर रहे हैं । इतना नहीं कि आप इसके बारे में कर सकते हैं। हम एक PKI और कोई पासवर्ड लॉगिन का उपयोग कर रहे हैं। यह मदद करता है, लेकिन अगर आपके क्लाइंट हर बार एक समय में वर्कस्टेशन का मौका देते हैं, तो यह बहुत लागू नहीं है।


वास्तव में तेज जानवर बल भी। मैं फिक्स्ड-यूजर ब्रूट फोर्स (सिर्फ 20 सेकंड में थ्रोटलिंग) के साथ कुछ हद तक उदार होने की उम्मीद कर रहा था, लेकिन 50k उपयोगकर्ताओं के साथ एक साइट पर, जो वेरिएबल-यूजर फास्ट ब्रूट फोर्स को संभव बना देगा (उपयोगकर्ताओं के माध्यम से साइकिल चलाने के लिए 20+ सेकंड में)। और जैसा कि वे कहते हैं, चूसना होगा ..
जेन्स रोलैंड

एक एकल मेजबान उपयोग से अच्छी तरह से तेज जानवर बल iptables या जो भी फ़ायरवॉल यू का उपयोग करें।
ब्योर्न राउपच

मैं तेज ब्रूट बल वितरित करने की बात कर रहा था। यह दुर्लभ है, लेकिन संभावित रूप से यह बहुत बुरा है
जेन्स रोलैंड

3

अस्वीकरण: मैं एक दो-कारक कंपनी के लिए काम करता हूं, लेकिन इसे प्लग करने के लिए यहां नहीं हूं। यहाँ कुछ अवलोकन हैं।

कुकीज़ को XSS और ब्राउज़र वुल्न्स के साथ चुराया जा सकता है। उपयोगकर्ता आमतौर पर ब्राउज़र बदलते हैं या अपनी कुकी साफ़ करते हैं।

स्रोत आईपी पते एक साथ गतिशील रूप से परिवर्तनशील और स्पूफ़ेबल होते हैं।

कैप्चा उपयोगी है, लेकिन एक विशिष्ट मानव को प्रमाणित नहीं करता है।

कई तरीकों को सफलतापूर्वक जोड़ा जा सकता है, लेकिन अच्छा स्वाद निश्चित रूप से क्रम में है।

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

"आपके हाई-स्कूल शुभंकर क्या था" जैसे सुरक्षा प्रश्न "सार्वजनिक रूप से कुछ आप जानते हैं" का एक और घटिया रूप है, उनमें से ज्यादातर सार्वजनिक डोमेन में आसानी से अनुमान लगाने योग्य या एकमुश्त हैं।

जैसा कि आपने उल्लेख किया है, थ्रॉटलिंग बैक विफल प्रयास लॉगिन-बल हमलों को रोकने और एक खाते को करने में आसानी के बीच एक व्यापार-बंद है। आक्रामक लॉकआउट नीतियां पासवर्ड एन्ट्रॉपी में विश्वास की कमी को दर्शा सकती हैं।

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

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


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

1

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

मैंने वास्तव में अपने भाई के माइस्पेस खाते में हैक किए गए किसी व्यक्ति को पकड़ लिया क्योंकि उन्होंने उसके लिए gmail खाते I सेटअप में जाने का प्रयास किया था और 'रीसेट बाय पासवर्ड माई ईमेल' फीचर का उपयोग किया था ... जो मेरे इनबॉक्स में गया।


1
  1. उनके सामान्य पासवर्ड दर्ज करने से पहले एक बार-पासवर्ड की आवश्यकता के बारे में क्या? इससे यह स्पष्ट हो जाएगा कि मुख्य पासवर्ड का अनुमान लगाने के कई अवसर मिलने से पहले ही कोई हमला कर रहा था?

  2. एक वैश्विक गणना / लॉगिन विफलताओं की दर रखें - यह एक हमले के लिए संकेतक है - एक हमले के दौरान लॉगिन विफलताओं के बारे में सख्त हो जैसे कि आईपी तेजी से प्रतिबंध लगाते हैं।


1) आप असुरक्षित, गैर-अधिकृत लाइन पर वन-टाइम पासवर्ड कैसे लागू करेंगे? दूसरे शब्दों में, उपयोगकर्ता इन वन-टाइम पासवर्ड को कब सेट करता है? 2) हां, यह मेरी सूची में # 4 का सार है, असफल प्रयासों पर सीमा की सीमा। नकारात्मक पक्ष यह खोलने का अवसर है।
जेन्स रोलैंड

0

मुझे विश्वास नहीं है कि एक सही जवाब है, लेकिन मैं रोबोट को भ्रमित करने की कोशिश के आधार पर इसे देखने के लिए इच्छुक हो सकता हूं अगर किसी हमले में संवेदना होती है।

मेरे दिमाग के ऊपर:

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

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

अगला, कैप्चा के एक अलग प्रकार के बारे में कैसे: आपके पास प्रश्नों की एक श्रृंखला है जो मानव के लिए समस्याएं पैदा नहीं करेगी। हालाँकि, वे यादृच्छिक नहीं हैं । जब हमला शुरू होता है तो सभी को प्रश्न # 1 दिया जाता है। एक घंटे के प्रश्न के बाद # 1 को छोड़ दिया जाता है, फिर कभी उपयोग नहीं किया जाता है और सभी को प्रश्न # 2 और इसी तरह मिलता है।

हमलावर प्रश्नों की डिस्पोजेबल प्रकृति के कारण अपने रोबोट में डालने के लिए डेटाबेस को डाउनलोड करने की जांच नहीं कर सकता है। उसे कुछ भी करने की क्षमता रखने के लिए एक घंटे के भीतर अपने बॉटनेट को नए निर्देश भेजने होंगे।


वैकल्पिक लॉगिन स्क्रीन ऐसा लगता है कि यह मशीनों से अधिक मनुष्यों को भ्रमित करेगा। हम निश्चित रूप से यह मान रहे हैं कि हमलावर ने हमारे सुरक्षा उपायों को पहले ही जांच लिया होगा। वह आसानी से सही तरीके से रखे गए खेतों को खोजने के लिए अपने खुरचनी को मोड़ सकता था।
जेन्स रोलैंड २

मानव-जांच प्रश्न पहले किए गए हैं, और यह बहुत प्रभावी नहीं है। मानव बोटनेट ऑपरेटर के लिए एक हमले के दौरान प्रति घंटे एक प्रश्न (जिसके बाद नया जवाब बॉट्स को प्रोपेगेट करेगा) का जवाब देना काफी संभव होगा।
जेन्स रोलैंड ३

आप बात याद कर रहे हैं। हमलावर अग्रिम में जाँच नहीं कर सकता क्योंकि यह केवल अतिरिक्त बचाव दिखाता है जब कोई हमला दिखाता है।
लोरेन Pechtel

निश्चित रूप से, मानव देख सकता था कि प्रश्न क्या था - लेकिन उसे अपने सभी बॉट से संवाद करना होगा। यह एक संचार पथ है जो बॉटनेट को नीचे लाना आसान बनाता है।
लोरेन Pechtel

मुझे नहीं लगता कि मुझे यह बात याद आ रही है। मैं मतलब नहीं है वह हमारे सुरक्षा उपायों की जांच करने के पहले से एक हमले चलाने होता है, मेरा मतलब है वह इस सूत्र को पढ़ने के लिए होता है और weknesses के लिए :) जाँच करने के लिए (खुला) स्रोत कोड की जाँच की
जेन्स रोलाण्ड

0

चूंकि कई लोगों ने CAPTCHA को एक पतन मानव तंत्र के रूप में शामिल किया है, इसलिए मैं CAPTCHA की प्रभावशीलता पर एक पूर्व StackOverflow प्रश्न और थ्रेड जोड़ रहा हूं।

क्या फिर से क्रैच को क्रैक / हैक / OCR'd / हरा / टूट गया है?

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


0

आप एक उपयोगकर्ता पासवर्ड की ताकत के आधार पर भी थ्रॉटल कर सकते हैं।

जब कोई उपयोगकर्ता अपना पासवर्ड पंजीकृत करता है या बदलता है, तो आप उनके पासवर्ड के लिए एक ताकत रेटिंग की गणना करते हैं, 1 और 10 के बीच कहते हैं।

"पासवर्ड" जैसा कुछ 1 स्कोर करता है जबकि "c6eqapRepe7et * Awr @ ch" स्कोर 9 या 10 हो सकता है और स्कोर को थ्रॉटलिंग में किक करने के लिए जितना अधिक समय लगेगा उतना ही स्कोर होगा।


2
मैं इस विचार को समझता हूं, लेकिन यह अप्रत्यक्ष रूप से पासवर्ड के बारे में जानकारी को लीक कर देगा, जिससे एक हमलावर को पता चल जाएगा कि पासवर्ड हैक करने लायक है या नहीं। यह थोड़ा सैद्धांतिक लग सकता है, लेकिन कई उपयोगकर्ता पासवर्ड का पुन: उपयोग करते हैं, इसलिए यदि मैं Strong_Throttling_Website.com में तोड़ना चाहता हूं, तो मैं केवल एक उपयोगकर्ता, 'फ्रेडी', जो एक कमजोर पासवर्ड है (जब तक) मिल जाए, तब तक यादृच्छिक पर (विशेषाधिकार प्राप्त) खातों पर हमला कर सकता हूं शुरुआती थ्रॉटलिंग), फिर Less_Secure_Website.edu पर जाएं और वहां फ्रेडी के खाते पर एक आसान शब्दकोश हमला करें। यह थोड़ा सा शामिल है, लेकिन व्यवहार में निश्चित रूप से उल्लेखनीय है।
जेन्स रोलैंड

0

पहला सवाल जो मैंने आमतौर पर सुना है जब यह सवाल पोर्ट्स बदलने के लिए है, लेकिन इसके बारे में भूल जाओ और सिर्फ IPv4 को अक्षम करें। यदि आप केवल IPv6 नेटवर्क के ग्राहकों को अनुमति देते हैं, तो आप साधारण नेटवर्क स्कैनिंग के लिए प्रार्थना नहीं करते हैं और हमलावर DNS लुकअप का सहारा लेंगे। अपने Apache (AAAA) / Sendmail (MX-> AAAA) / जो आपने सबको (AAAA) दिया है, उसी पते पर न चलें। सुनिश्चित करें कि आपका क्षेत्र xferd नहीं हो सकता है, अपने क्षेत्र को किसी के द्वारा डाउनलोड किए जाने की अनुमति देने की प्रतीक्षा करें?

यदि बॉट्स आपके सर्वर सेटअप नए होस्टनामों को ढूंढते हैं, तो बस अपने होस्टनामों के लिए कुछ अस्पष्टता पूर्व निर्धारित करें, और अपना पता बदलें। पुराने नामों और यहां तक ​​कि सेटअप को छोड़ दें ** बॉट नेट के लिए हनीपोट नामों को टाइमआउट पर।

** अपने रिवर्स (पीटीआर) रिकॉर्ड (ip6.arpa के तहत) का परीक्षण करें यह देखने के लिए कि क्या उनका उपयोग शून्य / 4 पर किया जा सकता है जिनके पास रिकॉर्ड वीएस / 4 एस है जो नहीं करते हैं। IE आमतौर पर ip6.arpa में ~ 32 "होता है। एक पते में, लेकिन पिछले कुछ लापता के साथ प्रयास करने से नेटवर्क ब्लॉक को हटा दिया जा सकता है, जिसमें रिकॉर्ड वीएस अन्य हैं जो नहीं करते हैं। यदि आप इसे आगे ले जाते हैं तो पता स्थान के बड़े हिस्से को छोड़ना संभव हो जाता है।

सबसे खराब स्थिति में उपयोगकर्ताओं को एक आईपीवी 6 सुरंग स्थापित करना होगा, ऐसा नहीं है कि उन्हें एक डीएमजेड में वीपीएन के रूप में जाना होगा ... हालांकि एक चमत्कार है कि यह पहला विकल्प क्यों नहीं है।

इसके अलावा केर्बरोस शांत है, लेकिन IMHO LDAP चल रही है (तकनीकी रूप से NISPlus के साथ गलत क्या है? मैंने पढ़ा है कि Sun ने फैसला किया कि उपयोगकर्ता LDAP चाहते थे और इस वजह से उन्होंने NIS + गिरा दिया)। केरबरोस एलडीएपी या एनआईएस के बिना ठीक काम करता है, बस होस्ट के आधार पर उपयोगकर्ताओं का प्रबंधन करना है। करबरोस का उपयोग करने से आपको उपयोग करने में आसानी होती है, यदि स्वचालित नहीं है, पीकेआई।


0

यहाँ थोड़ी देर हो गई, लेकिन मैं सोच रहा था, एक कठिन मामला है - हमलावर बहुत सारे यादृच्छिक आईपी, यादृच्छिक उपयोगकर्ता नाम और एक यादृच्छिक पासवर्ड का चयन करता है जो 10,000 सबसे लोकप्रिय की एक सूची का उपयोग करता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.