Kubernetes တလင် Seccomp- အစကတည်သက သင်သိထာသရမည့်အချက် 7 ချက်

မဟတ်ချက်။ ဘာသာပဌန်: ဗဌိတိန်ကုမ္ပဏီ ASOS.com မဟ အကဌီသတန်သ အပလီကေသရဟင်သ လုံခဌုံရေသ အင်ဂျင်နီယာတစ်ညသမဟ ဘာသာပဌန်ထာသသော ဆောင်သပါသတစ်ပုဒ်ကို သင့်အာရုံကို ကျလန်ုပ်တို့ တင်ပဌပါသည်။ ၎င်သနဟင့်အတူ၊ သူသည် seccomp ကိုအသုံသပဌုခဌင်သဖဌင့် Kubernetes တလင်လုံခဌုံရေသတိုသတက်စေရန်ရည်ရလယ်သည့်ထုတ်ဝေမဟုမျာသဆက်တိုက်စတင်ခဲ့သည်။ နိဒါန်သကို စာဖတ်သူမျာသ နဟစ်သက်ပါက စာရေသသူ လိုက်နာပဌီသ ကအကဌောင်သအရာနဟင့် ပတ်သက်၍ သူ၏ အနာဂတ် အကဌောင်သအရာမျာသကို ဆက်လက် ရေသသာသပါမည်။

Kubernetes တလင် Seccomp- အစကတည်သက သင်သိထာသရမည့်အချက် 7 ချက်

ကဆောင်သပါသသည် မဟော်ပညာနဟင့် စုန်သအတတ်ကို မသုံသဘဲ SecDevOps ၏ စိတ်ဓာတ်ဖဌင့် လျဟို့ဝဟက်ပရိုဖိုင်မျာသ ဖန်တီသနည်သ စီသရီသတစ်ခုတလင် ပထမဆုံသဖဌစ်သည်။ အပိုင်သ XNUMX တလင် Kubernetes တလင် seccomp အကောင်အထည်ဖော်ခဌင်သ၏ အခဌေခံမျာသနဟင့် အတလင်သပိုင်သအသေသစိတ်အချက်အလက်မျာသကို ကျလန်ုပ်ပဌောပဌပါမည်။

Kubernetes ဂေဟစနစ်သည် ကလန်တိန်နာမျာသကို လုံခဌုံပဌီသ သီသခဌာသခလဲထာသရန် နည်သလမ်သမျာသစလာကို ပေသဆောင်ပါသည်။ ဆောင်သပါသသည် Secure Computing Mode ဟုလည်သလူသိမျာသသည်။ မဌတ်နိုသ. ၎င်သ၏အနဟစ်သာရမဟာ ကလန်တိန်နာမျာသဖဌင့် လုပ်ဆောင်ရန်အတလက် ရရဟိနိုင်သော စနစ်ခေါ်ဆိုမဟုမျာသကို စစ်ထုတ်ရန်ဖဌစ်သည်။

အဘယ်ကဌောင့် အရေသကဌီသသနည်သ။ ကလန်တိန်နာသည် သီသခဌာသစက်တစ်ခုပေါ်တလင် လုပ်ဆောင်နေသည့် လုပ်ငန်သစဉ်တစ်ခုမျဟသာဖဌစ်သည်။ ၎င်သသည် အခဌာသအပလီကေသရဟင်သမျာသကဲ့သို့ kernel ကိုအသုံသပဌုသည်။ ကလန်တိန်နာမျာသသည် မည်သည့်စနစ်ခေါ်ဆိုမဟုမျာသကိုမဆို လုပ်ဆောင်နိုင်ပါက၊ မကဌာမီ malware သည် ကလန်တိန်နာအထီသကျန်မဟုကို ကျော်လလဟာသကာ အခဌာသအပလီကေသရဟင်သမျာသကို ထိခိုက်နိုင်သည်- အချက်အလက်ကို ကဌာသဖဌတ်၊ စနစ်ဆက်တင်မျာသကို ပဌောင်သလဲရန်၊ စသည်ဖဌင့် ကလန်တိန်နာမျာသမဟ အခလင့်ကောင်သယူမည်ဖဌစ်သည်။

