แƒฌแƒ˜แƒ’แƒœแƒ˜ "BPF Linux-แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก"

แƒฌแƒ˜แƒ’แƒœแƒ˜ "BPF Linux-แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก"แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ แƒฎแƒแƒ‘แƒ แƒแƒก แƒ›แƒแƒกแƒแƒฎแƒšแƒ”แƒแƒ‘แƒแƒ•! BPF แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒ. แƒ›แƒ˜แƒกแƒ˜ แƒกแƒฌแƒแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ˜แƒœแƒŸแƒ˜แƒœแƒ แƒ”แƒ‘แƒก แƒ˜แƒžแƒแƒ•แƒแƒœ แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒญแƒ แƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ แƒ—แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒช แƒ™แƒ˜. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒ— แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒ”แƒœ แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฅแƒชแƒ”แƒ•แƒแƒก, แƒ แƒแƒ’แƒแƒ  แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒแƒ— แƒ™แƒแƒ“แƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒกแƒฎแƒ•แƒ. แƒ“แƒ”แƒ•แƒ˜แƒ“ แƒ™แƒแƒšแƒแƒ•แƒ”แƒ แƒ แƒ“แƒ แƒšแƒแƒ แƒ”แƒœแƒชแƒ แƒคแƒแƒœแƒขแƒแƒœแƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒแƒœ แƒ’แƒแƒœแƒ‘แƒšแƒแƒ™แƒแƒ— BPF-แƒ˜แƒก แƒซแƒแƒšแƒ. แƒ’แƒแƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒชแƒแƒ“แƒœแƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก, แƒฅแƒกแƒ”แƒšแƒ˜แƒก, แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— BPF Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฅแƒชแƒ”แƒ•แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“. - แƒจแƒ”แƒ˜แƒขแƒแƒœแƒ”แƒ— แƒ™แƒแƒ“แƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒก แƒแƒœ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ C, Go แƒแƒœ Python-แƒจแƒ˜. - แƒแƒ˜แƒฆแƒ”แƒ— แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒกแƒแƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ แƒชแƒ˜แƒ™แƒšแƒ˜แƒก แƒคแƒšแƒแƒ‘แƒ˜แƒ—.

Linux Kernel Security, แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ Seccomp

BPF แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒซแƒšแƒแƒ•แƒ  แƒ’แƒ–แƒแƒก แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒแƒ‘แƒ˜แƒก, แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒจแƒ”แƒฌแƒ˜แƒ แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒแƒ› แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ—, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ›แƒ แƒฉแƒแƒ—แƒ•แƒแƒšแƒ”แƒก, แƒ แƒแƒ› แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒ“แƒ”แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒคแƒ”แƒ แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ Seccomp-แƒจแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ˜แƒ–แƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“ Seccomp แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜แƒ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ แƒแƒ’แƒแƒ แƒช Seccomp BPF. แƒแƒ› แƒ—แƒแƒ•แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒแƒ’แƒ˜แƒฎแƒกแƒœแƒ˜แƒ— แƒ แƒ แƒแƒ แƒ˜แƒก Seccomp แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒ— แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— Seccomp แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒš BPF แƒ™แƒแƒ™แƒ•แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ“แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ Linux แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

Linux แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ (LSM) แƒแƒ แƒ˜แƒก แƒฉแƒแƒ แƒฉแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฌแƒ”แƒกแƒ˜แƒ— แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“. LSM แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒฎแƒ”แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ Apparmor, SELinux แƒ“แƒ Tomoyo.

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— Linux-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒ˜แƒ—.

แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜

Linux-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒกแƒ˜ แƒ˜แƒ›แƒแƒจแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒแƒ— แƒแƒ แƒแƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— suid-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒแƒœ แƒกแƒฎแƒ•แƒแƒ’แƒ•แƒแƒ แƒแƒ“ แƒ’แƒแƒฎแƒแƒ“แƒแƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒจแƒ”แƒแƒ›แƒชแƒ˜แƒ แƒแƒ— แƒ—แƒแƒ•แƒ“แƒแƒกแƒฎแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ“แƒ แƒ›แƒ˜แƒกแƒชแƒ”แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒขแƒ˜แƒก แƒ’แƒแƒฎแƒกแƒœแƒ, แƒ•แƒ—แƒฅแƒ•แƒแƒ— 80, แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก root-แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒชแƒ”แƒ— CAP_NET_BIND_SERVICE แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ.

แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— Go แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒกแƒแƒฎแƒ”แƒšแƒแƒ“ main.go:

package main
import (
            "net/http"
            "log"
)
func main() {
     log.Fatalf("%v", http.ListenAndServe(":80", nil))
}

