गलत पासवर्ड की जाँच करने से सही जाँच करने में अधिक समय क्यों लगना चाहिए?


83

इस सवाल ने मुझे हमेशा परेशान किया।

लिनक्स पर, जब आपसे पासवर्ड मांगा जाता है, यदि आपका इनपुट सही है, तो यह एकदम सही है, लगभग बिना किसी देरी के। लेकिन, दूसरी ओर, यदि आप गलत पासवर्ड टाइप करते हैं, तो जांच में अधिक समय लगता है। ऐसा क्यों है?

मैंने इसे उन सभी लिनक्स वितरणों में देखा है जिन्हें मैंने कभी कोशिश की है।


आपको यह विंडोज के लिए भी सही लगेगा। इसके अलावा, शीर्षक को कुछ इस तरह बदलना कि "गलत पासवर्ड सही होने में अधिक समय क्यों लेते हैं।" इसे और अधिक प्रोग्रामिंग संबंधित होगा।
he_the_great

मैंने बस अपने उबंटू सिस्टम में लॉग इन किया, गलत पासवर्ड डाला और खुद से वही सवाल किया। :-)
जोहानिन

जवाबों:


106

यह वास्तव में क्रूर बल के हमलों को प्रति सेकंड लाखों पासवर्ड की कोशिश करने से रोकना है। यह विचार सीमित करने के लिए है कि कैसे तेजी से पासवर्ड की जांच की जा सकती है और कई नियम हैं जिनका पालन किया जाना चाहिए।

  • एक सफल उपयोगकर्ता / पासवर्ड जोड़ी को तुरंत सफल होना चाहिए।
  • विफलता के कारणों में कोई अंतर नहीं होना चाहिए जिसका पता लगाया जा सकता है।

वह अंतिम एक विशेष रूप से महत्वपूर्ण है। इसका मतलब है कि कोई उपयोगी संदेश नहीं:

Your user name is correct but your password is wrong, please try again

या:

Sorry, password wasn't long enough

"अमान्य उपयोगकर्ता और पासवर्ड" और "मान्य उपयोगकर्ता लेकिन अमान्य पासवर्ड" विफलता कारणों के बीच प्रतिक्रिया में एक समय का अंतर भी नहीं है।

प्रत्येक विफलता को बिल्कुल वही जानकारी, पाठ्य और अन्यथा वितरित करनी चाहिए।

कुछ सिस्टम इसे और भी आगे ले जाते हैं, प्रत्येक विफलता के साथ देरी बढ़ जाती है, या केवल तीन विफलताओं की अनुमति देता है, फिर एक वापसी की अनुमति देने से पहले बड़े पैमाने पर देरी होती है।


1
यह किसी ऐप को फोर्क करने से, पासवर्ड की कोशिश करने से कैसे रोकता है, और यदि यह कुछ समय में सफलता नहीं देता है, तो बच्चे को मारें और फिर से कांटा करें। हां, यह केवल तभी काम करता है जब आप कुछ उपयोगकर्ता के रूप में लॉग इन कर सकते हैं लेकिन किसी ने कब रोका है?
BCS

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

5
BCS: यदि आपके पास पहले से ही पर्याप्त विशेषाधिकार है, जो आप प्रस्तावित करते हैं, तो संभावना है कि संभावना है कि अब आपको brute force attack की जरूरत नहीं है (क्योंकि आपके लिए अन्य attack vectors उपलब्ध हैं)। बाहरी हमलावरों के खिलाफ देरी सबसे उपयोगी है।
एरच किट्ज़म्यूलर

14

इससे पासवर्ड का अनुमान लगाने में अधिक समय लगता है।


12

मुझे यकीन नहीं है, लेकिन हमलों को कठिन बनाने के लिए एक गलत पासवर्ड दर्ज करने के बाद देरी को एकीकृत करना काफी आम है। यह एक हमले को व्यावहारिक रूप से प्रभावी बनाता है, क्योंकि आपको केवल कुछ पासवर्ड की जांच करने में लंबा समय लगेगा।

यहां तक ​​कि कुछ पासवर्ड - जन्मतिथि, बिल्ली का नाम और उस तरह की चीज़ों को आज़माने से भी कोई मज़ा नहीं आता।


और अक्सर दूसरी असफलता पर टाइमआउट पहले के टाइमआउट से अधिक लंबा होता है - जो अच्छा भी है।
जोनाथन लेफ़लर

क्या आपने सबसे संभावित पासवर्ड के बारे में समाचार पोस्ट देखा? 123456 बहुत लोकप्रिय है!
स्पेंस