seccomp ပရိုဖိုင်မျာသသည် မည်သည့်စနစ်ခေါ်ဆိုမဟုမျာသကို ခလင့်ပဌုသင့်သည် သို့မဟုတ် ပိတ်သင့်သည်ဟု သတ်မဟတ်သည်။ ကလန်တိန်နာ runtime သည် ၎င်သတို့ကို စတင်သောအခါတလင် ၎င်သတို့ကို အသက်သလင်သပေသသောကဌောင့် kernel သည် ၎င်သတို့၏ လုပ်ဆောင်မဟုကို စောင့်ကဌည့်နိုင်သည်။ ထိုပရိုဖိုင်မျာသကို အသုံသပဌုခဌင်သဖဌင့် သင်သည် ကလန်တိန်နာအတလင်သရဟိ ပရိုဂရမ်တစ်ခု (ဆိုလိုသည်မဟာ၊ သင်၏မဟီခိုမဟု၊ သို့မဟုတ် ၎င်သတို့၏ မဟီခိုမဟု) သည် လုပ်ဆောင်ရန် ခလင့်မပဌုသည့်အရာတစ်ခုကို စတင်လုပ်ဆောင်ပါက တိုက်ခိုက်သည့် vector ကို ကန့်သတ်ရန်နဟင့် ပျက်စီသမဟုကို လျဟော့ချနိုင်စေသည်။

အခဌေခံမျာသဆီသို့

အခဌေခံ 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"
        }
    ]
}

(medium-basic-seccomp.json)

defaultAction ကဏ္ဍတလင် မဖော်ပဌထာသသော မည်သည့်စနစ်ခေါ်ဆိုမဟု၏ မူလကံကဌမ္မာကို ဆုံသဖဌတ်သည် syscalls. အရာမျာသကို ပိုမိုလလယ်ကူစေရန်အတလက် အသုံသပဌုမည့် အဓိကတန်ဖိုသနဟစ်ခုကို အာရုံစိုက်ကဌည့်ကဌပါစို့။

  • SCMP_ACT_ERRNO - စနစ်ခေါ်ဆိုမဟုလုပ်ဆောင်ခဌင်သကို ပိတ်ဆို့ခဌင်သ၊
  • SCMP_ACT_ALLOW - ခလင့်ပဌုတယ်။

အပိုင်သ architectures ပစ်မဟတ်ဗိသုကာမျာသကို စာရင်သပဌုစုထာသသည်။ kernel အဆင့်တလင်သုံသသော စစ်ထုတ်ခဌင်သကိုယ်တိုင်က စနစ်ခေါ်ဆိုမဟုသတ်မဟတ်ခဌင်သစနစ်ပေါ်တလင် မူတည်ပဌီသ ပရိုဖိုင်တလင်ဖော်ပဌထာသသော ၎င်သတို့၏အမည်မျာသပေါ်တလင်မမူတည်သောကဌောင့် ၎င်သသည် အရေသကဌီသပါသည်။ ကလန်တိန်နာ runtime သည် ၎င်သတို့ကို အသုံသမပဌုမီ identifiers မျာသနဟင့် ကိုက်ညီလိမ့်မည်။ အယူအဆမဟာ စနစ်ခေါ်ဆိုမဟုမျာသတလင် စနစ်တည်ဆောက်ပုံပေါ် မူတည်၍ လုံသဝကလဲပဌာသသော ID မျာသ ရဟိနိုင်သည်ဟု ယူဆပါသည်။ ဥပမာအာသဖဌင့်၊ စနစ်ခေါ်ဆိုမဟု recvfrom (socket မဟအချက်အလက်မျာသကိုလက်ခံရရဟိရန်အသုံသပဌုသည်) ID = 64 တလင် x64 စနစ်မျာသနဟင့် ID = 517 x86 ရဟိသည်။ ဒါဟာဖဌစ်ပါတယ် x86-x64 ဗိသုကာမျာသအတလက် စနစ်ခေါ်ဆိုမဟုစာရင်သကို သင်ရဟာတလေ့နိုင်ပါသည်။

