प्रॉम्प्ट और संदर्भ
एक कमांड-लाइन टूल को इनपुट फ़ाइलों के एक छोटे सेट को पढ़ना होगा, एक निर्दिष्ट आउटपुट डायरेक्टरी में लिखना होगा, और अविश्वसनीय प्लगइन्स को चलाना होगा। डिप्लॉयमेंट में अतिरिक्त प्रिविलेज नहीं दिए जा सकते हैं, और कर्नेल केवल एक पुराना Landlock ABI एक्सपोज़ कर सकता है। आप सैंडबॉक्स को कैसे डिज़ाइन करेंगे, यह कैसे सत्यापित करेंगे कि नियम काम कर रहे हैं, और एक सख्त नियम सेट को पूरे सिस्टम के सुरक्षित होने के प्रमाण के रूप में मानने से कैसे बचेंगे?
यह प्रश्न Linux, सुरक्षा, बिल्ड-सिस्टम और मल्टी-टेनेंट निष्पादन भूमिकाओं के लिए उपयुक्त है। इसका मुख्य उद्देश्य Landlock को एक अप्रिविलेज्ड, स्टैकेबल प्रोसेस सेल्फ-रेस्ट्रिक्शन मैकेनिज्म के रूप में समझना है, न कि केवल एक C स्ट्रक्चर को याद रखना।
इंटरव्यूअर क्या जांच रहा है
- क्या आप रूल डोमेन, रूल प्रकार, एक्सेस अधिकार और प्रोसेस स्कोप के बीच अंतर समझते हैं।
- क्या आप समर्थित परमिशन सेट बनाने से पहले कर्नेल ABI की जांच (probe) करते हैं।
- क्या आप जानते हैं कि प्रतिबंध से पहले खोले गए फ़ाइल डिस्क्रिप्टर का अलग से ऑडिट करना आवश्यक है।
- क्या आप fork, exec, थ्रेड्स और चाइल्ड-प्रोसेस इनहेरिटेंस के बारे में सही तर्क दे पाते हैं।
- क्या विफलता प्रबंधन (failure handling), ऑब्जर्वेबिलिटी, रोलबैक और परीक्षण इस रोलआउट का हिस्सा हैं।
पहले स्पष्ट करने योग्य प्रश्न
- किन पाथ्स को पढ़ने, बनाने, हटाने, निष्पादित करने और नेटवर्क क्षमताओं की आवश्यकता है?
- क्या कोई प्लगइन fork, exec, थ्रेड बना सकता है, या इनहेरिट किए गए फ़ाइल डिस्क्रिप्टर प्राप्त कर सकता है?
- न्यूनतम कर्नेल संस्करण क्या है और स्वीकार्य सुरक्षा डाउनग्रेड क्या है?
- क्या प्रोसेस के प्रतिबंधित होने से पहले लॉग, इनपुट फ़ाइलें, सॉकेट्स या डिवाइस खोले जाते हैं?
- क्या केवल फ़ाइल एक्सेस ही एकमात्र सीमा है, या seccomp, कंटेनर, या MAC की भी आवश्यकता है?
तीस-सेकंड का उत्तर
“मैं पहले Landlock ABI की जांच करूंगा, एक रूल डोमेन बनाऊंगा, इनपुट ट्री को केवल पढ़ने का और आउटपुट ट्री को बनाने/लिखने का एक्सेस दूंगा, फिर वर्तमान प्रोसेस को प्रतिबंधित करूंगा ताकि चाइल्ड प्रोसेस इस पॉलिसी को इनहेरिट कर सकें। प्रतिबंध से पहले खोले गए फ़ाइल डिस्क्रिप्टर का स्पष्ट ऑडिट आवश्यक है क्योंकि वे उपयोग योग्य रह सकते हैं। मैं पुराने ABIs के लिए सबसे छोटा सामान्य परमिशन सेट बनाऊंगा; यदि कोई अनिवार्य आइसोलेशन क्षमता अनुपलब्ध है, तो टूल चलने से मना कर देगा या बिना सैंडबॉक्स के चुपचाप चलने के बजाय एक स्पष्ट रूप से लॉग किए गए कम जोखिम वाले केवल-पढ़ने योग्य (read-only) मोड में प्रवेश करेगा।”
चरण-दर-चरण विस्तृत विश्लेषण
चरण 1: थ्रेट मॉडल और न्यूनतम अधिकारों को परिभाषित करें
प्लगइन क्या कर सकता है, इसकी सूची बनाएं: होस्ट फ़ाइलों को पढ़ना, आउटपुट को ओवरराइट करना, किसी अन्य प्रोग्राम को निष्पादित करना, डायरेक्टरीज़ को हटाना, नेटवर्क तक पहुंचना, या इनहेरिट किए गए डिस्क्रिप्टर्स का दुरुपयोग करना। प्रत्येक क्रिया को Landlock द्वारा समर्थित फ़ाइल सिस्टम अधिकारों से मैप करें। केवल इनपुट ट्री के तहत आवश्यक पढ़ने के और आउटपुट ट्री के तहत लिखने या बनाने के अधिकार दें। रूट को खोलने और एप्लिकेशन जांच पर निर्भर रहने के बजाय प्रत्येक गैर-स्वीकृत अधिकार को अस्वीकृत (denied) रखें।
चरण 2: ABI की जांच (Probe) करें
Landlock अपने ABI संस्करणों के साथ नए एक्सेस अधिकार जोड़ता है। स्टार्टअप पर, उपलब्ध ABI को पढ़ें और वांछित पॉलिसी को अनिवार्य और वैकल्पिक अधिकारों में विभाजित करें। वैकल्पिक अधिकार केवल तभी जोड़ें जब वे समर्थित हों। एक अज्ञात अधिकार नियम निर्माण को विफल कर सकता है, इसलिए पॉलिसी बिल्डर को क्षमताओं के प्रति जागरूक होना चाहिए। पहचानी गई ABI, पॉलिसी संस्करण और प्रभावी अधिकारों को संरचित फ़ील्ड के रूप में लॉग करें।
चरण 3: रूल डोमेन बनाएं और पाथ्स को बाइंड करें
एक रूल डोमेन बनाएं, स्टार्टअप के दौरान विश्वसनीय डायरेक्टरी डिस्क्रिप्टर्स को खोलें, और प्रत्येक ट्री के लिए आवश्यक न्यूनतम अधिकारों के साथ पाथ नियम बाइंड करें। प्लगइन कोड चलने से पहले उन डिस्क्रिप्टर्स को खोलने से पॉलिसी सेटअप हमलावर द्वारा नियंत्रित पाथ्स को हल (resolve) करने से बच जाता है। नियमों को संयोजित करने के बाद, वर्तमान प्रोसेस को प्रतिबंधित करें और थ्रेड्स तथा बाद के exec कॉल्स के इनहेरिटेंस व्यवहार का परीक्षण करें।
चरण 4: खुले संसाधनों और इनहेरिटेंस का ऑडिट करें
Landlock बाद के एक्सेस अनुरोधों को सीमित करता है; प्रतिबंध से पहले खोले गए डिस्क्रिप्टर अभी भी उपयोग करने योग्य हो सकते हैं। उन डिस्क्रिप्टर्स को बंद करें जिनकी आवश्यकता नहीं है, आवश्यक डिस्क्रिप्टर्स को नियंत्रित संसाधनों के रूप में चिह्नित करें, और असंबंधित डिस्क्रिप्टर्स को आगे पास होने से रोकें। मानक इनपुट और आउटपुट, लॉग, सॉकेट्स, डायरेक्टरी हैंडल और प्लगइन्स को दिए गए डिस्क्रिप्टर्स की समीक्षा करें। fork, exec, थ्रेड्स और चाइल्ड प्रोसेस का अलग से परीक्षण करें।
चरण 5: विफलता और डिफेंस इन डेप्थ (Defense in Depth) को परिभाषित करें
Landlock प्रोसेस द्वारा पहले से रखी गई प्रत्येक सिस्टम कॉल, नेटवर्क ऑपरेशन या क्षमता को स्वचालित रूप से सीमित नहीं करता है। जब थ्रेट मॉडल की आवश्यकता हो, तो seccomp, कंटेनर, यूज़र नेमस्पेस या सिस्टम MAC जोड़ें। यदि अनिवार्य रूल डोमेन नहीं बनाया जा सकता है, तो अस्वीकृति, केवल-पढ़ने योग्य मोड, या अनुमोदन गेट का चयन करें। प्रत्येक डाउनग्रेड को उसके कारण के साथ एक अलर्ट जारी करना चाहिए; इसे कभी भी बिना सुरक्षा सीमा के किसी अविश्वसनीय प्लगइन को चुपचाप निष्पादित नहीं करना चाहिए।
चरण 6: सत्यापित करें, निरीक्षण करें और रोलबैक करें
अनुमति/अस्वीकृति (allow/deny) मैट्रिक्स को कवर करने के लिए CI फिक्स्चर का उपयोग करें: इनपुट पढ़ना सफल होता है, आउटपुट लिखना सफल होता है, अनुमत ट्रीज़ के बाहर पढ़ना विफल होता है, और हटाने या निष्पादित करने के संचालन डिज़ाइन के अनुसार विफल होते हैं। चाइल्ड प्रोसेस में इन जांचों को दोहराएं। ABI, पॉलिसी हैश, अस्वीकृत-ऑपरेशन की संख्या और निकास (exit) कारणों को रिकॉर्ड करें। कैनरी डिप्लॉयमेंट के दौरान, गलत अस्वीकृतियों (false denials) को मापें; जब किसी प्लगइन को किसी अन्य अधिकार की आवश्यकता होती है, तो उसकी पैरेंट डायरेक्टरी को खोलने के बजाय अनुमत सूची और परीक्षणों को अपडेट करें। एक रोलबैक प्लगइन को अक्षम कर सकता है या सैंडबॉक्स-विफलता अलर्ट को बनाए रखते हुए एक पुराने रनर को पुनर्स्थापित कर सकता है।
उच्च गुणवत्ता वाला नमूना उत्तर
मैं प्लगइन की फ़ाइल, निष्पादन और इनहेरिटेंस आवश्यकताओं के लिए परमिशन इन्वेंट्री के साथ शुरुआत करूंगा, फिर लक्षित कर्नेल के Landlock ABI की जांच करूंगा। रूल डोमेन इनपुट-ट्री को पढ़ने और आउटपुट-ट्री को बनाने और लिखने की अनुमति देता है; वैकल्पिक अधिकार एक-एक करके सक्षम किए जाते हैं, जबकि एक अनिवार्य क्षमता गायब होने पर निष्पादन को अनुपलब्ध कर दिया जाता है। प्रतिबंध से पहले, मैं अनावश्यक डिस्क्रिप्टर्स को बंद करता हूं और मानक स्ट्रीम्स, लॉग्स, सॉकेट्स और प्लगइन-प्रदत्त डिस्क्रिप्टर्स का ऑडिट करता हूं, फिर fork, exec, थ्रेड और चाइल्ड व्यवहार को सत्यापित करता हूं।
प्रोसेस को प्रतिबंधित करने के बाद, मैं वास्तविक प्लगइन के साथ एक allow/deny मैट्रिक्स चलाऊंगा और ABI, पॉलिसी संस्करण, अस्वीकृत संचालन और डाउनग्रेड के कारण को रिकॉर्ड करूंगा। Landlock एक स्टैकेबल फ़ाइल सिस्टम सीमा प्रदान करता है, न कि एक पूर्ण प्रिविलेज या नेटवर्क सैंडबॉक्स, इसलिए seccomp, कंटेनर, यूज़र नेमस्पेस, या MAC की अभी भी आवश्यकता हो सकती है। यदि मुख्य पॉलिसी स्थापित नहीं की जा सकती है, तो रनर अस्वीकार कर देता है या स्पष्ट रूप से अलर्ट किए गए केवल-पढ़ने योग्य मोड में प्रवेश करता है; यह कभी भी चुपचाप पॉलिसी को बायपास नहीं करता है।
सामान्य गलतियां
- Landlock को प्रिविलेज आइसोलेशन मानना → यह मुख्य रूप से बाद के नियंत्रित एक्सेस को रोकता है → थ्रेट मॉडल के अनुसार नियंत्रणों को संयोजित करें।
- ABI के अंतरों की अनदेखी करना → पुराने कर्नेल पर नए अधिकार अज्ञात हो सकते हैं → जांच करें और सबसे छोटी सामान्य पॉलिसी बनाएं।
- सैंडबॉक्सिंग से पहले सब कुछ खोलना → मौजूदा डिस्क्रिप्टर उपयोग योग्य रह सकते हैं → पहले असंबंधित डिस्क्रिप्टर इनहेरिटेंस को बंद करें, ऑडिट करें और रोकें।
- पैरेंट ट्री की अनुमति देना और एप्लिकेशन जांच पर भरोसा करना → एक प्लगइन अधिक पाथ्स को ट्रैवर्स कर सकता है → ट्री और ऑपरेशन के आधार पर अधिकार प्रदान करें।
- सेटअप विफलता के बाद चुपचाप जारी रखना → ऑपरेटर यह नहीं देख पाते हैं कि आइसोलेशन गायब है → अस्वीकार करें, केवल-पढ़ने योग्य मोड का उपयोग करें, या अलर्ट के साथ अनुमोदन की आवश्यकता रखें।
- केवल मुख्य प्रोसेस का परीक्षण करना → fork, exec, और थ्रेड्स सीमा को बदल देते हैं → प्रत्येक इनहेरिटेंस पाथ का डिनाई (deny) केस के साथ परीक्षण करें।
फॉलो-अप प्रश्न
क्या Landlock उस फ़ाइल को प्रतिबंधित कर सकता है जो पहले से खुली हुई थी?
इसे एक स्वचालित क्लोज़ मैकेनिज्म नहीं माना जाना चाहिए। प्रतिबंध से पहले खोला गया एक डिस्क्रिप्टर उपयोग योग्य बना रह सकता है, इसलिए पॉलिसी लागू करने से पहले अनावश्यक डिस्क्रिप्टर्स को बंद करें, डिस्क्रिप्टर पासिंग को नियंत्रित करें, और ऑडिट और परीक्षणों में रखे गए हैंडल को शामिल करें।
यदि कर्नेल में अनुरोधित एक्सेस अधिकारों में से एक गायब है तो क्या होगा?
अनिवार्य अधिकारों को वैकल्पिक अधिकारों से अलग करें। ABI की जांच करें, समर्थित वैकल्पिक अधिकारों को जोड़ें, और जब कोई अनिवार्य अधिकार गायब हो तो स्टार्टअप से इनकार करें या स्पष्ट रूप से अलर्ट किए गए सुरक्षित मोड में प्रवेश करें। नियम निर्माण की विफलता को अनदेखा न करें या नियम में अज्ञात अधिकार न लिखें।
seccomp या कंटेनर क्यों जोड़ें?
Landlock की ताकत अप्रिविलेज्ड, फ़ाइल सिस्टम-स्कोप वाली सेल्फ-रेस्ट्रिक्शन है। यह प्रत्येक सिस्टम कॉल, नेटवर्क पाथ या होस्ट पॉलिसी को कवर नहीं करता है। Seccomp, यूज़र नेमस्पेस, कंटेनर और MAC उन सिस्टम कॉल, पहचान और सिस्टम-स्तरीय सीमाओं को पूरा कर सकते हैं; संयुक्त डिज़ाइन को अभी भी इनहेरिटेंस और विफलता-पाथ परीक्षणों की आवश्यकता होती है।