ΠΡΠΈΠΌ. ΠΏΡΠ΅Π².: ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ°ΡΡΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ ΠΏΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π² Π±ΡΠΈΡΠ°Π½ΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ASOS.com. Π‘ Π½Π΅Ρ ΡΠΎΠΉ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠΈΠΊΡΠ» ΠΎΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² Kubernetes ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° seccomp. ΠΠΊΠΎ ΠΈΠ½ΡΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° Ρ Π°ΡΠ΅ΡΠ° Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅, ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ Π°Π²ΡΠΎΡΠ° ΠΈ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Ρ Π±ΡΠ΄Π΅ΡΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ ΠΏΠΎ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°.

Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΠΏΡΡΠ²Π°ΡΠ° ΠΎΡ ΡΠ΅ΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈ seccomp Π² Π΄ΡΡ
Π° Π½Π° SecDevOps, Π±Π΅Π· Π΄Π° ΠΏΡΠΈΠ±ΡΠ³Π²Π°ΠΌΠ΅ Π΄ΠΎ ΠΌΠ°Π³ΠΈΡ ΠΈ ΠΊΠΎΠ»Π΄ΠΎΠ²ΡΡΠ²ΠΎ. Π ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΈ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° seccomp Π² Kubernetes.
ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Kubernetes ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΎΡ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΈ ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. Π‘ΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° Secure Computing Mode, ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΎΡΠ΅ ΠΊΠ°ΡΠΎ 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"
}
]
}()
defaultAction ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΡΠ΄Π±Π°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π° syscalls.. ΠΠ° Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΡΠ΅ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΡ
Ρ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ:
-
SCMP_ACT_ERRNOβ Π±Π»ΠΎΠΊΠΈΡΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅, -
SCMP_ACT_ALLOWβ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°.
Π ΡΠ΅ΠΊΡΠΈΡΡΠ° architectures ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΡΠ΅Π»Π΅Π²ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΈΡΡ ΡΠΈΠ»ΡΡΡ, ΠΏΡΠΈΠ»Π°Π³Π°Π½ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ, Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π° Π½Π΅ ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° ΠΈΠΌ, Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² ΠΏΡΠΎΡΠΈΠ»Π°. ΠΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠ΅ Π³ΠΈ ΡΡΠΏΠΎΡΡΠ°Π²ΠΈ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅. ΠΠ΄Π΅ΡΡΠ° Π΅, ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠΌΠ°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ recvfrom (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ Π·Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°) ΠΈΠΌΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ = 64 Π² x64-ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ = 517 Π² x86. ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π·Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ x86-x64.
Π ΡΠ΅ΠΊΡΠΈΡΡΠ° syscalls. ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π·Π²Π°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Ρ ΡΡΡ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π±ΡΠ» ΡΠΏΠΈΡΡΠΊ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ defaultAction Π½Π° SCMP_ACT_ERRNO, Π° Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° syscalls. Π΄Π° ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ SCMP_ACT_ALLOW. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ°, Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π° syscalls., ΠΈ Π·Π°Π±ΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ. ΠΠ° ΡΠ΅ΡΠ½ΠΈΡ ΡΠΏΠΈΡΡΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ defaultAction ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΈ.
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° Π½ΡΠ°Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΈΠ·Ρ ΠΎΠΆΠ΄Π°Ρ ΠΎΡ ΡΠΎΠ²Π°, ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Kubernetes ΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π°ΠΉ-Π½ΠΈΡΠΊΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ.
1. AllowPrivilegeEscalation=false
Π securityContext Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ AllowPrivilegeEscalation. ΠΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° Π½Π΅Π²Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Ρ Π·Π°Π΄Π°Π΄Π΅Π½Π° (Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ) Π±ΠΈΡ . Π‘ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π° ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ: ΡΠΎΠΉ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°.
Π‘ΡΡΠ°Π½ΠΈΡΠ½ΠΈΡΡ Π΅ΡΠ΅ΠΊΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° ΠΈΡΡΠΈΠ½Π½ΠΎ (ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅), Π΅, ΡΠ΅ ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΡΠΎΡΠΈΠ»Π° seccomp Π² ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ/Π³ΡΡΠΏΠ°ΡΠ°, ΠΎΡΡ
Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° Π½ΡΠΊΠΎΠΈ capabilities), ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ Π² ΠΏΡΠΎΡΠΈΠ»Π°.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±Π°Π½Π°Π»ΡΠ½ΠΎΠ΅ 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 ΠΏΡΠΎΡΠΈΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π° Π½Π° Π½ΠΈΠ²ΠΎ pod:
annotations:
seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json"β¦ ΠΈΠ»ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
annotations:
container.security.alpha.kubernetes.io/<container-name>: "localhost/profile.json"ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Kubernetes seccomp (ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Kubernetes β 1.18 β Π±Π΅Π». ΠΏΡΠ΅Π².)
ΠΠ°Π»ΡΠΈΠ½Π° Π·Π½Π°ΡΡ, ΡΠ΅ Π² Kubernetes Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΈΠΌΠ°Π»ΠΎ , ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ Π° ΠΊΡΠΌ ΠΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π° ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΠ° ΡΠΎΠ·ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π½Π΅ ΠΈΠ·ΡΠ΅Π·Π²Π° ΠΎΡ pod-ΠΎΠ²Π΅ΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΡ Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΠ°ΡΡΠΈΡΠ° Ρ AllowPrivilegeEscalation=true, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π² ΡΠΎΡΠΊΠ° 1, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΎ.
ΠΠ°ΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°ΡΠ΅ seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΈΠ·Π±ΡΠ³Π²Π°ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠ°ΠΏΠ°Π½ ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠΈΠ», ΠΊΠΎΠΉΡΠΎ Π΅ Β«Π½Π°ΡΡΡΠΎΠ΅Π½Β» Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π’ΠΎΠ²Π° ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π΅ ΠΎΡΡΡΡΠ°Π½ΡΡ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° ΠΈ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ (ΠΌΠΎΠΆΠ΅ Π±ΠΈ 1.18?) Π½Π΅ ΡΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΆΠ΅Π»Π°Π΅ΡΠΈ.
Π‘ΡΠ²Π΅Ρ β2: ΠΠ°Π΄Π°Π²Π°ΠΉΡΠ΅ seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
Π ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠΈΡΡΠ» ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π²ΡΠΏΡΠΎΡΠ°: Β«ΠΠ°ΡΠΎ ΠΌΠΎΡΡ seccomp ΠΏΡΠΎΡΠΈΠ» ΡΠ°Π±ΠΎΡΠΈ Ρ docker run, Π½ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ ΡΠ»Π΅Π΄ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Kubernetes?Β».
3. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ runtime/default ΡΠ°ΠΌΠΎ Π² ΠΊΡΠ°Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ
Π Kubernetes ΠΈΠΌΠ° Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ: runtime/default ΠΈ docker/default. Π Π΄Π²Π°ΡΠ° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΎΡ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π° Π½Π΅ ΠΎΡ Kubernetes. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΉΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ.
Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΌΡΠ½Π°ΡΠ° Π½Π° runtime, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄ΡΡΠ³ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ»ΠΈ Π½Π΅. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΠ΅Π΄ΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ . ΠΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠΈΠ», ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° Π²Π°Ρ.
ΠΡΠΎΡΠΈΠ»ΡΡ docker/default ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΠΎΡΡΠ°ΡΡΠ» Ρ Kubernetes 1.11, Π·Π°ΡΠΎΠ²Π° ΠΈΠ·Π±ΡΠ³Π²Π°ΠΉΡΠ΅ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.
ΠΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΡΠΈΠ»ΡΡ runtime/default ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠΆΠ΄Π° Π·Π° ΡΠ΅Π»ΠΈΡΠ΅, Π·Π° ΠΊΠΎΠΈΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½: Π·Π°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΡ ΡΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° docker run Π½Π° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΎ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ Kubernetes, Π±ΠΈΡ
ΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΄Π° ΡΠ²ΡΡΠ΄Ρ, ΡΠ΅ ΡΠ°ΠΊΡΠ² ΠΏΡΠΎΡΠΈΠ» Π΅ ΡΠ²ΡΡΠ΄Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ°Ρ Π²ΡΡΡ
Ρ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ Π·Π° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΈΠ»ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
Π‘ΡΠ²Π΅Ρ β3: Π‘ΡΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΊΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ ΠΏΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈ Π·Π° Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ ΠΏΡΠΎΡΠΈΠ», ΠΊΠΎΠΉΡΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π±-API Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Golang. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ runtime/default ΡΠ°ΠΌΠΎ ΠΊΠ°ΡΠΎ ΠΊΡΠ°ΠΉΠ½Π° ΠΌΡΡΠΊΠ°.
Π Π±ΡΠ΄Π΅ΡΠΈΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π² Π΄ΡΡ Π° Π½Π° SecDevOps, Π΄Π° Π³ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΈ. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Π²ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π° Π½Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
4. Unconfined β ΡΠΎΠ²Π° ΠΠ Π΅ Π²Π°ΡΠΈΠ°Π½Ρ
ΠΡ ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ, ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ . Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π°ΠΊΠΎ Π½Π΅ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ PodSecurityPolicy, ΠΊΠΎΠΉΡΠΎ Π΄Π° Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Π²ΡΠΈΡΠΊΠΈ podβΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ seccomp ΠΏΡΠΎΡΠΈΠ», ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ seccomp=unconfined.
Π Π°Π±ΠΎΡΠ°ΡΠ° Π² ΡΠΎΠ·ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅ Π³ΡΠ±ΠΈ ΡΡΠ» ΡΠ»ΠΎΠΉ ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π·Π°ΡΠΈΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ ΠΏΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
Π‘ΡΠ²Π΅Ρ β4: ΠΠΈΠΊΠ°ΠΊΡΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ seccomp=unconfined, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π² production ΡΡΠ΅Π΄ΠΈ.
5. βΠ Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄ΠΈΡβ
Π’Π°Π·ΠΈ ΡΠΎΡΠΊΠ° Π½Π΅ Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π½Π° Π·Π° Kubernetes, Π½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° βΠ½Π΅ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΎΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅β.
Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ, ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π±ΠΈΠ»ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°Π½ΠΈΠ΅ ΠΈ Π² Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΡΠ΅ΠΏΠ΅Π½ Π·Π°Π²ΠΈΡΠ΅ΡΠ΅ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΠ±ΠΈΡΠ΅ ΠΈ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅. Π Π°Π±ΠΎΡΠ°ΡΠ° Π΅ ΡΠ°ΠΌ, ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΌΠ°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π³ΠΈ ΡΠ΅ΡΡΠ²Π°Ρ Π² production ΡΡΠ΅Π΄ΠΈ, Π±Π΅Π· Π΄Π° ΡΠΈΡΠΊΡΠ²Π°Ρ Π΄Π° βΡΡΡΡΡΡβ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π‘Π»Π΅Π΄ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° 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 Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ ΡΠ΄ΡΠΎ Π½Π° Linux ΠΎΡ ΠΊΡΠ°Ρ Π½Π° 2017 Π³ΠΎΠ΄ΠΈΠ½Π°, ΡΠΎΠΉ Π²Π»Π΅Π·Π΅ Π² Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° 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", .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 ΠΎΠΊΠ°ΡΠΈ Π·Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π²ΠΈΡΠΎΠΊΠ° Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΎΡΡ Π½Π° CPU Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°:

Π ΡΠ°ΠΊΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° strace ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ β ΡΡ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π² ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ:

sudo strace -c -p 9331
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π½ΡΠΆΠ½ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°.
Π‘ΡΠ²Π΅Ρ β7: ΠΠ½ΠΈΠΌΠ°Π²Π°ΠΉΡΠ΅ Ρ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΉΡΠ΅ Π΄Π°Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² Π±ΡΠ» ΡΠΏΠΈΡΡΠΊ.
Π’Π°Π·ΠΈ ΠΏΡΡΠ²Π° ΡΠ°ΡΡ ΠΎΡ ΡΠΈΠΊΡΠ»Π° ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° seccomp Π² Kubernetes Π² Π΄ΡΡ Π° Π½Π° SecDevOps Π·Π°Π²ΡΡΡΠ²Π° ΡΡΠΊ. Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° Π·Π°ΡΠΎ ΡΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°.
P.S. ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «»;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
