2010-05-07 18 views
17

शब्दकोश हमले को रोकने के लिए सबसे अच्छा तरीका क्या है? मैंने कई कार्यान्वयनों को सोचा है, लेकिन उनमें से सभी में कुछ दोष लग रहा है:वेब अनुप्रयोग पर शब्दकोश हमलों को रोकना

  1. एक्स विफल लॉगिन प्रयासों के बाद उपयोगकर्ता को लॉक करें। समस्या: सेवा हमले से इनकार करने में आसान, कई उपयोगकर्ताओं को थोड़े समय में लॉक करना आसान है।
  2. उपयोगकर्ता नाम पर असफल लॉगिन प्रयास प्रति प्रतिक्रिया समय में वृद्धि। समस्या: शब्दकोश हमले एक ही पासवर्ड का उपयोग कर सकते हैं लेकिन अलग-अलग उपयोगकर्ता नाम।
  3. आईपी पते से असफल लॉगिन प्रयास प्रति प्रतिक्रिया समय में वृद्धि। समस्या: आईपी पते को धोखा देकर चारों ओर घूमना आसान है।
  4. एक सत्र के भीतर असफल लॉगिन प्रयास प्रति प्रतिक्रिया समय में वृद्धि। समस्या: एक शब्दकोश हमले बनाकर घूमना आसान है जो प्रत्येक प्रयास पर एक नया सत्र चलाता है।
+0

पहिया को पुन: पेश न करें, देखें कि अन्य वेब एप्लिकेशन इसे कैसे कर रहे हैं। कैप्चा का उपयोग क्यों नहीं करें? – Konerak

उत्तर

21

मुझे जीमेल की एंटी-ब्रूट फोर्स सिस्टम बहुत पसंद है। यह "गर्मी" पर आधारित है जिसे उपयोगकर्ता जमा कर सकता है, उपयोगकर्ता को गर्म होने के बाद उन्हें कैप्चा से संकेत दिया जाता है। आप एक एसक्यूएल डेटाबेस का उपयोग कर गर्मी का ट्रैक रख सकते हैं, या redis incr का उपयोग कर सकते हैं। गर्मी एक आईपी पते को सौंपा गया है। three-way-handshake की वजह से इंटरनेट पर एक टीसीपी कनेक्शन "स्पूफ" करना 100% असंभव है, हालांकि प्रॉक्सी सर्वर भरपूर हैं और आईपी पता बहुत सस्ता है। प्रॉक्सी सर्वर आमतौर पर स्पैम भेजने के लिए उपयोग किए जाते हैं, आप blacklist देख सकते हैं और स्वचालित रूप से उन्हें कैप्चा के लिए संकेत दे सकते हैं।

आपके सिस्टम के खिलाफ प्रत्येक खराब कार्रवाई गर्मी तालिका को अपडेट करेगी। उदाहरण के लिए एक असफल लॉगिन 35% गर्मी जमा करेगा। एक बार गर्मी का स्तर 100% से अधिक या बराबर हो जाता है तो उपयोगकर्ता को कैप्चा हल करने के लिए मजबूर होना पड़ता है। एक कैप्चा को हल करना उस आईपी पते को "ठंडा कर देगा"। गर्मी तालिका में टाइमस्टैम्प कॉलम हो सकता है जो अद्यतन पर वर्तमान समय पर सेट होता है। 24 घंटों के बाद या तो गर्मी 0

reCaptcha सबसे सुरक्षित कैप्चा का उपयोग कर सकते हैं जो आप उपयोग कर सकते हैं।

1

शायद आपको अपने वेब फॉर्म पर CAPTCHA लागू करने की आवश्यकता है।

1

सुरक्षा, उपलब्धता और उपयोगिता के बीच एक शाश्वत व्यापार है, जिसका अर्थ है कि कोई सही समाधान नहीं है।

आपकी स्थिति के आधार पर एक सभ्य व्यापार, कैप्चा के साथ विकल्प # 1 का उपयोग करना है। तीन असफल प्रयासों के बाद खाते को लॉक करें, लेकिन कैप्चा सही ढंग से हल होने पर बाद के लॉगिन प्रयासों को अनुमति दें।

3

मैं हमेशा आपके विकल्प 3 का प्रशंसक रहा हूं - अपने आईपी पते के आधार पर क्लाइंट को लॉक करना या थ्रॉटल करना। आपके द्वारा बताए गए कारणों के मुकाबले अन्य विकल्प अधिक मुसीबत हैं।

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

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

आखिरकार, यह एक सुरक्षित पासवर्ड चुनने के लिए उपयोगकर्ता पर निर्भर करता है (हालांकि आप उनकी मदद कर सकते हैं)। अगर उन्होंने अपने पासवर्ड के रूप में "पासवर्ड 1" चुना है तो आप जो कुछ भी कर सकते हैं वह हैकर को अपने खाते में तोड़ने से रोक देगा।

1

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

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

