குபெர்னெட்டஸில் உள்ள Seccomp: ஆரம்பத்தில் இருந்தே நீங்கள் தெரிந்து கொள்ள வேண்டிய 7 விஷயங்கள்

குறிப்பு. மொழிபெயர்: பிரிட்டிஷ் நிறுவனமான ASOS.com இல் மூத்த பயன்பாட்டு பாதுகாப்பு பொறியாளரின் கட்டுரையின் மொழிபெயர்ப்பை உங்கள் கவனத்திற்கு வழங்குகிறோம். அதனுடன், அவர் செக்காம்ப் பயன்பாட்டின் மூலம் குபெர்னெட்ஸில் பாதுகாப்பை மேம்படுத்துவதற்காக அர்ப்பணிக்கப்பட்ட தொடர்ச்சியான வெளியீடுகளைத் தொடங்குகிறார். வாசகர்கள் அறிமுகத்தை விரும்பினால், நாங்கள் ஆசிரியரைப் பின்தொடர்ந்து, இந்த தலைப்பில் அவரது எதிர்காலப் பொருட்களைத் தொடர்வோம்.

குபெர்னெட்டஸில் உள்ள Seccomp: ஆரம்பத்தில் இருந்தே நீங்கள் தெரிந்து கொள்ள வேண்டிய 7 விஷயங்கள்

மந்திரம் மற்றும் மாந்திரீகத்தை நாடாமல், SecDevOps இன் உணர்வில் seccomp சுயவிவரங்களை எவ்வாறு உருவாக்குவது என்பது குறித்த தொடர் இடுகைகளில் இந்தக் கட்டுரை முதன்மையானது. பகுதி 1 இல், குபெர்னெட்டஸில் seccomp ஐ செயல்படுத்துவதற்கான அடிப்படைகள் மற்றும் உள் விவரங்களை நான் உள்ளடக்குகிறேன்.

குபெர்னெட்ஸ் சுற்றுச்சூழல் அமைப்பு கொள்கலன்களைப் பாதுகாக்கவும் தனிமைப்படுத்தவும் பல்வேறு வழிகளை வழங்குகிறது. கட்டுரை செக்யூர் கம்ப்யூட்டிங் பயன்முறையைப் பற்றியது seccomp. அதன் சாராம்சம், கண்டெய்னர்கள் மூலம் செயல்படுத்தக்கூடிய கணினி அழைப்புகளை வடிகட்ட வேண்டும்.

அது ஏன் முக்கியம்? ஒரு கொள்கலன் என்பது ஒரு குறிப்பிட்ட இயந்திரத்தில் இயங்கும் ஒரு செயல்முறையாகும். மற்ற பயன்பாடுகளைப் போலவே இது கர்னலைப் பயன்படுத்துகிறது. கன்டெய்னர்கள் ஏதேனும் சிஸ்டம் அழைப்புகளைச் செய்ய முடிந்தால், மிக விரைவில் மால்வேர் இதைப் பயன்படுத்தி கொள்கலன் தனிமைப்படுத்தலைத் தவிர்த்து மற்ற பயன்பாடுகளைப் பாதிக்கும்: தகவல்களை இடைமறிப்பது, கணினி அமைப்புகளை மாற்றுவது போன்றவை.

எந்த கணினி அழைப்புகள் அனுமதிக்கப்பட வேண்டும் அல்லது முடக்கப்பட வேண்டும் என்பதை seccomp சுயவிவரங்கள் வரையறுக்கின்றன. கொள்கலன் இயக்க நேரம் தொடங்கும் போது அவற்றை செயல்படுத்துகிறது, இதனால் கர்னல் அவற்றின் செயல்பாட்டை கண்காணிக்க முடியும். அத்தகைய சுயவிவரங்களைப் பயன்படுத்துவது, கண்டெய்னருக்குள் உள்ள ஏதேனும் நிரல் (அதாவது, உங்கள் சார்புகள் அல்லது அவற்றின் சார்புகள்) அனுமதிக்கப்படாத ஒன்றைச் செய்யத் தொடங்கினால், தாக்குதல் திசையனைக் கட்டுப்படுத்தவும், சேதத்தைக் குறைக்கவும் உங்களை அனுமதிக்கிறது.

அடிப்படைகளைப் பெறுதல்

