seccomp(2) - wariua/manpages-ko GitHub Wiki
seccomp - íë¡ìžì€ì ìì 컎íší ìí ì¡°ìíêž°
#include <linux/seccomp.h>
#include <linux/filter.h>
#include <linux/audit.h>
#include <linux/signal.h>
#include <sys/ptrace.h>
int seccomp(unsigned int operation, unsigned int flags, void *args);
seccomp()
ìì€í
ížì¶ì ížì¶ íë¡ìžì€ì ìì 컎íší
(Secure Computing; seccomp) ìí륌 ì¡°ìíë€.
íì¬ ëŠ¬ë
ì€ë ë€ì operation
ê°ë€ì ì§ìíë€.
SECCOMP_SET_MODE_STRICT
-
ížì¶ ì€ë ëìê² íì©ëë ìì€í ížì¶ìŽ
read(2)
,write(2)
, _exit(2) (exit_group(2)ì ì ëš), sigreturn(2)ë¿ìŽë€. ë€ë¥ž ìì€í ížì¶ìSIGKILL
ìê·žë ì ë¬ì ìŒìŒíšë€. ì격í ìì 컎íší 몚ëë íìŽíë ììŒ ë±ì ìœìŽì ì»ì ë¹ì 뢰 ë°ìŽíž ìœë륌 ì€ííŽìŒ íë ê³ì° ì죌 ìì©ì ì ì©íë€.ì°žê³ ë¡ ížì¶ ì€ë ëìì ë ìŽì sigprocmask(2)륌 ížì¶í ì ìêž°ë íì§ë§ sigreturn(2)ì ìŽì©íŽ
SIGKILL
곌SIGSTOP
ì ì ìží 몚ë ìê·žëë€ì ì°šëší ì ìë€. ë°ëŒì (ì륌 ë€ìŽ) íë¡ìžì€ì ì€í ìê°ì ì ìœíë ë° alarm(2)ìŒë¡ë ì¶©ë¶ì¹ ìë€. íì€íê² íë¡ìžì€ë¥Œ ëëŽë €ë©Ž ëìSIGKILL
ì ì¬ì©íŽìŒ íë€. timer_create(2)ìSIGEV_SIGNAL
ë¡ íê³sigev_signo
륌SIGKILL
ë¡ ì€ì íŽì ì¬ì©íê±°ë setrlimit(2)륌 ìŽì©íŽRLIMIT_CPU
ì ê²œì± ì íì ì€ì í멎 ëë€.ìŽ ëìì 컀ë 구ì±ì
CONFIG_SECCOMP
ê° ìŒì ž ìë 겜ì°ìë§ ì¬ì© ê°ë¥íë€.flags
ì ê°ìŽ 0ìŽìŽìŒ íê³args
ê° NULLìŽìŽìŒ íë€.ìŽ ëìì ë€ì ížì¶ê³Œ êž°ë¥ì ìŒë¡ ëìŒíë€.
prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
SECCOMP_SET_MODE_FILTER
-
args
륌 íµíŽ ì ë¬íë ë²íŽëЬ íší· íí°(BPF) í¬ìží°ê° íì© ìì€í ížì¶ì ê·ì íë€. ìŽ ìžìëstruct sock_fprog
ì ëí í¬ìží°ìŽë€. ììì ìì€í ížì¶ ë° ìì€í ížì¶ ìžì륌 걞ë¬ëŽëë¡ ì€ê³í ì ìë€. íí°ê° ì íšíì§ ììŒë©Žseccomp()
ê° ì€íšíë©°errno
ë¡EINVAL
ì ë°ííë€.íí°ìì fork(2)ë clone(2)ì íì©íë ê²œì° ìì íë¡ìžì€ë€ì ë¶ëªšì ê°ì ìì€í ížì¶ íí°ì ì ìœì ë°ê² ëë€. execve(2)ê° íì©ëë ê²œì° execve(2) ížì¶ì ê±°ì¹ë©Žì Ʞ졎 íí°ê° 볎졎ëë€.
SECCOMP_SET_MODE_FILTER
ëìì ì¬ì©íêž° ìíŽì ížì¶ ì€ë ëê° ìêž° ë€ìì€íìŽì€ììCAP_SYS_ADMIN
ìë¥ì ê°ì§ê³ ììŽìŒ íë€. ìë멎 ì€ë ëì ìŽë¯žno_new_privs
ë¹ížê° ì€ì ëìŽ ììŽìŒ íëë°, ì€ë ë ì ì¡°ê° ê·ž ë¹ížë¥Œ ìŽë¯ž ì€ì íì§ ììë€ë©Ž ì€ë ëìì ë€ì ížì¶ì íŽìŒ íë€.prctl(PR_SET_NO_NEW_PRIVS, 1);
ê·žë ì§ ììŒë©Ž
SECCOMP_SET_MODE_FILTER
ëììŽ ì€íšíë©°errno
ë¡EACCES
륌 ë°ííë€. ìŽ ì구 ì¬íì ë¹í¹ê¶ íë¡ìžì€ê° ì ìì íí°ë¥Œ ì ì©í í execve(2)륌 ìŽì©íŽ set-user-ID ëŽì§ êž°í í¹ê¶ íë¡ê·žëšì ížì¶íŽì ê·ž íë¡ê·žëšì íì·ší ê°ë¥ì±ì ë§ëë€. (ì륌 ë€ìŽ setuid(2)ë¡ ížì¶ìì ì¬ì©ì ID륌 0 ìë ê°ìŒë¡ ì€ì íë €ë ìë륌 ì ìì íí°ê° ì€ì ìì€í ížì¶ ì€í ììŽ 0ì ë°ííê² ë§ë€ ì ìì ê²ìŽë€. ê·žëì ìŽë€ í겜ìì íë¡ê·žëšì ìì¬ì ìíŒì ì í¹ê¶ì ì ì§íê² íê³ ìíí ëìì ì ëíë ê²ìŽ ê°ë¥í ìë ìë€.)ë¶ìž íí°ìì prctl(2)ìŽë
seccomp()
륌 íì©íë ê²œì° íí°ë¥Œ ë ì¶ê°í ìë ìë€. íê° ìê°ìŽ ëìŽëê² ì§ë§ ìŽë¥Œ íµíŽ ì€ë ë ì€í ì€ì 공격 멎ì ì ë ì€ìŒ ì ìë€.SECCOMP_SET_MODE_FILTER
ëìì 컀ë 구ì±ìCONFIG_SECCOMP_FILTER
ê° ìŒì ž ìë 겜ì°ìë§ ì¬ì© ê°ë¥íë€.flags
ê° 0ìŽë©Ž ìŽ ëìì ë€ì ížì¶ê³Œ êž°ë¥ì ìŒë¡ ëìŒíë€.prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, args);
ìžìíë
flags
ë ë€ì곌 ê°ë€.SECCOMP_FILTER_FLAG_TSYNC
-
ì íí°ë¥Œ ì¶ê°í ë ížì¶ íë¡ìžì€ì ë€ë¥ž ì€ë ë 몚ë륌 ê°ì seccomp íí° ížëŠ¬ë¡ ëêž°íìíšë€. "íí° ížëЬ"ë ì€ë ëì ë¶ìž íí°ë€ì ìì ìë 목ë¡ìŽë€. (ëìŒ íí°ë¥Œ ë³ê°ì
seccomp()
ížì¶ë¡ ë¶ìž 결곌ë ìŽ êŽì ìì ìë¡ ë€ë¥ž íí°ìŽë€.)í ì€ë ëëŒë ê°ì íí° ížëŠ¬ë¡ ëêž°íí ì ììŒë©Ž ížì¶ìŽ ì seccomp íí°ë¥Œ ë¶ìŽì§ ìê³ ì€íšíë©° ëêž°íí ì ìë 첫 ë²ì§ž ì€ë ëì ID륌 ë°ííë€. ëìŒ íë¡ìžì€ì ë€ë¥ž ì€ë ëê°
SECCOMP_MODE_STRICT
몚ëìŽê±°ë ì첎ì ìŒë¡ ì seccomp íí°ë¥Œ ë¶ì¬ì ížì¶ ì€ë ëì íí° ížëЬìì ë²ìŽë ìë 겜ì°ì ëêž°íê° ì€íšíê² ëë€. -
SECCOMP_FILTER_FLAG_LOG
(늬ë ì€ 4.14ë¶í°) -
SECCOMP_RET_ALLOW
륌 ì ìží 몚ë íí° ë°í íìë€ì êž°ë¡íŽìŒ íë€. êŽëЬìê°/proc/sys/kernel/seccomp/actions_logged
íìŒì íµíŽ ê°ë³ íìì ë¡ê·ž êž°ë¡ì ë§ìì ìŽ íë귞륌 묎ìíê² í ìë ìë€. -
SECCOMP_GET_ACTION_AVAIL
(늬ë ì€ 4.17ë¶í°) - ì¶ìž¡ì± ì ì¥ ì°í(Speculative Store Bypass) ìí륌 ëë€.
-
SECCOMP_GET_ACTION_AVAIL
(늬ë ì€ 4.14ë¶í°) -
ìŽë€ íì륌 컀ëìŽ ì§ìíëì§ ê²ì¬íë€. ìµê·Œì ì¶ê°ë íí° ë°í íì륌 컀ëìŽ ìê³ ìëì§ íìžíë ë° ëììŽ ëë€. 컀ëììë ìì§ ëª»íë íì륌 몚ë
SECCOMP_RET_KILL_PROCESS
ë¡ ì²ëЬíë€.flags
ê°ìŽ 0ìŽìŽìŒ íê³args
ê° ë¶íž ìë 32ë¹íž íí° ë°í íìì ëí í¬ìží°ì¬ìŒ íë€.
SECCOMP_SET_MODE_FILTER
륌 íµíŽ íí°ë¥Œ ì¶ê°í ë args
ê° íí° íë¡ê·žëšì ê°ëЬíšë€.
struct sock_fprog {
unsigned short len; /* BPF ìžì€ížëì
ê°ì */
struct sock_filter *filter; /* BPF ìžì€ížëì
ë€ì
ë°°ìŽì ëí í¬ìží° */
};
ê° íë¡ê·žëšì í ê° ìŽìì BPF ìžì€ížëì ì ëŽê³ ììŽìŒ íë€.
struct sock_filter { /* íí° ëžë¡ */
__u16 code; /* ì€ì íí° ìœë */
__u8 jt; /* ì°ž ì í */
__u8 jf; /* ê±°ì§ ì í */
__u32 k; /* ë²ì© ë€ì©ë íë */
};
ê·ž ìžì€ížëì
ë€ì ì€íí ë BPF íë¡ê·žëšì ë€ì ííì (ìœêž° ì ì©) ë²íŒë¡ ì€ë¹ë ìì€í
ížì¶ ì 볎ì ëíŽ (BPF_ABS
죌ì ì§ì 몚ë륌 ì¬ì©íŽ) ëìíë€.
struct seccomp_data {
int nr; /* ìì€í
ížì¶ ë²íž */
__u32 arch; /* AUDIT_ARCH_* ê°
(<linux/audit.h> ì°žê³ ) */
__u64 instruction_pointer; /* CPU ìžì€ížëì
í¬ìží° */
__u64 args[6]; /* 6ê°ê¹ì§ì ìì€í
ížì¶ ìžì */
};
ìí€í
ì²ì ë°ëŒ ìì€í
ížì¶ ë²ížê° ë€ë¥Žê³ ìŒë¶ ìí€í
ì²(ê°ë ¹ x86-64)ììë ì¬ì©ì ìœëê° ì¬ë¬ ìí€í
ì²ì ížì¶ ê·ìœì ì¬ì©í ì ìêž° ë묞ì (ê·žëŠ¬ê³ íë¡ìžì€ìì execve(2)륌 ìŽì©íŽ ë€ë¥ž ê·ìœì ì°ë ë°ìŽë늬륌 ì€ííë ê²œì° ëì€ì ì¬ì© ê·ìœìŽ ë¬ëŒì§ ìë ìêž° ë묞ì) ìŒë°ì ìŒë¡ arch
íëì ê°ì ê²ì¬í íìê° ìë€.
ê°ë¥í멎 íìŽížëЬì€íž ë°©ìì ì¬ì©íꞰ륌 ê°ë ¥í ê¶íë€. ê·ž ë°©ììŽ ë ê²¬ê³ íê³ ëšìíêž° ë묞ìŽë€. ëžë늬ì€ížë ìíí ì ìë ìì€í ížì¶ìŽ (ëë ìíí íëê·žë ìµì ìŽ) ì¶ê°ë ëë§ë€ ê°±ì íŽ ì£ŒìŽìŒ íë©°, ìŽë€ ê°ì íí ë°©ìì ì믞 ë³ê²œ ììŽ ë°ê¿ì ëžë늬ì€íž ì°íë¡ ìŽìŽì§ ì ìë 겜ì°ê° ë§ë€. ìëì ê²œê³ ì ë ì°žê³ íëŒ.
arch
íëê° ížì¶ ê·ìœ 몚ëìì ì ìŒíì§ ìë€. x86-64 ABIì x32 ABIë 몚ë arch
íëì AUDIT_ARCH_X86_64
륌 ì¬ì©íë©° ê°ì íë¡ìžì ììì ëìíë€. ëì ìì€í
ížì¶ ë²ížì __X32_SYSCALL_BIT
륌 ì¬ì©íŽ ë ABI륌 구ë³íë€.
ìŠ, x86-64 ABIì ê±žì³ ëìíë seccomp êž°ë° ìì€í
ížì¶ ëžë늬ì€ížë¥Œ ë§ë€êž° ìíŽì arch
ê° AUDIT_ARCH_X86_64
ì ê°ìì§ íìžíŽìŒ í ë¿ ìëëŒ nr
ì __X32_SYSCALL_BIT
륌 ëŽì ìì€í
ížì¶ì 몚ë ëª
ìì ìŒë¡ ê±°ë¶íêž°ë íŽìŒ íë€.
instruction_pointer
íëë ìì€í
ížì¶ì ìíí êž°ê³ìŽ ìžì€ížëì
ì 죌ì륌 ìë € ì€ë€. /proc/[pid]/maps
ì íšê» ì¬ì©íŽì íë¡ê·žëšì ìŽë€ ìì(ë§€í)ìì ìì€í
ížì¶ì ìííëì§ ê²ì¬íë ë° ìžëªšê° ìì ìë ìë€. (íë¡ê·žëšë€ìŽ ê·žë° ê²ì¬ë¥Œ ë¬Žë ¥ííë 걞 ë§ìŒë €ë©Ž ìë§ mmap(2) ë° mprotect(2) ìì€í
ížì¶ì ëŽìíë ê² ì¢ì ê²ìŽë€.)
args
ì ê°ë€ì ëžë늬ì€ížë¡ ê²ì¬í ëë ìžìë€ìŽ ì²ëЬëêž° ì ì, íì§ë§ seccomp ê²ì¬ íì ì¡°ì©í ìë €ëê°ë 겜ì°ê° ë§ë€ë ê²ì ìŒëì ëìŽìŒ íë€. ì륌 ë€ë©Ž x86-64 컀ëìì i386 ABI륌 ì¬ì©í ë ê·žë° ê²œì°ê° ë°ìíë€. 컀ëì ë³Žíµ ìžìì íì 32ë¹íž ì륌 ë³Žì§ ìì í
ì§ë§ seccomp ë°ìŽí°ìë ì 첎 64ë¹íž ë ì§ì€í° ê°ìŽ ì£ŒìŽì§ë€. ë³ë¡ ëëì§ ìì ë ë€ë¥ž ìë x86-64 ABI륌 ìŽì©íŽ int
íì
ìžì륌 ë°ë ìì€í
ížì¶ì ìíí ëìŽë€. ìžì ë ì§ì€í°ì ìì ì ë°ìŽ ìì€í
ížì¶ììë 묎ìëì§ë§ seccomp ë°ìŽí°ìê²ë 볎ìžë€.
seccomp íí°ë ë ë¶ë¶ìŒë¡ ìŽë€ì§ 32ë¹íž ê°ì ë°ííë€. (ìì SECCOMP_RET_ACTION_FULL
ìŽ ê·ì íë ë§ì€í¬ì ëìíë) ìì 16ë¹ížë ìë ëìŽë "íì" ê°ë€ ì€ íë륌 ëŽëë€. (ìì SECCOMP_RET_DATA
ê° ê·ì íë) íì 16ë¹ížë ê·ž ë°í ê°ê³Œ êŽë šë "ë°ìŽí°"ìŽë€.
ì¬ë¬ íí°ê° 졎ì¬íë ê²œì° ëªšë ì€ííë©° íí° ížëЬì ì¶ê°í ìì ë°ëë¡ ì€ííë€. ìŠ, ê°ì¥ ìµê·Œ ì€ì¹ë íí°ê° ê°ì¥ 뚌ì ì€íëë€. (ì°žê³ ë¡ ìŽì íí°ë€ ì€ íëê° SECCOMP_RET_KILL
ì ë°ííë€ íŽë 몚ë íí°ë¥Œ ížì¶íë€. ìŽë ê² íë 걎 컀ë ìœë륌 ëšìíê² íê³ íì¹ ìì 겜ì°ì ëí ê²ì¬ë¥Œ íŒíŽì íí° ìžíž ì€í ìë륌 ìŽì§ ëìŽêž° ìíŽììŽë€.) ìŽë€ ìì€í
ížì¶ì íê°í ë°í ê°ì íí° ì 첎 ì€íìì ë°íë ê²ë€ ì€ ê°ì¥ ëì ì°ì ëì ê°ì¥ 뚌ì ëìš íì ê°(곌 ìë° ë°ìŽí°)ìŽë€.
seccomp íí°ê° ë°íí ì ìë íì ê°ë€ì ì°ì ë ìììŒë¡ ëìŽí멎 ë€ì곌 ê°ë€.
-
SECCOMP_RET_KILL_PROCESS
(늬ë ì€ 4.14ë¶í°) -
ìŽ ê°ì íë¡ìžì€ê° ìœìŽ ë€íì íšê» ìŠì ì¢ ë£ëê² íë€. ìì€í ížì¶ì ì€íëì§ ìëë€. ìëì
SECCOMP_RET_KILL_THREAD
ì ë¬ëЬ ì€ë ë 귞룹ì 몚ë ì€ë ëê° ì¢ ë£ëë€. (ì€ë ë 귞룹ì ëí ë Œìë clone(2)ìCLONE_THREAD
íëê·ž ì€ëª ì 볎ëŒ.)SIGSYS
ìê·žëì ìíŽ ì£œì ê²ì²ëŒ íë¡ìžì€ë¥Œ ì¢ ë£ìíšë€.SIGSYS
ì ìê·žë ížë€ë¬ë¥Œ ë±ë¡íŽ ëìŽë ìŽ ê²œì°ìë ê·ž ížë€ë¬ë¥Œ 묎ìíê³ íì íë¡ìžì€ë¥Œ ì¢ ë£ìíšë€. ìŽ íë¡ìžì€ë¥Œ (waitpid(2) ë±ìŒë¡) êž°ë€ëŠ¬ê³ ìë ë¶ëªš íë¡ìžì€ìê² ë°íëëwstatus
ë ìììŽSIGSYS
ìê·žëë¡ ì¢ ë£ë ê²ì²ëŒ íìëë€. -
SECCOMP_RET_KILL_THREAD
(ëëSECCOMP_RET_KILL
) -
ìŽ ê°ì ìì€í ížì¶ì í ì€ë ëê° ìŠì ì¢ ë£ëê² íë€. ìì€í ížì¶ì ì€íëì§ ìëë€. ê°ì ì€ë ë 귞룹ì ë€ë¥ž ì€ë ëë€ì ì€íì ê³ìíë€.
SIGSYS
ìê·žëì ìíŽ ì£œì ê²ì²ëŒ ì€ë ë륌 ì¢ ë£ìíšë€. ììSECCOMP_RET_KILL_PROCESS
ì°žê³ .늬ë ì€ 4.11 ì ìë ìŽ ë°©ììŒë¡ ì¢ ë£ëë íë¡ìžì€ê° ìœìŽ ë€í륌 ì ë°íì§ ììë€. (signal(7)ìë
SIGSYS
ì Ʞ볞 íìê° ìœìŽ ë€í íë ì¢ ë£ëŒê³ ì í ìë€.) 늬ë ì€ 4.11ë¶í°ë ëšìŒ ì€ë ë íë¡ìžì€ê° ìŽ ë°©ììŒë¡ ì¢ ë£ë멎 ìœìŽë¥Œ ë€í íë€.늬ë ì€ 4.14ìì
SECCOMP_RET_KILL_PROCESS
ê° ì¶ê°ë멎ì ë íì륌 ëª íí 구ë³í ì ìëë¡SECCOMP_RET_KILL
ì ëììŽë¡SECCOMP_RET_KILL_THREAD
ê° ì¶ê°ëìë€. SECCOMP_RET_TRAP
-
ìŽ ê°ì 컀ëìŽ ì ë° íë¡ìžì€ìê² ì€ë ë ì§í¥
SIGSYS
ìê·žëì 볎ëŽê² íë€. (ìì€í ížì¶ì ì€íëì§ ìëë€.)siginfo_t
구조첎(sigaction(2) ì°žê³ )ì ìê·žë곌 êŽë šë ì¬ë¬ íëë€ìŽ ì€ì ëë€.-
si_signo
ê°SIGSYS
륌 ëŽëë€. -
si_call_addr
ìŽ ìì€í ížì¶ ìžì€ížëì ì 죌ì륌 ë³Žì¬ ì€ë€. -
si_syscall
곌si_arch
ê° ìŽë€ ìì€í ížì¶ìŽ ìëëëì§ ëíëžë€. -
si_code
ê°SYS_SECCOMP
륌 ëŽëë€. -
si_errno
ê° íí° ë°í ê°ìSECCOMP_RET_DATA
ë¶ë¶ì ëŽëë€.
íë¡ê·žëš 칎ìŽí°ë ìì€í ížì¶ìŽ ìŽë€ì§ ê²ì²ëŒ ëìŽ ìì ê²ìŽë€. (ìŠ, íë¡ê·žëš 칎ìŽí°ê° ìì€í ížì¶ ìžì€ížëì ì ê°ëЬí€ì§ ìëë€.) ë°í ê° ë ì§ì€í°ë ìí€í ì²ë³ë¡ ë€ë¥ž ê°ì ëŽëë°, ì€í ì¬ê° ì ê·ž ìì€í ížì¶ì ì ì í ìŽë€ ê°ìŒë¡ ì€ì íë€. (ìŽ ìí€í ì² ì졎ì±ì
ENOSYS
ë¡ ë°ê¿ ë²ëŠ¬ë©Ž ìŽë€ ì ì©í ì 볎륌 ë®ìŽ ìž ìë ìì ê²ìŽêž° ë묞ìŽë€.) -
SECCOMP_RET_ERRNO
-
ìŽ ê°ì ìì€í
ížì¶ì ì€ííì§ ìê³ íí° ë°í ê°ì
SECCOMP_RET_DATA
ë¶ë¶ìŽerrno
ê°ìŒë¡ ì¬ì©ì ê³µê°ìŒë¡ ì ë¬ëê² íë€. SECCOMP_RET_TRACE
-
ë°í ì ìŽ ê°ì ìì€í ížì¶ ì€í ì ì 컀ëìŽ ptrace(2) êž°ë° ì¶ì ììê² ì늌ì ìëíê² íë€. ì¶ì ìê° ììŒë©Ž ìì€í ížì¶ì ì€ííì§ ìê³
errno
륌ENOSYS
ë¡ ì€ì íŽì ì€íš ìí륌 ë°ííë€.ì¶ì ìê°
ptrace(PTRACE_SETOPTIONS)
륌 ìŽì©íŽPTRACE_O_TRACESECCOMP
륌 ìì²í멎 ì늌ì ë°ê² ëë€.PTRACE_EVENT_SECCOMP
ë¡ ì늌ì ë°ê² ëë©° ì¶ì ìììPTRACE_GETEVENTMSG
ë¡ íí° ë°í ê°ì ì¬ì©í ì ìë€.ì¶ì ììì ìì€í ížì¶ ë²ížë¥Œ -1ë¡ ë°ê¿ì ê·ž ìì€í ížì¶ì 걎ëëž ì ìë€. ëë ì¶ì ììì ìì€í ížì¶ì ì íší ìì€í ížì¶ ë²ížë¡ ë°ê¿ì ìì²ë ìì€í ížì¶ì ë°ê¿ ì ìë€. ìì€í ížì¶ì 걎ëë°ë ê²œì° ì¶ì ìê° ë°í ê° ë ì§ì€í°ì ë£ì ê°ì ê·ž ìì€í ížì¶ìŽ ë°ííë ê²ì²ëŒ 볎ìŽê² ëë€.
컀ë 4.8 ì ìì, ì¶ì ììê² ì늌ì ì€ íìë seccomp ê²ì¬ë¥Œ ë€ì ì€ííì§ ìëë€. (ë°ëŒì ìŽì 컀ëìì seccomp êž°ë° ìëë°ì€ììë ê·¹í 죌ìíì§ ìë í ptrace(2) ì¬ì©ì, ì€ë ¹ ë€ë¥ž ìëë°ì€ ë íë¡ìžì€ììëŒ íŽë, ì ë íì©íŽìë ì ëë€. ptrace ì¬ì© íë¡ìžì€ê° ìŽ ë©ì»€ëìŠì ìŽì©íŽ seccomp ìëë°ì€ìì íì¶í ì ìë€.)
-
SECCOMP_RET_LOG
(늬ë ì€ 4.14ë¶í°) -
ìŽ ê°ì íí° ë°í íì륌 ë¡ê·žë¡ êž°ë¡í í ìì€í
ížì¶ìŽ ì€íëê² íë€. êŽëЬìê°
/proc/sys/kernel/seccomp/actions_logged
íìŒì íµíŽ ìŽ íìì êž°ë¡ ëìì 묎ìíê² í ìë ìë€. SECCOMP_RET_ALLOW
- ìŽ ê°ì ìì€í ížì¶ìŽ ì€íëê² íë€.
ìì ë€ë¥ž íì ê°ì ì§ì íë 겜ì°ìë íí° íì륌 SECCOMP_RET_KILL_PROCESS
(늬ë
ì€ 4.14ë¶í°)ë SECCOMP_RET_KILL_THREAD
(늬ë
ì€ 4.13ê¹ì§)ë¡ ì²ëЬíë€.
/proc/sys/kernel/seccomp
ëë í°ëЬ ëŽì íìŒë€ìŽ seccomp ì 볎 ë° ì€ì ìží°íìŽì€ë¥Œ ì¶ê°ë¡ ì ê³µíë€.
-
actions_avail
(늬ë ì€ 4.14ë¶í°) - seccomp íí° ë°í íìë€ì 묞ììŽ ííë¡ ë ìœêž° ì ì© ìì ìë 목ë¡ìŽë€. ìŒìªœìì ì€ë¥žìªœìŒë¡ì ììê° ì°ì ëê° ëŽë €ê°ë ìììŽë€. 컀ëìŽ ì§ìíë seccomp íí° ë°í íìë€ì ì§í©ì ëíëžë€.
-
actions_logged
(늬ë ì€ 4.14ë¶í°) -
ë¡ê·ž êž°ë¡ìŽ íì©ëë seccomp íí° ë°í íìë€ì ìœêž°-ì°êž° ìì ìë 목ë¡ìŽë€. íìŒì ìž ë ìì륌 ì§í¬ íìê° ììŒë©°, ê·žëë íìŒì ìœì ëë
actions_avail
íìŒê³Œ ê°ì ììê° ëë€.ìŽë€ íì€í¬ë¥Œ ê°ì¬(audit)íëë¡ ê°ì¬ ìëžìì€í ìŽ êµ¬ì±ëìŽ ìì ë
actions_logged
ê°ìŽ í¹ì íí° ë°í íìë€ìŽ êž°ë¡ëë ê²ì ë§ì§ ìëë€ë ì ì ì ìíŽìŒ íë€.actions_logged
íìŒì íìê° ìë ê²œì° ê·ž íì€í¬ì ëí íì륌 ê°ì¬í ì§ ì¬ë¶ì ëí ìµì¢ ê²°ì ì ê°ì¬ ìëžìì€í ìŽSECCOMP_RET_ALLOW
ìž ëªšë íí° ë°í íìë€ì ëíŽ ìŽë»ê² í ì§ ëŽëЬë íëšì ë¬ë € ìë€.actions_logged
íìŒìì 묞ììŽ "allow"ë ë°ìë€ìŽì§ ìëë€.SECCOMP_RET_ALLOW
íì륌 êž°ë¡íë ê²ì ë¶ê°ë¥íêž° ë묞ìŽë€. íìŒì "allow"륌 ì°ë €ê³ í멎EINVAL
ì€ë¥ë¡ ì€íšíë€.
늬ë
ì€ 4.14ë¶í° 컀ëì seccomp íí°ê° ë°ííë íì륌 ê°ì¬ ë¡ê·žì êž°ë¡íë ì¥ì¹ë¥Œ ì ê³µíë€. 컀ëì íìì ì¢
ë¥, actions_logged
íìŒì ê·ž íìê° ìëì§ ì¬ë¶, 컀ë ê°ì¬ê° (ê°ë ¹ 컀ë ë¶íž ìµì
audit=1
ì íµíŽ) ìŒì ž ìëì§ ì¬ë¶ì ë°ëŒì íì륌 êž°ë¡í ì§ë¥Œ íëšíë€. ê·ì¹ì ë€ì곌 ê°ë€.
-
íìê°
SECCOMP_RET_ALLOW
ìŽë©Ž ê·ž íì륌 êž°ë¡íì§ ìëë€. -
ê·ž ìž ê²œì°ì, íìê°
SECCOMP_RET_KILL_PROCESS
ëSECCOMP_RET_KILL_THREAD
ìŽë©° íìê°actions_logged
íìŒì ë±ì¥í멎 ê·ž íì륌 êž°ë¡íë€. -
ê·ž ìž ê²œì°ì, íí°ìì êž°ë¡ì ìì²íìŒë©° (
SECCOMP_FILTER_FLAG_LOG
íëê·ž) íìê°actions_logged
íìŒì ë±ì¥í멎 ê·ž íì륌 êž°ë¡íë€. -
ê·ž ìž ê²œì°ì, 컀ë ê°ì¬ êž°ë¥ìŽ ìŒì ž ììŒë©° íë¡ìžì€ë¥Œ ê°ì¬íë ì€ìŽë©Ž (
autrace(8)
) ê·ž íì륌 êž°ë¡íë€. -
ê·ž ìž ê²œì°ìë ê·ž íì륌 êž°ë¡íì§ ìëë€.
ì±ê³µ ì seccomp()
ë 0ì ë°ííë€. ì€ë¥ ì SECCOMP_FILTER_FLAG_TSYNC
륌 ì¬ì©íìŒë©Ž ë°í ê°ì ëêž°í ì€íšë¥Œ ì ë°í ì€ë ëì IDìŽë€. (ìŽ IDë clone(2)ìŽë gettid(2)ê° ë°ííë ì¢
ë¥ì 컀ë ì€ë ë IDìŽë€.) ë€ë¥ž ì€ë¥ ì -1ì ë°ííë©° ì€ë¥ ììžì ëíëŽëë¡ errno
륌 ì€ì íë€.
seccomp()
ê° ë€ì ìŽì ë¡ ì€íší ì ìë€.
EACCES
- ížì¶ìê° ìêž° ì¬ì©ì ë€ìì€íìŽì€ìì
CAP_SYS_ADMIN
ìë¥ì ê°ì§ê³ ìì§ ììŒë©°SECCOMP_SET_MODE_FILTER
ì¬ì© ì ìno_new_privs
륌 ì€ì íì§ ììë€. EFAULT
-
args
ê° ì íší 죌ìê° ìëë€. EINVAL
- ì ì ìë
operation
ìŽê±°ë íì¬ ì»€ë ë²ì ëŽì§ 구ì±ìì ì§ìíì§ ìëë€. EINVAL
- ì§ì í
flags
ê° íŽë¹operation
ìì ì íšíì§ ìë€. EINVAL
-
operation
ìŽBPF_ABS
륌 í¬íšíëë° ì§ì í ì€íì ìŽ 32ë¹íž 겜ê³ì ì ë ¬ëìŽ ìì§ ìê±°ësizeof(struct seccomp_data)
륌 ìŽê³Œíë€. EINVAL
- ìì 컎íší
몚ë륌 ìŽë¯ž ì€ì íìŒë©°
operation
ìŽ êž°ì¡Ž ì€ì 곌 ë€ë¥Žë€. EINVAL
-
operation
ìŽSECCOMP_SET_MODE_FILTER
ìžë°args
ê° ê°ëЬí€ë íí°ê° ì íšíì§ ìê±°ë íí° íë¡ê·žëš êžžìŽê° 0ìŽê±°ëBPF_MAXINSNS
(4096)ê° ìžì€ížëì ì ìŽê³Œíë€. ENOMEM
- ë©ëªšëЬ ë¶ì¡±.
ENOMEM
- ížì¶ ì€ë ëì ë¶ìž íí° íë¡ê·žëšë€ì ìŽ êžžìŽê°
MAX_INSNS_PER_PATH
(32768)ê° ìžì€ížëì ì ëê² ëë€. ì°žê³ ë¡ ìŽ ì íì ê³ì°í ë Ʞ졎 íí° íë¡ê·žëš ê°ê°ìë 4ê° ìžì€ížëì ì© ì€ë²í€ë륌 ëíë€. EOPNOTSUPP
-
operation
ìŽSECCOMP_GET_ACTION_AVAIL
ìžë°args
ë¡ ì§ì í íí° ë°í íì륌 컀ëìŽ ì§ìíì§ ìëë€. ESRCH
- ì€ë ë ëêž°í ì€ì ë€ë¥ž ì€ë ë ë묞ì ì€íšíëë° ê·ž ID륌 ììëŒ ì ìë€.
늬ë
ì€ 3.17ìì seccomp()
ìì€í
ížì¶ìŽ ì²ì ë±ì¥íë€.
seccomp()
ìì€í
ížì¶ì ë¹íì€ ëŠ¬ë
ì€ íì¥ìŽë€.
ìë ìì²ëŒ seccomp íí°ë¥Œ ì§ì ìœë© íë ëì libseccomp
ëŒìŽëžë¬ëŠ¬ë¥Œ ìŽì©í ìë ìë€. seccomp íí° ìì±ì ìí íë¡ ížìë륌 ì ê³µíŽ ì€ë€.
/proc/[pid]/status
íìŒì Seccomp
íë륌 íµíŽ íë¡ìžì€ì seccomp 몚ë륌 볌 ì ìë€. proc(5) ì°žê³ .
seccomp()
ë prctl(2) PR_SET_SECCOMP
ëììŽ ì ê³µíë êž°ë¥(flags
륌 ì§ìíì§ ìì)ì ììì§í©ì ì ê³µíë€.
늬ë
ì€ 4.4ë¶í° ptrace(2) PTRACE_SECCOMP_GET_FILTER
ëìì ìŽì©íŽ íë¡ìžì€ì seccomp íí°ë¥Œ ì»ìŽì¬ ì ìë€.
ë€ì ìí€í ì²ë€ìì seccomp BPF íí°ë§ ìí€í ì² ì§ììŽ ì¬ì© ê°ë¥íë€.
- x86-64, i386, x32 (늬ë ì€ 3.5ë¶í°)
- ARM (늬ë ì€ 3.8ë¶í°)
- s390 (늬ë ì€ 3.8ë¶í°)
- MIPS (늬ë ì€ 3.16ë¶í°)
- ARM-64 (늬ë ì€ 3.19ë¶í°)
- PowerPC (늬ë ì€ 4.3ë¶í°)
- Tile (늬ë ì€ 4.3ë¶í°)
- PA-RISC (늬ë ì€ 4.6ë¶í°)
íë¡ê·žëšì seccomp íí°ë¥Œ ì ì©í ë ê³ ë €íŽìŒ íë ë€ì곌 ê°ì 믞ë¬í ì¬íë€ìŽ ìë€.
-
ëªëª ì íµì ìì€í ížì¶ì ì¬ë¬ ìí€í ì² ììì vdso(7)ì ì¬ì©ì ê³µê° êµ¬íìŽ ìë€. ì ëª í ìë¡ clock_gettime(2), gettimeofday(2), time(2) ë±ìŽ ìë€. ê·žë° ìí€í ì²ìì ìŽë° ìì€í ížì¶ë€ìë seccomp íí°ì íšê³Œê° ìë€. (íì§ë§ vdso(7) 구íìì ì§ì§ ìì€í ížì¶ë¡ ííŽí ì ìë 겜ì°ê° ììŽì ê·žëë seccomp íí°ê° ìì€í ížì¶ì ë³Žê² ëë€.)
-
seccomp íí°ë§ì ìì€í ížì¶ ë²ížë¥Œ êž°ë°ìŒë¡ íë€. íì§ë§ ìŒë°ì ìŒë¡ ìì©ììë ìì€í ížì¶ì ì§ì ë¶ë¥Žë ëì C ëŒìŽëžë¬ëЬ ëíŒ íšì륌 ížì¶íê³ , ê·žë¬ë©Ž ê±°êž°ì ìì€í ížì¶ì ë¶ë¥žë€. ë°ëŒì ë€ìì ìŒëì ëìŽìŒ íë€.
-
ëªëª ì íµì ìì€í ížì¶ë€ì glibc ëíŒìì ì€ì ë¡ë 컀ëì ë€ë¥ž ìŽëŠì ìì€í ížì¶ì ìŽì©í ì ìë€. ì륌 ë€ìŽ exit(2) ëíŒ íšìê° ì€ì ë¡ë exit_group(2) ìì€í ížì¶ì ìŽì©íê³ fork(2) ëíŒ íšìê° ì€ì ë¡ë clone(2)ì ížì¶íë€.
-
ìí€í ì²ìì ì ê³µíë ìì€í ížì¶ì ë°ëŒ ëíŒ íšìì ëì ë°©ììŽ ë¬ëŒì§ ì ìë€. ë€ì ë§íŽ ê°ì ëíŒ íšìê° ë€ë¥ž ìí€í ì²ìì ììŽí ìì€í ížì¶ì ë¶ë¥Œ ìë ìë€.
-
ë§ì§ë§ìŒë¡, glibc ë²ì ì ë°ëŒ ëíŒ íšìì ëì ë°©ììŽ ë¬ëŒì§ ì ìë€. ì륌 ë€ìŽ ìŽì ë²ì ìì open(2)ì glibc ëíŒ íšìë ê°ì ìŽëŠì ìì€í ížì¶ì ë¶ë ì§ë§ glibc 2.26ë¶í°ë 몚ë ìí€í ì²ìì openat(2)ì ížì¶íë ê²ìŒë¡ 구íìŽ ë°ëìë€.
-
ì ì¬íë€ì ê²°ë¡ ì íí°ìì ìì곌 ë€ë¥ž ìì€í ížì¶ì 걞ë¬ìŒ í ìë ìë€ë ê²ìŽë€. 2ë¶ì ì¬ë¬ ë§€ëŽìŒ íìŽì§ìì C ëŒìŽëžë¬ëЬ/컀ë ì°šìŽëŒë ë¶ì ì íµíŽ ëíŒ íšìì êž°ë° ìì€í ížì¶ì ì°šìŽì ëí ì ì©í ì€ëª ì ì ê³µíë€.
ëë¶ìŽ ìì©ìì ìííŽìŒ í ë²í ì ë²í ëìì ëíŽ íí°ê° ìì ìžì ì€íšë¥Œ ì ë°íì¬ seccomp íí° ì ì©ìŽ ìì©ì ë²ê·žë¥Œ ì ë°í ìíë ìë€. ì죌 ëë¬Œê² ì°ìŽë ìì© ìœë 겜ë¡ìì ê·žë° ë²ê·žê° ë°ìíë€ë©Ž seccomp íí° í ì€íž ë ë°ê²¬íêž° ìŽë €ìž ìë ìë€.
seccomp íí°ì íì ë ë€ì곌 ê°ì BPF ìžë¶ ì¬íìŽ ìë€.
-
í¬êž° ììì
BPF_H
ìBPF_B
륌 ì§ìíì§ ìëë€. 몚ë ì°ì°ì (4ë°ìŽíž) ìë(BPF_W
)륌 ì ì¬íê³ ì ì¥íŽìŒ íë€. -
seccomp_data
ë²íŒ ëŽì©ì ì ê·Œíë €ë©Ž 죌ì ì§ì 몚ë ìììBPF_ABS
륌 ì¬ì©í멎 ëë€. -
죌ì ì§ì 몚ë ììì
BPF_LEN
ìŽ ìŠì 몚ë íŒì°ì°ì륌 ëŽëìŒë©° ê·ž ê°ìseccomp_data
ë²íŒì í¬êž°ìŽë€.
ìë íë¡ê·žëšì 4ê° ìŽìì ìžì륌 ë°ëë€. ì²ì ìž ìžìë ìì€í ížì¶ ë²íž, ì«ìë¡ ë ìí€í ì² ìë³ì, ì€ë¥ ë²ížìŽë€. íë¡ê·žëšìŽ ê·ž ê°ë€ì ìŽì©íŽ BPF íí°ë¥Œ ë§ë€ë©Ž ë°íìì ë€ì ê²ì¬ë¥Œ ìííë€.
-
íë¡ê·žëšìŽ ì§ì í ìí€í ì²ìì ëê³ ìì§ ììŒë©Ž BPF íí°ê°
ENOSYS
ì€ë¥ë¡ ìì€í ížì¶ìŽ ì€íšíê² íë€. -
íë¡ê·žëšìŽ ì§ì í ë²ížì ìì€í ížì¶ì ì€ííë €ê³ í멎 BPF íí°ê° ìì€í ížì¶ìŽ ì€íšíê² íê³
errno
륌 ì§ì í ì€ë¥ ë²ížë¡ ì€ì íë€.
ëëšžì§ ëª ë ¹í ìžìë€ì ìì íë¡ê·žëšìŽ execv(3)(ìì€í ížì¶ execve(2)륌 ì¬ì©íë ëŒìŽëžë¬ëЬ íšì)륌 ìŽì©íŽ ì€íì ìëí íë¡ê·žëš 겜ë¡ëª 곌 ì¶ê° ìžììŽë€. ìëì ëª ê°ì§ íë¡ê·žëš ì€í ìê° ìë€.
뚌ì íì¬ ìí€í ì²(x86-64)륌 íìíê³ ìŽ ìí€í ì²ìì ìì€í ížì¶ ë²ížë¥Œ ì°Ÿë ì ž íšì륌 ë§ë ë€.
$ uname -m
x86_64
$ syscall_nr() {
cat /usr/src/linux/arch/x86/syscalls/syscall_64.tbl | \
awk '$2 != "x32" && $3 == "'$1'" { print $1 }'
}
BPF íí°ê° ìì€í ížì¶ì ê±°ë¶í ë (ìì 2ë² ê²œì°) ëª ë ¹íìì ì§ì í ì€ë¥ ë²ížë¡ ìì€í ížì¶ìŽ ì€íšíê² íë€. ìŽ ì€íììë ì€ë¥ ë²íž 99륌 ì¬ì©í ê²ìŽë€.
$ errno 99
EADDRNOTAVAIL 99 Cannot assign requested address
ë€ì ìììë whoami(1)
ëª
ë ¹ ì€íì ìëíë€. íì§ë§ BPF íí°ê° execve(2) ìì€í
ížì¶ì ê±°ë¶íë¯ë¡ ëª
ë ¹ìŽ ì€íì¡°ì°š ëì§ ìëë€.
$ syscall_nr execve
59
$ ./a.out
Usage: ./a.out <syscall_nr> <arch> <errno> <prog> [<args>]
Hint for <arch>: AUDIT_ARCH_I386: 0x40000003
AUDIT_ARCH_X86_64: 0xC000003E
$ ./a.out 59 0xC000003E 99 /bin/whoami
execv: Cannot assign requested address
ê·ž ë€ììë BPF íí°ê° write(2)
ìì€í
ížì¶ì ê±°ë¶íì¬ whoami(1)
ëª
ë ¹ìŽ ì±ê³µì ìŒë¡ ììì íì§ë§ ì¶ë ¥ì ìž ì ìê² íë€.
$ syscall_nr write
1
$ ./a.out 1 0xC000003E 99 /bin/whoami
ë§ì§ë§ ìììë BPF íí°ê° whoami(1)
ëª
ë ¹ìì ì°ì§ ìë ìì€í
ížì¶ì ê±°ë¶íë€. ëª
ë ¹ìŽ ì±ê³µì ìŒë¡ ì€íëê³ ì¶ë ¥ì ëŽëëë€.
$ syscall_nr preadv
295
$ ./a.out 295 0xC000003E 99 /bin/whoami
cecilia
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/audit.h>
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <sys/prctl.h>
#define X32_SYSCALL_BIT 0x40000000
static int
install_filter(int syscall_nr, int t_arch, int f_errno)
{
unsigned int upper_nr_limit = 0xffffffff;
/* AUDIT_ARCH_X86_64ê° ìŒë° x86-64 ABI륌 ë»íë€ê³ ìì
(x32 ABIììë 몚ë ìì€í
ížì¶ì 'nr' íë 30ë² ë¹ížê°
ì€ì ëìŽ ìê³ , ê·žëì ì«ì ê°ìŽ >= X32_SYSCALL_BITì) */
if (t_arch == AUDIT_ARCH_X86_64)
upper_nr_limit = X32_SYSCALL_BIT - 1;
struct sock_filter filter[] = {
/* [0] 'seccomp_data' ë²íŒìì ëì°êž°ë¡ ìí€í
ì² ì ì¬ */
BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
(offsetof(struct seccomp_data, arch))),
/* [1] ìí€í
ì²ê° 't_arch'ì ìŒì¹íì§ ììŒë©Ž 5ê° ìžì€ížëì
íë¡ ì í */
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, t_arch, 0, 5),
/* [2] 'seccomp_data' ë²íŒìì ëì°êž°ë¡ ìì€í
ížì¶ ë²íž
ì ì¬ */
BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
(offsetof(struct seccomp_data, nr))),
/* [3] ABI íìž - x86-64ìì ëžë늬ì€íž ë°©ììŒë¡ ìž ëë§ íì.
syscall ë²íž ì¬ì ì¬ë¥Œ íŒíêž° ìíŽì ë¹íž ë§ì€í¬ë¡
ê²ì¬íë ëì BPF_JGT ì¬ì©. */
BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, upper_nr_limit, 3, 0),
/* [4] ìì€í
ížì¶ ë²ížê° 'syscall_nr'곌 ìŒì¹íì§ ììŒë©Ž
1ê° ìžì€ížëì
íë¡ ì í */
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall_nr, 0, 1),
/* [5] ìí€í
ì²ì ìì€í
ížì¶ ìŒì¹: ìì€í
ížì¶ì ì€ííì§
ë§ê³ 'errno'ë¡ 'f_errno' ë°í */
BPF_STMT(BPF_RET | BPF_K,
SECCOMP_RET_ERRNO | (f_errno & SECCOMP_RET_DATA)),
/* [6] ìì€í
ížì¶ ë²íž ë¶ìŒì¹ ì í 목ì ì§: ë€ë¥ž ìì€í
ížì¶ë€
íì© */
BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),
/* [7] ìí€í
ì² ë¶ìŒì¹ ì í 목ì ì§: íì€í¬ 죜ìŽêž° */
BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_KILL),
};
struct sock_fprog prog = {
.len = (unsigned short) (sizeof(filter) / sizeof(filter[0])),
.filter = filter,
};
if (seccomp(SECCOMP_SET_MODE_FILTER, 0, &prog)) {
perror("seccomp");
return 1;
}
return 0;
}
int
main(int argc, char **argv)
{
if (argc < 5) {
fprintf(stderr, "Usage: "
"%s <syscall_nr> <arch> <errno> <prog> [<args>]\n"
"Hint for <arch>: AUDIT_ARCH_I386: 0x%X\n"
" AUDIT_ARCH_X86_64: 0x%X\n"
"\n", argv[0], AUDIT_ARCH_I386, AUDIT_ARCH_X86_64);
exit(EXIT_FAILURE);
}
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
perror("prctl");
exit(EXIT_FAILURE);
}
if (install_filter(strtol(argv[1], NULL, 0),
strtol(argv[2], NULL, 0),
strtol(argv[3], NULL, 0)))
exit(EXIT_FAILURE);
execv(argv[4], &argv[4]);
perror("execv");
exit(EXIT_FAILURE);
}
bpfc(1)
, strace(1), bpf(2), prctl(2), ptrace(2), sigaction(2), proc(5), signal(7), socket(7)
libseccomp
ëŒìŽëžë¬ëЬìì ìš ì¬ë¬ íìŽì§ë€: scmp_sys_resolver(1)
, seccomp_init(3), seccomp_load(3), seccomp_rule_add(3), seccomp_export_bpf(3)
컀ë ìì€ íìŒ Documentation/networking/filter.txt
ì Documentation/userspace-api/seccomp_filter.rst
(늬ë
ì€ 4.13 ì ìì Documentation/prctl/seccomp_filter.txt
).
McCanne, S. and Jacobson, V. (1992) The BSD Packet Filter: A New Architecture for User-level Packet Capture, Proceedings of the USENIX Winter 1993 Conference (http://www.tcpdump.org/papers/bpf-usenix93.pdf)
2019-03-06