Seccomp
मूल जानकारी
Seccomp, जिसका मतलब है Secure Computing mode, Linux kernel की एक सुरक्षा सुविधा है जो सिस्टम कॉल्स को फ़िल्टर करने के लिए डिज़ाइन की गई है। यह प्रक्रियाओं को सिस्टम कॉल्स के सीमित सेट (exit()
, sigreturn()
, read()
, और write()
) में प्रतिबंधित करता है। अगर कोई प्रक्रिया कोई और कॉल करने की कोशिश करती है, तो कर्नेल द्वारा SIGKILL या SIGSYS का उपयोग करके उसे समाप्त कर दिया जाता है। यह तंतुओं को वर्चुअलाइज़ नहीं करता है लेकिन प्रक्रिया को उनसे अलग कर देता है।
Seccomp को सक्रिय करने के दो तरीके हैं: prctl(2)
सिस्टम कॉल के साथ PR_SET_SECCOMP
के माध्यम से, या Linux kernels 3.17 और ऊपर के लिए, seccomp(2)
सिस्टम कॉल के माध्यम से। Seccomp को /proc/self/seccomp
में लिखकर सक्रिय करने की पुरानी विधि को prctl()
के पक्ष में अनुप्रयोग किया गया है।
एक वृद्धि, seccomp-bpf, बर्कले पैकेट फ़िल्टर (BPF) नियमों का उपयोग करके एक अनुकूलनीय नीति के साथ सिस्टम कॉल्स को फ़िल्टर करने की क्षमता जोड़ता है। यह विस्तार सॉफ़्टवेयर द्वारा उपयोग किया जाता है जैसे कि OpenSSH, vsftpd, और Chrome/Chromium ब्राउज़र्स Chrome OS और Linux पर लचीले और कुशल syscall फ़िल्टरिंग के लिए, अब असमर्थित systrace के लिए एक वैकल्पिक पेशकश करता है।
मूल/सख्त मोड
इस मोड में Seccomp केवल सिस्टम कॉल्स को अनुमति देता है exit()
, sigreturn()
, read()
और write()
को पहले से खोले गए फ़ाइल डिस्क्रिप्टर्स के लिए। अगर कोई अन्य सिस्टम कॉल की कोशिश करता है, तो प्रक्रिया को SIGKILL का उपयोग करके मार दिया जाता है
Docker में Seccomp
Seccomp-bpf को Docker द्वारा समर्थित किया गया है ताकि सिस-कॉल्स को प्रतिबंधित किया जा सके और सतह क्षेत्र को कम किया जा सके। आप यहाँ https://docs.docker.com/engine/security/seccomp/ पर डिफ़ॉल्ट रूप से अवरोधित सिस-कॉल्स देख सकते हैं और डिफ़ॉल्ट seccomp प्रोफ़ाइल यहाँ मिल सकता है https://github.com/moby/moby/blob/master/profiles/seccomp/default.json। आप एक डॉकर कंटेनर को एक विभिन्न seccomp नीति के साथ चला सकते हैं:
यदि आप उदाहरण के लिए किसी कंटेनर से uname
जैसे कुछ syscall को निषेधित करना चाहते हैं तो आप https://github.com/moby/moby/blob/master/profiles/seccomp/default.json से डिफ़ॉल्ट प्रोफ़ाइल डाउनलोड कर सकते हैं और सिर्फ सूची से uname
स्ट्रिंग को हटा दें।
यदि आप सुनिश्चित करना चाहते हैं कि किसी बाइनरी कंटेनर के अंदर काम न करे तो आप strace का उपयोग करके बाइनरी द्वारा उपयोग किए जा रहे syscalls की सूची बना सकते हैं और फिर उन्हें निषेधित कर सकते हैं।
निम्नलिखित उदाहरण में uname
के syscalls खोजे गए हैं:
यदि आप Docker का उपयोग केवल एक एप्लिकेशन लॉन्च करने के लिए कर रहे हैं, तो आप इसे strace
के साथ प्रोफ़ाइल कर सकते हैं और उसे केवल वह syscalls अनुमति दें जो आवश्यक हैं।
उदाहरण Seccomp नीति
Seccomp विशेषता को विस्तारित करने के लिए, चलो नीचे दिए गए "chmod" सिस्टम कॉल को अक्षम करने वाली एक Seccomp प्रोफ़ाइल बनाते हैं।
उपर दिए गए प्रोफ़ाइल में, हमने डिफ़ॉल्ट क्रिया को "अनुमति" पर सेट किया है और "chmod" को अक्षम करने के लिए एक ब्लैकलिस्ट बनाई है। अधिक सुरक्षित होने के लिए, हम डिफ़ॉल्ट क्रिया को ड्रॉप पर सेट कर सकते हैं और सिस्टम कॉल को विवेकपूर्ण रूप से सक्षम करने के लिए एक व्हाइटलिस्ट बना सकते हैं। निम्नलिखित आउटपुट "chmod" कॉल को त्रुटि दिखाता है क्योंकि इसे सेक्कॉम्प प्रोफ़ाइल में अक्षम किया गया है।
निम्नलिखित आउटपुट "docker inspect" को प्रोफ़ाइल दिखाता है:
Docker में इसे निष्क्रिय करें
एक कंटेनर लॉन्च करें जिसमें फ्लैग है: --security-opt seccomp=unconfined
Kubernetes 1.19 के रूप में, सभी पॉड्स के लिए डिफ़ॉल्ट रूप से सेककॉम्प सक्षम है। हालांकि, पॉड्स पर लागू डिफ़ॉल्ट सेककॉम्प प्रोफ़ाइल "RuntimeDefault" है, जो कंटेनर रनटाइम द्वारा प्रदान किया गया है (जैसे, Docker, containerd)। "RuntimeDefault" प्रोफ़ाइल अधिकांश सिस्टम कॉल को अनुमति देता है जबकि कुछ कॉल्स को ब्लॉक करता है जो खतरनाक माने गए हैं या सामान्य रूप से कंटेनर्स द्वारा आवश्यक नहीं माने जाते हैं।
Last updated