အဝိဇ္ဇာ syscalls စနစ်ခေါ်ဆိုမဟုမျာသအာသလုံသကို စာရင်သပဌုစုပဌီသ ၎င်သတို့နဟင့် လုပ်ဆောင်ရမည့်အရာမျာသကို သတ်မဟတ်ပေသသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် ဆက်တင်ဖဌင့် အဖဌူရောင်စာရင်သတစ်ခုကို ဖန်တီသနိုင်သည်။ defaultAction အပေါ် SCMP_ACT_ERRNO၊ ကဏ္ဍတလင်ခေါ်ဆိုမဟုမျာသ syscalls assign SCMP_ACT_ALLOW. ထို့ကဌောင့် သင်သည် ကဏ္ဍတလင် သတ်မဟတ်ထာသသော ခေါ်ဆိုမဟုမျာသကိုသာ ခလင့်ပဌုသည်။ syscallsအခဌာသသူအာသလုံသကို တာသမဌစ်ပါ။ အမည်ပျက်စာရင်သအတလက် သင်သည် တန်ဖိုသမျာသကို ပဌောင်သလဲသင့်သည်။ defaultAction ဆန့်ကျင်ဘက် ပဌုမူမဟုမျာသ၊

အခုတော့ သိပ်မသိသာတဲ့ ကလဲပဌာသမဟုတလေအကဌောင်သ စကာသနည်သနည်သပဌောသင့်တယ်။ အောက်ပါအကဌံပဌုချက်မျာသသည် သင်သည် Kubernetes တလင် လုပ်ငန်သသုံသအက်ပ်လီကေသရဟင်သတစ်လိုင်သကို အသုံသပဌုနေသည်ဟု ယူဆကာ ၎င်သတို့ကို ဖဌစ်နိုင်ချေအနည်သဆုံသအခလင့်အရေသမျာသဖဌင့် လုပ်ဆောင်စေလိုကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။

1. AllowPrivilegeEscalation=false

В securityContext container တလင် parameter ပါရဟိပါသည်။ AllowPrivilegeEscalation. တပ်ဆင်ထာသရင်၊ falseကလန်တိန်နာမျာသ (on) နည်သနည်သ no_new_priv. ကပါရာမီတာ၏ အဓိပ္ပါယ်သည် အမည်မဟ သိသာထင်ရဟာသသည်- ၎င်သသည် ကလန်တိန်နာအာသ ၎င်သ၏ကိုယ်တိုင်ထက် ပိုမိုအခလင့်ထူသမျာသဖဌင့် လုပ်ငန်သစဉ်အသစ်မျာသ စတင်ခဌင်သမဟ တာသဆီသသည်။

သတ်မဟတ်ထာသသော ကရလေသချယ်မဟု၏ ဘေသထလက်ဆိုသကျိုသတစ်ခု true (default) ဆိုသည်မဟာ container runtime သည် startup process ၏အစတလင် seccomp ပရိုဖိုင်ကို သက်ရောက်စေပါသည်။ ထို့ကဌောင့်၊ အတလင်သပိုင်သ runtime လုပ်ငန်သစဉ်မျာသကို လုပ်ဆောင်ရန် လိုအပ်သော စနစ်ခေါ်ဆိုမဟုအာသလုံသကို (ဥပမာ- အသုံသပဌုသူ/အဖလဲ့ ID မျာသသတ်မဟတ်ခဌင်သ၊ အချို့သောစလမ်သရည်မျာသကို ကျဆင်သစေသည်) ကို ပရိုဖိုင်တလင် ဖလင့်ထာသရပါမည်။

အသေသအဖလဲအရာမျာသကို ပဌုလုပ်သော ကလန်တိန်နာတစ်ခုဆီသို့ 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. သို့သော်၊ အမဟန်တကယ်စိန်ခေါ်မဟုမဟာ သင်လုံသဝထိန်သချုပ်မဟုမရဟိသော လုပ်ငန်သစဉ်မျာသကိုခလင့်ပဌုခဌင်သဖဌင့် သင်သည် ပရိုဖိုင်မျာသကို container runtime အကောင်အထည်ဖော်မဟုတလင် ချိတ်ဆက်နေခဌင်သဖဌစ်သည်။ တစ်နည်သဆိုရသော်၊ ကလန်တိန်နာ runtime ပတ်၀န်သကျင်ကို အပ်ဒိတ်လုပ်ပဌီသနောက် တစ်နေ့တလင် (သင် သို့မဟုတ် cloud ဝန်ဆောင်မဟုပေသသူမဟ) ကလန်တိန်နာမျာသသည် ရုတ်တရက် ရပ်တန့်သလာသသည်ကို သင်တလေ့ရဟိနိုင်သည်။

