Seccomp Π² Kubernetes: 7 Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡ€Π΅Π²ΠΎΠ΄: ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠΌΠ΅ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²ΠΎΠ΄Π° Π½Π° статия ΠΎΡ‚ ΡΡ‚Π°Ρ€ΡˆΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΏΠΎ сигурността Π½Π° прилоТСнията Π² британската компания ASOS.com. Π‘ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠΉ Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, посвСтСни Π½Π° подобряванСто Π½Π° сигурността Π² Kubernetes Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° seccomp. Ако Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ харСсат Π²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‰Π΅ послСдвамС Π°Π²Ρ‚ΠΎΡ€Π° ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ с Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ‚Π΅ ΠΌΡƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°.

Seccomp Π² Kubernetes: 7 Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ

Π’Π°Π·ΠΈ статия Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ seccomp ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π² Π΄ΡƒΡ…Π° Π½Π° SecDevOps, Π±Π΅Π· Π΄Π° прибягватС Π΄ΠΎ магия ΠΈ ΠΌΠ°Π³ΡŒΠΎΡΠ½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ. Π’ част XNUMX Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ основитС ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ подробности Π·Π° внСдряванСто Π½Π° seccomp Π² Kubernetes.

ЕкосистСмата Kubernetes ΠΏΡ€Π΅Π΄Π»Π°Π³Π° голямо Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° осигуряванС ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Бтатията Π΅ Π·Π° Secure Computing Mode, извСстСн ΠΎΡ‰Π΅ ΠΊΠ°Ρ‚ΠΎ seccomp. Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° ΠΌΡƒ Π΅ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈΡ‚Π΅ Π·Π° изпълнСниС систСмни повиквания ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Π—Π°Ρ‰ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ? ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π΅ просто процСс, изпълняван Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° машина. И ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ядрото Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ прилоТСния. Ако ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ всякакви систСмни повиквания, ΠΌΠ½ΠΎΠ³ΠΎ скоро злонамСрСният софтуСр Ρ‰Π΅ΡˆΠ΅ Π΄Π° сС възползва ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ изолацията Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π΄Π° повлияС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ прилоТСния: Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π° информация, Π΄Π° промСня систСмнитС настройки ΠΈ Ρ‚.Π½.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π½Π° seccomp опрСдСлят ΠΊΠΎΠΈ систСмни повиквания трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΈ. Π‘Ρ€Π΅Π΄Π°Ρ‚Π° Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π³ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартира, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ядрото Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° слСди тяхното изпълнСниС. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π²ΠΈ позволява Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π° ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Ρ‰Π΅Ρ‚ΠΈΡ‚Π΅, Π°ΠΊΠΎ някоя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Ρ‚.Π΅. Π²Π°ΡˆΠΈΡ‚Π΅ зависимости ΠΈΠ»ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ зависимости) Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ ΠΉ Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ.

Π‘Ρ‚ΠΈΠ³Π°Π½Π΅ Π΄ΠΎ основитС

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° seccomp Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚Ρ€ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°: defaultAction, architectures (Or 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"
        }
    ]
}

(срСдСн основСн-seccomp.json)

defaultAction опрСдСля ΡΡŠΠ΄Π±Π°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° всяко систСмно ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ посочСно Π² Ρ€Π°Π·Π΄Π΅Π»Π° syscalls. Π—Π° Π΄Π° улСсним Π½Π΅Ρ‰Π°Ρ‚Π°, Π½Π΅ΠΊΠ° сС ΡΡŠΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠΌ Π²ΡŠΡ€Ρ…Ρƒ Π΄Π²Π΅Ρ‚Π΅ основни стойности, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚:

  • SCMP_ACT_ERRNO β€” Π±Π»ΠΎΠΊΠΈΡ€Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° систСмно ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅,
  • SCMP_ACT_ALLOW - позволява.

