
💪 SSL/TLS CVE-2011-3389 के विरुद्ध BEAST हमले का प्रूफ ऑफ कॉन्सेप्ट 💪
यह प्रूफ ऑफ कॉन्सेप्ट BEAST (Browser Exploit Against SSL/TLS) हमले के पीछे की क्रिप्टोग्राफी पर केंद्रित है, जिसे थाई डुओंग और जुलियानो रिज़ो ने 23 सितंबर 2011 को प्रस्तुत किया था। यह एक चयनित-प्लेनटेक्स्ट हमला है और यदि उपयोग की जाने वाली ट्रांसपोर्ट लेयर सिक्योरिटी TLS1.0 या SSLv3 है, तो यह आपको संवेदनशील जानकारी प्राप्त करने की अनुमति देता है। मूल प्रूफ ऑफ कॉन्सेप्ट यहाँ पाया जा सकता है: Here come the Ninjas
नोट: यह मूल रूप से फिलिप रोगावे द्वारा खोजी गई भेद्यता का एक कार्यान्वयन भी है। 2002 में खोजे जाने के बाद, 2011 में BEAST तक कोई एक्सप्लॉइट जारी नहीं किया गया था। OpenSSL को यह समस्या पहले से ही ज्ञात थी और इसीलिए उन्होंने अप्रैल 2006 में TLS1.0 को TLS1.1 में अपडेट किया।
2 पहले को छोड़कर प्रत्येक रिकॉर्ड के लिए CBC IV पिछले रिकॉर्ड का अंतिम सिफरटेक्स्ट ब्लॉक होता है। इस प्रकार एन्क्रिप्शन उन विरोधियों के खिलाफ सुरक्षित नहीं है जो अनुकूलनशील रूप से प्लेनटेक्स्ट चुन सकते हैं;
SSLv3/TLS1.0 ऐसे प्रोटोकॉल हैं जो आपके डेटा को एन्क्रिप्ट/डिक्रिप्ट और सुरक्षित करते हैं। हमारे मामले में, वे दोनों CBC सिफर मोड चेनिंग का उपयोग करते हैं। प्लेनटेक्स्ट को एन्क्रिप्शन एल्गोरिथम (AES, DES, 3DES) के अनुसार ब्लॉकों में विभाजित किया जाता है और लंबाई 8 या 16 की गुणज होती है। यदि प्लेनटेक्स्ट लंबाई को नहीं भरता है, तो लापता स्थान को पूरा करने के लिए अंत में पैडिंग जोड़ी जाती है। मैं दृढ़ता से सुझाव देता हूं कि इस रीडमी को पढ़ने के लिए आप एन्क्रिप्शन और डिक्रिप्शन की इन छवियों को खोलें।
मूल रूप से यह कुछ सरल XOR है, आप यह वीडियो भी देख सकते हैं (मैं नहीं) https://www.youtube.com/watch?v=0D7OwYp6ZEc।
मैं IV को अगले बिंदु में समझाऊंगा। याद रखें कि ये सभी गुण हमारे हमले को आगे बढ़ाने में मदद करेंगे।
जब हम CBC का उपयोग करते हैं तो हमें IV नामक एक इनिशियलाइज़ेशन वेक्टर की आवश्यकता होती है। यह IV यादृच्छिक (या निश्चित) होता है, लेकिन किसी भी स्थिति में यह किसी के लिए अनुमान लगाने योग्य नहीं होना चाहिए। TLS1.0 और SSLv3 में अनुरोध का पहला IV यादृच्छिक होता है, ठीक है। लेकिन समय बचाने और हर बार नया यादृच्छिक IV उत्पन्न न करने के लिए, TLS1.0 और SSLv3 के कार्यान्वयन ने पिछले सिफरटेक्स्ट के अंतिम ब्लॉक को IV के रूप में उपयोग किया। दूसरे शब्दों में, IV अब अनुमान लगाने योग्य है। हम मान लेंगे कि प्रत्येक ब्लॉक की लंबाई 8 (DES) होगी और हमलावर के पास सभी सिफर प्राप्त करने के लिए MiTM है।
उदाहरण :
C0 | C... | Ci-1 | Ci | Ci+1 |Cn
अब दिलचस्प हिस्सा, ये एक बाइट प्राप्त करने के लिए हमले के विभिन्न क्रिप्टोग्राफ़िक चरण हैं:
bbbbbbbTHIS_IS_A_SECRET_COOKIE को पीड़ित के माध्यम से भेज सकता है।आप गुप्त कुकी से पहले सात b देख सकते हैं। यदि किसी ब्लॉक की लंबाई 8 है तो हमें 7 ज्ञात बाइट्स भेजने की आवश्यकता है। यह जानकारी बहुत महत्वपूर्ण है, हमलावर पहले ब्लॉक के पहले 7 बाइट्स जानता है।
लेकिन क्यों? यह हमें 8 बाइट्स खोजने के लिए 256^8 के बजाय केवल एक बाइट खोजने के लिए 256 संभावनाएं देता है!
अब पीड़ित अनुरोध भेजता है और इसे इस प्रकार एन्क्रिप्ट किया जाएगा:
C0 | C1 | C2 | C3 | C4
जहाँ C0 = Ek(IV ⊕ bbbbbbbT) = Ek(C²n ⊕ bbbbbbbT)
P'0 = C²n ⊕ C4 ⊕ bbbbbbbX
एकमात्र अज्ञात तत्व X है, 256 संभावनाएं हैं इसलिए वह अधिकतम 256 अक्षर आजमाएगा।
अनुरोध भेजा जाता है और इस प्रकार एन्क्रिप्ट किया जाता है:
C'0 = Ek(P'0 ⊕ IV')
C'0 = Ek(C²n ⊕ C4 ⊕ bbbbbbbX ⊕ IV') या C4 ⊕ IV' = 0
C'0 = Ek(C²n ⊕ bbbbbbbX)
C'0 = Ek(IV ⊕ bbbbbbbX)
अब वह तुलना करता है: C'0 और C0, यदि वे बराबर हैं, तो उसे स्थिति 8 में बाइट X मिल गया है। यदि यह मेल नहीं खाता है, तो वह दूसरे अक्षर के साथ पुनः प्रयास करता है और फिर से तुलना करता है, इत्यादि।
अब हमारे पास एक बाइट है, हम पिछले अनुरोध को एक स्थान बाईं ओर खिसकाकर एक और बाइट प्राप्त कर सकते हैं: bbbbbbTHIS_IS_A_SECRET_COOKIE। अब उसके पास छह b हैं और हम T भी जानते हैं, इसलिए हमारे पास एक अज्ञात अक्षर है। हम एक नया P'0 = C0 ⊕ C4 ⊕ bbbbbbTX बनाते हैं, इत्यादि।
नोट: केवल दो अनुरोधों के साथ एक और तरीका यह है कि प्लेनटेक्स्ट का पहला ब्लॉक सेट किया जाए और इस जानकारी का उपयोग तीनों XOR के लिए किया जाए। हमें अब C² के अंतिम ब्लॉक की आवश्यकता नहीं है। C1 = Ek(C0 ⊕ bbbbbbbT) और फिर P'0 = C0 ⊕ C4 ⊕ bbbbbbbX। उसे C'0 और C1 की तुलना भी करनी होगी। यह इसे करने का एक और तरीका है, आप देख सकते हैं कि PoC में मैंने दोनों संभावनाओं को कोड किया है :)
अब हम सभी अक्षर प्राप्त कर सकते हैं!
python BEAST-poc.py
एक हमलावर HTTP प्रोटोकॉल का उपयोग नहीं कर सकता क्योंकि पहला ब्लॉक GET / HTTP/1.1\r\n से भरा होगा।
... प्रत्येक अनुरोध के पहले कुछ बाइट्स को नियंत्रित नहीं कर सकता क्योंकि वे हमेशा GET /, POST /, आदि जैसी निश्चित स्ट्रिंग के रूप में सेट होते हैं। इसके बजाय वह socket का उपयोग कर सकता है।
उसे एक दुर्भावनापूर्ण पृष्ठ में कुछ जावास्क्रिप्ट इंजेक्ट करने की भी आवश्यकता है। पीड़ित को इस पृष्ठ से जुड़ा रहना होगा और हमला पूरा होने तक जुड़ा रहना होगा। यह एक चयनित-प्लेनटेक्स्ट हमला है, इसलिए हमलावर जावास्क्रिप्ट कोड के माध्यम से हर वह प्लेनटेक्स्ट भेज सकता है जो वह चाहता है और परिणाम को Man in The Middle के साथ इंटरसेप्ट कर सकता है। हमले का यह आरेख है:

इस हमले को सफल होने के लिए महत्वपूर्ण शर्तों की आवश्यकता होती है (TLS1.0 या उससे निचला संस्करण, CBC सिफर मोड, MiTM, दुर्भावनापूर्ण जावास्क्रिप्ट)। लेकिन थाई डुओंग और जुलियानो रिज़ो ने साबित किया कि यह संभव हो सकता है और उन्होंने Paypal वेबसाइट पर कुकी चुराकर अपने एक्सप्लॉइट का प्रदर्शन किया।
अब सब कुछ ठीक कर दिया गया है और इस हमले के साकार होने की संभावना बहुत कम है।
| एन्क्रिप्शन | डिक्रिप्शन |
|---|
| Ci = Ek(Pi ⊕ Ci-1), and C0 = IV | Pi = Dk(Ci) ⊕ Ci-1, and C0 = IV |