@ देखें, मैंने वास्तव में उन वस्तुओं को देखा था लेकिन, स्मृति से, यह उतना बुरा नहीं है जितना कि लोगों ने बनाया, वे थे (जैसा कि मीडिया करने के लिए अभ्यस्त हैं) इसे अनुपात से बाहर उड़ाना। पासवर्ड ऑन-लाइन पाए गए समझौता किए गए खातों की सूची से निकाले गए थे , जिसका अर्थ है कि वे असुरक्षित होने की अधिक संभावना है (क्योंकि वे समझौता किए गए थे)। 123456सकता है अच्छी तरह से घुसपैठ किए गए खातों की (उदाहरण के लिए) 30% है, लेकिन कहीं भी पास में महत्वपूर्ण है कि होने की संभावना नहीं है सभी खातों।
paxdiablo

नहीं, वे सूची पासवर्ड डेटाबेस हैक से हैं और उनमें से अधिकांश लाखों में नमूना सेट का प्रतिनिधित्व करते हैं। इन हैक्स के परिणामों की पुष्टि कई ऑनलाइन डेटासेट में की गई है और ये "औसत" उपभोक्ता के अत्यधिक प्रतिनिधि हैं। बेहतर पासवर्ड प्राप्त करने का एकमात्र तरीका इसे निर्माण पर लागू करना है, या बेहतर अभी तक 2 कारक प्रमाणीकरण का उपयोग करना है जो वैसे भी अधिक उपयोगी है।
स्पेन्स

12

मूल रूप से जानवर बल और शब्दकोश हमलों के खिलाफ कम करने के लिए।

से लिनक्स-पीएएम आवेदन डेवलपर की मार्गदर्शिका :

देरी के लिए योजना

extern int pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec);

यह फ़ंक्शन लिनक्स-पीएएम द्वारा pam_authenticate () को विफल कॉल के बाद समय की देरी की सुविधा के लिए पेश किया जाता है और आवेदन पर नियंत्रण वापस आने से पहले। इस फ़ंक्शन का उपयोग करते समय एप्लिकेशन प्रोग्रामर को यह जांचना चाहिए कि क्या यह उपलब्ध है,

#ifdef PAM_FAIL_DELAY
    ....
#endif /* PAM_FAIL_DELAY */

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


8

यह सुरक्षा बढ़ाने के लिए एक बहुत ही सरल, वस्तुतः सरल तरीका है। विचार करें:

  1. सिस्टम Aमें कोई देरी नहीं है। एक हमलावर का एक प्रोग्राम है जो उपयोगकर्ता नाम / पासवर्ड संयोजन बनाता है। प्रति मिनट हजारों प्रयासों की दर से, हर संयोजन को आज़माने और सभी सफल लॉगिन रिकॉर्ड करने में केवल कुछ घंटे लगते हैं।

  2. सिस्टम Bप्रत्येक गलत अनुमान के बाद 5 सेकंड की देरी उत्पन्न करता है। हमलावर की दक्षता को प्रति मिनट 12 प्रयासों तक कम कर दिया गया है, प्रभावी रूप से जानवर-बल के हमले से अपंग। घंटों के बजाय, एक वैध लॉगिन खोजने में महीनों लग सकते हैं। अगर हैकर्स उस मरीज थे, तो वे वैध हो जाएंगे। :-)


4

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

आपको यह जानने में भी रुचि हो सकती है कि आप एक लॉगिन शेल के रूप में जो उपयोग कर रहे हैं, उसके आधार पर आमतौर पर इस देरी को कॉन्फ़िगर करने का एक तरीका है।

GDM में, देरी gdm.conf फ़ाइल में सेट की जाती है (आमतौर पर /etc/gdm/gdm.conf में)। आपको RetryDelay = x सेट करने की आवश्यकता है जहां x सेकंड में एक मान है।

इन दिनों अधिकांश लिनक्स वितरण भी Fet_DELAY /etc/login.defs में परिभाषित होने का समर्थन करते हैं जो आपको एक असफल लॉगिन प्रयास के बाद प्रतीक्षा समय निर्धारित करने की अनुमति देते हैं।

अंत में, PAM आपको असफलता देरी को दरकिनार करने के लिए अपनी ऑडी लाइन पर एक नोडेल्ले विशेषता सेट करने की अनुमति देता है। ( यहाँ PAM और linux पर एक लेख )


1

मैं यह नहीं देखता कि यह उतनी ही सरल हो सकती है जितनी प्रतिक्रियाएं बताती हैं।