แƒ”แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ”แƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ HTTP แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก 80 แƒžแƒแƒ แƒขแƒ–แƒ” (แƒ”แƒก แƒแƒ แƒ˜แƒก แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒขแƒ˜). แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”:

$ go build -o capabilities main.go
$ ./capabilities

แƒ—แƒฃแƒ›แƒชแƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ•แƒแƒซแƒšแƒ”แƒ•แƒ— root แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒก, แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ’แƒแƒ›แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก แƒžแƒแƒ แƒขแƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก:

2019/04/25 23:17:06 listen tcp :80: bind: permission denied
exit status 1

capsh (แƒญแƒฃแƒ แƒ•แƒ˜แƒก แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ˜) แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒญแƒฃแƒ แƒ•แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒ”แƒ—, แƒกแƒ แƒฃแƒšแƒ˜ root แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒ แƒ—แƒแƒ— แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒขแƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ cap_net_bind_service แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒ แƒแƒช แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ capsh-แƒจแƒ˜:

# capsh --caps='cap_net_bind_service+eip cap_setpcap,cap_setuid,cap_setgid+ep' 
   --keep=1 --user="nobody" 
   --addamb=cap_net_bind_service -- -c "./capabilities"

แƒชแƒแƒขแƒ แƒ’แƒแƒ•แƒ˜แƒ’แƒแƒ— แƒ”แƒก แƒ’แƒฃแƒœแƒ“แƒ˜.

  • capsh - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— capsh แƒ แƒแƒ’แƒแƒ แƒช แƒญแƒฃแƒ แƒ•แƒ˜.
  • โ€”caps='cap_net_bind_service+eip cap_setpcap,cap_setuid,cap_setgid+ep' - แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ (แƒแƒ  แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช root), แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ— cap_net_bind_service แƒ“แƒ แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก ID-แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก. root to nobody, แƒ™แƒ”แƒ แƒซแƒแƒ“ cap_setuid แƒ“แƒ cap_setgid.
  • โ€”keep=1 โ€” แƒ’แƒ•แƒกแƒฃแƒ แƒก แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒแƒ— แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ root แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ˜แƒกแƒแƒก.
  • โ€”user=โ€œแƒแƒ แƒแƒ•แƒ˜แƒœโ€œ โ€” แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒแƒ แƒแƒ•แƒ˜แƒœ.
  • โ€”addamb=cap_net_bind_service โ€” แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ root แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.
  • - -c "./capabilities" - แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ.

แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒ”แƒ›แƒ™แƒ•แƒ˜แƒ“แƒ แƒ”แƒแƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒจแƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ , แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ›แƒแƒ— แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก execve() แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒœแƒ”แƒ‘แƒแƒ“แƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒแƒกแƒแƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒแƒœ แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ”แƒ›แƒ™แƒ•แƒ˜แƒ“แƒ แƒ”แƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒก.

แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒšแƒ‘แƒแƒ— แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ แƒแƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก +eip แƒแƒคแƒชแƒ˜แƒแƒจแƒ˜ --caps แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’. แƒ”แƒก แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“, แƒ แƒแƒ› แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜:

-แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ (p);

-แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ (e);

- แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ”แƒ›แƒ™แƒ•แƒ˜แƒ“แƒ แƒ”แƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒก แƒ‘แƒแƒ•แƒจแƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒ— (i).

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— cap_net_bind_service, แƒ”แƒก แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— e แƒ“แƒ แƒแƒจแƒ˜แƒ—. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒ’แƒแƒ แƒกแƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒจแƒ˜. แƒ”แƒก แƒ’แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ— แƒ˜แƒก i แƒ“แƒ แƒแƒจแƒ˜แƒ—. แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ, แƒ แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก (แƒ”แƒก แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ— UID-แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”) แƒž. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก cap_net_bind_service+eip.

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ ss-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒ›แƒแƒ™แƒšแƒแƒ— แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜, แƒ แƒแƒ—แƒ แƒ›แƒแƒ”แƒ แƒ’แƒแƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒแƒกแƒแƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒžแƒแƒ แƒขแƒก แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก ID-แƒก แƒ’แƒแƒ แƒ“แƒ 0-แƒ˜แƒกแƒ, แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ 65:

# ss -tulpn -e -H | cut -d' ' -f17-
128 *:80 *:*
users:(("capabilities",pid=30040,fd=3)) uid:65534 ino:11311579 sk:2c v6only:0

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ— capsh, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒญแƒฃแƒ แƒ•แƒ˜ libcap-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— man 3 libcap.

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก, แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ›แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒแƒ  แƒ˜แƒชแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก; แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก แƒแƒฎแƒแƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒจแƒ˜.

แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฃแƒ™แƒ”แƒ— แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒ•แƒ˜แƒฆแƒแƒ— BCC-แƒ˜แƒก แƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ’แƒ”แƒœแƒก kprobe-แƒก cap_capable แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

/usr/share/bcc/tools/capable
TIME      UID  PID   TID   COMM               CAP    NAME           AUDIT
10:12:53 0 424     424     systemd-udevd 12 CAP_NET_ADMIN         1
10:12:57 0 1103   1101   timesync        25 CAP_SYS_TIME         1
10:12:57 0 19545 19545 capabilities       10 CAP_NET_BIND_SERVICE 1

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒ•แƒแƒฆแƒฌแƒ˜แƒแƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒก bpftrace-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ”แƒ แƒ—แƒฎแƒแƒ–แƒ˜แƒแƒœแƒ˜ kprobe-แƒ˜แƒ— cap_capable kernel แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜:

bpftrace -e 
   'kprobe:cap_capable {
      time("%H:%M:%S ");
      printf("%-6d %-6d %-16s %-4d %dn", uid, pid, comm, arg2, arg3);
    }' 
    | grep -i capabilities

แƒ”แƒก แƒ’แƒแƒ›แƒแƒ•แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ›, แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ kprobe-แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’:

12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 10 1

แƒ›แƒ”แƒฎแƒฃแƒ—แƒ” แƒกแƒ•แƒ”แƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒช แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒ“แƒ แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒแƒ แƒแƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒฃแƒš แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒก, แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒแƒ แƒแƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒฃแƒš แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ‘แƒแƒšแƒแƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒแƒฃแƒ“แƒ˜แƒขแƒ˜แƒก แƒ“แƒ แƒแƒจแƒ˜แƒ— (แƒ‘แƒแƒšแƒ แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜) แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ 1. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก CAP_NET_BIND_SERVICE, แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜ include/uapi/linux/ability.h แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜แƒ— 10:

/* Allows binding to TCP/UDP sockets below 1024 */
/* Allows binding to ATM VCIs below 32 */
#define CAP_NET_BIND_SERVICE 10<source lang="go">

แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ runC แƒแƒœ Docker, แƒ แƒแƒ—แƒ แƒ›แƒแƒ— แƒจแƒ”แƒ”แƒซแƒšแƒแƒ— แƒ˜แƒ›แƒฃแƒจแƒแƒแƒœ แƒแƒ แƒแƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ— แƒแƒฅแƒ•แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒš แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก, Docker-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก แƒ˜แƒกแƒ˜แƒœแƒ˜ --cap-add-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

docker run -it --rm --cap-add=NET_ADMIN ubuntu ip link add dummy0 type dummy

แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก CAP_NET_ADMIN แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก, แƒ แƒแƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก แƒ›แƒแƒก แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜ dummy0 แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ แƒ’แƒ•แƒ˜แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒคแƒ˜แƒšแƒขแƒ แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒฎแƒ•แƒ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒแƒ“ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜.

แƒกแƒ”แƒ™แƒ™แƒแƒ›แƒž

Seccomp แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก Secure Computing-แƒก แƒ“แƒ แƒแƒ แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒคแƒ”แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ˜แƒšแƒ˜แƒ Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ แƒแƒœ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› Seccomp แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Linux-แƒ—แƒแƒœ, แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒฃแƒœแƒแƒ แƒ˜ แƒ›แƒแƒก แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒ›แƒแƒ—แƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

Seccomp แƒ“แƒ Linux แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒ’แƒแƒ›แƒแƒ›แƒ แƒ˜แƒชแƒฎแƒแƒ•แƒ˜ แƒ“แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒแƒ“ แƒแƒ แƒ˜แƒ•แƒ” แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ˜แƒ— แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒกแƒฃแƒ แƒ“แƒ”แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒแƒ— CAP_NET_ADMIN แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ›แƒ˜แƒกแƒชแƒ”แƒ— แƒฃแƒคแƒšแƒ”แƒ‘แƒ, แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜, แƒ“แƒแƒ‘แƒšแƒแƒ™แƒแƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก4 แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜.

Seccomp แƒคแƒ˜แƒšแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ BPF แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ SECCOMP_MODE_FILTER แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒ“แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒคแƒ˜แƒšแƒขแƒ แƒแƒชแƒ˜แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