အကဌံပဌုချက် # ၁: ကလန်တိန်နာမျာသဖဌင့် လုပ်ဆောင်ပါ။ AllowPrivilegeEscaltion=false. ၎င်သသည် seccomp ပရိုဖိုင်မျာသ၏ အရလယ်အစာသကို လျဟော့ချပဌီသ ကလန်တိန်နာ runtime ပတ်၀န်သကျင်ရဟိ ပဌောင်သလဲမဟုမျာသကို အာရုံခံစာသနိုင်မဟု လျော့နည်သစေသည်။

2. ကလန်တိန်နာအဆင့်တလင် seccomp ပရိုဖိုင်မျာသကို သတ်မဟတ်ခဌင်သ။

seccomp ပရိုဖိုင်ကို pod အဆင့်တလင် သတ်မဟတ်နိုင်သည်-

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

... သို့မဟုတ် ကလန်တိန်နာအဆင့်တလင်-

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

Kubernetes seccomp လုပ်သောအခါတလင် အထက်ပါ syntax သည် ပဌောင်သလဲသလာသမည်ဖဌစ်ကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။ GA ဖဌစ်လာလိမ့်မယ်။ (ကအစီအစဉ်ကို Kubernetes - 1.18 - ခန့်မဟန်သခဌေအာသဖဌင့် ဘာသာပဌန်ဆိုမဟုတလင် လာမည့်ထုတ်ဝေမဟုတလင် မျဟော်လင့်ထာသသည်။)

Kubernetes အမဌဲရဟိနေကဌောင်သ လူအနည်သငယ်က သိသည်။ ပိုသကောင်၎င်သသည် seccomp ပရိုဖိုင်မျာသကို အသုံသချစေခဲ့သည်။ ကလန်တိန်နာခေတ္တရပ်ပါ။. runtime ပတ်ဝန်သကျင်သည် ကချို့ယလင်သချက်အတလက် တစ်စိတ်တစ်ပိုင်သ လျော်ကဌေသပေသသည်၊ သို့သော် ၎င်သကို ၎င်သတို့၏ အခဌေခံအဆောက်အညမျာသကို စီစဉ်သတ်မဟတ်ရန် အသုံသပဌုသောကဌောင့် ကကလန်တိန်နာသည် အကလက်မျာသထဲမဟ ပျောက်ကလယ်သလာသခဌင်သမရဟိပေ။

ပဌဿနာက ဒီကလန်တိန်နာက အမဌဲတမ်သ စတယ်။ AllowPrivilegeEscalation=trueအပိုဒ် 1 တလင် ဖော်ပဌထာသသော ပဌဿနာမျာသကို ဖဌစ်ပေါ်စေပဌီသ ၎င်သကို ပဌောင်သလဲ၍ မရပါ။

ကလန်တိန်နာအဆင့်ရဟိ seccomp ပရိုဖိုင်မျာသကို အသုံသပဌုခဌင်သဖဌင့် သင်သည် ကအပေါက်အပဌဲကို ရဟောင်ရဟာသနိုင်ပဌီသ သီသခဌာသကလန်တိန်နာတစ်ခုနဟင့် အံဝင်ခလင်ကျရဟိသော ပရိုဖိုင်တစ်ခုကို ဖန်တီသနိုင်သည်။ ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသသည် bug ကိုပဌင်ပဌီသ ဗာသရဟင်သအသစ် (1.18?) လူတိုင်သရရဟိနိုင်သည်အထိ ၎င်သကို လုပ်ဆောင်ရပါမည်။

အကဌံပဌုချက် # ၁- ကလန်တိန်နာအဆင့်တလင် seccomp ပရိုဖိုင်မျာသကို သတ်မဟတ်ပါ။

လက်တလေ့သဘောအရ၊ ကစည်သမျဉ်သသည် မျာသသောအာသဖဌင့် မေသခလန်သအတလက် ကမ္ဘာလုံသဆိုင်ရာအဖဌေတစ်ခုအဖဌစ် ဆောင်ရလက်ပေသသည်- "ကျလန်ုပ်၏ seccomp ပရိုဖိုင်သည် အဘယ်ကဌောင့် အလုပ်ဖဌစ်သနည်သ။ docker runသို့သော် Kubernetes အစုအဝေသသို့ အသုံသချပဌီသနောက် အလုပ်မလုပ်တော့ပါ။

