๋ฉ๋ชจ. ๋ฒ์ญ: ์๊ตญ ํ์ฌ ASOS.com์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ์์ง๋์ด๊ฐ ๋ฒ์ญํ ๊ธฐ์ฌ๋ฅผ ์ฌ๋ฌ๋ถ๊ป ์๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ทธ๋ seccomp๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes์ ๋ณด์์ ํฅ์์ํค๋ ๋ฐ ์ ๋ ํ๋ ์ผ๋ จ์ ๊ฐํ๋ฌผ์ ์์ํฉ๋๋ค. ๋ ์๋ค์ด ์๊ฐ๋ฅผ ์ข์ํ๋ค๋ฉด ์ ์๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ด ์ฃผ์ ์ ๋ํ ํฅํ ์๋ฃ๋ฅผ ๊ณ์ํด์ ์์ฑํ ๊ฒ์ ๋๋ค.
์ด ๊ธฐ์ฌ๋ ๋ง์ ์ด๋ ์์ ์ ์์งํ์ง ์๊ณ SecDevOps ์ ์ ์ผ๋ก seccomp ํ๋กํ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ จ์ ๊ฒ์๋ฌผ ์ค ์ฒซ ๋ฒ์งธ์
๋๋ค. XNUMX๋ถ์์๋ Kubernetes์์ seccomp ๊ตฌํ์ ๋ํ ๊ธฐ๋ณธ ์ฌํญ๊ณผ ๋ด๋ถ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
Kubernetes ์ํ๊ณ๋ ์ปจํ
์ด๋๋ฅผ ๋ณดํธํ๊ณ ๊ฒฉ๋ฆฌํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฌธ์๋ ๋ณด์ ์ปดํจํ
๋ชจ๋(Secure Computing Mode)์ ๊ดํ ๊ฒ์
๋๋ค. ์ด์ปด. ๊ทธ ํต์ฌ์ ์ปจํ
์ด๋์์ ์คํํ ์ ์๋ ์์คํ
ํธ์ถ์ ํํฐ๋งํ๋ ๊ฒ์
๋๋ค.
์ ์ค์ ํจ? ์ปจํ ์ด๋๋ ํน์ ๋จธ์ ์์ ์คํ๋๋ ํ๋ก์ธ์ค์ผ ๋ฟ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปค๋์ ์ฌ์ฉํฉ๋๋ค. ์ปจํ ์ด๋๊ฐ ์์คํ ํธ์ถ์ ์ํํ ์ ์๋ค๋ฉด ๊ณง ๋งฌ์จ์ด๊ฐ ์ด๋ฅผ ํ์ฉํ์ฌ ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ฐํํ๊ณ ์ ๋ณด ๊ฐ๋ก์ฑ๊ธฐ, ์์คํ ์ค์ ๋ณ๊ฒฝ ๋ฑ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ ๋๋ค.
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"
}
]
}
defaultAction
์น์
์ ์ง์ ๋์ง ์์ ์์คํ
ํธ์ถ์ ๊ธฐ๋ณธ ์ด๋ช
์ ๊ฒฐ์ ํฉ๋๋ค. syscalls
. ์์
์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์ค์ ์ ๋๊ฒ ์ต๋๋ค.
-
SCMP_ACT_ERRNO
โ ์์คํ ํธ์ถ ์คํ์ ์ฐจ๋จํฉ๋๋ค. -
SCMP_ACT_ALLOW
- ํ์ฉํฉ๋๋ค.
์น์
์์ architectures
๋์ ์ํคํ
์ฒ๊ฐ ๋์ด๋ฉ๋๋ค. ์ปค๋ ์์ค์์ ์ ์ฉ๋๋ ํํฐ ์์ฒด๋ ํ๋กํ์ ์ง์ ๋ ์ด๋ฆ์ด ์๋๋ผ ์์คํ
ํธ์ถ ์๋ณ์์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์ค์ํฉ๋๋ค. ์ปจํ
์ด๋ ๋ฐํ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ด๋ฅผ ์๋ณ์์ ์ผ์น์ํต๋๋ค. ์์ด๋์ด๋ ์์คํ
ํธ์ถ์ด ์์คํ
์ํคํ
์ฒ์ ๋ฐ๋ผ ์์ ํ ๋ค๋ฅธ ID๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ์์คํ
ํธ์ถ recvfrom
(์์ผ์์ ์ ๋ณด๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋จ)์ x64 ์์คํ
์์ ID = 64์ด๊ณ x517์์ ID = 86์
๋๋ค.
์น์
์์ syscalls
๋ชจ๋ ์์คํ
ํธ์ถ์ ๋์ดํ๊ณ ์ด์ ๋ํด ์ํํ ์์
์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ ์ค์ ํ์ฌ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. defaultAction
์ SCMP_ACT_ERRNO
, ์น์
์์ ์ ํ syscalls
ํ ๋น SCMP_ACT_ALLOW
. ๋ฐ๋ผ์ ์น์
์ ์ง์ ๋ ํตํ๋ง ํ์ฉ๋ฉ๋๋ค. syscalls
, ๊ธฐํ ๋ชจ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค. ๋ธ๋๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๊ฐ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. defaultAction
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋์ ํ๋.
์ด์ ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ง ๋ช ํํ์ง ์์ ๋์์ค์ ๋ํด ๋ช ๋ง๋ ๋งํด์ผ ํฉ๋๋ค. ์๋ ๊ถ์ฅ ์ฌํญ์ Kubernetes์ LOB(๊ธฐ๊ฐ ์ ๋ฌด) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ๊ฐ๋ฅํ ์ต์ํ์ ๊ถํ์ผ๋ก ์คํํ๊ธฐ๋ฅผ ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
1. AllowPrivilegeEscalation=false
ะ securityContext
์ปจํ
์ด๋์ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค AllowPrivilegeEscalation
. ์ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ false
, ์ปจํ
์ด๋๋ (on
) ์กฐ๊ธ no_new_priv
์ด ์ต์
์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ฉด ๋ถ์์ฉ์ด ๋ฐ์ํฉ๋๋ค. true
(๊ธฐ๋ณธ๊ฐ)์ ์ปจํ
์ด๋ ๋ฐํ์์ด ์์ ํ๋ก์ธ์ค์ ๋งจ ์ฒ์์ seccomp ํ๋กํ์ ์ ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ด๋ถ ๋ฐํ์ ํ๋ก์ธ์ค(์: ์ฌ์ฉ์/๊ทธ๋ฃน 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
. ๊ทธ๋ฌ๋ ์ค์ ๊ณผ์ ๋ ์ ํ ์ ์ดํ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ํ์ฉํจ์ผ๋ก์จ ํ๋กํ์ ์ปจํ
์ด๋ ๋ฐํ์ ๊ตฌํ์ ์ฐ๊ฒฐํ๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ์ด๋ ๋ ์ปจํ
์ด๋ ๋ฐํ์ ํ๊ฒฝ์ ์
๋ฐ์ดํธํ ํ(๊ทํ ๋๋ ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต์
์ฒด์ ์ํด) ์ปจํ
์ด๋ ์คํ์ด ๊ฐ์๊ธฐ ์ค๋จ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
ํ # 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๊ฐ ์คํ๋๋ฉด ์ ๊ตฌ๋ฌธ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
Kubernetes๊ฐ ํญ์ ๊ทธ๋ฌ๋ค๋ ์ฌ์ค์ ์๋ ์ฌ๋์ ๊ฑฐ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ด ์ปจํ
์ด๋๊ฐ ํญ์ ๋ค์์ผ๋ก ์์ํ๋ค๋ ๊ฒ์
๋๋ค. AllowPrivilegeEscalation=true
, ์ด๋ ๋จ๋ฝ 1์์ ์ธ๊ธ๋ ๋ฌธ์ ๋ก ์ด์ด์ง๋ฉฐ ์ด๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์์ค์์ seccomp ํ๋กํ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ํจ์ ์ ํผํ๊ณ ํน์ ์ปจํ ์ด๋์ ๋ง๋ ํ๋กํ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ๋ชจ๋ ์ฌ๋์ด ์ ๋ฒ์ (1.18?)์ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๋๊น์ง ์ด ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
ํ # 2: ์ปจํ ์ด๋ ์์ค์์ seccomp ํ๋กํ์ ์ค์ ํฉ๋๋ค.
์ค์ ์ ์ธ ์๋ฏธ์์ ์ด ๊ท์น์ ์ผ๋ฐ์ ์ผ๋ก "๋ด seccomp ํ๋กํ์ด ์ ์๋ํฉ๋๊น?"๋ผ๋ ์ง๋ฌธ์ ๋ํ ๋ณดํธ์ ์ธ ๋๋ต์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. docker run
ํ์ง๋ง Kubernetes ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ ํ์๋ ์๋ํ์ง ์๋์?
3. ๋ฐํ์/๊ธฐ๋ณธ๊ฐ์ ์ตํ์ ์๋จ์ผ๋ก๋ง ์ฌ์ฉํ์ญ์์ค.
Kubernetes์๋ ๊ธฐ๋ณธ ์ ๊ณต ํ๋กํ์ ๋ํ ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค. runtime/default
ะธ docker/default
. ๋ ๋ค Kubernetes๊ฐ ์๋ ์ปจํ
์ด๋ ๋ฐํ์์ ์ํด ๊ตฌํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ๋๋ ๋ฐํ์ ํ๊ฒฝ ๋ฐ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
์ฆ, ๋ฐํ์ ๋ณ๊ฒฝ์ ๊ฒฐ๊ณผ๋ก ์ปจํ
์ด๋๋ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์์ ์ ์๋ ๋ค๋ฅธ ์์คํ
ํธ์ถ ์งํฉ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋ฐํ์์
ํ๋กํ docker/default
Kubernetes 1.11๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์.
๋ด ์๊ฐ์ ํ๋กํ์ด runtime/default
์์ฑ๋ ๋ชฉ์ ์ ์๋ฒฝํ๊ฒ ์ ํฉํฉ๋๋ค. ๋ช
๋ น ์คํ๊ณผ ๊ด๋ จ๋ ์ํ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํฉ๋๋ค. docker run
๊ทธ๋ค์ ์ฐจ์. ๊ทธ๋ฌ๋ Kubernetes ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ๊ทธ๋ฌํ ํ๋กํ์ ๋๋ฌด ๊ฐ๋ฐฉ์ ์ด๋ฏ๋ก ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
(๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํ)์ ๋ํ ํ๋กํ์ ๋ง๋๋ ๋ฐ ์ง์คํด์ผ ํ๋ค๊ณ ๊ฐํ ์ฃผ์ฅํ๊ณ ์ถ์ต๋๋ค.
ํ # 3: ํน์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ seccomp ํ๋กํ์ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ ๋ํ ํ๋กํ์ ์์ฑํ์ญ์์ค. ์๋ฅผ ๋ค์ด Golang ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์น API๋ฅผ ํฌํจํ๋ ๊ณ ๊ธ ํ๋กํ์ ์์ฑํ์ญ์์ค. ์ตํ์ ์๋จ์ผ๋ก๋ง ๋ฐํ์/๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ์ญ์์ค.
ํฅํ ๊ฒ์๋ฌผ์์๋ SecDevOps์์ ์๊ฐ์ ๋ฐ์ seccomp ํ๋กํ์ ์์ฑํ๊ณ ์๋ํํ๊ณ ํ์ดํ๋ผ์ธ์์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ๋ณ ํ๋กํ๋ก ์ ๊ทธ๋ ์ด๋ํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค.
4. ๋ฌด์ ํ์ ์ต์ ์ด ์๋๋๋ค.
์ผ๋ก PodSecurityPolicy
ํด๋ฌ์คํฐ์์ ํ์ฑํํ๋ฉด seccomp ํ๋กํ์ด ์ ์๋์ง ์์ ๋ชจ๋ ํฌ๋๊ฐ ์๋ํฉ๋๋ค. seccomp=unconfined
.
์ด ๋ชจ๋์์ ์๋ํ๋ฉด ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํ๋ ์ ์ฒด ์ ์ฐ ์ธต์ด ์์ค๋ฉ๋๋ค. ๋ณด์ ์ ๋ฌธ๊ฐ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
ํ # 4: ํด๋ฌ์คํฐ์ ์ด๋ค ์ปจํ
์ด๋๋ ์คํ ์ค์ด ์๋์ด์ผ ํฉ๋๋ค. seccomp=unconfined
, ํนํ ํ๋ก๋์
ํ๊ฒฝ์์.
5. "๊ฐ์ฌ ๋ชจ๋"
์ด ์ ์ Kubernetes์๋ง ๊ตญํ๋ ๊ฒ์ ์๋์ง๋ง ์ฌ์ ํ "์์ํ๊ธฐ ์ ์ ์์์ผ ํ ์ฌํญ" ๋ฒ์ฃผ์ ์ํฉ๋๋ค.
๊ณต๊ต๋กญ๊ฒ๋ seccomp ํ๋กํ์ ๋ง๋๋ ๊ฒ์ ํญ์ ์ด๋ ค์ด ์ผ์ด๋ฉฐ ์ํ์ฐฉ์ค์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ฌ์ค ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ "์ญ์ "ํ ์ํ ์์ด ํ๋ก๋์ ํ๊ฒฝ์์ ์ด๋ฅผ ํ ์คํธํ ๊ธฐํ๊ฐ ์์ต๋๋ค.
Linux ์ปค๋ 4.14 ๋ฆด๋ฆฌ์ค ์ดํ ๊ฐ์ฌ ๋ชจ๋์์ ํ๋กํ์ ์ผ๋ถ๋ฅผ ์คํํ์ฌ ๋ชจ๋ ์์คํ
ํธ์ถ์ ๋ํ ์ ๋ณด๋ฅผ syslog์ ๊ธฐ๋กํ์ง๋ง ์ด๋ฅผ ์ฐจ๋จํ์ง ์๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ชจ๋๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. SCMT_ACT_LOG
:
SCMP_ACT_LOG: seccomp๋ ํํฐ์ ๊ท์น๊ณผ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ์์คํ ํธ์ถ์ ๋ง๋๋ ์ค๋ ๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ง๋ง ์์คํ ํธ์ถ์ ๋ํ ์ ๋ณด๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ์ํ ์์คํ ํธ์ถ์ ํ์ฉํฉ๋๋ค.
- ์ ์ฉํ์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ ์์คํ ์ ํธ์ถ์ ์ฐจ๋จํ์ธ์.
- ๋ค๋ฅธ ๋ชจ๋ ํตํ์ ๋ํ ์ ๋ณด๋ฅผ ๋ก๊ทธ์ ๊ธฐ๋กํฉ๋๋ค.
๋จ์ํ๋ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"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 ์ปค๋์ ์ง์์ ๋ฐ์ Kubernetes ์ํ๊ณ์ ๋ค์ด์จ ๊ฒ์ ๋น๊ต์ ์ต๊ทผ์
๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด Linux ์ปค๋ 4.14 ๋ฐ runC ๋ฒ์ ์ด์์ด ํ์ํฉ๋๋ค.
ํ # 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
์ด๋ฌํ ๊ฒฝ์ฐ ์ ํธ๋ฆฌํฐ๊ฐ ๊ตฌ์ถ๋ ์ ์์ต๋๋ค. strace
- ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ํ์๋ฉ๋๋ค.
sudo strace -c -p 9331
ํ๋กํ์ ๋ฐํ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ชจ๋ ์์คํ ํธ์ถ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
ํ # 7: ์ธ๋ถ ์ฌํญ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ํ์ํ ๋ชจ๋ ์์คํ ํธ์ถ์ด ํ์ฉ ๋ชฉ๋ก์ ์๋์ง ํ์ธํ์ธ์.
์ด๊ฒ์ผ๋ก SecDevOps์ ์ ์ ์ ๋ฐ๋ผ Kubernetes์์ seccomp๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ จ์ ๊ธฐ์ฌ ์ค ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๋ง์นฉ๋๋ค. ๋ค์ ๋ถ๋ถ์์๋ ์ด๊ฒ์ด ์ค์ํ ์ด์ ์ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Docker ์ปจํ ์ด๋ ๋ณด์ "; - ยซ
33๊ฐ ์ด์์ Kubernetes ๋ณด์ ๋๊ตฌ "; - ยซ
๋ณด์์ ๋ฏผ๊ฐํ ํ๊ฒฝ์ Docker ๋ฐ Kubernetes "; - ยซ
9 Kubernetes ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ".
์ถ์ฒ : habr.com