लिंक्डइन हैश ऑड मास क्षमताओं का रिसाव विश्लेषण

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

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

लेकिन चलो क्रम में शुरू करते हैं। कल्पना कीजिए कि आप 6.5 मिलियन ताजा हैश (कुल मिलाकर 5,787,239 अद्वितीय) के डेटाबेस में आते हैं, उचित तरीके से पासवर्ड की अधिकतम संख्या को पुनर्प्राप्त करने के तरीके क्या हैं (7 दिन कहें) मौजूद हैं?

एक छोटा सा शैक्षिक कार्यक्रम । बहुत से लोग इंद्रधनुष तालिकाओं के अद्भुत गुणों में विश्वास करते हैं, माना जाता है कि वे "एक बार में सब कुछ तोड़ने में सक्षम हैं।" यह एक बड़ी गलत धारणा है, इसके अलावा, मास ऑडिट (हजारों या लाखों हैश) के लिए वे पूरी तरह से अनुपयुक्त हैं। इसलिए, वाक्यांश को भूल जाओ "एक पटाखा एक इंद्रधनुष तालिका उत्पन्न कर सकता है!"

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

ऐसी तालिकाओं में एक हैश मान के लिए पासवर्ड खोजने के लिए आवश्यक समय लगभग एक मिनट है। इस समय के दौरान, चेनग्लाइस हैश करना, घटाना, और 100Gb पर सर्च ऑपरेशन करना आवश्यक है।

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

यह लगभग 10 साल है। इसलिए, इस मामले में हमारे दिव्य उपहार को एक मामूली उपहार नहीं माना जा सकता है।

हालांकि, इंद्रधनुष तालिकाओं का एक अच्छा सेट पासवर्ड को मिनटों में एक हैश मान को बहाल करने में मदद करेगा (लंबाई में 8-9 वर्णों के समान मामूली प्रतिबंध दिए गए)।

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

हमें सेट {a.z0..9} ^ 8 से प्रत्येक लाइन लेने की जरूरत है, इसके हैश की गणना करें, और हैश मूल्यों के डेटाबेस में देखें जो लिंक्डइन ने इस मामले में हमें सावधानीपूर्वक प्रदान किया है

और खोज एक ऑपरेशन है जिसे इस मामले में अनुकूलित करना काफी आसान है । आगे देखते हुए, मेरे कार्यक्रम में मैंने इतने बड़े ठिकानों पर भी O (1) खोज हासिल की।

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

छँटाई करते समय, हम प्राप्त मान से == j पर विचार करते हैं, चेकअप [j] को देखते हैं, अगर 0 है, तो सेट में ऐसे मान की तलाश करने का कोई मतलब नहीं है (यह O (1) के लिए जाँच की गई है)। अन्यथा, हम एक द्विआधारी खोज का उपयोग करते हैं जो पहले से ही ओ (लॉग (एन)) के साथ मुकाबला करता है।

यदि हम संख्याओं पर वापस जाते हैं, तो समान अनुकूलन के साथ प्रत्यक्ष गणना में एक ही हार्डवेयर, या वीडियो कार्ड पर कई दिनों का समय लगेगा।

अर्थात्, सामूहिक हैकिंग के लिए, यहां तक ​​कि प्रत्यक्ष गणना तालिकाओं की तुलना में अधिक लाभदायक है!

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

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

इसे स्वयं करें

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

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

मुख्य बात यह है कि यह 5-10 मिनट के लिए काम करता है।

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

चरण दो हम स्वयं के साथ अक्सर संयोजन के शब्दकोश के संयोजन की खोज शुरू करते हैं। अब मैं सिर्फ याद दिलाता हूं, लेकिन अगर सार स्पष्ट नहीं है, तो मैं अपने पिछले नोट को पढ़ने की सलाह देता हूं

इसे 5-10 मिनट के लिए भी काम करने दें, और ध्यान दें कि पिछली बार की तुलना में पासवर्ड खोजने के लिए यह बहुत तेज़ होगा।

और तीसरा कदम। प्राप्त पासवर्डों के "महत्वपूर्ण द्रव्यमान" को इकट्ठा करने के बाद, हम दसियों का कहना है, हम आवृत्ति विश्लेषण को दोहराते हैं और प्राप्त किए गए शब्दकोशों के अनुसार फिर से खोज शुरू करते हैं। अब आप नहीं रोक सकते - वह अपना काम करेगा।