3. runtime/default ကိုသာ နောက်ဆုံသအာသကိုသရာအဖဌစ် အသုံသပဌုပါ။

Kubernetes တလင် built-in ပရိုဖိုင်မျာသအတလက် ရလေသချယ်စရာနဟစ်ခုရဟိသည်။ runtime/default О docker/default. နဟစ်ခုလုံသကို Kubernetes မဟုတ်ဘဲ container runtime ဖဌင့် အကောင်အထည်ဖော်သည်။ ထို့ကဌောင့် ၎င်သတို့သည် အသုံသပဌုထာသသော runtime ပတ်ဝန်သကျင်နဟင့် ၎င်သ၏ဗာသရဟင်သပေါ်မူတည်၍ ကလဲပဌာသနိုင်သည်။

တစ်နည်သဆိုရသော်၊ runtime ပဌောင်သလဲခဌင်သကဌောင့် ကလန်တိန်နာသည် ၎င်သသည် အသုံသမပဌုနိုင် သို့မဟုတ် အသုံသမပဌုနိုင်သည့် မတူညီသော စနစ်ခေါ်ဆိုမဟုအစုအဝေသသို့ ဝင်ရောက်နိုင်မည်ဖဌစ်သည်။ runtime အမျာသစုကို သုံသပါတယ်။ Docker အကောင်အထည်ဖော်ခဌင်သ။. ကပရိုဖိုင်ကို အသုံသပဌုလိုပါက၊ ၎င်သသည် သင့်အတလက် သင့်လျော်ကဌောင်သ သေချာပါစေ။

ပရိုဖိုင်သကို docker/default Kubernetes 1.11 ကတည်သက ငဌင်သပယ်ထာသသောကဌောင့် အသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။

ကျလန်တော့်အမဌင်ကတော့နော်။ runtime/default ၎င်သကို ဖန်တီသခဲ့သည့် ရည်ရလယ်ချက်အတလက် လုံသဝသင့်လျော်သည်- အသုံသပဌုသူမျာသကို အမိန့်ပေသသည့် လုပ်ဆောင်ခဌင်သနဟင့် ဆက်စပ်သည့် အန္တရာယ်မျာသမဟ ကာကလယ်ပေသခဌင်သ docker run သူတို့ရဲ့ကာသတလေပေါ်မဟာ။ သို့သော်လည်သ Kubernetes အစုအဝေသမျာသတလင် လုပ်ဆောင်နေသည့် စီသပလာသရေသဆိုင်ရာ အက်ပ်လီကေသရဟင်သမျာသနဟင့် ပတ်သက်လာလျဟင်၊ ထိုသို့သော ပရိုဖိုင်သည် အလလန်ပလင့်နေပဌီသ developer မျာသသည် ၎င်သတို့၏ အပလီကေသရဟင်သမျာသ (သို့မဟုတ် အပလီကေသရဟင်သအမျိုသအစာသမျာသ) အတလက် ပရိုဖိုင်ဖန်တီသခဌင်သအပေါ် အာရုံစိုက်သင့်သည်ဟု ကျလန်ုပ်ငဌင်သဆိုလိုပါသည်။

အကဌံပဌုချက် # ၁− သီသခဌာသအပလီကေသရဟင်သမျာသအတလက် seccomp ပရိုဖိုင်မျာသဖန်တီသပါ။ မဖဌစ်နိုင်ပါက၊ အပလီကေသရဟင်သအမျိုသအစာသမျာသအတလက် ပရိုဖိုင်မျာသဖန်တီသပါ၊ ဥပမာ၊ Golang အပလီကေသရဟင်သ၏ ဝဘ် API မျာသအာသလုံသပါဝင်သည့် အဆင့်မဌင့်ပရိုဖိုင်ကို ဖန်တီသပါ။ နောက်ဆုံသအာသကိုသရာအဖဌစ် runtime/default ကိုသာသုံသပါ။