அடிப்படை seccomp சுயவிவரம் மூன்று கூறுகளை உள்ளடக்கியது: defaultAction, architectures (அல்லது archMap) மற்றும் syscalls:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "sched_yield",
                "futex",
                "write",
                "mmap",
                "exit_group",
                "madvise",
                "rt_sigprocmask",
                "getpid",
                "gettid",
                "tgkill",
                "rt_sigaction",
                "read",
                "getpgrp"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(நடுத்தர அடிப்படை-seccomp.json)

defaultAction பிரிவில் குறிப்பிடப்படாத எந்த கணினி அழைப்பின் இயல்புநிலை விதியையும் தீர்மானிக்கிறது syscalls. விஷயங்களை எளிதாக்க, பயன்படுத்தப்படும் இரண்டு முக்கிய மதிப்புகளில் கவனம் செலுத்துவோம்:

  • SCMP_ACT_ERRNO - கணினி அழைப்பை செயல்படுத்துவதைத் தடுக்கிறது,
  • SCMP_ACT_ALLOW - அனுமதிக்கிறது.

பிரிவில் architectures இலக்கு கட்டமைப்புகள் பட்டியலிடப்பட்டுள்ளன. இது முக்கியமானது, ஏனெனில் கர்னல் மட்டத்தில் பயன்படுத்தப்படும் வடிப்பான், கணினி அழைப்பு அடையாளங்காட்டிகளைப் பொறுத்தது, சுயவிவரத்தில் குறிப்பிடப்பட்டுள்ள பெயர்களில் அல்ல. கன்டெய்னர் இயக்க நேரம் பயன்படுத்துவதற்கு முன் அடையாளங்காட்டிகளுடன் அவற்றைப் பொருத்தும். சிஸ்டம் ஆர்க்கிடெக்சரைப் பொறுத்து சிஸ்டம் அழைப்புகள் முற்றிலும் மாறுபட்ட ஐடிகளைக் கொண்டிருக்கலாம் என்பது யோசனை. எடுத்துக்காட்டாக, கணினி அழைப்பு recvfrom (சாக்கெட்டில் இருந்து தகவலைப் பெறப் பயன்படுகிறது) x64 கணினிகளில் ஐடி = 64 மற்றும் x517 இல் ஐடி = 86 உள்ளது. இது x86-x64 கட்டமைப்புகளுக்கான அனைத்து கணினி அழைப்புகளின் பட்டியலை நீங்கள் காணலாம்.

பிரிவில் syscalls அனைத்து கணினி அழைப்புகளையும் பட்டியலிடுகிறது மற்றும் அவற்றை என்ன செய்ய வேண்டும் என்பதைக் குறிப்பிடுகிறது. எடுத்துக்காட்டாக, அமைப்பதன் மூலம் ஏற்புப்பட்டியலை உருவாக்கலாம் defaultAction மீது SCMP_ACT_ERRNO, மற்றும் பிரிவில் அழைப்புகள் syscalls ஒதுக்க SCMP_ACT_ALLOW. எனவே, பிரிவில் குறிப்பிடப்பட்ட அழைப்புகளை மட்டுமே நீங்கள் அனுமதிக்கிறீர்கள் syscalls, மற்றும் மற்ற அனைத்தையும் தடைசெய்க. தடுப்புப்பட்டியலுக்கு நீங்கள் மதிப்புகளை மாற்ற வேண்டும் defaultAction மற்றும் எதிர் செயல்கள்.

இப்போது நாம் அவ்வளவு தெளிவாக இல்லாத நுணுக்கங்களைப் பற்றி சில வார்த்தைகளைச் சொல்ல வேண்டும். கீழே உள்ள பரிந்துரைகள், நீங்கள் Kubernetes இல் வணிகப் பயன்பாடுகளின் வரிசையைப் பயன்படுத்துகிறீர்கள் என்று கருதுகிறது, மேலும் அவை சாத்தியமான குறைந்தபட்ச சலுகைகளுடன் இயங்க வேண்டும் என்று நீங்கள் விரும்புகிறீர்கள் என்பதை நினைவில் கொள்ளவும்.

1. AllowPrivilegeEscalation=false

В securityContext கொள்கலனில் ஒரு அளவுரு உள்ளது AllowPrivilegeEscalation. இது நிறுவப்பட்டிருந்தால் false, கொள்கலன்கள் தொடங்கும் (on) பிட் no_new_priv. இந்த அளவுருவின் பொருள் பெயரிலிருந்து தெளிவாகத் தெரிகிறது: கொள்கலன் தனக்குள்ளதை விட அதிக சலுகைகளுடன் புதிய செயல்முறைகளைத் தொடங்குவதைத் தடுக்கிறது.

