ááŸááºáá»ááºá áá¬áá¬ááŒááº: ááŒáááááºáá¯áá¹ááá® ASOS.com á០á¡ááŒá®ážáááºáž á¡ááá®áá±ážááŸááºáž áá¯á¶ááŒá¯á¶áá±áž á¡ááºáá»ááºáá®áá¬áá áºáŠážá០áá¬áá¬ááŒááºáá¬ážáá±á¬ áá±á¬ááºážáá«ážáá áºáá¯ááºááᯠááá·áºá¡á¬áá¯á¶ááᯠáá»áœááºá¯ááºááá¯á· áááºááŒáá«áááºá áááºážááŸáá·áºá¡áá°á áá°ááẠseccomp ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº Kubernetes ááœááºáá¯á¶ááŒá¯á¶áá±ážááá¯ážáááºá á±áááºáááºááœááºááá·áºáá¯ááºáá±ááŸá¯áá»á¬ážáááºááá¯ááºá áááºáá²á·áááºá áááá«ááºážááᯠá á¬áááºáá°áá»á¬áž ááŸá áºáááºáá«á á á¬áá±ážáá° ááá¯ááºáá¬ááŒá®áž á€á¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áº áááºáááºá áá°á á¡áá¬ááẠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáááºááẠáá±ážáá¬ážáá«áááºá
á€áá±á¬ááºážáá«ážááẠááŸá±á¬áºááá¬ááŸáá·áº á
á¯ááºážá¡áááºááᯠááá¯á¶ážáá² 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"
}
]
}
defaultAction
ááá¹áááœáẠááá±á¬áºááŒáá¬ážáá±á¬ áááºááá·áºá
áá
áºáá±á«áºááá¯ááŸá¯á áá°ááá¶ááŒáá¹áá¬ááᯠáá¯á¶ážááŒááºááẠsyscalls
. á¡áá¬áá»á¬ážááᯠááá¯ááá¯ááœááºáá°á
á±áááºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááááááºááá¯ážááŸá
áºáá¯ááᯠá¡á¬áá¯á¶á
áá¯ááºááŒáá·áºááŒáá«á
áá¯á·á
-
SCMP_ACT_ERRNO
- á áá áºáá±á«áºááá¯ááŸá¯áá¯ááºáá±á¬ááºááŒááºážááᯠááááºááá¯á·ááŒááºážá -
SCMP_ACT_ALLOW
- ááœáá·áºááŒá¯áááºá
á¡ááá¯ááºáž architectures
áá
áºááŸááºáááá¯áá¬áá»á¬ážááᯠá
á¬áááºážááŒá¯á
á¯áá¬ážáááºá kernel á¡ááá·áºááœááºáá¯á¶ážáá±á¬ á
á
áºáá¯ááºááŒááºážááá¯ááºááá¯ááºá á
áá
áºáá±á«áºááá¯ááŸá¯áááºááŸááºááŒááºážá
áá
áºáá±á«áºááœáẠáá°áááºááŒá®áž áááá¯ááá¯ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ áááºážááá¯á·áá¡áááºáá»á¬ážáá±á«áºááœááºááá°áááºáá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áá±ážááŒá®ážáá«áááºá ááœááºááááºáᬠruntime ááẠáááºážááá¯á·ááᯠá¡áá¯á¶ážáááŒá¯áá® identifiers áá»á¬ážááŸáá·áº ááá¯ááºáá®áááá·áºáááºá á¡áá°á¡áááŸá¬ á
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááœáẠá
áá
áºáááºáá±á¬ááºáá¯á¶áá±á«áº áá°áááºá áá¯á¶ážáááœá²ááŒá¬ážáá±á¬ ID áá»á¬áž ááŸáááá¯ááºáááºáᯠáá°ááá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á
áá
áºáá±á«áºááá¯ááŸá¯ recvfrom
(socket ááŸá¡áá»ááºá¡áááºáá»á¬ážááá¯áááºáá¶áááŸááááºá¡áá¯á¶ážááŒá¯áááº) ID = 64 ááœáẠx64 á
áá
áºáá»á¬ážááŸáá·áº ID = 517 x86 ááŸááááºá
á¡áááá¹áᬠ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"
}
]
}
... áá«ááœá±á¡á á¬áž
{
"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"
}
]
}
áá«áá±ááá·áº áá«á áá¬ááŒá±á¬áá·áº ááŒá¿áá¬ááŒá
áºáá¬áá²á ááá¯ááºááá¯ááºááá¯ááºáá»á áá»áœááºá¯ááºááẠá¡á±á¬ááºáá«á
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡ááŒá°áá±á¬ááºá
á¬áááºážááœááºážááŒááºážááᯠááŸá±á¬ááºááŒááºáá«ááẠ(áááºážááá¯á·á¡ááœáẠá¡ááŸááºáááẠááá¯á¡ááºááŒááºážáááŸááá«á) 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 ááẠááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá
áºááŒá±á¬ááºáž áá»á±ážáá°ážááŒá¯á áááááŒá¯áá«á
Kubernetes á¡ááŒá²ááŸááá±ááŒá±á¬ááºáž áá°á¡áááºážáááºá áááááºá
ááŒá¿áá¬á áá®ááœááºááááºáá¬á á¡ááŒá²áááºáž á
áááºá 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/default
Kubernetes 1.11 ááááºážá ááŒááºážáááºáá¬ážáá±á¬ááŒá±á¬áá·áº á¡áá¯á¶ážááŒá¯ááŒááºážááᯠááŸá±á¬ááºááŒááºáá«á
áá»áœááºáá±á¬á·áºá¡ááŒááºááá±á¬á·áá±á¬áºá runtime/default
áááºážááᯠáááºáá®ážáá²á·ááá·áº áááºááœááºáá»ááºá¡ááœáẠáá¯á¶ážáááá·áºáá»á±á¬áºáááº- á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááᯠá¡áááá·áºáá±ážááá·áº áá¯ááºáá±á¬ááºááŒááºážááŸáá·áº áááºá
ááºááá·áº á¡áá¹ááá¬ááºáá»á¬ážá០áá¬ááœááºáá±ážááŒááºáž docker run
áá°ááá¯á·áá²á·áá¬ážááœá±áá±á«áºááŸá¬á ááá¯á·áá±á¬áºáááºáž Kubernetes á¡á
á¯á¡áá±ážáá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá±ááá·áº á
á®ážááœá¬ážáá±ážááá¯ááºáᬠá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááŸáá·áº áááºáááºáá¬áá»áŸááºá ááá¯ááá¯á·áá±á¬ áááá¯ááá¯ááºááẠá¡ááœááºááœáá·áºáá±ááŒá®áž developer áá»á¬ážááẠáááºážááá¯á·á á¡ááá®áá±ážááŸááºážáá»á¬áž (ááá¯á·ááá¯áẠá¡ááá®áá±ážááŸááºážá¡áá»áá¯ážá¡á
á¬ážáá»á¬áž) á¡ááœáẠáááá¯ááá¯ááºáááºáá®ážááŒááºážá¡áá±á«áº á¡á¬áá¯á¶á
áá¯ááºááá·áºáááºáᯠáá»áœááºá¯ááºááŒááºážááá¯ááá¯áá«áááºá
á¡ááŒá¶ááŒá¯áá»áẠ# áâ áá®ážááŒá¬ážá¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠseccomp áááá¯ááá¯ááºáá»á¬ážáááºáá®ážáá«á áááŒá áºááá¯ááºáá«áá á¡ááá®áá±ážááŸááºážá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠáááá¯ááá¯ááºáá»á¬ážáááºáá®ážáá«á á¥ááá¬á Golang á¡ááá®áá±ážááŸááºážá ááẠAPI áá»á¬ážá¡á¬ážáá¯á¶ážáá«áááºááá·áº á¡ááá·áºááŒáá·áºáááá¯ááá¯ááºááᯠáááºáá®ážáá«á áá±á¬ááºáá¯á¶ážá¡á¬ážááá¯ážáá¬á¡ááŒá Ạruntime/default ááá¯áá¬áá¯á¶ážáá«á
áá±á¬ááºááá¯á·á áºáá»á¬ážááœááºá SecDevOps ááŸá¯ááºááœááºážáá¬ážáá±á¬ seccomp áááá¯ááá¯ááºáá»á¬ážáááºáá®ážáááºážá áááºážááá¯á·ááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáááºááŸáá·áº ááá¯ááºááá¯ááºážáá»á¬ážááœáẠá ááºážáááºáááºážááᯠáá»áœááºá¯ááºáá±á¬áºááŒáá«áááºá áá áºáááºážá¡á¬ážááŒáá·áºá áááºááẠá¡ááá®áá±ážááŸááºážá¡ááá¯áẠáááá¯ááá¯ááºáá»á¬ážááᯠá¡ááá·áºááŒáŸáá·áºáááºááẠá¡ááŒá±á¬ááºážááŒáá»ááºáááŸááá±á
4. Unconfined ááẠááœá±ážáá»ááºá áá¬áá áºáá¯ááá¯ááºáá«á
á០PodSecurityPolicy
áááºážááᯠá¡á
á¯á¡áá±ážááœáẠááœáá·áºáá±ážááá·áºá seccomp áááá¯ááá¯ááºááᯠáááºááŸááºááá¬ážáá±á¬ pods áá»á¬ážá¡á¬ážáá¯á¶áž á¡áá¯ááºáá¯ááºáááá·áºááẠseccomp=unconfined
.
á€áá¯ááºááœáẠáá¯ááºáá±á¬ááºáá±ááŒááºážááẠá¡á á¯á¡áá±ážááᯠáá¬ááœááºáá±ážááá·áº áá»áŸááºáá¬á¡ááœáŸá¬áá áºáá¯áá¯á¶áž áá¯á¶ážááŸá¯á¶ážááœá¬ážáááºáᯠááá¯ááá¯áááºá á€áááºážáááºážááᯠáá¯á¶ááŒá¯á¶áá±ážáá»áœááºážáá»ááºáá°áá»á¬ážá ááá±á¬ááºáá¶áá«á
á¡ááŒá¶ááŒá¯áá»áẠ# á: á¡á
á¯á¡áá±ážááŸá ááœááºááááºáá¬áá
áºáá¯áá»áŸ ááááºáááºááá·áºáá«á seccomp=unconfined
á¡áá°ážáááŒáá·áº áá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááœááºá
5. "á á¬áááºážá á áºáá¯ááº"
á€á¡áá»ááºááẠKubernetes á¡ááœáẠááá°ážááŒá¬ážáá±á¬áºáááºáž âáááºáá áááºáá® áááá¬ážáááá·áºá¡áá¬áá»á¬ážâ á¡áá»áá¯ážá¡á á¬ážááœáẠá¡áá»á¯á¶ážáááºáá«áááºá
ááá¯ááá¯á·ááŒá áºáá¬áááºááŸáá·áºá¡áá»áŸá seccomp áááá¯ááá¯ááºáá»á¬ážáááºáá®ážááŒááºážááẠá¡ááŒá²áááºážá áááºáá±á«áºááŸá¯ááŒá áºááŒá®áž á¡á ááºážáá¯á¶ážááŒááºážááŸáá·áº á¡ááŸá¬ážá¡ááœááºážá¡áá±á«áº áá»á¬ážá áœá¬ááŸá®ááá¯áá±ááá«áááºá á¡ááŸááºááŸá¬ áá¯á¶ážá áœá²áá°áá»á¬ážááẠá¡ááºááá®áá±ážááŸááºážááᯠâááŒá¯ááºáá»ááŒááºážâ ááᯠá¡áá¹ááá¬ááºáááŒá¯áá² áá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááœáẠáááºážááá¯á·á¡á¬áž á ááºážáááºááẠá¡ááœáá·áºá¡áááºážáááŸááá±á
Linux kernel 4.14 ááᯠáá¯ááºáá±ááŒá®ážáá±á¬ááºá syslog ááœáẠá
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŸááºáááºážáááºáá¬ážáá±á¬áºáááºáž áááºážááá¯á·ááᯠááááºááá¯á·ááŒááºážáááŸááá² á
á¬áááºážá
á
áºáá¯ááºááœáẠáááá¯ááá¯ááºáá
áºáá¯á á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáá²á·áááºá áááºááẠááá·áºáááºáá±á¬ááºááᯠá¡áá¯á¶ážááŒá¯á á€áá¯ááºááᯠá¡áááºááœááºážááá¯ááºáááºá SCMT_ACT_LOG
:
SCMP_ACT_LOG: seccomp ááẠá á áºáá¯ááºááŸá¯á¡ááœááºáž áááºááá·áºá ááºážáá»ááºážááŸáá·áºáá»áŸ áááá¯ááºáá®áá«á á áá áºáá±á«áºááá¯ááŸá¯ááŒá¯áá¯ááºááá·áº thread ááᯠááááá¯ááºáááºááá¯ááºáá±á¬áºáááºážá á áá áºáá±á«áºááá¯ááŸá¯ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠááŸááºáááºážáááºáá¬ážáááºááŒá áºáááºá
á€áááºááŸá¬ á€á¡ááºá¹áá«áááºááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠáá¯á¶ááŸááºáá»á°áá¬áá áºáá¯ááŒá áºáááºá
- ááá¯á¡ááºáá±á¬ á áá áºáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠááœáá·áºááŒá¯áá«á
- áááºáááá±á¬á áá áºá០áá¯ááºážáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠááááºááá¯á·ááŒááºážááẠá¡áá¯á¶ážááááºáá«á
- ááŸááºáááºážáá²ááœáẠá¡ááŒá¬ážáá±á«áºááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááᯠááŸááºáááºážáááºáá«á
ááá¯ážááŸááºážáá±á¬ á¥ááá¬ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
{
"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"
}
]
}
ááá¯á·áá±á¬áº áááºá¡áá¯á¶ážáááŒá¯ááá¯ááºáᯠáááá¬ážááá·áº áá±á«áºááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááááºááá¯á·áá¬ážááẠááá¯á¡ááºááŒá®áž áááºážááẠá¡á
á¯á¡áá±ážááᯠá¡áá¹ááá¬ááºááŒá
áºá
á±ááá¯ááºáááºááᯠáááááŒá¯áá«á á
á¬áááºážááŒá¯á
á¯ááŒááºážá¡ááœáẠá¡ááŒá±áá¶áá±á¬ááºážááŸá¬ ááá¬ážáááºááŒá
áºáááºá
áá«áá±ááá·áº áááºážáá¬áá
áºáá¯áá±á¬á·ááŸááááºá ááá¯á·áá±ááá·áº SCMT_ACT_LOG
2017 ááŸá
áºáá¯ááºááá¯ááºážááááºážá Linux kernel ááŸáá¶á·ááá¯ážáá±ážáá¬ážááá·áº Kubernetes áá±áá
áá
áºááᯠáááŒá¬áá±ážáá®áá០áááºáá±á¬ááºáá²á·áááºá ááá¯á·ááŒá±á¬áá·áº á€áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯ááẠáááºááẠLinux kernel 4.14 ááŸáá·áº runC áá¬ážááŸááºážááá¯á· áááá·áºáááºááá¯ááºáá±á
á¡ááŒá¶ááŒá¯áá»áẠ# á: áá¯ááºáá¯ááºáá±ážááœáẠá ááºážáááºáááºá¡ááœáẠá á¬áááºážá á áºáá¯ááºáááá¯ááá¯ááºááᯠá¡ááŒá°á¡áááºážá á¬áááºážáá»á¬áž áá±á«ááºážá ááºááŒááºážááŒáá·áº áááºáá®ážááá¯ááºááŒá®áž ááŒáœááºážáá»ááºá¡á¬ážáá¯á¶ážááᯠááŸááºáááºážáááºááá¯ááºáááºá
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
áá®ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬ á¡áá¯á¶ážáááºááŸá¯áá
áºáá¯á áááºáááºááá¯ááºáá«áááºá strace
- áááºážááẠááŒá¿áá¬ááŒá
áºááá¯ááºáááºáá»á¬ážááᯠááŒááá«áááºá
sudo strace -c -p 9331
áááá¯ááá¯ááºáá»á¬ážááœáẠá¡ááá®áá±ážááŸááºážááẠruntime ááá¯á¡ááºááá·áº á áá áºáá±á«áºááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶áž áá«áááºááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
á¡ááŒá¶ááŒá¯áá»áẠ# á: á¡áá±ážá áááºááᯠááá¯ááŒá¯ááŒá®áž ááá¯á¡ááºáá±á¬ á áá áºáá±á«áºááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠááœáá·áºááŒá¯á á¬áááºážááœááºážáá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
áááºážááẠSecDevOps áááá±á¬á¡á Kubernetes ááœáẠseccomp ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááá¯ááºáᬠáá±á¬ááºážáá«ážááœá²áá»á¬ážááááááá¯ááºážááᯠá¡áá¯á¶ážáááºáá¬ážáááºá á¡á±á¬ááºáá±á¬áºááŒáá« á¡ááá¯ááºážáá»á¬ážááœáẠáááºážááẠá¡áááºááŒá±á¬áá·áº á¡áá±ážááŒá®ážááŒá±á¬ááºážááŸáá·áº áá¯ááºáááºážá ááºááᯠá¡ááá¯á¡áá»á±á¬áẠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááœá±ážááœá±ážáá«áááºá
PS áá¬áá¬ááŒááºááŸ
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
Docker ááœááºááááºáá¬áá»á¬ážá¡ááœáẠáá¯á¶ááŒá¯á¶áá±áž "; - «
33+ Kubernetes áá¯á¶ááŒá¯á¶áá±ážáááááá¬áá»á¬áž "; - «
áá¯á¶ááŒá¯á¶áá±ážá¡áá²áááºáá±á¬ áááºáááºážáá»ááºáá»á¬ážááœáẠDocker ááŸáá·áº Kubernetes "; - «
Kubernetes áá¯á¶ááŒá¯á¶áá±ážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶áž á¡áá±á·á¡áá»áá·áº á áᯠ"á
source: www.habr.com