Seccomp แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ prctl-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— PR_SET_SECCOMP แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒ—. แƒ”แƒก แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ Seccomp แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ seccomp_data แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ—. แƒ”แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒแƒชแƒœแƒแƒ‘แƒแƒ แƒ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒก, แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ–แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ“แƒ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ› แƒ”แƒฅแƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒก, แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ˜ uint64.

แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ seccomp_data แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ linux/seccomp.h แƒคแƒแƒ˜แƒšแƒจแƒ˜:

struct seccomp_data {
int nr;
      __u32 arch;
      __u64 instruction_pointer;
      __u64 args[6];
};

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒแƒ› แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ“แƒแƒœ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ•แƒคแƒ˜แƒšแƒขแƒ แƒแƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒ˜แƒกแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒแƒ แƒ˜แƒ•แƒ”แƒก แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ˜แƒ—.

แƒงแƒแƒ•แƒ”แƒšแƒ˜ Seccomp แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒคแƒ˜แƒšแƒขแƒ แƒ›แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒฃแƒ—แƒฎแƒ แƒแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒก, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’. แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฎแƒแƒขแƒ”แƒ‘แƒ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ— (แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜).

- SECCOMP_RET_KILL_PROCESS - แƒ™แƒšแƒแƒ•แƒก แƒ›แƒ—แƒ”แƒš แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ•แƒ แƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜.

- SECCOMP_RET_KILL_THREAD - แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ—แƒ”แƒ›แƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ•แƒ แƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜.

โ€” SECCOMP_RET_KILL โ€” แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜ SECCOMP_RET_KILL_THREAD, แƒ“แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒฃแƒ™แƒแƒœแƒ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

- SECCOMP_RET_TRAP - แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒแƒ™แƒ แƒซแƒแƒšแƒฃแƒšแƒ˜แƒ แƒ“แƒ SIGSYS (แƒชแƒฃแƒ“แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒ˜) แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜ แƒ”แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒก แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒก.

- SECCOMP_RET_ERRNO - แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ SECCOMP_RET_DATA แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒก, แƒ แƒแƒ’แƒแƒ แƒช errno แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒฌแƒ•แƒ”แƒ•แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜.

- SECCOMP_RET_TRACE - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ ptrace tracer-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒšแƒแƒ“ - PTRACE_O_TRACESECCOMP, แƒ แƒแƒ—แƒ แƒฉแƒแƒ”แƒญแƒ แƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒแƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒกแƒแƒœแƒแƒฎแƒแƒ•แƒแƒ“ แƒ“แƒ แƒ’แƒแƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒšแƒแƒ“. แƒ—แƒฃ แƒขแƒ แƒแƒกแƒ”แƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ, errno แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ -ENOSYS-แƒ–แƒ” แƒ“แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒแƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ.

- SECCOMP_RET_LOG - แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒ›แƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

- SECCOMP_RET_ALLOW - แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

ptrace แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒขแƒ แƒแƒกแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ tracee, แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒ—. แƒ™แƒ•แƒแƒšแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ•แƒšแƒ”แƒœแƒ แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒก แƒ™แƒ•แƒแƒšแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ”แƒ‘แƒ˜. Seccomp-แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜, ptrace แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ SECCOMP_RET_TRACE แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒแƒกแƒ” แƒ แƒแƒ›, แƒขแƒ แƒแƒกแƒ”แƒ แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฎแƒ”แƒšแƒ˜ แƒจแƒ”แƒฃแƒจแƒแƒšแƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒ.

Seccom-แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜

แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ Seccomp-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก แƒจแƒ”แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ SECCOMP_RET_ERRNO แƒขแƒ˜แƒžแƒ˜แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒšแƒแƒ“, seccomp แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ 1-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ -0-แƒ–แƒ”.

แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜:

- EACCESS - แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜. แƒ”แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒฎแƒ“แƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒ›แƒแƒก แƒแƒ  แƒแƒฅแƒ•แƒก CAP_SYS_ADMIN แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜ แƒแƒœ no_new_privs แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ prctl-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (แƒแƒ›แƒแƒ–แƒ” แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ—);

โ€” EFAULT โ€” แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก (args seccomp_data แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜) แƒแƒ  แƒแƒฅแƒ•แƒ— แƒกแƒฌแƒแƒ แƒ˜ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜;

โ€” EINVAL โ€” แƒแƒฅ แƒแƒ—แƒฎแƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก:

-แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒฃแƒชแƒœแƒแƒ‘แƒ˜แƒ แƒแƒœ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜;

- แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ˜ แƒแƒ  แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก;

-แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก BPF_ABS, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒš แƒแƒคแƒกแƒ”แƒขแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒแƒ“แƒ”แƒก seccomp_data แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ–แƒแƒ›แƒแƒก;

