AppArmor
मूल जानकारी
AppArmor एक कर्नेल एन्हांसमेंट है जो प्रोग्रामों के लिए प्रोफाइल के माध्यम से उपलब्ध संसाधनों को प्रतिबंधित करने के लिए डिज़ाइन किया गया है, अभिक्रियात्मक रूप से अनिवार्य पहुंच नियंत्रण (MAC) को कार्यान्वित करता है जिसमें पहुंच नियंत्रण गुण यूज़र के बजाय सीधे प्रोग्रामों से जुड़े होते हैं। यह सिस्टम कर्नेल में प्रोफाइल लोड करके काम करता है, आम तौर पर बूट के दौरान, और ये प्रोफाइल निर्दिष्ट करते हैं कि एक प्रोग्राम किस संसाधन तक पहुंच सकता है, जैसे नेटवर्क कनेक्शन, रॉ सॉकेट पहुंच, और फ़ाइल अनुमतियाँ।
AppArmor प्रोफाइल के लिए दो प्रचलित मोड हैं:
निषेध मोड: यह मोड प्रोफाइल में परिभाषित नीतियों को सक्रिय रूप से लागू करता है, जो इन नीतियों का उल्लंघन करने वाली क्रियाओं को रोकता है और syslog या auditd जैसे सिस्टम के माध्यम से इन नीतियों का उल्लंघन करने की कोशिशों को लॉग करता है।
शिकायत मोड: निषेध मोड की तरह, शिकायत मोड उन क्रियाओं को नहीं रोकता जो प्रोफाइल की नीतियों के खिलाफ जाती हैं। इसके बजाय, यह इन प्रयासों को नीति उल्लंघन के रूप में लॉग करता है बिना प्रतिबंधों को लागू करने।
AppArmor के घटक
कर्नेल मॉड्यूल: नीतियों के प्रवर्तन के लिए जिम्मेदार।
नीतियाँ: प्रोग्राम व्यवहार और संसाधन पहुंच के लिए नियम और प्रतिबंध निर्धारित करती हैं।
पार्सर: नीतियों को कर्नेल में प्रवर्तन या रिपोर्टिंग के लिए लोड करता है।
उपयोगकर्ता: ये उपयोगकर्ता मोड के कार्यक्रम हैं जो AppArmor के साथ इंटरैक्ट करने और प्रबंधन के लिए एक इंटरफेस प्रदान करते हैं।
प्रोफाइल पथ
Apparmor प्रोफाइल आम तौर पर /etc/apparmor.d/ में सहेजे जाते हैं।
sudo aa-status
के साथ आप उन बाइनरी को सूचीबद्ध कर सकते हैं जिन्हें किसी प्रोफाइल द्वारा प्रतिबंधित किया गया है। यदि आप प्रत्येक सूचीबद्ध बाइनरी के पथ के लिए एक डॉट के बजाय "/" को बदल सकते हैं तो आपको उल्लिखित फ़ोल्डर के अंदर के apparmor प्रोफ़ाइल का नाम प्राप्त होगा।
उदाहरण के लिए, /usr/bin/man के लिए एक apparmor प्रोफाइल /etc/apparmor.d/usr.bin.man में स्थित होगा।
कमांड्स
एक प्रोफ़ाइल बनाना
प्रभावित एक्जीक्यूटेबल को दर्शाने के लिए, पूर्ण मार्ग और वाइल्डकार्ड (फ़ाइल ग्लॉबिंग के लिए) की अनुमति है।
फ़ाइलों पर एक्सेस नियंत्रण को दर्शाने के लिए निम्नलिखित एक्सेस नियंत्रण का उपयोग किया जा सकता है:
r (पढ़ना)
w (लिखना)
m (मेमोरी मैप के रूप में एक्जीक्यूटेबल)
k (फ़ाइल लॉकिंग)
l (हार्ड लिंक्स बनाना)
ix (नए प्रोग्राम के साथ एक और प्रोग्राम को नियमित करने के लिए)
Px (पर्यावरण को साफ करने के बाद एक और प्रोफ़ाइल के तहत निष्पादित करें)
Cx (पर्यावरण को साफ करने के बाद एक बच्चा प्रोफ़ाइल के तहत निष्पादित करें)
Ux (पर्यावरण को साफ करने के बाद अनियंत्रित निष्पादित करें)
**प्रोफ़ाइल में चर निर्धारित किए जा सकते हैं और प्रोफ़ाइल के बाहर से प्रबंधित किए जा सकते हैं। उदाहरण के लिए: @{PROC} और @{HOME} (प्रोफ़ाइल फ़ाइल में #include <tunables/global> जोड़ें)
अनुमति नियमों को अधिलेखित करने के लिए निषेध नियम समर्थित हैं।
aa-genprof
एक प्रोफ़ाइल बनाना शुरू करने के लिए आपकी मदद करने के लिए apparmor का उपयोग किया जा सकता है। एक्शन्स द्वारा किए गए कार्यों की जाँच करने के लिए apparmor की मदद ले सकते हैं और फिर आपको यह निर्णय लेने की अनुमति देता है कि आप किस कार्रवाई को अनुमति देना चाहते हैं या नकारना चाहते हैं। आपको बस निम्नलिखित को चलाना है:
फिर, एक विभिन्न कंसोल में उन सभी क्रियाएँ करें जो बाइनरी सामान्य रूप से करेगा:
फिर, पहली कंसोल में "s" दबाएं और फिर रिकॉर्डेड क्रियाएँ इंडिकेट करें कि आप क्या अनदेखा करना चाहते हैं, अनुमति देना चाहते हैं, या कुछ और। जब आप समाप्त हो जाएं तो "f" दबाएं और नया प्रोफ़ाइल /etc/apparmor.d/path.to.binary में बनाया जाएगा
एरो की कुंजियों का उपयोग करके आप चुन सकते हैं कि आप क्या अनुमति देना/अस्वीकार करना/कुछ और करना चाहते हैं
aa-easyprof
आप एक ऐपार्मर प्रोफ़ाइल का टेम्पलेट भी बना सकते हैं एक बाइनरी का:
ध्यान दें कि एक बनाए गए प्रोफ़ाइल में डिफ़ॉल्ट रूप से कुछ भी अनुमति नहीं है, इसलिए सब कुछ निषेधित है। उदाहरण के लिए, बाइनरी को /etc/passwd r,
पढ़ने की अनुमति देने के लिए आपको /etc/passwd r,
जैसी लाइनें जोड़नी होगी।
आप फिर नए प्रोफ़ाइल को लागू कर सकते हैं
लॉग्स से प्रोफ़ाइल को संशोधित करना
निम्नलिखित टूल लॉग्स को पढ़ेगा और उपयोगकर्ता से पूछेगा कि क्या वह कुछ पता चली प्रतिबंधित क्रियाओं को अनुमति देना चाहता है:
एरो कुंजी का उपयोग करके आप चुन सकते हैं कि आप क्या अनुमति देना/विरोध/या कुछ भी करना चाहते हैं।
प्रोफ़ाइल प्रबंधन
लॉग
AUDIT और DENIED लॉग का उदाहरण /var/log/audit/audit.log से एक्जीक्यूटेबल service_bin
का:
आप इस जानकारी को निम्नलिखित का उपयोग करके प्राप्त कर सकते हैं:
डॉकर में Apparmor
नोट करें कि डॉकर का प्रोफ़ाइल docker-profile डिफ़ॉल्ट रूप से लोड होता है:
By default Apparmor docker-default profile is generated from https://github.com/moby/moby/tree/master/profiles/apparmor
docker-default profile Summary:
सभी नेटवर्किंग तक पहुंच
कोई क्षमता परिभाषित नहीं है (हालांकि, कुछ क्षमताएँ मूल बेस नियम शामिल करने से आएगी जैसे #include <abstractions/base>)
किसी भी /proc फ़ाइल में लेखन की अनुमति नहीं है
/proc और /sys के अन्य उपनिर्देशिकाएँ/फ़ाइलें पढ़ने/लिखने/लॉक/लिंक/क्रियान्वयन पहुंच को इनकार किया गया है
माउंट की अनुमति नहीं है
Ptrace केवल उस प्रक्रिया पर चलाया जा सकता है जो एक ही apparmor प्रोफ़ाइल द्वारा सीमित है
एक बार जब आप एक डॉकर कंटेनर चलाते हैं तो आपको निम्नलिखित आउटपुट दिखाई देना चाहिए:
नोट करें कि एपार्मर डिफ़ॉल्ट रूप से कंटेनर को दी गई क्षमताएँ भी रोक देगा। उदाहरण के लिए, यह /proc के अंदर लिखने की अनुमति को रोक सकता है, भले ही SYS_ADMIN क्षमता दी गई हो क्योंकि डॉकर एपार्मर प्रोफ़ाइल डिफ़ॉल्ट रूप से इस पहुंच को इनकार करता है:
आपको apparmor को अक्षम करना होगा ताकि इसकी प्रतिबंधिताओं को अनदेखा किया जा सके:
ध्यान दें कि डिफ़ॉल्ट रूप से AppArmor भी कंटेनर को माउंट करने से रोकेगा भी SYS_ADMIN क्षमता के साथ।
ध्यान दें कि आप कैपेबिलिटी को डॉकर कंटेनर में जोड़ सकते/हटा सकते हैं (यह AppArmor और Seccomp जैसी सुरक्षा विधियों द्वारा अभी भी प्रतिबंधित होगा):
--cap-add=SYS_ADMIN
SYS_ADMIN
कैप देना--cap-add=ALL
सभी कैप देना--cap-drop=ALL --cap-add=SYS_PTRACE
सभी कैप हटाना और केवलSYS_PTRACE
देना
सामान्यत: जब आपको एक विशेषाधिकारिक क्षमता उपलब्ध होती है डॉकर कंटेनर के भीतर लेकिन कुछ हिस्सा एक उत्पीड़न काम नहीं कर रहा हो, तो यह इसलिए हो सकता है कि डॉकर AppArmor इसे रोक रहा होगा।
उदाहरण
(उदाहरण यहाँ से से)
AppArmor कार्यक्षमता को विस्तारित करने के लिए, मैंने एक नया डॉकर प्रोफ़ाइल "mydocker" बनाया जिसमें निम्नलिखित पंक्ति जोड़ी गई:
इस प्रोफ़ाइल को सक्रिय करने के लिए, हमें निम्नलिखित कार्रवाई करनी होगी:
इसके लिए प्रोफाइल सूची देखने के लिए, हम निम्नलिखित कमांड कर सकते हैं। नीचे दिए गए कमांड मेरे नए AppArmor प्रोफाइल को सूचीबद्ध कर रहा है।
जैसा नीचे दिखाया गया है, हमें " /etc/ " बदलने की कोशिश करने पर त्रुटि मिलती है क्योंकि AppArmor प्रोफ़ाइल " /etc/ " में लेखन अधिकार को रोक रहा है।
AppArmor Docker Bypass1
आप निम्नलिखित का उपयोग करके कैसे पता लगाएं कि कौन सा apparmor प्रोफ़ाइल एक कंटेनर चला रहा है:
फिर, आप निम्नलिखित पंक्ति को चला सकते हैं उपयोग किया जा रहा सटीक प्रोफ़ाइल खोजने के लिए:
AppArmor Docker Bypass2
**अजीब मामले में आप apparmor डॉकर प्रोफ़ाइल को संशोधित कर सकते हैं और इसे पुनः लोड कर सकते हैं। आप प्रतिबंधों को हटा सकते हैं और उन्हें "अनदेखा" कर सकते हैं।
AppArmor Shebang Bypass
इस बग में आप देख सकते हैं कि यदि आप किसी विशेष संसाधनों के साथ पर्ल को चलाने से रोक रहे हैं, तो भी यदि आप केवल पहली पंक्ति में #!/usr/bin/perl
निर्दिष्ट करते हैं और आप फ़ाइल को सीधे निष्पादित करते हैं, तो आप जो चाहें वह निष्पादित कर सकते हैं। उदा।:
Last updated