Π’ Ρ€Π°Π·Π΄Π΅Π» architectures ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ са Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ самият Ρ„ΠΈΠ»Ρ‚ΡŠΡ€, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ Π½Π° Π½ΠΈΠ²ΠΎ ядро, зависи ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° систСмнитС извиквания, Π° Π½Π΅ ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π°, посочСни Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π°. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‰Π΅ Π³ΠΈ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΠΈ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. Π˜Π΄Π΅ΡΡ‚Π° Π΅, Ρ‡Π΅ систСмнитС повиквания ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠΌΠ°Ρ‚ напълно Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π² зависимост ΠΎΡ‚ систСмната Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. НапримСр систСмно ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ 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) ΠΌΠ°Π»ΠΊΠΎ no_new_priv. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ: Ρ‚ΠΎΠΉ Π½Π΅ позволява Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΄Π° стартира Π½ΠΎΠ²ΠΈ процСси с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ самият Ρ‚ΠΎΠΉ ΠΈΠΌΠ°.

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚ ΠΎΡ‚ настройката Π½Π° Ρ‚Π°Π·ΠΈ опция true (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) Π΅, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° seccomp Π² самото Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° процСса Π½Π° стартиранС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ всички систСмни повиквания, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° изпълнСниС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ процСси ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС (Π½Π°ΠΏΡ€. Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ/Π³Ρ€ΡƒΠΏΠΈ, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ), трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π°.

Към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ Π½Π΅Ρ‰Π° 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. Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠΎΡ‚ΠΎ прСдизвикатСлство ΠΎΠ±Π°Ρ‡Π΅ Π΅, Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚Π΅ процСси, Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠΈΡ‚ΠΎ няматС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ никакъв ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ», Π²ΠΈΠ΅ ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ с внСдряванСто Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π΅Π΄ΠΈΠ½ Π΄Π΅Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅, Ρ‡Π΅ слСд Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° срСдата Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (ΠΈΠ»ΠΈ ΠΎΡ‚ вас, ΠΈΠ»ΠΈ, ΠΏΠΎ-вСроятно, ΠΎΡ‚ доставчика Π½Π° ΠΎΠ±Π»Π°Ρ‡Π½Π° услуга), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ спират Π΄Π° работят.

Π‘ΡŠΠ²Π΅Ρ‚ β„–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 Ρ‰Π΅ станС GA (Ρ‚ΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ сС ΠΎΡ‡Π°ΠΊΠ²Π° Π² слСдващото ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Kubernetes - 1.18 - ΠΏΡ€ΠΈΠ±Π». ΠΏΡ€Π΅Π².).

Малко Ρ…ΠΎΡ€Π° знаят, Ρ‡Π΅ Kubernetes Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΈΠΌΠ°Π» Π±ΡƒΠ±ΠΎΠ»Π΅Ρ‡ΠΊΠ°ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΊΠ°Ρ€Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π½Π° seccomp Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ към ΠΏΠ°ΡƒΠ·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π‘Ρ€Π΅Π΄Π°Ρ‚Π° Π·Π° изпълнСниС частично компСнсира Ρ‚ΠΎΠ·ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ ΠΈΠ·Ρ‡Π΅Π·Π²Π° ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° тяхната инфраструктура.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π²ΠΈΠ½Π°Π³ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° с AllowPrivilegeEscalation=true, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΠΈΠ·Ρ€Π°Π·Π΅Π½ΠΈ Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ 1, ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ.

ΠšΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ seccomp Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²ΠΈΠ΅ избягватС Ρ‚ΠΎΠ·ΠΈ ΠΊΠ°ΠΏΠ°Π½ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ», ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’ΠΎΠ²Π° Ρ‰Π΅ трябва Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ поправят Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия (ΠΌΠΎΠΆΠ΅ Π±ΠΈ 1.18?) станС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° всички.