-แƒคแƒ˜แƒšแƒขแƒ แƒ–แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ›แƒก;

โ€” ENOMEM - แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒแƒ“;

- EOPNOTSUPP - แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒแƒ› แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ, แƒ แƒแƒ› SECCOMP_GET_ACTION_AVAIL แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒ˜แƒงแƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒแƒ  แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฎแƒแƒ แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒแƒก;

โ€” ESRCH โ€” แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒกแƒฎแƒ•แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒแƒก;

- ENOSYS - SECCOMP_RET_TRACE แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒ–แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒกแƒ”แƒ แƒ˜.

prctl แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก แƒ›แƒแƒœแƒ˜แƒžแƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒ แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒก (แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒก แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก) แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒแƒกแƒžแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ‘แƒแƒ˜แƒขแƒ˜แƒก แƒกแƒ˜แƒกแƒฃแƒกแƒขแƒ”, แƒซแƒแƒคแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜, แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ (Seccomp), แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜, Perf แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ.แƒจ.

Seccomp แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ”แƒฉแƒ•แƒ”แƒœแƒแƒ—, แƒ แƒแƒ’แƒแƒ แƒช sandbox แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒกแƒ” แƒแƒ  แƒแƒ แƒ˜แƒก. Seccomp แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒจแƒ”แƒ˜แƒ›แƒฃแƒจแƒแƒแƒœ แƒกแƒแƒ•แƒแƒ แƒฏแƒ˜แƒจแƒ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜. แƒแƒฎแƒšแƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ’แƒแƒ  แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜ แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ Seccomp แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒ˜.

BPF Seccomp แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒแƒ— แƒแƒ“แƒ แƒ” แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜ แƒแƒ แƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ, แƒ™แƒ”แƒ แƒซแƒแƒ“:

โ€” แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ— Seccomp BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—;

- แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒคแƒ˜แƒšแƒขแƒ แƒ˜ prctl-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒฏแƒ”แƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒ“แƒแƒœ แƒ“แƒ Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ“แƒแƒœ:

#include <errno.h>
#include <linux/audit.h>
#include <linux/bpf.h>
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <linux/unistd.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/prctl.h>
#include <unistd.h>

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒแƒ›แƒ“แƒ” แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ CONFIG_SECCOMP-แƒ˜แƒ— แƒ“แƒ CONFIG_SECCOMP_FILTER แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ y-แƒ˜แƒ—. แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒ–แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ”แƒก แƒแƒกแƒ”:

cat /proc/config.gz| zcat | grep -i CONFIG_SECCOMP

แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒแƒœแƒ˜ install_filter แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก BPF แƒคแƒ˜แƒšแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก:

static int install_filter(int nr, int arch, int error) {
  struct sock_filter filter[] = {
    BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, arch))),
    BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arch, 0, 3),
    BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, nr))),
    BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1),
    BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ERRNO | (error & SECCOMP_RET_DATA)),
    BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW),
  };

แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ BPF_STMT แƒ“แƒ BPF_JUMP แƒ›แƒแƒ™แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ linux/filter.h แƒคแƒแƒ˜แƒšแƒจแƒ˜.
แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒ˜แƒแƒ แƒแƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜.

- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof(struct seccomp_data, arch))) - แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ BPF_LD-แƒ“แƒแƒœ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒก BPF_W แƒกแƒแƒฎแƒ˜แƒ—, แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒแƒคแƒกแƒ”แƒขแƒฃแƒ แƒ–แƒ” BPF_ABS.

- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, แƒ—แƒแƒฆแƒ˜, 0, 3) - แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก BPF_JEQ-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ BPF_K แƒแƒ™แƒฃแƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒ˜แƒก แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒจแƒ˜ แƒ—แƒแƒฆแƒ˜แƒก แƒขแƒแƒšแƒ˜. แƒ—แƒฃ แƒแƒกแƒ”แƒ, แƒ’แƒแƒ“แƒแƒฎแƒขแƒ”แƒ‘แƒ แƒแƒคแƒกแƒ”แƒขแƒ–แƒ” 0 แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒแƒ–แƒ”, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒฎแƒขแƒ”แƒ‘แƒ แƒแƒคแƒกแƒ”แƒขแƒ–แƒ” 3 (แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜) แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒขแƒแƒœแƒแƒ“, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ—แƒแƒฆแƒ˜ แƒแƒ  แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ.

- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof(struct seccomp_data, nr))) - แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ BPF_LD-แƒ“แƒแƒœ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒก BPF_W แƒกแƒแƒฎแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก BPF_ABS-แƒ˜แƒก แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒแƒคแƒกแƒ”แƒขแƒจแƒ˜.

โ€” BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1) โ€” แƒแƒ“แƒแƒ แƒ”แƒ‘แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก nr แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒกแƒ—แƒแƒœ. แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ—แƒแƒœแƒแƒ‘แƒแƒ แƒ˜แƒ, แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒแƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ  แƒ–แƒแƒ แƒก, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒœแƒ”แƒ‘แƒแƒก แƒ แƒ—แƒแƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ  แƒ–แƒแƒ แƒก SECCOMP_RET_ALLOW-แƒ˜แƒ—.

- BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ERRNO | (error & SECCOMP_RET_DATA)) - แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก BPF_RET-แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒฌแƒแƒ แƒ›แƒแƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก SECCOMP_RET_ERRNO แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ— err แƒชแƒ•แƒšแƒแƒ“แƒ˜.

- BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW) - แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก BPF_RET-แƒ˜แƒ— แƒ“แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก SECCOMP_RET_ALLOW-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

SECCOMP แƒแƒ แƒ˜แƒก CBPF
แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ—, แƒ แƒแƒขแƒแƒ› แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ ELF แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœ JIT แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ C แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“.

แƒแƒ›แƒ˜แƒก แƒแƒ แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.

โ€ข แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, Seccomp แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก cBPF-แƒก (แƒ™แƒšแƒแƒกแƒ˜แƒ™แƒฃแƒ แƒ˜ BPF) แƒ“แƒ แƒแƒ แƒ eBPF-แƒก, แƒ แƒแƒช แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก: แƒ›แƒแƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅแƒ•แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ™แƒฃแƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒ˜ แƒ‘แƒแƒšแƒ แƒ’แƒแƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“, แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒก แƒฉแƒแƒœแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜.

โ€ข แƒ›แƒ”แƒแƒ แƒ”, Seccomp แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒก BPF แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒแƒ แƒแƒคแƒ”แƒ แƒก. แƒ›แƒแƒ™แƒ แƒแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ—, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒแƒ› แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒจแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ–แƒ˜แƒ—.

แƒ—แƒฃ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ›แƒ”แƒขแƒ˜ แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒแƒ› แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒคแƒกแƒ”แƒ•แƒ“แƒแƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก:

if (arch != AUDIT_ARCH_X86_64) {
    return SECCOMP_RET_ALLOW;
}
if (nr == __NR_write) {
    return SECCOMP_RET_ERRNO;
}
return SECCOMP_RET_ALLOW;

Socket_filter แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— sock_fprog, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ™แƒแƒ“แƒก แƒ“แƒ แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒš แƒกแƒ˜แƒ’แƒ แƒซแƒ”แƒก. แƒ”แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒ’แƒแƒ›แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

struct sock_fprog prog = {
   .len = (unsigned short)(sizeof(filter) / sizeof(filter[0])),
   .filter = filter,
};

install_filter แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ› - แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒ—แƒแƒ•แƒแƒ“ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ! แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— prctl-แƒก แƒ“แƒ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— PR_SET_SECCOMP-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒจแƒ”แƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒฃแƒ‘แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ แƒ”แƒŸแƒ˜แƒ›แƒก, แƒ แƒแƒ› แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒก แƒคแƒ˜แƒšแƒขแƒ แƒ˜ SECCOMP_MODE_FILTER-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก sock_fprog แƒขแƒ˜แƒžแƒ˜แƒก prog แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜:

  if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog)) {
    perror("prctl(PR_SET_SECCOMP)");
    return 1;
  }
  return 0;
}

แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ install_filter แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒ›แƒ“แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— prctl, แƒ แƒแƒ—แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— PR_SET_NO_NEW_PRIVS แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒ›แƒ˜แƒ— แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ•แƒ˜แƒชแƒ˜แƒšแƒแƒ— แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ‘แƒแƒ•แƒจแƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜ แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒข แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒแƒก แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒ—แƒ˜ แƒ›แƒจแƒแƒ‘แƒšแƒ”แƒ‘แƒ˜. แƒแƒ›แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ prctl แƒ–แƒแƒ แƒ”แƒ‘แƒ˜ install_filter แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜ root แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒซแƒแƒฎแƒแƒ— install_filter แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒ‘แƒšแƒแƒ™แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ X86-64 แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒกแƒ—แƒแƒœ แƒ“แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒชแƒ”แƒ— แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ‘แƒšแƒแƒ™แƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒแƒก. แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

