क्षमता-आधारित सुरक्षा

From Vigyanwiki
Revision as of 17:53, 19 September 2023 by Manidh (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

चूंकि अधिकांश ऑपरेटिंग सिस्टम ऐसी सुविधा को लागू करते हैं जो क्षमताओं से मिलती-जुलती है, वे सामान्यतः पर्याप्त समर्थन प्रदान नहीं करते हैं जिससे कि संभवतः मौलिक रूप से अविश्वसनीय संस्थाओं के बीच क्षमताओं के आदान-प्रदान की अनुमति दी जा सके और पूरी प्रणाली में अभिगम अधिकार वितरित करने का प्राथमिक साधन प्रदान कर सकें। किसी क्षमता-पर आधारित प्रणाली, इसके विपरीत उस लक्ष्य को ध्यान में रखकर बनाई गई है।

परिचय

ये क्षमताएं क्षम्य संदर्भ (कंप्यूटर साइंस) के स्थान पर इसका उपयोग करके प्रणाली की सुरक्षा में सुधार करने के अपने उद्देश्य को प्राप्त करती हैं। किसी क्षम्य संदर्भ (उदाहरण के लिए, पथ (कंप्यूटिंग) ) एक वस्तु की पहचान करता है, लेकिन यह निर्दिष्ट नहीं करता है कि उस वस्तु के लिए कौन से एक्सेस अधिकार उपयुक्त हैं और उपयोगकर्ता प्रोग्राम जो उस संदर्भ को अपने साथ रखता है। परिणाम स्वरुप, संदर्भित ऑब्जेक्ट तक पहुंचने के किसी भी प्रयास को ऑपरेटिंग सिस्टम द्वारा मान्य किया जाना आवश्यक होता है, इस प्रकार अनुरोध करने वाले प्रोग्राम के परिवेश प्राधिकरण के आधार पर, सामान्यतः कंट्रोल सूची को खोलो (एसीएल) के उपयोग के माध्यम से उपयोग किया जाता है। इसके अतिरिक्त, क्षमताओं के साथ किसी प्रणाली में, मात्र तथ्य यह है कि उपयोगकर्ता प्रोग्राम के पास वह क्षमता रखता है जो उस क्षमता द्वारा निर्दिष्ट अधिकारों के अनुसार संदर्भित वस्तु का उपयोग करने का अधिकार देता है। सैद्धांतिक रूप में, विशेष क्षमताओं वाली किसी प्रणाली के सभी संस्थानों को सभी को केवल ये क्षमताएँ देकर किसी भी अभिगम नियंत्रण सूची या समान तंत्र की आवश्यकता को हटा देती है जिसकी उन्हें वास्तव में आवश्यकता होगी।

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

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

इस आलेख में चर्चा की गई क्षमताओं को पोर्टेबल ऑपरेटिंग सिस्टम इंटरफ़ेस (POSIX ) 1e/2c POSIX क्षमताओं के साथ भ्रमित नहीं होना चाहिए। इस प्रकार बाद वाले मोटे अनाज के लिए विशेषाधिकार होता हैं जिन्हें प्रक्रियाओं के बीच स्थानांतरित नहीं किया जा सकता है।

उदाहरण

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

मान लीजिए कि, उपयोगकर्ता प्रक्रिया की मेमोरी स्पेस में, निम्न स्ट्रिंग सम्मलित है:

/etc/passwd

चूंकि यह सिस्टम पर एक अनूठी वस्तु की पहचान करता है, इस कारण यह एक्सेस अधिकारों को निर्दिष्ट नहीं कर पाता है और इसलिए इसमें क्षमता नहीं है। मान लीजिए कि इसके अतिरिक्त मानों की निम्नलिखित जोड़ी भी सम्मलित हो तब:

/etc/passwd/
O_RDWR

यह जोड़ी पहुँच अधिकारों के एक सेट के साथ एक वस्तु की पहचान करती है। जोड़ी, चूंकि, अभी भी एक क्षमता नहीं है क्योंकि इन मानों पर उपयोगकर्ता प्रक्रिया का कब्ज़ा इस बारे में कुछ नहीं कहता है कि क्या वह पहुंच वास्तव में वैध होगी।

अब मान लीजिए कि उपयोगकर्ता प्रोग्राम के निम्नलिखित कथन को सफलतापूर्वक निष्पादित करता है:

int fd = open( /etc/passwd , O_RDWR);

यहाँ वैरिएबल fd अब इस प्रक्रिया की फ़ाइल डिस्क्रिप्टर सूची में फ़ाइल डिस्क्रिप्टर की अनुक्रमणिका सम्मलित कर देता हैं। यह फाइल डिस्क्रिप्टर एक प्रकार की क्षमता होती है। प्रक्रिया की फाइल डिस्क्रिप्टर सूची में इसके अस्तित्व को यह दिखाने के लिए पर्याप्त है कि प्रक्रिया वास्तव में वस्तु तक वैध पहुंच रखती है। इस व्यवस्था की प्रमुख विशेषता यह है कि फाइल डिस्क्रिप्टर टेबल कर्नेल (कंप्यूटर साइंस) में है और उपयोगकर्ता प्रोग्राम द्वारा सीधे हेरफेर नहीं किया जा सकता है।

प्रक्रियाओं के बीच साझा करना

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

एक क्षमता-आधारित प्रणाली में, क्षमताओं को एक तंत्र का उपयोग करके प्रक्रियाओं और भंडारण के बीच पारित किया जाता है जो ऑपरेटिंग सिस्टम द्वारा उन क्षमताओं की अखंडता को बनाए रखने के लिए जाना जाता है।

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

पॉज़िक्स क्षमताएं

पोर्टेबल ऑपरेटिंग सिस्टम इंटरफ़ेस (POSIX) ड्राफ्ट 1003.1e क्षमताओं की एक नामक अनुमतियों की अवधारणा को निर्दिष्ट करता है। चूंकि, POSIX क्षमताएँ इस आलेख की क्षमताओं से भिन्न हैं। POSIX क्षमता किसी वस्तु से संबद्ध नहीं है; CAP_NET_BIND_SERVICE क्षमता वाली एक प्रक्रिया 1024 के अनुसार किसी भी TCP पोर्ट पर सुन सकती है। यह सिस्टम Linux में पाया जाता है।[1]

इसके विपरीत, कैप्सिकम (यूनिक्स) यूनिक्स डिजाइन और पॉज़िक्स एपीआई के साथ एक वास्तविक क्षमता-प्रणाली मॉडल को संकरणित करता है। कैप्सिकम क्षमताएं फाइल डिस्क्रिप्टर का एक परिष्कृत रूप है, प्रक्रियाओं के बीच एक प्रत्यायोजित अधिकार और मौलिक POSIX के अतिरिक्त वस्तु प्रकार, जैसे प्रक्रियाओं को क्षमताओं के माध्यम से संदर्भित किया जा सकता है। कैप्सिकम क्षमता मोड में, प्रक्रियाएं ऑब्जेक्ट्स को देखने के लिए वैश्विक नेमस्पेस (जैसे फाइल सिस्टम नेमस्पेस) का उपयोग करने में असमर्थ हैं, और इसके अतिरिक्त उन्हें इनहेरिट या प्रत्यायोजित किया जाना चाहिए। यह प्रणाली FreeBSD में मूल रूप से पाया जाता है, लेकिन अन्य प्रणाली के लिए पैच उपलब्ध होते हैं।[2]

कार्यान्वयन

इस क्षमता-आधारित सुरक्षा को नियोजित करने वाले उल्लेखनीय अनुसंधान और वाणिज्यिक प्रणालियों में निम्नलिखित सम्मलित हैं:

संदर्भ

  1. capabilities(7) – Linux Programmer's Manual – Overview, Conventions and Miscellanea
  2. capsicum(4) – FreeBSD Kernel Interfaces Manual
  3. "जेनोड ओएस: ऑपरेटिंग सिस्टम और सॉफ्टवेयर सुरक्षा में ताजा हवा की सांस".
  4. "Google का Fuchsia ऑपरेटिंग सिस्टम वस्तुतः किसी भी चीज़ पर चलता है".


अग्रिम पठन

POSIX "capabilities" in Linux:

बाहरी संबंध