4 पॉइंट द्वारा GN⁺ 2024-04-16 | 4 टिप्पणियां | WhatsApp पर शेयर करें

PuTTY टूल की NIST P521 curve ECDSA private key signature generation भेद्यता

  • PuTTY 0.68 से 0.80 तक के सभी versions में NIST P521 curve का उपयोग करने वाली ECDSA private key से signature generate करने वाले code में एक गंभीर भेद्यता है
    • यह तब होती है जब PuTTY या Pageant, SSH server पर authentication करते समय key से signature generate करता है
    • इस भेद्यता को CVE-2024-31497 आवंटित किया गया है
    • Ruhr University Bochum के Fabian Bäumer और Marcus Brinkmann ने इसे खोजा

भेद्यता का प्रभाव

  • इस भेद्यता का प्रभाव यह है कि private key उजागर हो सकती है
    • यदि किसी attacker के पास कुछ दर्जन signed messages और public key हो, तो उसके पास private key को recover करने के लिए पर्याप्त जानकारी होगी
    • इसके जरिए वह मानो उपयोगकर्ता ही हो, इस तरह signatures forge कर सकता है और उस key का उपयोग करने वाले सभी servers में login कर सकता है
  • ऐसे signatures प्राप्त करने के लिए attacker को केवल उस server से थोड़ी देर के लिए समझौता करना होगा जहाँ key से authentication किया जाता है, या key धारण किए हुए Pageant copy तक थोड़ी देर के लिए access चाहिए होगा
    • हालांकि, ये signatures SSH connection को passively snoop करने वाले व्यक्ति को उजागर नहीं होते
  • यदि आपके पास इस प्रकार की key है, तो इसे तुरंत निरस्त करने की सिफारिश की जाती है
    • सभी OpenSSH authorized_keys files और अन्य SSH servers की वही files से पुरानी public key हटा देनी चाहिए ताकि compromise हुई key के signatures अब मूल्यहीन हो जाएँ
    • इसके बाद नई key pair generate करके उसे replace करें

प्रभावित key types

  • प्रभावित होने वाला एकमात्र key type 521-bit ECDSA है
    • Windows PuTTYgen में 'Key fingerprint' box की शुरुआत में ecdsa-sha2-nistp521 दिखे, या Windows Pageant में load होने पर 'NIST p521' के रूप में वर्णित हो, या SSH protocol अथवा key file में ecdsa-sha2-nistp521 से शुरू होने वाली ID वाली key
    • अन्य आकारों की ECDSA और अन्य key algorithms प्रभावित नहीं हैं
    • विशेष रूप से Ed25519 प्रभावित नहीं है

त्रुटि का विवरण

  • सभी DSA signature schemes को signing के दौरान एक random value generate करनी होती है
    • इसे 'nonce' (एक ऐसा cryptographic term जिसका अर्थ है केवल एक बार उपयोग होने वाला value) या k नाम से जाना जाता है
  • यह अच्छी तरह ज्ञात है कि यदि attacker प्रयुक्त k value का अनुमान लगा सके, या एक ही k से बने दो signatures ढूँढ ले, तो वह तुरंत private key recover कर सकता है
    • इसलिए उच्च-गुणवत्ता वाले randomness source के बिना किसी system पर DSA signatures generate करना जोखिमपूर्ण है
  • PuTTY का development Windows पर हुआ था, इसलिए शुरू में इसमें cryptographic random number generator था ही नहीं
    • इसलिए PuTTY अब तक random numbers का उपयोग किए बिना deterministic तरीके से k generate करता रहा
    • इसका मुख्य तरीका यह था कि signing किए जाने वाले message और private key दोनों को hash input में शामिल करके एक secure hash calculate किया जाए
  • यह तकनीक आज मुख्यधारा में है, और RFC 6979 इसे करने की एक विशिष्ट तथा सुविख्यात विधि को document करता है
    • लेकिन PuTTY 2001 से यही काम कर रहा था और RFC 2013 तक प्रकाशित नहीं हुआ था, इसलिए उसने उस specification का पालन नहीं किया

भेद्यता का कारण

  • PuTTY की तकनीक SHA-512 hash बनाकर, फिर उसे DSA system में उपयोग होने वाले group order q के modulo में reduce करने पर आधारित थी
  • P521 को छोड़कर अन्य सभी मामलों में 512-bit संख्या को q से reduce करने पर उत्पन्न bias नगण्य स्तर का होता है
  • लेकिन P521 के मामले में q 521-bit का है (अर्थात 512-bit से बड़ा), इसलिए 512-bit संख्या को q से reduce करने का कोई प्रभाव नहीं पड़ता
    • परिणामस्वरूप k value मिलती है जिसके ऊपर के 9 bits हमेशा 0 होते हैं
  • इसी bias के कारण key recovery attack संभव हो जाता है