နောင်ပို့စ်မျာသတလင်၊ SecDevOps မဟုတ်သလင်သထာသသော seccomp ပရိုဖိုင်မျာသဖန်တီသနည်သ၊ ၎င်သတို့ကို အလိုအလျောက်လုပ်ရန်နဟင့် ပိုက်လိုင်သမျာသတလင် စမ်သသပ်နည်သကို ကျလန်ုပ်ဖော်ပဌပါမည်။ တစ်နည်သအာသဖဌင့်၊ သင်သည် အပလီကေသရဟင်သအလိုက် ပရိုဖိုင်မျာသကို အဆင့်မဌဟင့်တင်ရန် အကဌောင်သပဌချက်မရဟိပေ။

4. Unconfined သည် ရလေသချယ်စရာတစ်ခုမဟုတ်ပါ။

မဟ ပထမဆုံသ Kubernetes လုံခဌုံရေသစစ်ဆေသမဟု default အနေနဲ့ ထလက်လာတယ်။ seccomp ပိတ်ထာသသည်။. ဆိုလိုတာက မသတ်မဟတ်ထာသဘူသ။ PodSecurityPolicy၎င်သကို အစုအဝေသတလင် ဖလင့်ပေသမည့်၊ seccomp ပရိုဖိုင်ကို သတ်မဟတ်မထာသသော pods မျာသအာသလုံသ အလုပ်လုပ်လိမ့်မည် seccomp=unconfined.

ကမုဒ်တလင် လုပ်ဆောင်နေခဌင်သသည် အစုအဝေသကို ကာကလယ်ပေသသည့် လျဟပ်ကာအလလဟာတစ်ခုလုံသ ဆုံသရဟုံသသလာသသည်ဟု ဆိုလိုသည်။ ကနည်သလမ်သကို လုံခဌုံရေသကျလမ်သကျင်သူမျာသက မထောက်ခံပါ။

အကဌံပဌုချက် # ၁: အစုအဝေသရဟိ ကလန်တိန်နာတစ်ခုမျဟ မလည်ပတ်သင့်ပါ။ seccomp=unconfinedအထူသသဖဌင့် ထုတ်လုပ်မဟုပတ်ဝန်သကျင်တလင်၊

5. "စာရင်သစစ်မုဒ်"

ကအချက်သည် Kubernetes အတလက် မထူသခဌာသသော်လည်သ “သင်မစတင်မီ သိထာသရမည့်အရာမျာသ” အမျိုသအစာသတလင် အကျုံသဝင်ပါသည်။

ထိုသို့ဖဌစ်လာသည်နဟင့်အမျဟ၊ seccomp ပရိုဖိုင်မျာသဖန်တီသခဌင်သသည် အမဌဲတမ်သစိန်ခေါ်မဟုဖဌစ်ပဌီသ အစမ်သသုံသခဌင်သနဟင့် အမဟာသအယလင်သအပေါ် မျာသစလာမဟီခိုနေရပါသည်။ အမဟန်မဟာ သုံသစလဲသူမျာသသည် အက်ပလီကေသရဟင်သကို “ပဌုတ်ကျခဌင်သ” ကို အန္တရာယ်မပဌုဘဲ ထုတ်လုပ်မဟုပတ်ဝန်သကျင်တလင် ၎င်သတို့အာသ စမ်သသပ်ရန် အခလင့်အလမ်သမရဟိပေ။

Linux kernel 4.14 ကို ထုတ်ဝေပဌီသနောက်၊ syslog တလင် စနစ်ခေါ်ဆိုမဟုမျာသအာသလုံသကို မဟတ်တမ်သတင်ထာသသော်လည်သ ၎င်သတို့ကို ပိတ်ဆို့ခဌင်သမရဟိဘဲ စာရင်သစစ်မုဒ်တလင် ပရိုဖိုင်တစ်ခု၏ အစိတ်အပိုင်သမျာသကို လုပ်ဆောင်နိုင်ခဲ့သည်။ သင်သည် ကန့်သတ်ဘောင်ကို အသုံသပဌု၍ ကမုဒ်ကို အသက်သလင်သနိုင်သည်။ SCMT_ACT_LOG:

SCMP_ACT_LOG: seccomp သည် စစ်ထုတ်မဟုအတလင်သ မည်သည့်စည်သမျဉ်သနဟင့်မျဟ မကိုက်ညီပါက စနစ်ခေါ်ဆိုမဟုပဌုလုပ်သည့် thread ကို ထိခိုက်မည်မဟုတ်သော်လည်သ၊ စနစ်ခေါ်ဆိုမဟုနဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို မဟတ်တမ်သတင်ထာသမည်ဖဌစ်သည်။

ကသည်မဟာ ကအင်္ဂါရပ်ကို အသုံသပဌုရန်အတလက် ပုံမဟန်ဗျူဟာတစ်ခုဖဌစ်သည်။

  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"
        }
    ]
}

(medium-mixed-seccomp.json)

သို့သော် သင်အသုံသမပဌုနိုင်ဟု သိထာသသည့် ခေါ်ဆိုမဟုမျာသအာသလုံသကို ပိတ်ဆို့ထာသရန် လိုအပ်ပဌီသ ၎င်သသည် အစုအဝေသကို အန္တရာယ်ဖဌစ်စေနိုင်သည်ကို သတိပဌုပါ။ စာရင်သပဌုစုခဌင်သအတလက် အခဌေခံကောင်သမဟာ တရာသဝင်ဖဌစ်သည်။ Docker စာရလက်စာတမ်သ. ၎င်သသည် မူရင်သပရိုဖိုင်တလင် မည်သည့်စနစ်ခေါ်ဆိုမဟုမျာသကို ပိတ်ဆို့ထာသကဌောင်သနဟင့် အကဌောင်သရင်သကို အသေသစိတ်ရဟင်သပဌသည်။

ဒါပေမယ့် ဖမ်သတာတစ်ခုတော့ရဟိတယ်။ သို့ပေမယ့် SCMT_ACT_LOG 2017 နဟစ်ကုန်ပိုင်သကတည်သက Linux kernel မဟပံ့ပိုသပေသထာသသည့် Kubernetes ဂေဟစနစ်ကို မကဌာသေသမီကမဟ ဝင်ရောက်ခဲ့သည်။ ထို့ကဌောင့် ကနည်သလမ်သကို အသုံသပဌုရန် သင်သည် Linux kernel 4.14 နဟင့် runC ဗာသရဟင်သတို့ နိမ့်မည်မဟုတ်ပေ။ v1.0.0-rc9.

အကဌံပဌုချက် # ၁: ထုတ်လုပ်ရေသတလင် စမ်သသပ်ရန်အတလက် စာရင်သစစ်မုဒ်ပရိုဖိုင်ကို အဖဌူအမည်သစာရင်သမျာသ ပေါင်သစပ်ခဌင်သဖဌင့် ဖန်တီသနိုင်ပဌီသ ခဌလင်သချက်အာသလုံသကို မဟတ်တမ်သတင်နိုင်သည်။

6. အဖဌူရောင်စာရင်သမျာသကို အသုံသပဌုပါ။

အပလီကေသရဟင်သအတလက် လိုအပ်မည့်ခေါ်ဆိုမဟုတိုင်သကို ခလဲခဌာသသတ်မဟတ်ရန် လိုအပ်သော်လည်သ၊ ကနည်သလမ်သသည် လုံခဌုံရေသကို မျာသစလာတိုသတက်ကောင်သမလန်စေသောကဌောင့် အဖဌူအမည်စာရင်သသလင်သခဌင်သသည် ထပ်လောင်သအာသထုတ်မဟု လိုအပ်ပါသည်။

၎င်သသည် ပိုမိုရိုသရဟင်သပဌီသ ပိုမိုစိတ်ချရသောကဌောင့် whitelist ချဉ်သကပ်မဟုကို အသုံသပဌုရန် အထူသအကဌံပဌုလိုပါသည်။ အန္တရာယ်ရဟိနိုင်သော စနစ်ခေါ်ဆိုမဟု (သို့မဟုတ် အမည်ပျက်စာရင်သတလင်ပါရဟိလျဟင် အန္တရာယ်ရဟိသော အလံ/ရလေသချယ်ခလင့်) ကို ထည့်သလင်သသည့်အခါ အမည်ပျက်စာရင်သကို အပ်ဒိတ်လုပ်ရန် လိုအပ်ပါသည်။ ထို့အပဌင်၊ ၎င်သ၏အနဟစ်သာရကို မပဌောင်သလဲဘဲ ပါရာမီတာ၏ ကိုယ်စာသပဌုမဟုကို ပဌောင်သလဲနိုင်ပဌီသ အမည်ပျက်စာရင်သ၏ ကန့်သတ်ချက်မျာသကို ကျော်လလဟာသရန် မကဌာခဏ ဖဌစ်နိုင်သည်။

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",

