ptrace ãã 100 åéãã·ã¹ãã ã³ã¼ã«ããã¯ä½ã£ã
æ°ããé«æ§è½ã§æ±ç¨çãªã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ãä½ã£ã¦ã¿ã¾ããã
ã¢ããã¼ã·ã§ã³ã¨ãã¦ãã·ã¹ãã ã³ã¼ã«ãããã¯ãã¦ã¦ã¼ã¶ã¼ç©ºéã§ã¨ãã¥ã¬ã¼ãããããªã£ãã®ã§ãããç¾ç¶ãæ§è½ã¨æ±ç¨æ§ã両ç«ããä»çµã¿ããªãããã ã£ãã®ã§ãæ°ããæ¹æ³ãèãã¾ããã
ä»åã®ã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ã¯ä»¥ä¸ã®ãããªç¹å¾´ãããã¾ãã
- ptrace ãã 100 å以ä¸é«é
- LD_PRELOAD ãæ¢åã®ãã¤ããªæ¸ãæããã¼ã«ãã確å®
- ã«ã¼ãã«ã¸ã®å¤æ´ãªãããã¤ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ã使ããªã
- ããã°ã©ã ã®ã½ã¼ã¹ã³ã¼ããããã°ã©ã ã®åã³ã³ãã¤ã«ä¸è¦
eBPF ã§ãã¬ã¼ã·ã³ã°ããã¦ããããã©ãã§ããã°å¶ç´ãå°ãªãã¦ã¼ã¶ã¼ç©ºéã§ãã¬ã¼ã·ã³ã°ãã¼ã«ãä½ãããããããã¯ãgVisor ã®ãããªãµã³ãããã¯ã¹ãä½ãããããã©ãptrace ã«ããæ§è½å£åã大ããã®ã§ãä»ã®é«éãªã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ã使ããããã¨ãããããªå ´åã«å©ç¨ã§ããã¨æãã¾ãã
ä»åã¯ãLinux 㨠x86-64 ã¢ã¼ããã¯ãã£ãæ³å®ãã¦å®è£ ãã¦ã¿ã¾ããã
ã½ã¼ã¹ã³ã¼ã㯠GitHub ã¸ç½®ãã¦ããã®ã§ãããã£ãã試ãã¦ã¿ã¦ãã ããã
以ä¸ã«ãæ°ããä»çµã¿ã®è©³ç´°ãæ¸ãã¦ããã¾ãã
ç¾å¨ãèããããã·ã¹ãã ã³ã¼ã«ããã¯ã®ä½ãæ¹
ã¾ããã·ã¹ãã ã³ã¼ã«ããã¯ãå®è£ ããæ¹æ³ã«ã¤ãã¦ãè²ã æ¤ç´¢ãã¦ã¿ãçµæã以ä¸ã®ãããªï¼ã¤ã®åè£ãè¦ã¤ãã¾ããã
- æ¢åã®ã«ã¼ãã«æ©è½ã使ã ( e.g., ptrace, Syscall User Dispatch (SUD) )
- ã«ã¼ãã«ãå¤æ´ããããããã¯ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ã§ã·ã¹ãã ã³ã¼ã«ãã³ãã©ãæ¸ãæãã*1
- ããã¯ãããããã°ã©ã ã®ã½ã¼ã¹ã³ã¼ããç¬èªã®ã·ã¹ãã ã³ã¼ã«å½ä»¤ãå«ã¾ãªãã©ã¤ãã©ãªã¨ã³ã³ãã¤ã«ãç´ã *2
- LD_PRELOAD ã§ã©ã¤ãã©ãªé¢æ°ãæ¸ãæãã*3
- ãã¤ããªæ¸ãæããã¼ã«ã使ã*4
ä¸è¨ã®æ¹æ³ã®åé¡ç¹
ã§ãããä¸è¨ã®ï¼ã¤ã®æ¹æ³ã¯ãæ§è½ãããã¯æ±ç¨æ§ã«ã¤ãã¦ã®åé¡ãè¦åãããã¾ããã
- æ¢åã®ã«ã¼ãã«æ©è½ï¼ptraceãSUD ã¯ãªã¼ãã¼ãããã大ããï¼æ§è½ï¼
- ã«ã¼ãã«ã®å¤æ´ãã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ï¼é常ã®ç°å¢ã§ä½¿ããªãï¼æ±ç¨æ§ï¼
- ããã°ã©ã ã®åã³ã³ãã¤ã«ï¼ã½ã¼ã¹ã³ã¼ããå¿ ãããæã«å ¥ããªãï¼æ±ç¨æ§ï¼
- LD_PRELOADï¼ã©ã¤ãã©ãªé¢æ°ã§ã©ããããã¦ããªãã·ã¹ãã ã³ã¼ã«ã¯ããã¯ã§ããªãï¼æ±ç¨æ§ï¼
- ãã¤ããªæ¸ãæããã¼ã«ï¼100% ã®æ¸ãæãæåãä¿è¨¼ã§ããªãï¼æ±ç¨æ§ï¼
ãã®ãã¨ãããç¾ç¶ã§ã¯ãæ§è½ã¨æ±ç¨æ§ã両ç«ã§ãããã¦ã¼ã¶ã¼ç©ºéã§ã·ã¹ãã ã³ã¼ã«ããã¯ãå®è£ å¯è½ãªä»çµã¿ã¯ãªãããã§ããã
ä»åèããã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ï¼Zpoline
ä»åèãããZpoline ã¨ããä»çµã¿ã¯ãããã°ã©ã ã®ãã¤ããªãå®è¡åã«ã¡ã¢ãªã«èªã¿è¾¼ã¾ãã段éã§ããã¤ããªæ¸ãæããè¡ãã¾ããã§ãã®ã§ãZpoline ã¯ããã¤ããªæ¸ãæãã«ã«ãã´ã©ã¤ãºããã¾ãããããã°ã©ã ã®ãã¤ããª"ãã¡ã¤ã«"èªä½ã¯ä¸æ¸ããã¾ããã
åæç¥èï¼x86-64 ã§ã®ã·ã¹ãã ã³ã¼ã«
ã·ã¹ãã ã³ã¼ã«ã¯ãã¦ã¼ã¶ã¼ç©ºéã®ããã°ã©ã ããã«ã¼ãã«æ©è½ã¸ã¢ã¯ã»ã¹ããããã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã¦å©ç¨ããã¾ãã
å®è£ ã¨ãã¦ãã¦ã¼ã¶ã¼ç©ºéããã°ã©ã 㯠syscall ããã㯠sysenter ã¨ãã CPU å½ä»¤ãå©ç¨ãããã¨ã§ãã·ã¹ãã ã³ã¼ã«ãçºè¡ã§ãã¾ãã
ã¦ã¼ã¶ã¼ç©ºéããã°ã©ã ã syscall/sysenter å½ä»¤ãå®è¡ããã¨ãå®è¡ã³ã³ããã¹ããã«ã¼ãã«ç©ºéã¸åãæ¿ãããã«ã¼ãã«ãäºãè¨å®ããã·ã¹ãã ã³ã¼ã« ãã³ãã©ã¸å¦çã以éãã¾ãã
å¼åºè¦ç´ ( Calling Convention )
ã·ã¹ãã ã³ã¼ã«ãæ®éã®é¢æ°ã³ã¼ã«ã«ã¯ãå¼åºè¦ç´ã¨å¼ã°ãããå¼ã³åºãã®éã®æ±ºã¾ããè¨å®ããã¦ãã¾ãã
ã·ã¹ãã ã³ã¼ã«ã«ããã¦ã¯ãã¦ã¼ã¶ã¼ç©ºéã®ããã°ã©ã ãã
- ã©ã®ããã«ä»»æã®ã·ã¹ãã ã³ã¼ã«ã®å®è¡ãã«ã¼ãã«ã¸ãªã¯ã¨ã¹ãããã
- ã©ã®ããã«ã·ã¹ãã ã³ã¼ã«ã®å¼æ°ãè¨å®ããã
ã«ã¤ãã¦ã®åã決ãã¨ãªã£ã¦ãã¾ãã
Linux ã® x86-64 CPU ç°å¢ã§ã®ã·ã¹ãã ã³ã¼ã«ã§ã¯ã
- ãªã¯ã¨ã¹ããããã·ã¹ãã ã³ã¼ã«ã®çªå·ã %rax CPU ã¬ã¸ã¹ã¿ã¸å ¥ãããï¼ã·ã¹ãã ã³ã¼ã«ã¨çªå·ã®å¯¾å¿ã¯ãã«ã¼ãã«ã«ãã£ã¦äºãå®ç¾©ããã¦ãã¾ããï¼
- ã·ã¹ãã ã³ã¼ã«ã¸ã®å¼æ°ã¯ã%rdiã%rsiã%rdxã%r10ã%r8ã%r9 CPU ã¬ã¸ã¹ã¿ã®é çªã§å ¥ãã
ã¨ãªã£ã¦ãã¾ãã
解決ããåé¡ï¼ãã¤ããªæ¸ãæãåºæã®åé¡
Zpoline ã¯ãã¤ããªæ¸ãæãã«ãã£ã¦ãã·ã¹ãã ã³ã¼ã«ã®ããã¯ãå®è£ ãã¾ããããã¤ããªæ¸ãæãã®ä»çµã¿ã«ã¯ã100% ã®æ¸ãæãæåãæ ä¿ãããã¨ãé£ããã¨ããåé¡ãããã¾ãã
å ·ä½çãªé£ããã¯ããã CPU å½ä»¤ããããããã大ã㪠CPU å½ä»¤ã¨ç½®ãæãããã¨ããç¹ã«ããã¾ãã
ã¾ããsyscall 㨠sysenter CPU å½ä»¤ã¯ãããããã0x0f 0x05 㨠0x0f 0x34 ã¨ãã 2 byte ã®ãªãã³ã¼ãã§è¡¨ããã¾ãã
ä»åã¯ãããããä»»æã®ã¦ã¼ã¶ã¼ç©ºéã«ããã·ã¹ãã ã³ã¼ã«ããã¯é¢æ°ã¸å¦çãé£ã°ãããã®ãjmp ããã㯠call å½ä»¤ã¨ç½®ãæãããã¨ãç®æãã¾ãã
åé¡ç¹ã¯ãjmp 㨠call å½ä»¤ã¯ã2 byte ã ãã§ã¯ãä»»æã®ããã¯é¢æ°ã¸ã®ã¸ã£ã³ããå®è£ ãããã¨ãé£ããã¨ãããã¨ã«ããã¾ãããªããã¨ããã¨ããããã®å½ä»¤ã¯ãã¸ã£ã³ãã®å®å ã®ã¢ãã¬ã¹ï¼ä»åãªãããã¯é¢æ°ã®ã¢ãã¬ã¹ï¼ãæå®ããå¿ è¦ããããããã«ã¯ 2 byte 以ä¸ãå¿ è¦ã«ãªãããã§ãã
ããã°ã©ã ã®ãã¤ããªã®ä¸ã§ã¯ãsyscall / sysenter å½ä»¤ä»¥éã«ã¯ã次ã®å½ä»¤ãæ¸ãã¦ããã®ã§ãjmp / call å½ä»¤ãã¯ã¿åºãã¨ãããããä¸æ¸ããã¦ãããã°ã©ã ãå£ãã¦ãã¾ããã¨ã«ãªãã¾ããçµæã¨ãã¦ãæ¢åã®ãã¤ããªæ¸ãæããã¼ã«ã§ã¯ã100% ã®æ¸ãæãæåãæ ä¿ãããã¨ãé£ãããªã£ã¦ãã¾ãã
Zpoline ã®ã¢ã¤ãã¢
Zpoline ã®ã¢ã¤ãã¢ã¯ãã·ã¹ãã ã³ã¼ã«ã®å¼åºè¦ç´ããã¾ã使ã£ã¦ãããã«åããã¦ãã¤ããªæ¸ãæããè¡ãããã¤é©åã«ãã©ã³ããªã³ã³ã¼ããç¨æãããã¨ã§ãã
以ä¸ã®å³ã«ãå¤è¦³ã示ãã¾ãã
ãã¤ããªæ¸ãæã
å ·ä½çã«ã¯ãsyscall / sysenter å½ä»¤ã callq *%rax ã¨ãã 0xff 0xd0 ã§è¡¨ããã 2 byte ã®å½ä»¤ã§æ¸ãæãã¾ããããã§ã大äºãªãã¤ã³ãã¯ãcallq *%rax 㯠syscall / sysenter å½ä»¤ã¨åã 2 byte ãªã®ã§ãä»ã®ç®æã«å½±é¿ãä¸ããã«ãåç´ã«ç½®ãæãããã¨ãã§ãã¾ãã
ãã¦ãcallq *%rax ãä½ãããã®ãã¨ããã¨ã%rax CPU ã¬ã¸ã¹ã¿ã¸å ¥ã£ãå¤ãå®å ã¢ãã¬ã¹ã¨ãã¦ãã¸ã£ã³ããã¾ããã¾ããcallq 㯠call ç³»åã®å½ä»¤ãªã®ã§ãã¸ã£ã³ãå ã®ã¢ãã¬ã¹ã¯ã¹ã¿ãã¯ã¸ push ãã¾ãã
ããã§ãã·ã¹ãã ã³ã¼ã«ã®å¼åºè¦ç´ã使ãã¾ããåè¿°ã®éããLinux ã®å¼åºè¦ç´ã§ã¯ã%rax ã¸ã¯ãã·ã¹ãã ã³ã¼ã«çªå·ãå ¥ã£ã¦ãã¾ããã·ã¹ãã ã³ã¼ã«çªå·ã¯ãã«ã¼ãã«ã®å®ç¾©ã«ãã£ã¦ã0 ããå§ã¾ã 400~500 ç¨åº¦ã¾ã§ã«åã¾ãæ°ãªã®ã§ãcallq *%rax ãé£ã¶å®å ã¢ãã¬ã¹ã¯å¿ ã 0 ~ 500 ç¨åº¦ã«ãªãã¾ãã
Zpoline ã§ã¯ããã®ã¢ãã¬ã¹ 0 ~ 500 ã®å«ã¾ããé åã«ãã©ã³ããªã³ã³ã¼ããç¨æããä»»æã®ã·ã¹ãã ã³ã¼ã«ããã¯é¢æ°ã¸ã®ã¸ã£ã³ããå®è£ ãã¾ããZpoline ã®ååã¯ãtramPOLINE code ãã¢ãã¬ã¹ 0 ( Zero ) ã«è¨å®ãããã¨ããæ¥ã¦ãã¾ãã
ãã©ã³ããªã³ã³ã¼ã
ãã©ã³ããªã³ã³ã¼ãã®ç¨æã¯ãmmap ã·ã¹ãã ã³ã¼ã« ã使ã£ã¦ãã¡ã¢ãªãã¢ãã¬ã¹ 0 ã«ç¢ºä¿ãããã¨ããå§ã¾ãã¾ããLinux ã§ã¯ãããã©ã«ãã§ã¯ãã¢ãã¬ã¹ 0 㯠mmap ã§ããªãããã«ãªã£ã¦ãã¾ããã/proc/sys/vm/mmap_min_addr ã« 0 ãè¨å®ããã¨ãé常ã¦ã¼ã¶ã¼ã§ãã¢ãã¬ã¹ 0 ã«ã¡ã¢ãªããããã§ããããã«ãªãã¾ãã
次ã«ãã¢ãã¬ã¹ 0 ããæ大ã®ã·ã¹ãã ã³ã¼ã«çªå·ã¾ã§ã nop å½ä»¤ ( 0x90 ) ã§åãã¾ãããã®å¾ãæå¾ã® nop å½ä»¤ã®æ¬¡ã«ãä»»æã®ã·ã¹ãã ã³ã¼ã«ããã¯é¢æ°ã¸ã¸ã£ã³ãããããã®ã³ã¼ããåãè¾¼ã¿ã¾ãã
ãã®çµæãsyscall / sysenter ãç½®ãæãã callq *%rax ã¯ããã©ã³ããªã³ã³ã¼ãã®ä¸ã® nop å½ä»¤ã®ã©ããã¸ã®ã¸ã£ã³ãã«ãªãã¾ããnop å½ä»¤ã«é£ãã å¾ã¯ãã·ã¹ãã ã³ã¼ã« ããã¯ã¸ã®ã¸ã£ã³ãã®ã³ã¼ãã¸è¡ãçãã¾ã§ãç¶ã nop å½ä»¤ãå®è¡ãã¾ãã
ããã«ãããä»»æã®ããã¯é¢æ°ã¸ã®ã¸ã£ã³ããå®è£ ã§ãã¾ããã
ã¾ããcallq *%rax ã®å¼ã³åºãå ã®ã¢ãã¬ã¹ã¯ãcallq å½ä»¤ã®ãããã§ã¹ã¿ãã¯ã«ä¿åããã¦ããã®ã§ãããã¯é¢æ°ã® return 㯠callq *%rax ã®å¼ã³åºãå ã¸ã® return ã«ãªãã¾ãã
å®è£
Zpoline 㧠LD_PRELOAD ã§ãã¼ãããããã¨ãæ³å®ããã©ã¤ãã©ãªã¨ãã¦å®è£ ããã¦ãããããã°ã©ã ã® main é¢æ°ãå®è¡ããå§ããåã«ããã©ã³ããªã³ã³ã¼ãã¨ãã¤ããªæ¸ãæããè¡ãã¾ããããã«ãããZpoline ã¯ã©ããªããã°ã©ã ã«å¯¾ãã¦ãã·ã¹ãã ã³ã¼ã«ããã¯ãé©ç¨ã§ãã¾ããLD_PREALOD ã使ã£ã¦ãã¾ãããæ¢åã®ä»çµã¿ã®ããã«ãã©ã¤ãã©ãªé¢æ°ã®æ¸ãæãã¯è¡ãã¾ããã
ç¬èªã®ã·ã¹ãã ã³ã¼ã«ããã¯ã¯ãLD_PRELOAD ã§ãã¼ããããã©ã¤ãã©ãªã®ä¸ã«å®è£ ãããã¨ãã§ãã¾ãã
ï¼ç¹ãæ¢åã®ãã¤ããªæ¸ãæãã®ä»çµã¿ããSyscall User Dispatch ã¨åæ§ã«ãããã¯ãé©ç¨ãã対象ã®ããã°ã©ã ãå¼ã³åºãå¯è½æ§ã®ããé¢æ°ããããã¯ããå¼ã³åºãå ´åã«ã¯æ³¨æãå¿ è¦ã§ããä¾ãã°ãfunction_A ã¨ããé¢æ°ããããå é¨ã®å®è£ ããããã¯ã確ä¿ããããã·ã¹ãã ã³ã¼ã«ãå®è¡ããã®å¾ãããã¯ãéæ¾ãããã¨ãã¾ããä»®ã«ãããã¯é©ç¨å¯¾è±¡ã®ããã°ã©ã ã function_A ãå¼ã³åºãã¨ããã®ä¸ã®ã·ã¹ãã ã³ã¼ã«ã¯ãZpoline ã«ãã£ã¦ããã¯ããã¾ããåé¡ã¯ãããã¯ã function_A ãå¼ã³åºãã¨ããããããã¯ãçºçãã¾ãããªããªããæåã«å¼ã³åºããã function_A ã®ä¸ã§ãããã¯ããªãªã¼ã¹ããã¦ããªãããã§ãã
ãã®ãããªåé¡ã«ã¤ãã¦ã¯ãããã¯é¢æ°ãå©ç¨ãããªã½ã¼ã¹ããããã¯é©ç¨å¯¾è±¡ã®ããã°ã©ã ã¨åãããã¨ã§ãåé¿ã§ãã¾ããä»å¾ãããã¯é¢æ°ã®å®è£ ã«å½¹ã«ç«ã¡ãããªå®è£ ã追å ããäºå®ã§ãã¾ãã
å¶ç´
Zpoline ã®é©ç¨ã«ã¯ã以ä¸ã®äºã¤ã®å¶ç´ãããã¾ãã
- ã·ã¹ãã ã³ã¼ã«ã®å¼åºè¦ç´ããCPU ã¬ã¸ã¹ã¿ã®ã©ããã«ã決ã¾ã£ãç¯å²ã®ã·ã¹ãã ã³ã¼ã«çªå·ãè¨å®ãããã®ã§ãããã¨
- ã¡ã¢ãªã¢ãã¬ã¹ 0 ãå©ç¨å¯è½ã§ãããã¨ãé常ããã®é åã¯å©ç¨ããã¦ãããã競åãããã¨ã¯å°ãªããã¨æã£ã¦ãã¾ãã
æ§è½
ç°¡åã«ãZpoline ãå©ç¨ãã¦ä½ã£ãã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ã ptrace 㨠Syscall User Dispatch ã¨æ¯è¼ãã¦ã¿ã¾ããã
ã¨ã¦ãåç´ãªãããã»ã¹ã® pid ãåå¾ãã getpid ããã©ãããã¦ã代ããã«ã·ã¹ãã ã³ã¼ã«ãå®è¡ããããã«å¿ è¦ãª CPU ãµã¤ã¯ã«ãè¨æ¸¬ãã¾ãããããã«ãpid ããã£ãã·ã¥ãã¦ãå®éã«ã¯ getpid ã·ã¹ãã ã³ã¼ã«ãå®è¡ããªãã§ããã£ãã·ã¥ããå¤ãè¿ãã¨ãã¥ã¬ã¼ã·ã§ã³ãå®è£ ãã¦ãåæ§ã« CPU ãµã¤ã¯ã«ãè¨æ¸¬ãã¾ãããè¨æ¸¬ã«ã¯ãIntel Xeon E5-2640 v3 CPU 2.60 GHz 㨠Linux-5.11 ( Ubuntu 20.04 ) ãå©ç¨ãã¾ããã
以ä¸ãè¨æ¸¬çµæã§ãã
Hook Mechanism | without pid cache | with pid cache |
---|---|---|
ptrace | 17820 | 16403 |
Syscall User Dispatch | 5957 | 4563 |
Zpoline | 1459 | 138 |
Zpoline 㯠ptrace 㨠Syscall User Dispatch ãããé¥ãã«å°ãªã CPU ãµã¤ã¯ã«ã§ã·ã¹ãã ã³ã¼ã«ãããã¯ã§ãããã¨ããããã¾ããã
ç¹ã«ãã·ã¹ãã ã³ã¼ã«ããã¯èªä½ã®ãªã¼ãã¼ãããã¯ãgetpid ã·ã¹ãã ã³ã¼ã«ã®ãªã¼ãã¼ããããå«ã¾ããªã with pid cache ã®ã±ã¼ã¹ã«è¦ããã¨ãã§ãã¾ããä»åã®ç°å¢ã§ã¯ãZpoline 㯠ptrace ãã 118 åé«éã§ããã¨ããçµæã«ãªãã¾ããã
ã¾ã¨ã
ptrace ããã 100 å以ä¸é«éã§ãLD_PRELOAD ãæ¢åã®ãã¤ããªæ¸ãæããã¼ã«ãã確å®ããã¤ãã«ã¼ãã«ã¸ã®å¤æ´ããããã°ã©ã ã®ã½ã¼ã¹ã³ã¼ããå¿ è¦ãªã Zpoline ã¨ããã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ãèãã¾ããã
å®è£ ã®è©³ç´°ã¯ãGitHub ä¸ã®ã½ã¼ã¹ã³ã¼ããè¦ã¦ã¿ã¦ãã ããã
ãã®ä»ã®èããããæ¹æ³
ã·ã¹ãã ã³ã¼ã«ããã¯ã®ä»çµã¿ãæ¢ãã¦ããã¨ãã«ãä»ã«ãããã¤ãåè£ãããã¾ãããã以ä¸ã®ãããªçç±ã§ãä»åã®ãããªä»çµã¿ã«ãªãã¾ããã
- KVM ã¯ãã¼ããã¼ãã¼ã¨ãå°ãªãã¨ãå°ããªã«ã¼ãã«ãå¿ è¦ã§ä½¿ãåæãæªã
- Dune ã¯ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ãªã®ã§ãã«ã¼ãã«èªä½ã®ãã¼ã¸ã§ã³ã«ãã£ã¦ API ãæ§é ä½ã®å®£è¨ãå¤ãã£ã¦ããã®ãã¨ãããã¤ã³ã¹ãã¼ã«ã§ããã«ã¼ãã«ã®ãã¼ã¸ã§ã³ãéããã
- seccomp-bpf ã§ã¦ã¼ã¶ã¼ç©ºéããã·ã¹ãã ã³ã¼ã«å¼ã³åºãæã®æåãæä½ããã«ã¯ãptrace ã¨ã®çµã¿åãããå¿ è¦