இந்த விருப்பத்தின் பக்க விளைவு அமைக்கப்படுகிறது true (இயல்புநிலை) என்பது, கன்டெய்னர் இயக்க நேரம் தொடக்கச் செயல்பாட்டின் ஆரம்பத்திலேயே seccomp சுயவிவரத்தைப் பயன்படுத்துகிறது. எனவே, உள் இயக்க நேர செயல்முறைகளை இயக்க தேவையான அனைத்து கணினி அழைப்புகளும் (எ.கா. பயனர்/குழு ஐடிகளை அமைத்தல், குறிப்பிட்ட திறன்களை கைவிடுதல்) சுயவிவரத்தில் செயல்படுத்தப்பட வேண்டும்.

அற்ப விஷயங்களைச் செய்யும் ஒரு கொள்கலனுக்கு echo hi, பின்வரும் அனுமதிகள் தேவைப்படும்:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "brk",
                "capget",
                "capset",
                "chdir",
                "close",
                "execve",
                "exit_group",
                "fstat",
                "fstatfs",
                "futex",
                "getdents64",
                "getppid",
                "lstat",
                "mprotect",
                "nanosleep",
                "newfstatat",
                "openat",
                "prctl",
                "read",
                "rt_sigaction",
                "statfs",
                "setgid",
                "setgroups",
                "setuid",
                "stat",
                "uname",
                "write"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(hi-pod-seccomp.json)

...இதற்குப் பதிலாக:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "brk",
                "close",
                "execve",
                "exit_group",
                "futex",
                "mprotect",
                "nanosleep",
                "stat",
                "write"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(hi-container-seccomp.json)

ஆனால் மீண்டும், இது ஏன் ஒரு பிரச்சனை? தனிப்பட்ட முறையில், பின்வரும் சிஸ்டம் அழைப்புகளை ஏற்புப்பட்டியலில் வைப்பதைத் தவிர்க்கிறேன் (அவற்றுக்கான உண்மையான தேவை இல்லாவிட்டால்): capset, set_tid_address, setgid, setgroups и setuid. இருப்பினும், உண்மையான சவால் என்னவென்றால், உங்களுக்கு முற்றிலும் கட்டுப்பாடு இல்லாத செயல்முறைகளை அனுமதிப்பதன் மூலம், கொள்கலன் இயக்க நேர செயலாக்கத்துடன் சுயவிவரங்களை இணைக்கிறீர்கள். வேறு வார்த்தைகளில் கூறுவதானால், கன்டெய்னர் இயக்க நேர சூழலை (உங்களால் அல்லது, பெரும்பாலும், கிளவுட் சேவை வழங்குநரால்) புதுப்பித்த பிறகு, கண்டெய்னர்கள் திடீரென இயங்குவதை நிறுத்துவதை ஒரு நாள் நீங்கள் காணலாம்.

உதவிக்குறிப்பு # 1: உடன் கொள்கலன்களை இயக்கவும் AllowPrivilegeEscaltion=false. இது seccomp சுயவிவரங்களின் அளவைக் குறைத்து, கொள்கலன் இயக்க நேர சூழலில் ஏற்படும் மாற்றங்களுக்கு குறைவான உணர்திறனைக் கொடுக்கும்.

2. கொள்கலன் மட்டத்தில் seccomp சுயவிவரங்களை அமைத்தல்

seccomp சுயவிவரத்தை பாட் மட்டத்தில் அமைக்கலாம்:

annotations:
  seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json"

... அல்லது கொள்கலன் மட்டத்தில்:

annotations:
  container.security.alpha.kubernetes.io/<container-name>: "localhost/profile.json"

Kubernetes seccomp செய்யும் போது மேலே உள்ள தொடரியல் மாறும் என்பதை நினைவில் கொள்ளவும் GA ஆகிவிடும் (இந்த நிகழ்வு Kubernetes - 1.18 - தோராயமாக. மொழிபெயர்ப்பின் அடுத்த வெளியீட்டில் எதிர்பார்க்கப்படுகிறது.).