Π‘ΡŠΠ²Π΅Ρ‚ β„–2: Π—Π°Π΄Π°ΠΉΡ‚Π΅ seccomp ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π’ практичСски смисъл Ρ‚ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ слуТи ΠΊΠ°Ρ‚ΠΎ унивСрсалСн ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ°: β€žΠ—Π°Ρ‰ΠΎ моят seccomp ΠΏΡ€ΠΎΡ„ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚ΠΈ с docker runΠ½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ слСд Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes?

3. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ runtime/default само Π² ΠΊΡ€Π°Π΅Π½ случай

Kubernetes ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ: runtime/default ΠΈ docker/default. И Π΄Π²Π΅Ρ‚Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΎΡ‚ срСдата Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ ΠΎΡ‚ Kubernetes. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π² зависимост ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° срСда Π·Π° изпълнСниС ΠΈ Π½Π΅ΠΉΠ½Π°Ρ‚Π° вСрсия.

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° промяна Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ систСмни извиквания, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ изпълнСния ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ РСализация Π½Π° Docker. Ако искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ», моля, ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ Π΅ подходящ Π·Π° вас.

ΠŸΡ€ΠΎΡ„ΠΈΠ» docker/default Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ ΠΎΡ‚ Kubernetes 1.11, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ избягвайтС Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅.

Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Π½ ΠΏΡ€ΠΎΡ„ΠΈΠ» runtime/default напълно подходящ Π·Π° Ρ†Π΅Π»Ρ‚Π°, Π·Π° която Π΅ създадСн: Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ рисковСтС, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° docker run Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° бизнСс прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, Π±ΠΈΡ… сС осмСлил Π΄Π° Ρ‚Π²ΡŠΡ€Π΄Ρ, Ρ‡Π΅ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΡ„ΠΈΠ» Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ трябва Π΄Π° сС ΡΡŠΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡Π°Ρ‚ Π²ΡŠΡ€Ρ…Ρƒ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π·Π° своитС прилоТСния (ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ прилоТСния).

Π‘ΡŠΠ²Π΅Ρ‚ β„–3: Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ seccomp ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ прилоТСния. Ако Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ възмоТно, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ прилоТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ ΠΏΡ€ΠΎΡ„ΠΈΠ», ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° всички ΡƒΠ΅Π± API Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Golang. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС/ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ само Π² ΠΊΡ€Π°Π΅Π½ случай.

Π’ Π±ΡŠΠ΄Π΅Ρ‰ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΊΠ°ΠΊ Π΄Π° създавам Π²Π΄ΡŠΡ…Π½ΠΎΠ²Π΅Π½ΠΈ ΠΎΡ‚ SecDevOps seccomp ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ, Π΄Π° Π³ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌ ΠΈ Π΄Π° Π³ΠΈ тСствам Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, няма Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ·Π²ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π° Π½Π΅ надстроитС Π΄ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ, спСцифични Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

4. Π‘Π΅Π· ограничСния НЕ Π΅ опция.

На ΠΏΡŠΡ€Π²ΠΈ ΠΎΠ΄ΠΈΡ‚ Π½Π° сигурността Π½Π° Kubernetes ΠΎΠΊΠ°Π·Π° сС, Ρ‡Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ seccomp Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π°ΠΊΠΎ Π½Π΅ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ PodSecurityPolicy, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, всички ΠΏΠΎΠ΄ΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŠΡ‚ seccomp Π½Π΅ Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½, Ρ‰Π΅ работят Π² seccomp=unconfined.

Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ сС Π³ΡƒΠ±ΠΈ цял слой изолация, която Π·Π°Ρ‰ΠΈΡ‚Π°Π²Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΎΡ‚ СкспСрти ΠΏΠΎ сигурността.

Π‘ΡŠΠ²Π΅Ρ‚ β„–4: НС трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° seccomp=unconfined, особСно Π² производствСни срСди.

5. "Π Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄ΠΈΡ‚"

