
OpenSSL DTLS CVE-2014-0221 दूरस्थ अस्वीकृति
OpenSSL DTLS CVE-2014-0221 दूरस्थ सेवा अस्वीकार
डेटाग्राम परिवहन स्तर सुरक्षा। *भौतिक स्तर
TCP स्तर डेटाग्राम समर्थन : TLS
UDP स्तर डेटाग्राम समर्थन : DTLS : हैंडशेक प्रक्रिया के उपयुक्त संशोधन के माध्यम से कुंजी विनिमय, प्रमाणीकरण, सुरक्षा पैरामीटर सेटिंग आदि को संभालता है, टाइमआउट और पुनर्प्रेषण के माध्यम से गैर-कनेक्शन-उन्मुख विशेषताओं वाले UDP का विश्वसनीय सुरक्षित संचार समर्थन करता है।
DTLS डेटाग्राम ट्रांसपोर्ट लेयर सिक्योरिटी का संक्षिप्त रूप है, जो UDP (यूज़र डेटाग्राम प्रोटोकॉल) आधारित संचार में सुरक्षा प्रदान करने के लिए एक प्रोटोकॉल है। TLS (ट्रांसपोर्ट लेयर सिक्योरिटी) आमतौर पर TCP (ट्रांसमिशन कंट्रोल प्रोटोकॉल) आधारित संचार में सुरक्षा प्रदान करने के लिए उपयोग किया जाता है, लेकिन UDP एक कनेक्शन-उन्मुख प्रोटोकॉल नहीं है और पैकेट-आधारित प्रोटोकॉल है, इसलिए TLS को सीधे लागू करना मुश्किल है। इस UDP आधारित संचार में सुरक्षा प्रदान करने के लिए DTLS डिज़ाइन किया गया था।
DTLS TLS की मूल संरचना के समान है, लेकिन कुछ प्रमुख अंतर हैं:
डेटाग्राम समर्थन: DTLS डेटाग्राम-आधारित प्रोटोकॉल UDP के अनुकूल बनाया गया है। TLS कनेक्शन-उन्मुख TCP के लिए अनुकूलित है, इसलिए इसे UDP पर लागू करने के लिए डेटाग्राम इकाइयों में काम करने के लिए संशोधित किया गया है।
हैंडशेक प्रक्रिया का उपयुक्त संशोधन: DTLS, TLS की तरह, संचार के प्रमाणीकरण, कुंजी विनिमय, सुरक्षा पैरामीटर सेटिंग आदि को संभालने के लिए हैंडशेक प्रक्रिया का उपयोग करता है। हालांकि, UDP की विशेषताओं के कारण पैकेट की हानि या क्रम में परिवर्तन हो सकता है, इसलिए ऐसी स्थितियों का सामना करने के लिए DTLS में तंत्र जोड़े गए हैं।
टाइमआउट और पुनर्प्रेषण: DTLS पैकेट की हानि या पुनर्प्रेषण की आवश्यकता होने पर टाइमआउट और पुनर्प्रेषण तंत्र शामिल करता है। यह UDP की गैर-कनेक्शन विशेषता की भरपाई करता है और विश्वसनीय सुरक्षित संचार को सक्षम बनाता है।
सुरक्षा पहलू में विचार: DTLS, TLS के समान सुरक्षा प्रोटोकॉल का उपयोग करता है ताकि डेटा की गोपनीयता, अखंडता और प्रमाणीकरण सुनिश्चित हो। इस प्रकार UDP आधारित अनुप्रयोगों में भी सुरक्षित रूप से डेटा स्थानांतरित किया जा सकता है।
DTLS का उपयोग मुख्य रूप से वॉइस ओवर IP (VoIP), मल्टीमीडिया स्ट्रीमिंग, गेम सर्वर आदि में जहां UDP का उपयोग होता है, सुरक्षा प्रदान करने के लिए किया जाता है।
OpenSSL क्यों : DTLS क्या है : UDP-आधारित TLS, DTLS 1.0 OpenSSL में कार्यान्वित किया गया था
गढ़े गए हैंडशेक ट्रांसमिशन के माध्यम से मध्यस्थ (MITM) हमला करके ट्रांसमिटेड डेटा को डिक्रिप्ट करना और सर्वर/क्लाइंट के बीच ट्रांसमिटेड डेटा में हेरफेर करना संभव (CVE-2014-0224)
असामान्य DTLS हैंडशेक को OpenSSL DTLS क्लाइंट पर भेजकर सेवा अस्वीकार हमला संभव (CVE-2014-0221)
असामान्य DTLS खंड को OpenSSL DTLS क्लाइंट या सर्वर पर भेजकर मनमाना कोड निष्पादन संभव (CVE-2014-0195)
do_ssl3_write फ़ंक्शन में दोष के कारण मनमाना कोड निष्पादन संभव भेद्यता (CVE-2014-0198)
यह भेद्यता OpenSSL 1.0.0 और 1.0.1 में SSL_MODE_RELEASE_BUFFERS विकल्प सक्रिय होने पर होती है (यह विकल्प डिफ़ॉल्ट रूप से निष्क्रिय है)
ssl3_read_bytes फ़ंक्शन में रेस कंडीशन के कारण हमलावर सत्र में डेटा इंजेक्ट कर सकता है या सेवा अस्वीकार हमला कर सकता है (CVE-2010-5298)
यह भेद्यता OpenSSL 1.0.0 और 1.0.1 का उपयोग करने वाले मल्टीथ्रेडेड एप्लिकेशन में SSL_MODE_RELEASE_BUFFERS विकल्प सक्रिय होने पर होती है (यह विकल्प डिफ़ॉल्ट रूप से निष्क्रिय है)
anonymous ECDH ciphersuites सक्रिय होने पर OpenSSL TLS क्लाइंट पर सेवा अस्वीकार हमला हो सकता है (CVE-2014-3470)
OpenSSL 0.9.8 श्रृंखला
OpenSSL 1.0.0 श्रृंखला
OpenSSL 1.0.1 श्रृंखला
इनमें से CVE-2014-0221 असामान्य DTLS हैंडशेक को OpenSSL DTLS क्लाइंट पर भेजकर सेवा अस्वीकार हमला संभव बनाता है
< DTLS सेवा अस्वीकार भेद्यता (CVE-2014-0221) >
o DTLS (डेटाग्राम ट्रांसपोर्ट लेयर सिक्योरिटी) TLS पर आधारित एक प्रोटोकॉल है जो एन्क्रिप्टेड डेटाग्राम का परिवहन करने की अनुमति देता है
o जब DTLS क्लाइंट को एक असामान्य DTLS हैंडशेक संदेश (DTLS हैलो संदेश) भेजा जाता है, तो OpenSSL को रिकर्सिव स्थिति में प्रवेश करने के लिए कार्यान्वित किया गया है, जिससे सेवा अस्वीकार हमला संभव है
if(!s->server && s->d1->r_msg_hdr.frag_off == 0 && wire[0] == SSL3_MT_HELLO_REQUEST) {
if(wire[1] == 0 && wire[2] == 0 && wire[3] == 0) {
if(s->msg_callback)
s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
wire, DTLS1_HM_HEADER_LENGTH, s, s->msg_callback_arg);
s->init_num = 0;
return dtls1_get_message_fragment(s, st1, stn, max, ok);
}
else {
al=SSL_AD_UNEXPECTED_MESSAGE;
SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT,SSL_R_UNEXPECTED_MESSAGE);
goto f_err;
}
}