குபெர்னெட்டஸுக்கு எப்போதும் உண்டு என்பது சிலருக்குத் தெரியும் பிழைஇது seccomp சுயவிவரங்கள் பயன்படுத்தப்படுவதற்கு காரணமாக அமைந்தது இடைநிறுத்தப்பட்ட கொள்கலன். இயக்க நேர சூழல் இந்த குறைபாட்டை ஓரளவு ஈடுசெய்கிறது, ஆனால் இந்த கொள்கலன் காய்களிலிருந்து மறைந்துவிடாது, ஏனெனில் இது அவற்றின் உள்கட்டமைப்பை உள்ளமைக்கப் பயன்படுகிறது.

பிரச்சனை என்னவென்றால், இந்த கொள்கலன் எப்போதும் தொடங்குகிறது AllowPrivilegeEscalation=true, பத்தி 1 இல் குரல் கொடுக்கப்பட்ட சிக்கல்களுக்கு வழிவகுக்கும், இதை மாற்ற முடியாது.

கொள்கலன் மட்டத்தில் seccomp சுயவிவரங்களைப் பயன்படுத்துவதன் மூலம், நீங்கள் இந்த சிக்கலைத் தவிர்க்கலாம் மற்றும் ஒரு குறிப்பிட்ட கொள்கலனுக்கு ஏற்றவாறு சுயவிவரத்தை உருவாக்கலாம். டெவலப்பர்கள் பிழையை சரிசெய்யும் வரை மற்றும் புதிய பதிப்பு (ஒருவேளை 1.18?) அனைவருக்கும் கிடைக்கும் வரை இதைச் செய்ய வேண்டும்.

உதவிக்குறிப்பு # 2: கொள்கலன் மட்டத்தில் seccomp சுயவிவரங்களை அமைக்கவும்.

ஒரு நடைமுறை அர்த்தத்தில், இந்த விதி பொதுவாக கேள்விக்கான உலகளாவிய பதிலாக செயல்படுகிறது: "எனது seccomp சுயவிவரம் ஏன் வேலை செய்கிறது docker runஆனால் குபெர்னெட்ஸ் கிளஸ்டருக்கு அனுப்பிய பிறகு வேலை செய்யவில்லையா?

3. இயக்க நேரம்/இயல்புநிலையை கடைசி முயற்சியாக மட்டும் பயன்படுத்தவும்

குபெர்னெட்டஸ் உள்ளமைக்கப்பட்ட சுயவிவரங்களுக்கு இரண்டு விருப்பங்கள் உள்ளன: runtime/default и docker/default. இரண்டும் கொள்கலன் இயக்க நேரத்தால் செயல்படுத்தப்படுகின்றன, குபெர்னெட்ஸ் அல்ல. எனவே, பயன்படுத்தப்படும் இயக்க நேர சூழல் மற்றும் அதன் பதிப்பைப் பொறுத்து அவை வேறுபடலாம்.

வேறு வார்த்தைகளில் கூறுவதானால், இயக்க நேரத்தை மாற்றுவதன் விளைவாக, கொள்கலன் வேறுபட்ட கணினி அழைப்புகளுக்கான அணுகலைக் கொண்டிருக்கலாம், அது பயன்படுத்தப்படலாம் அல்லது பயன்படுத்தாமல் இருக்கலாம். பெரும்பாலான இயக்க நேரங்களைப் பயன்படுத்துகிறது டோக்கர் செயல்படுத்தல். நீங்கள் இந்த சுயவிவரத்தைப் பயன்படுத்த விரும்பினால், இது உங்களுக்குப் பொருத்தமானது என்பதை உறுதிப்படுத்தவும்.

சுயவிவர docker/default குபெர்னெட்டஸ் 1.11 முதல் நீக்கப்பட்டது, எனவே அதைப் பயன்படுத்துவதைத் தவிர்க்கவும்.

என் கருத்துப்படி, சுயவிவரம் runtime/default இது உருவாக்கப்பட்ட நோக்கத்திற்கு மிகவும் பொருத்தமானது: ஒரு கட்டளையை செயல்படுத்துவதில் தொடர்புடைய அபாயங்களிலிருந்து பயனர்களைப் பாதுகாத்தல் docker run அவர்களின் கார்களில். இருப்பினும், குபெர்னெட்டஸ் கிளஸ்டர்களில் இயங்கும் வணிக பயன்பாடுகள் என்று வரும்போது, ​​அத்தகைய சுயவிவரம் மிகவும் திறந்த நிலையில் உள்ளது மற்றும் டெவலப்பர்கள் தங்கள் பயன்பாடுகளுக்கு (அல்லது பயன்பாடுகளின் வகைகள்) சுயவிவரங்களை உருவாக்குவதில் கவனம் செலுத்த வேண்டும் என்று நான் வாதிடத் துணிகிறேன்.

