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

Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΠΏΡΡΠ²Π°ΡΠ° ΠΎΡ ΡΠ΅ΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈ seccomp Π² Π΄ΡΡ
Π° Π½Π° SecDevOps, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ±ΡΠ³Π²Π° Π΄ΠΎ ΠΌΠ°Π³ΠΈΡ ΠΈ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ. Π ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΈ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° seccomp Π² Kubernetes.
ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° Kubernetes ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΎΡ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΈ ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅. Π‘ΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° Π Π΅ΠΆΠΈΠΌΡΡ Π½Π° Π‘ΠΈΠ³ΡΡΠ½ΠΎ ΠΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅, ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΡΠΎ ΠΊΠ°ΡΠΎ 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 ΡΠ΅ ΠΈΠ·Π±ΡΠΎΡΠ²Π°Ρ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π΅, Π·Π°ΡΠΎΡΠΎ ΡΠ°ΠΌΠΈΡΡ ΡΠΈΠ»ΡΡΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ, Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π° Π½Π΅ ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° ΠΈΠΌ, ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π² ΠΏΡΠΎΡΠΈΠ»Π°. ΠΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠ΅ Π³ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅. ΠΠ΄Π΅ΡΡΠ° Π΅, ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ID Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ recvfrom (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΠΎΠΊΠ΅Ρ) ΠΈΠΌΠ° ID = 64 Π² x64 ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ID = 517 Π² x86. ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Π½Π° Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π·Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈΡΠ΅ x86-x64.
Π ΡΠ΅ΠΊΡΠΈΡΡΠ° syscalls ΡΠ΅ ΠΈΠ·Π±ΡΠΎΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ ΡΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Ρ ΡΡΡ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π±ΡΠ» ΡΠΏΠΈΡΡΠΊ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ defaultAction Π½Π° SCMP_ACT_ERRNO, Π° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° syscalls Π΄Π° ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ SCMP_ACT_ALLOW. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ°, ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° syscalls, ΠΈ Π·Π°Π±ΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ. ΠΠ° ΡΠ΅ΡΠ½ΠΈΡ ΡΠΏΠΈΡΡΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ defaultAction ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΈ.
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠ°ΠΆΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° Π½ΡΠ°Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΈΠ΄Π²Π°Ρ ΠΎΡ ΡΠΎΠ²Π°, ΡΠ΅ Π²ΠΈΠ΅ ΡΠ°Π·Π³ΡΡΡΠ°ΡΠ΅ Π»ΠΈΠ½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Kubernetes ΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° Π²Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π°ΠΉ-Π½ΠΈΡΠΊΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ.
1. AllowPrivilegeEscalation=false
Π securityContext Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ AllowPrivilegeEscalation. ΠΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° false, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Ρ Π·Π°Π΄Π°Π΄Π΅Π½ (on) Π±ΠΈΡ . ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΅ ΡΡΠ½ΠΎ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ: Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°.
ΠΠ΅ΠΆΠ΅Π»Π°Π½ Π΅ΡΠ΅ΠΊΡ ΠΎΡ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° true (ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅) Π΅, ΡΠ΅ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΡΠΎΡΠΈΠ»Π° 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/: "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, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ.
5. Β«Π Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄ΠΈΡΒ»
Π’Π°Π·ΠΈ ΡΠΎΡΠΊΠ° Π½Π΅ Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π½Π° Π·Π° Kubernetes, Π½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Β«Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π½Π°Π΅ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅Β».
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° seccomp ΠΏΡΠΎΡΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π±ΠΈΠ»ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π΅ ΡΠ°Π·ΡΠΈΡΠ°Π»ΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° ΠΏΡΠΎΠ±Π° ΠΈ Π³ΡΠ΅ΡΠΊΠ°. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΌΠ°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ΡΡΠ²Π°Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ΅ ΡΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ, Π±Π΅Π· Π΄Π° ΡΠΈΡΠΊΡΠ²Π°Ρ Π΄Π° βΡΡΠ±ΠΎΡΡΡβ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π‘Π»Π΅Π΄ Π²Π΅ΡΡΠΈΡ 4.14 Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΡΡΠ°Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΡΠ°ΡΡΠΈ ΠΎΡ ΠΏΡΠΎΡΠΈΠ»Π° Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄ΠΈΡ, Π·Π°ΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π² 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