क्यों इस काम करता है
मैं बैठ गए और निर्धारित किया है कि एक बहुत बुद्धिमान हैकर बाहर हर 100 प्रयासों की (शायद बहुत खराब) शब्दकोश के बारे में 1 के साथ एक खाते को तोड़ने में सक्षम हो जाएगा। इसलिए, खराब स्थिति परिदृश्य में हर 100 मिनट (प्रति आईपी पता) पर हमलावर 1 खाता तोड़ता है। इस विशेष साइट के खिलाफ खतरों के लिए, यह पर्याप्त सुरक्षा थी। हमारे खाते वास्तव में इतना लायक नहीं हैं। आपको निर्धारित करने की आवश्यकता है (आपकी साइट के लिए) आपको कितनी सुरक्षा चाहिए। यदि आप चाहें तो आप खिड़की को 30 मिनट तक बढ़ा सकते हैं यदि आप इसे 3 गुना अधिक समय लेना चाहते हैं।

महत्वपूर्ण नोट
Do नहीं रीसेट मायने रखता सफल प्रवेश पर (समाधान 3 या ऊष्मा-मानचित्र ऊपर वर्णित के लिए यह हो)। यदि आप करते हैं, तो हमलावर केवल 3 खातों को हैक करने का प्रयास करेगा, फिर कुछ खाते में सफलतापूर्वक लॉग इन करें (वे या पहले से ही समझौता किए गए खाते) और कभी भी थ्रॉटल नहीं होंगे।

+0

क्या इस तरह की कोई प्रणाली नहीं है कि जो व्यक्ति खेल के किसी अन्य उपयोगकर्ता के आईपी पते को जानता है वह आईपी एड्रेस स्पूफिंग के माध्यम से आईपी एड्रेस बंद कर सकता है? – Christian

+1

@ क्रिस्टियन: नहीं, क्योंकि टीसीपी कनेक्शन स्थापित करने के लिए तीन-तरफा हैंडशेक का उपयोग करता है और यह एक धोखेबाज पते से पूरा नहीं किया जा सकता है क्योंकि हमलावर को सर्वर का एसीके नहीं मिलेगा। (इसे हमलावर के वास्तविक पते की बजाय फर्जी आईपी पते पर भेजा जाएगा।) धोखेबाज पते से कनेक्शन स्थापित किए बिना, हमलावर के पास उस पते से लॉगिन करने का कोई तरीका नहीं होगा। –

0

यह "रोकथाम" से आपका क्या मतलब है इस पर निर्भर करता है।

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

यदि आप बस शब्दकोश हमलों की प्रभावशीलता को व्यापक रूप से कम करना चाहते हैं, तो पासवर्ड हैश के अतिरिक्त नमक का उपयोग करें।

+4

एक नमक और पासवर्ड हैश कैसे एक शब्दकोश हमले की प्रभावशीलता को कम करेगा? नमकीन और हैशिंग - जहां तक ​​मुझे पता है - पासवर्ड को एन्क्रिप्ट करने के लिए केवल उपयोगी हैं ताकि यह डेटाबेस में सादे पाठ में संग्रहीत न हो। अंत में, एक खराब चुने हुए पासवर्ड अभी भी एक शब्दकोश हमले के लिए कमजोर होगा, भले ही यह नमकीन हो और भंडारण से पहले धोया जाए। –

0

यदि आप ऐसे एप्लिकेशन के लिए प्रोग्रामिंग कर रहे हैं, जहां सुरक्षा वास्तव में महत्वपूर्ण है, तो आप शब्दकोष शब्द शामिल कर सकते हैं। आपको QWERTY को वैध पासवर्ड के रूप में अनुमति देने की आवश्यकता नहीं है।

1

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

http://securityoverride.org/infusions/pro_download_panel/download.php?did=66

दूसरा, एक अस्थायी तालाबंदी पर विचार करें।यदि आपके पास "उपयोगकर्ता" तालिका है, तो "LastLoginAttemptedOn" और "UnlimitedLoginAttempts" कॉलम जोड़ें। प्रत्येक बार जब उपयोगकर्ता लॉग इन करने का प्रयास करता है तो इन मानों को अपडेट करें। जब उपयोगकर्ता सफलतापूर्वक लॉग इन करता है, तो विफलLoginAttempts को 0 पर वापस रीसेट करें। जब विफल LoginAttempts 4 तक पहुंच जाता है (या जो कुछ भी आप पसंद करते हैं), उपयोगकर्ता को 5 मिनट के लिए लॉग इन करने की अनुमति न दें (फिर से, आपकी वरीयता) LastLoginAttemptedOn से। इस कॉलम को तब तक अपडेट न करें जब तक उन्हें वास्तव में टाइमर को रीसेट करने के 4-मिनट बाद के प्रयास को रोकने के लिए प्रयास करने की अनुमति न हो। जब विफल रहता है तो विफल Login 0 को रीसेट करें ताकि उनके पास कई और रीट्री हों।

संबंधित मुद्दे