உதவிக்குறிப்பு # 3: குறிப்பிட்ட பயன்பாடுகளுக்கு seccomp சுயவிவரங்களை உருவாக்கவும். இது சாத்தியமில்லை என்றால், பயன்பாட்டு வகைகளுக்கான சுயவிவரங்களை உருவாக்கவும், எடுத்துக்காட்டாக, கோலாங் பயன்பாட்டின் அனைத்து வலை APIகளையும் உள்ளடக்கிய மேம்பட்ட சுயவிவரத்தை உருவாக்கவும். கடைசி முயற்சியாக இயக்க நேரம்/இயல்புநிலையை மட்டும் பயன்படுத்தவும்.

எதிர்கால இடுகைகளில், SecDevOps-இன் ஈர்க்கப்பட்ட seccomp சுயவிவரங்களை எவ்வாறு உருவாக்குவது, அவற்றைத் தானியங்குபடுத்துவது மற்றும் பைப்லைன்களில் அவற்றைச் சோதிப்பது எப்படி என்பதை விவரிக்கிறேன். வேறு வார்த்தைகளில் கூறுவதானால், பயன்பாடு சார்ந்த சுயவிவரங்களுக்கு மேம்படுத்தாமல் இருக்க உங்களுக்கு எந்த காரணமும் இல்லை.

4. Unconfined என்பது ஒரு விருப்பமல்ல.

Из முதல் குபெர்னெட்ஸ் பாதுகாப்பு தணிக்கை அது முன்னிருப்பாக மாறியது seccomp முடக்கப்பட்டுள்ளது. நீங்கள் அமைக்கவில்லை என்றால் என்று அர்த்தம் PodSecurityPolicy, இது கிளஸ்டரில் செயல்படுத்தும், seccomp சுயவிவரம் வரையறுக்கப்படாத அனைத்து காய்களும் வேலை செய்யும் seccomp=unconfined.

இந்த பயன்முறையில் செயல்படுவது என்பது கிளஸ்டரைப் பாதுகாக்கும் ஒரு முழு அடுக்கு இன்சுலேஷன் இழக்கப்படுகிறது. இந்த அணுகுமுறை பாதுகாப்பு நிபுணர்களால் பரிந்துரைக்கப்படவில்லை.

உதவிக்குறிப்பு # 4: கிளஸ்டரில் எந்த கொள்கலனும் இயங்கக்கூடாது seccomp=unconfined, குறிப்பாக உற்பத்தி சூழல்களில்.

5. "தணிக்கை முறை"

இந்த புள்ளி குபெர்னெட்டஸுக்கு தனித்துவமானது அல்ல, ஆனால் இன்னும் "நீங்கள் தொடங்குவதற்கு முன் தெரிந்து கொள்ள வேண்டிய விஷயங்கள்" வகைக்குள் அடங்கும்.

அது நிகழும்போது, ​​seccomp சுயவிவரங்களை உருவாக்குவது எப்போதுமே சவாலானது மற்றும் சோதனை மற்றும் பிழையை பெரிதும் நம்பியுள்ளது. உண்மை என்னவென்றால், பயன்பாட்டை "கைவிட" ஆபத்து இல்லாமல் உற்பத்தி சூழல்களில் அவற்றைச் சோதிக்க பயனர்களுக்கு வாய்ப்பு இல்லை.

லினக்ஸ் கர்னல் 4.14 வெளியீட்டிற்குப் பிறகு, தணிக்கை முறையில் சுயவிவரத்தின் சில பகுதிகளை இயக்கவும், syslog இல் உள்ள அனைத்து கணினி அழைப்புகளைப் பற்றிய தகவலைப் பதிவு செய்யவும், ஆனால் அவற்றைத் தடுக்காமல் செய்யவும் முடிந்தது. அளவுருவைப் பயன்படுத்தி இந்த பயன்முறையை நீங்கள் செயல்படுத்தலாம் SCMT_ACT_LOG:

SCMP_ACT_LOG: வடிப்பானில் உள்ள எந்த விதியும் பொருந்தவில்லை என்றால், கணினி அழைப்பை உருவாக்கும் நூலை seccomp பாதிக்காது, ஆனால் கணினி அழைப்பு பற்றிய தகவல் பதிவு செய்யப்படும்.

இந்த அம்சத்தைப் பயன்படுத்துவதற்கான பொதுவான உத்தி இங்கே:

  1. தேவைப்படும் கணினி அழைப்புகளை அனுமதிக்கவும்.
  2. உங்களுக்குத் தெரிந்த கணினியிலிருந்து அழைப்புகளைத் தடுப்பது பயனுள்ளதாக இருக்காது.
  3. பதிவில் உள்ள மற்ற எல்லா அழைப்புகள் பற்றிய தகவலையும் பதிவு செய்யவும்.

எளிமையான உதாரணம் இதுபோல் தெரிகிறது:

{
    "defaultAction": "SCMP_ACT_LOG",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "sched_yield",
                "futex",
                "write",
                "mmap",
                "exit_group",
                "madvise",
                "rt_sigprocmask",
                "getpid",
                "gettid",
                "tgkill",
                "rt_sigaction",
                "read",
                "getpgrp"
            ],
            "action": "SCMP_ACT_ALLOW"
        },
        {
            "names": [
                "add_key",
                "keyctl",
                "ptrace"
            ],
            "action": "SCMP_ACT_ERRNO"
        }
    ]
}

(நடுத்தர-கலப்பு-seccomp.json)

ஆனால் பயன்படுத்தப்படாது என்று உங்களுக்குத் தெரிந்த அனைத்து அழைப்புகளையும் நீங்கள் தடுக்க வேண்டும் என்பதை நினைவில் கொள்ளுங்கள், மேலும் அது கிளஸ்டருக்கு தீங்கு விளைவிக்கும். ஒரு பட்டியலைத் தொகுக்க ஒரு நல்ல அடிப்படை அதிகாரப்பூர்வமானது டோக்கர் ஆவணங்கள். இயல்புநிலை சுயவிவரத்தில் எந்த சிஸ்டம் அழைப்புகள் தடுக்கப்பட்டுள்ளன, அதற்கான காரணத்தை இது விரிவாக விளக்குகிறது.

இருப்பினும், ஒரு பிடிப்பு உள்ளது. இருந்தாலும் SCMT_ACT_LOG 2017 ஆம் ஆண்டின் இறுதியில் இருந்து லினக்ஸ் கர்னலால் ஆதரிக்கப்படுகிறது, இது ஒப்பீட்டளவில் சமீபத்தில்தான் குபெர்னெட்ஸ் சுற்றுச்சூழல் அமைப்பில் நுழைந்தது. எனவே, இந்த முறையைப் பயன்படுத்த உங்களுக்கு லினக்ஸ் கர்னல் 4.14 மற்றும் ரன்சி பதிப்பு தேவைப்படும். v1.0.0-rc9.

உதவிக்குறிப்பு # 5: உற்பத்தியில் சோதனை செய்வதற்கான தணிக்கை முறை சுயவிவரத்தை கருப்பு மற்றும் வெள்ளை பட்டியல்களை இணைப்பதன் மூலம் உருவாக்க முடியும், மேலும் அனைத்து விதிவிலக்குகளையும் பதிவு செய்யலாம்.

6. அனுமதிப்பட்டியலைப் பயன்படுத்தவும்

அனுமதிப்பட்டியலுக்கு கூடுதல் முயற்சி தேவைப்படுகிறது, ஏனெனில் பயன்பாட்டிற்குத் தேவைப்படும் ஒவ்வொரு அழைப்பையும் நீங்கள் அடையாளம் காண வேண்டும், ஆனால் இந்த அணுகுமுறை பாதுகாப்பை பெரிதும் மேம்படுத்துகிறது:

அனுமதிப்பட்டியல் அணுகுமுறை எளிமையானது மற்றும் நம்பகமானது என்பதால் அதைப் பயன்படுத்துவது மிகவும் பரிந்துரைக்கப்படுகிறது. ஆபத்தான கணினி அழைப்பு (அல்லது தடுப்புப்பட்டியலில் இருந்தால் ஆபத்தான கொடி/விருப்பம்) சேர்க்கப்படும் போதெல்லாம் தடுப்புப்பட்டியல் புதுப்பிக்கப்பட வேண்டும். கூடுதலாக, ஒரு அளவுருவின் சாரத்தை மாற்றாமல் அதன் பிரதிநிதித்துவத்தை மாற்றுவது மற்றும் அதன் மூலம் தடுப்புப்பட்டியலின் கட்டுப்பாடுகளைத் தவிர்ப்பது பெரும்பாலும் சாத்தியமாகும்.