यदि एक सही पासवर्ड की प्रतिक्रिया (कुछ मूल्य का) तत्काल है, तो आपको केवल यह जानने के लिए प्रतीक्षा करने की आवश्यकता नहीं है कि पासवर्ड गलत है? (कम से कम संभावित रूप से पता है, जो खुर उद्देश्यों के लिए ठीक है) और वैसे भी आप इस हमले को समानांतर में चला रहे होंगे ... क्या यह सभी एक बड़ा DoS स्वागत चटाई है?


उनका मतलब यह नहीं है। पासवर्ड गलत, या सही होने के बीच एक स्पष्ट अंतर है। उनका मतलब यह था कि एक गलत उपयोगकर्ता नाम और एक गलत पासवर्ड के बीच कोई अंतर नहीं होना चाहिए। और क्या आप इस हमले को समानांतर में चलाने का मतलब है? आप इसे समानांतर में कैसे चला सकते हैं?
एमपीएन

@ मार्क, समानांतर में चलने से संभवतः कई कनेक्शन खुलेंगे और लॉगिन करने की कोशिश होगी। अभी भी समय लगता है और बहुत व्यावहारिक नहीं है।
he_the_great

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

मुद्दा यह है कि आपको अगला पासवर्ड आज़माने से पहले देरी करने की ज़रूरत नहीं है, तो इसका क्या उपयोग है?

@, आपको होस्ट से फिर से कनेक्ट करना होगा और यदि आवश्यक हो, तो अगला कदम आईपी पते की जांच करना होगा ताकि आप उसे भी पकड़ सकें।
paxdiablo

1

मैंने काम करने से पहले जो कोशिश की, वह वास्तव में नहीं हुई; अगर आपको परवाह है कि आपको इतिहास को संपादित करने वाले विकी की समीक्षा करनी चाहिए ...

क्या काम करता है (मेरे लिए) है, दोनों को pam_faildelay.so देरी = X में /etc/pam.d/login के मूल्य को कम करने के लिए (मैंने इसे 500000, आधे सेकंड तक कम कर दिया है), और इससे पहले भी सोडेल (जोड़कर देखें) गैब्रियल द्वारा उनके उत्तर में वर्णित के अनुसार, सामान्य- पंक्ति में पंक्ति के अंत तक का स्थान) ।

auth [success=1 default=ignore] pam_unix.so nullok_secure nodelay

कम से कम मेरे लिए (डेबियन साइड), केवल इन परिवर्तनों में से एक बनाने से डिफ़ॉल्ट 3 सेकंड से नीचे की सराहना में देरी नहीं होगी, हालांकि /etc/pam.d/login में केवल मान बदलकर देरी को लंबा करना संभव है।

इस तरह की बकवास एक बड़े आदमी को रोने के लिए पर्याप्त है!


0

उबंटू 9.10 पर, और मुझे लगता है कि नए संस्करण भी, जिस फ़ाइल की आप तलाश कर रहे हैं वह स्थित है

/etc/pam.d/login

पंक्ति संपादित करें:

ऑर्टिकल वैकल्पिक pam_faildelay.so देरी = 3000000

दूसरे नंबर को आप चाहें तो बदल सकते हैं।

ध्यान दें कि 'nodelay' प्रमाणीकरण के लिए, मुझे लगता है कि आपको फ़ाइल को संपादित करना चाहिए

/etc/pam.d/common-auth

भी। रेखा पर:

सामान्य [सफलता = 1 डिफ़ॉल्ट = अनदेखा] pam_unix.so nullok_secure

'nodelay' को अंतिम (उद्धरण के बिना) जोड़ें। लेकिन 'नोडल' के बारे में यह अंतिम व्याख्या मेरे विचार से है।


0

मैं एक डेवलपर्स के नजरिए से एक नोट जोड़ना चाहूंगा। हालांकि यह नग्न आंखों के लिए स्पष्ट नहीं होगा कि एक स्मार्ट डेवलपर मैच मिलते ही मैच की क्वेरी से बाहर निकल जाएगा। साक्षी में, एक सफल मैच एक असफल मैच की तुलना में तेजी से पूरा होगा। क्योंकि, मिलान फ़ंक्शन सभी ज्ञात खातों में क्रेडेंशियल्स की तुलना तब तक करेगा जब तक कि यह सही मिलान न मिल जाए। दूसरे शब्दों में, मान लें कि आईडी द्वारा 1,000,000 उपयोगकर्ता खाते हैं; 001, 002, 003 इत्यादि। आपकी आईडी 43,001 है। इसलिए, जब आप एक सही उपयोगकर्ता नाम और पासवर्ड डालते हैं, तो स्कैन 43,001 पर रुक जाता है और आपको लॉग इन करता है। यदि आपकी क्रेडेंशियल्स गलत हैं, तो यह सभी 1,000,000 रिकॉर्ड को स्कैन करता है। दोहरे कोर सर्वर पर प्रसंस्करण समय का अंतर मिलीसेकंड में हो सकता है। विंडोज विस्टा पर 5 उपयोगकर्ता खातों के साथ यह नैनोसेकंड में होगा।


