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