Go பயன்பாடுகளுக்கு, பயன்பாட்டுடன் இணைந்து செயல்படும் போது செய்யப்படும் அனைத்து அழைப்புகளையும் சேகரிக்கும் ஒரு சிறப்புக் கருவியை நான் உருவாக்கினேன். எடுத்துக்காட்டாக, பின்வரும் பயன்பாட்டிற்கு:

package main

import "fmt"

func main() {
	fmt.Println("test")
}

... தொடங்குவோம் gosystract பின்வருமாறு:

go install https://github.com/pjbgf/gosystract
gosystract --template='{{- range . }}{{printf ""%s",n" .Name}}{{- end}}' application-path

... மேலும் பின்வரும் முடிவைப் பெறுகிறோம்:

"sched_yield",
"futex",
"write",
"mmap",
"exit_group",
"madvise",
"rt_sigprocmask",
"getpid",
"gettid",
"tgkill",
"rt_sigaction",
"read",
"getpgrp",
"arch_prctl",

இப்போதைக்கு, இது ஒரு உதாரணம் மட்டுமே - கருவிகள் பற்றிய கூடுதல் விவரங்கள் பின்பற்றப்படும்.

உதவிக்குறிப்பு # 6: உங்களுக்கு உண்மையிலேயே தேவைப்படும் அழைப்புகளை மட்டும் அனுமதிக்கவும் மற்றும் மற்ற அனைத்தையும் தடுக்கவும்.

7. சரியான அடித்தளத்தை இடுங்கள் (அல்லது எதிர்பாராத நடத்தைக்குத் தயாராகுங்கள்)

நீங்கள் எதை எழுதினாலும் கர்னல் சுயவிவரத்தை செயல்படுத்தும். நீங்கள் விரும்பியது சரியாக இல்லாவிட்டாலும். எடுத்துக்காட்டாக, போன்ற அழைப்புகளுக்கான அணுகலை நீங்கள் தடுத்தால் exit அல்லது exit_group, கொள்கலனை சரியாக மூட முடியாது மற்றும் ஒரு எளிய கட்டளை கூட echo hi அவனை தூக்கிலிடுo காலவரையற்ற காலத்திற்கு. இதன் விளைவாக, நீங்கள் கிளஸ்டரில் அதிக CPU பயன்பாட்டைப் பெறுவீர்கள்:

குபெர்னெட்டஸில் உள்ள Seccomp: ஆரம்பத்தில் இருந்தே நீங்கள் தெரிந்து கொள்ள வேண்டிய 7 விஷயங்கள்

இதுபோன்ற சந்தர்ப்பங்களில், ஒரு பயன்பாடு மீட்புக்கு வரலாம் strace - பிரச்சனை என்னவாக இருக்கும் என்பதை இது காண்பிக்கும்:

குபெர்னெட்டஸில் உள்ள Seccomp: ஆரம்பத்தில் இருந்தே நீங்கள் தெரிந்து கொள்ள வேண்டிய 7 விஷயங்கள்
sudo strace -c -p 9331

இயக்க நேரத்தில் பயன்பாட்டிற்குத் தேவைப்படும் அனைத்து கணினி அழைப்புகளும் சுயவிவரங்களில் இருப்பதை உறுதிசெய்யவும்.

உதவிக்குறிப்பு # 7: விவரங்களுக்கு கவனம் செலுத்துங்கள் மற்றும் தேவையான அனைத்து சிஸ்டம் அழைப்புகளும் அனுமதிப்பட்டியலில் உள்ளதா என்பதை உறுதிப்படுத்தவும்.

SecDevOps இன் உணர்வில் Kubernetes இல் seccomp ஐப் பயன்படுத்துவது பற்றிய தொடர் கட்டுரைகளின் முதல் பகுதியை இது நிறைவு செய்கிறது. இது ஏன் முக்கியமானது மற்றும் செயல்முறையை எவ்வாறு தானியங்குபடுத்துவது என்பது பற்றி பின்வரும் பகுதிகளில் பேசுவோம்.

மொழிபெயர்ப்பாளரிடமிருந்து பி.எஸ்

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்