फिलहाल, खोज बिना रुके दो घंटे से मेरे लिए काम कर रही है, और यह कहीं न कहीं 50-100 पासवर्ड प्रति सेकंड की दर से खोजती है।

और यहाँ परिणामी शब्दकोश का एक उदाहरण है: dl.dropbox.com/u/243445/md5h/relevant.txt
आप शब्दकोश के "टुकड़ों से इसे इकट्ठा" करने की कोशिश करके अपने पासवर्ड की सुरक्षा की जांच कर सकते हैं
यदि चार या कम टुकड़े पर्याप्त हैं - यह खराब है, तो इसे बदल दें।

"ब्रेक" करने में क्या कामयाब रहा

linkedinmel1234, andrea71103245, hockey101155239, magmag624222, carlito5657224, linda@790212, supercow779212, jesus143mary143, linkedin#239133, linkedinpassword123, thepassword1776000, 13051987159000, meatballstew123, latenightbreeze, whatthedillyo, friendofkellyg, hannah11emily9, linkedin7barry5, linkedin.passwd, linkedinrocksforeva, philip23marcus, 54fordpickup, nabe1959@, ge0rgin@, #1dust67, logic123tree456, ramgopal@123456, Jk971423, tiger!376400, ...

UPD एक ऐसा स्क्रीन है जिसमें पाए गए पासवर्ड के लिए गणना की जाती है (यदि आवश्यक हो तो मैं कुछ अन्य मापदंडों की गणना कर सकता हूं):



हम देखते हैं कि न तो पासवर्ड की लंबाई, न ही विशेष वर्णों का उपयोग, न ही रजिस्टरों और नंबरों का संयोजन, न ही यादृच्छिकता बचाता है।

कार्यक्रम

जैसा कि वादा किया गया है - यह कार्यक्रम है जो ऐसा करने में कामयाब रहा। और वैसे भी, आप परिणाम को दोहराने की कोशिश करने के लिए स्वतंत्र हैं (या सर्वोत्तम प्राप्त करने के लिए)।

स्रोत: dl.dropbox.com/u/243445/md5h/src.7z
बाइनरी: dl.dropbox.com/u/243445/md5h/MD5BLAST.exe

आश्चर्य न करें कि इसे एमडी 5 कहा जाता है- एसएचए- नहीं, क्योंकि, एक रिक्त के रूप में, मैंने अपना कार्यक्रम लिया, जिसके बारे में मैंने पहले ही बात की थी

CUDA टूलकिट अभी भी आवश्यक है: developer.nvidia.com/cuda-toolkit-32-downloads## Windows

GTX460 पर SHA1 के लिए डिक्शनरी की गति सूची में 5.7 मिलियन अद्वितीय हैश के साथ - 60 से अधिक mpwd / s। और "कम" गति को डांटे नहीं - यह वही है:
* SHA1;
* खोज के लिए 5.7 मिलियन हैश;
* मनमाना लंबाई के तारों से शब्दकोश का संयोजन।

इस कार्य के लिए उच्च गति वाले एनालॉग अभी भी नहीं हैं।

खोज शुरू करने के लिए, आपको hash_list.txt फ़ाइल में hashes को सहेजना होगा, शब्दों में शब्द ।.txt फ़ाइल और फ़ाइल:
MD5Blast words.txt 3 0.0
जहां 3 अधिकतम डिग्री (डिक्शनरी कॉन्टेक्शंस की संख्या) है, और 0.0 प्रतिशत में प्रारंभिक प्रगति है।
उपरोक्त आरेख के चरण 1 के लिए, word.txt में कीबोर्ड से दर्ज किए गए सभी वर्ण, प्रत्येक पंक्ति के लिए एक होना चाहिए:
a
b
c
...

प्रासंगिक संयोजनों की सूची प्राप्त करने के लिए:
MD5Blast _found.txt relevant.txt 1.0 4.0 16.0
जहां पहली फाइल विश्लेषण का स्रोत है, दूसरा परिणाम रिकॉर्ड करने के लिए है (हां, थोड़ा सा यूनिक्स-तरीका नहीं),
और शेष तीन पैरामीटर दो, तीन और चार-वर्ण संयोजनों के लिए अनुकूली आवृत्ति थ्रेसहोल्ड हैं, क्रमशः (उच्च संख्या - परिणामस्वरूप कम संयोजन, आप उनके साथ प्रयोग कर सकते हैं)।

छोटे निष्कर्ष

Source: https://habr.com/ru/post/In145843/


All Articles