भेद्यता में किया गया सुधार

  • इस भेद्यता को ठीक करने के लिए सभी DSA और ECDSA key types के लिए PuTTY की पुरानी k generation system को पूरी तरह हटाकर RFC 6979 तकनीक अपनाई गई
    • Ed25519 जैसे EdDSA keys पहले से ही अलग system का उपयोग करते थे, इसलिए उनमें कोई बदलाव नहीं किया गया
  • हालांकि, इससे इस तथ्य पर कोई असर नहीं पड़ता कि पुरानी k generator का उपयोग करके जब भी signatures बनाए गए, तब मौजूदा P521 private keys के बारे में जानकारी पहले ही लीक हो चुकी थी

GN⁺ की राय

  • यह भेद्यता अपेक्षाकृत हाल में खोजी गई है, लेकिन लगता है कि यह 2001 से उपयोग की जा रही पद्धति की समस्या के कारण हुई। इसे उस जोखिम के उदाहरण के रूप में देखा जा सकता है जो शुरू से standard का पालन न करने वाली custom implementation में होता है।
  • यह भेद्यता केवल एक खास प्रकार की key को प्रभावित करती है, लेकिन यदि उस key का कभी उपयोग किया गया है, तो यह गंभीर समस्या बन सकती है। इसलिए प्रभावित keys को तुरंत निरस्त करना महत्वपूर्ण है।
  • open source projects में cryptography से जुड़े हिस्सों को standards के अनुरूप रखना चाहिए, और बाहरी verification भी आवश्यक लगता है। विशेष रूप से random number generation का भाग बहुत महत्वपूर्ण है, इसलिए operating system या verified libraries पर निर्भर रहना अधिक सुरक्षित होगा।
  • PuTTY एक व्यापक रूप से उपयोग किया जाने वाला open source terminal emulator है, जो SSH, Telnet, Rlogin protocols को support करता है, और connection information save करने की सुविधा के कारण सुविधाजनक रूप से उपयोग होता है। आगे चलकर vulnerability patches पर सक्रिय रूप से प्रतिक्रिया देना आवश्यक लगता है।
  • macOS या Linux में PuTTY के विकल्प के रूप में default terminal app या iTerm2 का उपयोग किया जा सकता है। Windows में Windows Terminal, PowerShell, Cmder आदि को विकल्प के रूप में विचार किया जा सकता है।

4 टिप्पणियां

 
tominam2 2024-04-16

आह..

 
kuroneko 2024-04-16

मुझे नहीं लगता कि मैंने कभी इस तरह की key इस्तेमाल की है, लेकिन फिर भी मैंने update कर लिया है।

 
dlehals2 2024-04-16

इसे देखकर मैंने तुरंत 0.81 पर अपडेट कर लिया, हाहा

 
GN⁺ 2024-04-16
Hacker News की राय

नीचे Hacker News टिप्पणियों का सार दिया गया है:

  • PuTTY में उपयोग होने वाले ECDSA P-521 key generation तरीके में एक vulnerability मिली है। 521-bit modulus का उपयोग करते समय k वैल्यू भी 521-bit random होनी चाहिए, लेकिन PuTTY ने केवल 512-bit random इस्तेमाल किया, जिससे ऊपर के 9 bit 0 से भर गए। इससे linear algebra के ज़रिए private key लीक हो सकती है।
  • PuTTY डेवलपर Simon Tatham की ईमानदार और स्पष्ट vulnerability disclosure शैली की काफी सराहना की गई। उन्होंने बिना बहाना बनाए या बात को छोटा करके नहीं, बल्कि तथ्य वैसे के वैसे बताए।
  • यह vulnerability कैसे खोजी गई, इस बारे में background explanation पर्याप्त नहीं है।
  • हाल के Windows versions में OpenSSH डिफ़ॉल्ट रूप से शामिल है, इसलिए अब PuTTY का उपयोग करना ज़रूरी नहीं है। फिर भी आदत या inertia की वजह से बहुत से लोग इसे इस्तेमाल करते रहते हैं.
  • डिफ़ॉल्ट settings का उपयोग न करके इस key type को चुनने वाले लोग शायद बहुत अधिक नहीं होंगे।
  • अगर आप P521 host key इस्तेमाल कर रहे हैं, तो client upgrade के बाद key rotation की ज़रूरत पड़ सकती है।
  • RNG या modular arithmetic की ज़रूरत न होने वाले EdDSA पर स्विच करने पर विचार किया जा सकता है।
  • अब जाकर एहसास हुआ कि PuTTY नाम खिड़की के शीशे को पकड़कर रखने वाली putty से आया है।
  • यह समझ नहीं आता कि PuTTY ने SHA-512 hash result को q से modular operation क्यों किया। ज़रूरी bits जितने हों उतना काटकर इस्तेमाल करना, या message और private key को अलग-अलग hash करके फिर उन्हें combine करना, ज़्यादा बेहतर लगता है।
  • 521-bit random number की जगह ऊपर के 9 bit 0 वाले number का उपयोग करने पर 60 signatures के बाद private key लीक हो जाती है, ऐसा कहा गया है; इसका सिद्धांत क्या है, यह जानने की जिज्ञासा है।