int main(int argc, char const *argv[]) {
  if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
   perror("prctl(NO_NEW_PRIVS)");
   return 1;
  }
   install_filter(__NR_write, AUDIT_ARCH_X86_64, EPERM);
  return system(argv[1]);
 }

แฒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ—. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— clang แƒแƒœ gcc, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ main.c แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”:

clang main.c -o filter-write

แƒ แƒแƒ’แƒแƒ แƒช แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒ, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒ‘แƒšแƒแƒ™แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒกแƒชแƒ”แƒ›แƒก แƒ แƒแƒฆแƒแƒชแƒแƒก - ls แƒ™แƒแƒ แƒ’แƒ˜ แƒ™แƒแƒœแƒ“แƒ˜แƒ“แƒแƒขแƒ˜แƒ. แƒ˜แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒแƒกแƒ” แƒ˜แƒฅแƒชแƒ”แƒ•แƒ:

ls -la
total 36
drwxr-xr-x 2 fntlnz users 4096 Apr 28 21:09 .
drwxr-xr-x 4 fntlnz users 4096 Apr 26 13:01 ..
-rwxr-xr-x 1 fntlnz users 16800 Apr 28 21:09 filter-write
-rw-r--r-- 1 fntlnz users 19 Apr 28 21:09 .gitignore
-rw-r--r-- 1 fntlnz users 1282 Apr 28 21:08 main.c

แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ”แƒ แƒ˜แƒ! แƒแƒ˜, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ wrapper แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ: แƒฉแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒชแƒ”แƒ›แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒแƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜:

./filter-write "ls -la"

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ, แƒ”แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒชแƒแƒ แƒ˜แƒ”แƒš แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒกแƒขแƒ แƒแƒกแƒ˜, แƒ แƒแƒ—แƒ แƒ“แƒแƒ•แƒ˜แƒœแƒแƒฎแƒแƒ— แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ:

strace -f ./filter-write "ls -la"

แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ˜แƒšแƒ˜แƒ EPERM แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— - แƒ˜แƒ’แƒ˜แƒ•แƒ”, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ—. แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒ’แƒแƒ›แƒแƒกแƒชแƒ”แƒ›แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒก แƒแƒ  แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ:

[pid 25099] write(2, "ls: ", 4) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "write error", 11) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "n", 1) = -1 EPERM (Operation not permitted)

แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒ”แƒกแƒ›แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Seccomp BPF แƒ“แƒ แƒ’แƒแƒฅแƒ•แƒ— แƒ™แƒแƒ แƒ’แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ›แƒแƒกแƒ—แƒแƒœ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒกแƒฃแƒ แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ cBPF-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ eBPF-แƒ˜แƒ—, แƒ แƒแƒ› แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒซแƒแƒšแƒ?

eBPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ–แƒ” แƒคแƒ˜แƒฅแƒ แƒ˜แƒกแƒแƒก, แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒก, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒ”แƒ แƒ”แƒœ แƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ”แƒœ แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒแƒ‘แƒแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ“แƒแƒœแƒ”แƒ–แƒ” eBPF แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒชแƒแƒ•แƒแƒ“. แƒแƒ› แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ”แƒ‘แƒก แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ BPF LSM แƒฎแƒแƒคแƒแƒœแƒ’แƒ”แƒ‘แƒก.

BPF LSM แƒฎแƒแƒคแƒแƒœแƒ’แƒ”แƒ‘แƒ˜

แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, LSM แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒฎแƒแƒคแƒแƒœแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก. Hook แƒ–แƒแƒ แƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒฐแƒ’แƒแƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ  แƒ–แƒแƒ แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒกแƒ—แƒแƒœ. LSM แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒแƒฎแƒแƒš แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒคแƒ”แƒœแƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ˜แƒชแƒ˜แƒšแƒแƒ— แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ–แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก.

แƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒ แƒแƒก, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒก แƒแƒฅแƒ•แƒก แƒจแƒ•แƒ˜แƒ“แƒ˜ แƒ™แƒแƒฃแƒญแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒ SELinux แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ LSM, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒ›แƒแƒ—.

แƒฎแƒแƒคแƒแƒœแƒ’แƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒจแƒ˜ แƒคแƒแƒ˜แƒšแƒจแƒ˜ include/linux/security.h:

extern int security_bpf(int cmd, union bpf_attr *attr, unsigned int size);
extern int security_bpf_map(struct bpf_map *map, fmode_t fmode);
extern int security_bpf_prog(struct bpf_prog *prog);
extern int security_bpf_map_alloc(struct bpf_map *map);
extern void security_bpf_map_free(struct bpf_map *map);
extern int security_bpf_prog_alloc(struct bpf_prog_aux *aux);
extern void security_bpf_prog_free(struct bpf_prog_aux *aux);

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ”แƒขแƒแƒžแƒ–แƒ”:

โ€” Security_bpf โ€” แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ BPF แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก;

- security_bpf_map - แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ˜แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ แƒฃแƒ™แƒแƒ–แƒ”;

- security_bpf_prog - แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ˜แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒก eBPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก;

โ€” security_bpf_map_alloc โ€” แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ BPF แƒ แƒฃแƒ™แƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜;

- security_bpf_map_free - แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ BPF แƒ แƒฃแƒ™แƒ”แƒ‘แƒจแƒ˜;

โ€” security_bpf_prog_alloc โ€” แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—;

- security_bpf_prog_free - แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

แƒแƒฎแƒšแƒ, แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ“แƒแƒœแƒแƒฎแƒ•แƒ˜แƒกแƒแƒก, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ”แƒกแƒ›แƒ˜แƒก: แƒ˜แƒ“แƒ”แƒ LSM BPF แƒฉแƒแƒ›แƒญแƒ แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒ— แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒœ แƒ“แƒแƒชแƒ•แƒ แƒงแƒ•แƒ”แƒšแƒ eBPF แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก, แƒ แƒแƒ› แƒ›แƒฎแƒแƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒžแƒ˜แƒ แƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒœ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ‘แƒแƒ แƒแƒ—แƒ”แƒ‘แƒกแƒ แƒ“แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ–แƒ”.

แƒ แƒ”แƒ–แƒ˜แƒฃแƒ›แƒ”

แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒ˜แƒกแƒ˜ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒแƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ–แƒ”, แƒ แƒ˜แƒกแƒ˜ แƒ“แƒแƒชแƒ•แƒแƒช แƒ’แƒกแƒฃแƒ แƒ—. แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒซแƒšแƒแƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒชแƒ•แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒ“แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ’แƒ–แƒ˜แƒ—. แƒ’แƒ˜แƒœแƒ“ แƒ“แƒแƒ˜แƒฏแƒ”แƒ แƒ”แƒ— แƒ—แƒฃ แƒแƒ แƒ, แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒ แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ“แƒแƒœแƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒ˜แƒ“แƒแƒœ, แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒแƒ› แƒแƒ  แƒ›แƒ˜แƒกแƒชแƒ”แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒ›แƒ—แƒ”แƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒ–แƒ”. แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ›แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒก แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ, แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒชแƒ”แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒฎแƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜. แƒ•แƒ˜แƒ›แƒ”แƒ“แƒแƒ•แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ’แƒแƒ’แƒ•แƒ”แƒชแƒแƒœแƒ˜, แƒ แƒ แƒแƒ แƒ˜แƒก แƒคแƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ—แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒแƒ•แƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ“แƒ”แƒ•แƒ˜แƒ“ แƒ™แƒแƒšแƒแƒ•แƒ”แƒ แƒ แƒแƒ แƒ˜แƒก CTO Netlify-แƒจแƒ˜. แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ Docker-แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒแƒจแƒ˜ แƒ“แƒ แƒฌแƒ•แƒšแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒขแƒแƒœแƒ Runc, Go แƒ“แƒ BCC แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒฎแƒ•แƒ แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒจแƒ˜. แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒ— Docker แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ–แƒ” แƒ“แƒ Docker แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ”แƒ™แƒแƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒ”แƒ•แƒ˜แƒ“แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒฃแƒงแƒ•แƒแƒ แƒก แƒคแƒšแƒ”แƒ˜แƒ›แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒแƒก.

แƒšแƒแƒ แƒ”แƒœแƒชแƒ แƒคแƒแƒœแƒขแƒแƒœแƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒจแƒ˜ Sysdig-แƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Falco-แƒ–แƒ”, Cloud Native Computing Foundation-แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒแƒœแƒแƒ›แƒแƒšแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒกแƒ แƒ“แƒ eBPF-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—. แƒ˜แƒก แƒ’แƒแƒขแƒแƒชแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—, Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒ—.

ยป แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒแƒฅ แƒ’แƒแƒ›แƒแƒ›แƒชแƒ”แƒ›แƒšแƒ˜แƒก แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ–แƒ”
ยป แƒกแƒแƒ แƒฉแƒ”แƒ•แƒ˜
ยป แƒœแƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜

Khabrozhiteley-แƒ–แƒ” 25% แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ แƒ™แƒฃแƒžแƒแƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— - Linux

แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒฅแƒแƒฆแƒแƒšแƒ“แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฎแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ’แƒแƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒแƒกแƒขแƒ˜แƒ—.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