मुझे लगता है कि आप 99% पोस्टर यहां देखेंगे जो एक स्तर या किसी अन्य के डेवलपर्स हैं। इतनी धूमधाम से आवाज करना बंद करो।

मैं उबंटू का उपयोग करता हूं और केवल एक उपयोगकर्ता है। हालाँकि, जब मैं गलत पासवर्ड सबमिट करता हूँ तो मुझे प्रतिक्रिया मिलने में 3 सेकंड लगते हैं। तो, आप गलत हैं :)
Halil Bilgin

0

मैं सहमत हूँ। यह एक मनमाना प्रोग्रामिंग निर्णय है। देरी को तीन के बजाय एक सेकंड में रखना वास्तव में पासवर्ड की दरार को चोट नहीं पहुंचाता है, लेकिन यह अधिक उपयोगकर्ता के अनुकूल बनाता है।


0

तकनीकी रूप से, यह जानबूझकर देरी "रैखिककरण हमले" जैसे हमलों को रोकने के लिए है (साथ ही अन्य हमले और कारण भी हैं)

हमले को स्पष्ट करने के लिए, एक कार्यक्रम पर विचार करें (इस जानबूझकर देरी के बिना), जो एक दर्ज सीरियल की जाँच करता है यह देखने के लिए कि क्या यह सही धारावाहिक से मेल खाता है, जो इस मामले में " xyba " होता है । दक्षता के लिए, प्रोग्रामर ने एक बार में एक चरित्र की जांच करने और गलत चरित्र पाए जाने पर बाहर निकलने का फैसला किया, शुरुआत से पहले लंबाई भी जांची जाती है।

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

  • इसलिए, हमलावर चार-वर्ण स्ट्रिंग का चयन कर सकता है और यह कि स्ट्रिंग की शुरुआत में x को सबसे अधिक समय लगता है। (अनुमान से काम)
  • हमलावर तब वर्ण को x के रूप में ठीक कर सकता है और दूसरे वर्ण को अलग-अलग कर सकता है, जिस स्थिति में वे पाएंगे कि y को सबसे लंबा समय लगता है।
  • हमलावर फिर पहले दो पात्रों को xy के रूप में ठीक कर सकता है और तीसरे वर्ण को अलग-अलग कर सकता है, जिस स्थिति में वे पाएंगे कि b सबसे लंबा लगता है।
  • हमलावर तो के रूप में पहले तीन चरित्र ठीक कर सकते हैं xyb और चौथे चरित्र, जो मामले में वे पाएंगे कि अलग-अलग एक सबसे लंबे समय तक ले जाता है।

इसलिए, हमलावर एक समय में धारावाहिक एक चरित्र को पुनर्प्राप्त कर सकते हैं।

Linearization.java।

Linearization.docx, नमूना आउटपुट

सीरियल नंबर चार वर्ण लंबा है, प्रत्येक वर्ण में 128 संभावित मान हैं। फिर 128 4 = 2 28 = 268,435,456 संभावित धारावाहिक हैं । यदि हमलावर को बेतरतीब ढंग से पूर्ण सीरियल नंबर का अनुमान लगाना चाहिए, तो वह सीरियल नंबर के बारे में 2 27 = 134,217,728 में अनुमान लगाती है, जो काम का एक बहुत बड़ा हिस्सा है । दूसरी ओर, ऊपर के रैखिककरण हमले का उपयोग करके, प्रत्येक अक्षर के लिए लगभग 4 * 64 = 2 8 = 256 अनुमानों की कुल अपेक्षित कार्य के लिए औसतन केवल 128/2 = 64 अनुमानों की आवश्यकता होती है , जो एक तुच्छ राशि है। काम की।

लिखा मार्शल की ज्यादातर से अनुकूलित है यह (मार्क टिकट की ': सिद्धांत और व्यवहार सूचना सुरक्षा "से लिया गया)। इसके अलावा ऊपर की गणना सही धारावाहिक लंबाई जानने के लिए आवश्यक अनुमान की मात्रा को ध्यान में नहीं रखती है।

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