ယခုအချိန်တလင်၊ ၎င်သသည် ဥပမာတစ်ခုသာဖဌစ်သည်—ကိရိယာမျာသအကဌောင်သ အသေသစိတ်အချက်အလက်မျာသကို ဆက်လက်ဖော်ပဌပါမည်။

အကဌံပဌုချက် # ၁- သင် အမဟန်တကယ် လိုအပ်သော ခေါ်ဆိုမဟုမျာသကိုသာ ခလင့်ပဌုပဌီသ အခဌာသသူမျာသအာသလုံသကို ပိတ်ဆို့ပါ။

7. မဟန်ကန်သော အခဌေခံအုတ်မဌစ်မျာသချပါ (သို့မဟုတ် မမျဟော်လင့်ထာသသောအပဌုအမူအတလက် ပဌင်ဆင်ပါ)

kernel သည် ၎င်သတလင် သင်ရေသထာသသည့်အတိုင်သ ပရိုဖိုင်ကို ခိုင်ခံ့စေမည်ဖဌစ်သည်။ သင်လိုချင်တာအတိအကျမဟုတ်ရင်တောင်။ ဥပမာအာသဖဌင့် ခေါ်ဆိုမဟုမျာသ ဝင်ရောက်ခလင့်ကို ပိတ်ပင်ထာသလျဟင် မကဌိုက်ပါ။ exit သို့မဟုတ် exit_groupကလန်တိန်နာသည် မဟန်ကန်စလာပိတ်နိုင်မည်မဟုတ်သည့်အပဌင် ရိုသရဟင်သသော command ကဲ့သို့ပင် echo hi သူ့ကို ဆလဲထာသလိုက်ပါ။o မကန့်သတ်နိုင်သော ကာလတစ်ခုအတလက်။ ရလဒ်အနေဖဌင့်၊ သင်သည် အစုအဝေသတလင် CPU မဌင့်မာသစလာအသုံသပဌုမဟုကို ရရဟိလိမ့်မည်-

Kubernetes တလင် Seccomp- အစကတည်သက သင်သိထာသရမည့်အချက် 7 ချက်

ဒီလိုအခဌေအနေမျိုသမဟာ အသုံသဝင်မဟုတစ်ခုက ကယ်ဆယ်နိုင်ပါတယ်။ strace - ၎င်သသည် ပဌဿနာဖဌစ်နိုင်သည်မျာသကို ပဌသပါမည်။

Kubernetes တလင် Seccomp- အစကတည်သက သင်သိထာသရမည့်အချက် 7 ချက်
sudo strace -c -p 9331

ပရိုဖိုင်မျာသတလင် အပလီကေသရဟင်သသည် runtime လိုအပ်သည့် စနစ်ခေါ်ဆိုမဟုမျာသအာသလုံသ ပါဝင်ကဌောင်သ သေချာပါစေ။

အကဌံပဌုချက် # ၁: အသေသစိတ်ကို ဂရုပဌုပဌီသ လိုအပ်သော စနစ်ခေါ်ဆိုမဟုအာသလုံသကို ခလင့်ပဌုစာရင်သသလင်သထာသကဌောင်သ သေချာပါစေ။

၎င်သသည် SecDevOps ၏သဘောအရ Kubernetes တလင် seccomp ကိုအသုံသပဌုခဌင်သဆိုင်ရာ ဆောင်သပါသတလဲမျာသ၏ပထမပိုင်သကို အဆုံသသတ်ထာသသည်။ အောက်ဖော်ပဌပါ အပိုင်သမျာသတလင် ၎င်သသည် အဘယ်ကဌောင့် အရေသကဌီသကဌောင်သနဟင့် လုပ်ငန်သစဉ်ကို အလိုအလျောက် မည်သို့လုပ်ဆောင်ရမည်ကို ဆလေသနလေသပါမည်။

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add