Π’Π°Π·ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π΅ Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π½Π° Π·Π° Kubernetes, Π½ΠΎ всС ΠΏΠ°ΠΊ ΠΏΠΎΠΏΠ°Π΄Π° Π² катСгорията β€žΠ½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅β€œ.

ΠšΠ°ΠΊΡ‚ΠΎ сС случва, ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π½Π° seccomp Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π±ΠΈΠ»ΠΎ прСдизвикатСлство ΠΈ Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π΄ΠΎ голяма стСпСн Π½Π° ΠΏΡ€ΠΎΠ±Π° ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ просто нямат Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Π³ΠΈ тСстват Π² производствСни срСди, Π±Π΅Π· Π΄Π° рискуват Π΄Π° β€žΠΏΡƒΡΠ½Π°Ρ‚β€œ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π‘Π»Π΅Π΄ пусканСто Π½Π° ядрото Π½Π° Linux 4.14 стана възмоТно Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ части ΠΎΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄ΠΈΡ‚, ΠΊΠ°Ρ‚ΠΎ сС записва информация Π·Π° всички систСмни повиквания Π² syslog, Π½ΠΎ Π±Π΅Π· Π΄Π° сС Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° SCMT_ACT_LOG:

SCMP_ACT_LOG: seccomp няма Π΄Π° засСгнС Π½ΠΈΡˆΠΊΠ°Ρ‚Π°, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‰Π° систСмното ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅, Π°ΠΊΠΎ Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° някоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ във Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π°, Π½ΠΎ информацията Π·Π° систСмното ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Ρ‰Π΅ бъдС рСгистрирана.

Π•Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° стратСгия Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ функция:

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

(срСдно-смСсСн-seccomp.json)

Но Π½Π΅ забравяйтС, Ρ‡Π΅ трябва Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚Π΅ всички повиквания, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈΡ…Π° ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Π΄Π° наврСдят Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π”ΠΎΠ±Ρ€Π° основа Π·Π° ΡΡŠΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° списък Π΅ официалният Π”ΠΎΠΊΠ΅Ρ€ докумСнтация. Π’ΠΎΠΉ обяснява ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠΎΠΈ систСмни повиквания са Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Π·Π°Ρ‰ΠΎ.

Има ΠΎΠ±Π°Ρ‡Π΅ Π΅Π΄Π½Π° ΡƒΠ»ΠΎΠ²ΠΊΠ°. ΠœΠ°ΠΊΠ°Ρ€ Ρ‡Π΅ SCMT_ACT_LOG ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ ΠΎΡ‚ ядрото Π½Π° Linux ΠΎΡ‚ края Π½Π° 2017 Π³., Ρ‚ΠΎΠΉ Π½Π°Π²Π»Π΅Π·Π΅ Π² СкосистСмата Kubernetes съвсСм наскоро. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‰Π΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ядро ​​на Linux 4.14 ΠΈ вСрсия runC Π½Π΅ ΠΏΠΎ-ниска v1.0.0-rc9.

Π‘ΡŠΠ²Π΅Ρ‚ β„–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 обСсСтС Π³ΠΎo Π·Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ високо ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° процСсора Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:

Seccomp Π² Kubernetes: 7 Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ

Π’ Ρ‚Π°ΠΊΠΈΠ²Π° случаи ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠΉΠ΄Π΅ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ strace - Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ какъв ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚:

Seccomp Π² Kubernetes: 7 Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ
sudo strace -c -p 9331

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ всички систСмни извиквания, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС.

Π‘ΡŠΠ²Π΅Ρ‚ β„–7: ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ ΠΈ сС ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ систСмни повиквания са Π² бСлия списък.

Π’ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠΎΡ‚ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ статии Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° seccomp Π² Kubernetes Π² Π΄ΡƒΡ…Π° Π½Π° SecDevOps. Π’ слСдващитС части Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π°Ρ‰ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ процСса.

PS ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€