āĻŦāĻžāĻ°ā§āĻāĻ˛ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° (āĻŦāĻŋāĻĒāĻŋāĻāĻĢ) āĻšāĻ˛ āĻāĻāĻāĻŋ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¯āĻž āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻ āĻŦāĻāĻ° āĻ§āĻ°ā§ āĻāĻāĻ°ā§āĻāĻŋ āĻāĻžāĻˇāĻžāĻ° āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻĒā§āĻ°āĻāĻžāĻļāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻžāĻ¤āĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ¸āĻŽā§āĻŽā§āĻ˛āĻ¨āĻā§āĻ˛āĻŋ BPF-āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻŦāĻ āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨ā§ āĻĒā§āĻ°ā§āĻŖāĨ¤ āĻĄā§āĻāĻŋāĻĄ āĻŽāĻŋāĻ˛āĻžāĻ°, āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ°āĻā§āĻˇāĻŖāĻžāĻŦā§āĻā§āĻˇāĻŖāĻāĻžāĻ°ā§, āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻĒā§āĻ˛āĻžāĻŽā§āĻŦāĻžāĻ°āĻ¸ 2018 āĻ āĻ¤āĻžāĻ° āĻŦāĻā§āĻ¤ā§āĻ¤āĻž āĻāĻ˛ āĻāĻ°ā§āĻā§āĻ¨
HabrÊ-āĻ BPF-āĻāĻ° āĻāĻāĻ¨āĻ āĻā§āĻ¨āĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻ¤ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ¨ā§āĻ, āĻāĻŦāĻ āĻ¸ā§āĻāĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ°āĻŋāĻā§ āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦ, āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ āĻāĻŦāĻ āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ āĻāĻŦāĻ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻ āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ° āĻ°ā§āĻĒāĻ°ā§āĻāĻž āĻĻā§āĻŦāĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ, āĻļā§āĻ¨ā§āĻ¯, āĻ¸āĻŋāĻ°āĻŋāĻā§, āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻāĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ āĻāĻŦāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯āĻā§ āĻŦāĻ˛ā§, āĻāĻŦāĻ āĻāĻ° āĻ
āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĨ¤ tcpdump
, seccomp
, strace
, āĻāĻŦāĻ āĻāĻ°ā§ āĻ
āĻ¨ā§āĻ āĻāĻŋāĻā§.
BPF āĻāĻ° āĻŦāĻŋāĻāĻžāĻļ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ, BPF āĻāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻāĻŦāĻ āĻ¤āĻžāĻ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻ¸āĻš
BPF āĻāĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻā§āĻ°ā§āĻ¸ (c)
āĻāĻ§ā§āĻ¨āĻŋāĻ BPF āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻšāĻ˛ āĻāĻāĻ āĻ¨āĻžāĻŽā§āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻŦāĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ, āĻāĻāĻ¨ āĻŦāĻŋāĻā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋ āĻāĻĄāĻŧāĻžāĻ¤ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ tcpdump
, āĻĒāĻĻā§āĻ§āĻ¤āĻŋ seccomp
, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻāĻŽ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻŽāĻĄāĻŋāĻāĻ˛ xt_bpf
āĻĨā§āĻā§ iptables
āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° cls_bpf
. āĻāĻ§ā§āĻ¨āĻŋāĻ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§, āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻ°ā§āĻŽā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§, āĻāĻĒāĻŋāĻāĻ āĻ°āĻ¯āĻŧā§ āĻā§āĻā§ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¤ā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°, āĻ¯ā§āĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻĻā§āĻāĻŦ, āĻāĻāĻ¨āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻā§āĻā§āĨ¤ āĻāĻ āĻāĻžāĻ°āĻŖā§, āĻāĻŦāĻ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻ§ā§āĻ°ā§āĻĒāĻĻā§ BPF-āĻāĻ° āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ āĻ
āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻāĻžāĻ°āĻŖā§, āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻŦāĻ āĻā§āĻ¨ āĻāĻāĻŋāĻ° āĻāĻ§ā§āĻ¨āĻŋāĻ āĻāĻāĻžāĻ°ā§ āĻŦāĻŋāĻāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¤āĻž āĻāĻ°āĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻŦā§, āĻāĻŽāĻŋ āĻļāĻžāĻ¸ā§āĻ¤ā§āĻ°ā§āĻ¯āĻŧ BPF āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻ¤ āĻļāĻ¤āĻžāĻŦā§āĻĻā§āĻ° āĻāĻļāĻŋāĻ° āĻĻāĻļāĻā§āĻ° āĻļā§āĻˇā§āĻ° āĻĻāĻŋāĻā§, āĻŦāĻŋāĻā§āĻ¯āĻžāĻ¤ āĻ˛āĻ°ā§āĻ¨ā§āĻ¸ āĻŦāĻžāĻ°ā§āĻāĻ˛ā§ āĻ˛ā§āĻ¯āĻžāĻŦāĻ°ā§āĻāĻ°āĻŋāĻ° āĻĒā§āĻ°āĻā§āĻļāĻ˛ā§āĻ°āĻž āĻāĻ¤ āĻļāĻ¤āĻžāĻŦā§āĻĻā§āĻ° āĻāĻļāĻŋāĻ° āĻĻāĻļāĻā§āĻ° āĻļā§āĻˇā§āĻ° āĻĻāĻŋāĻā§ āĻāĻ§ā§āĻ¨āĻŋāĻ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§āĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋāĻā§ āĻā§āĻāĻžāĻŦā§ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§āĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§ āĻāĻā§āĻ°āĻšā§ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻ¨āĨ¤ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ§āĻžāĻ°āĻŖāĻž, āĻŽā§āĻ˛āĻ¤ āĻ¸āĻŋāĻāĻ¸āĻĒāĻŋāĻāĻĢ (āĻ¸āĻŋāĻāĻŽāĻāĻ/āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨āĻĢā§āĻ°ā§āĻĄ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°) āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻ¯āĻ¤ āĻ¤āĻžāĻĄāĻŧāĻžāĻ¤āĻžāĻĄāĻŧāĻŋ āĻ¸āĻŽā§āĻāĻŦ āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻž āĻāĻŋāĻ˛, āĻ¯ā§āĻŽāĻ¨ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸ā§āĻĒā§āĻ¸ā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĄā§āĻāĻž āĻ āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°āĻž āĻāĻĄāĻŧāĻžāĻ¯āĻŧāĨ¤ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸ā§āĻĒā§āĻ¸ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻžāĻ¨āĻāĻžāĻāĻŽ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻ¤ā§, āĻāĻāĻāĻŋ āĻ¸ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŦāĻā§āĻ¸āĻ¯ā§āĻā§āĻ¤ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻ¯āĻžāĻāĻšā§āĻ, āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨āĻā§āĻ˛āĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻ¨āĻ¤ā§āĻ¨ RISC āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ¤āĻ¤āĻāĻž āĻĻāĻā§āĻˇāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŦāĻžāĻ°ā§āĻāĻ˛ā§ āĻ˛ā§āĻ¯āĻžāĻŦāĻ¸ā§āĻ° āĻĒā§āĻ°āĻā§āĻļāĻ˛ā§āĻĻā§āĻ° āĻĒā§āĻ°āĻā§āĻˇā§āĻāĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§, āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ (āĻŦāĻžāĻ°ā§āĻāĻ˛ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°) āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻ¯āĻžāĻ° āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°āĻāĻŋ āĻŽāĻā§āĻ°ā§āĻ˛āĻž 6502 āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ - āĻ¯ā§āĻŽāĻ¨ āĻ¸ā§āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻĒāĻŖā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻšāĻ°āĻ¸āĨ¤
āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻžāĻā§āĻ° āĻāĻĒāĻžāĻ¯āĻŧā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻŦ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻļā§āĻ°ā§āĻ¤ā§, āĻāĻ¸ā§āĻ¨ āĻŦāĻ˛āĻŋ āĻ¯ā§ āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋāĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸āĻ¯ā§āĻā§āĻ¯ āĻĻā§āĻāĻŋ 32-āĻŦāĻŋāĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° āĻāĻŋāĻ˛, āĻāĻāĻāĻŋ āĻ¸āĻā§āĻāĻ¯āĻŧāĻāĻžāĻ°ā§ A
āĻāĻŦāĻ āĻāĻ¨āĻĄā§āĻā§āĻ¸ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° X
, 64 āĻŦāĻžāĻāĻ āĻŽā§āĻŽāĻ°āĻŋ (16 āĻļāĻŦā§āĻĻ), āĻ˛ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŦāĻ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ˛āĻŦā§āĻ§, āĻāĻŦāĻ āĻāĻ āĻŦāĻ¸ā§āĻ¤ā§āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĨ¤ āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻŽā§āĻĒ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ¤ā§āĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻāĻŋāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻŽāĻ¤ā§ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋāĻ° āĻā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻāĻŋ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻžāĻŽā§āĻĒāĻā§āĻ˛āĻŋ āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŋāĻ¯āĻŧā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ
āĻ°ā§āĻĨāĻžā§, āĻŦāĻŋāĻļā§āĻˇāĻ¤, āĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻāĻŋāĻ˛āĨ¤
āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻāĻŋāĻŽāĻāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§āĻĒāĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ BPF āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŋāĻā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽā§āĻāĻžāĻ¨āĻŋāĻāĻŽ (āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛), āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻ˛ā§āĻĄ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻŋāĻā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻāĻā§āĻ¨ā§āĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻāĻā§āĻ¨ā§āĻ āĻšāĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ°ā§āĻĄā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻāĻāĻŽāĻ¨)āĨ¤ āĻāĻāĻāĻŋ āĻāĻāĻ¨āĻž āĻāĻāĻ˛ā§, āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¯āĻŧ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻĻā§āĻāĻžāĻˇā§āĻ¤ā§), āĻāĻŦāĻ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻŽā§āĻŽāĻ°āĻŋ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛ā§ āĻ¯āĻžāĻ¯āĻŧ āĻāĻŋāĻā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽā§āĻŽāĻ°āĻŋ āĻ āĻā§āĻāĻ˛ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻāĻ¨āĻāĻžāĻŽāĻŋāĻ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻĄā§āĻāĻž)āĨ¤
āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻĨā§āĻˇā§āĻ āĻšāĻŦā§: āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻŦāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻŦāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ
āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻāĻŦāĻ āĻāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻžāĻ¨āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻŽā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ libpcap
: āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻāĻŦāĻ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋlibpcap
.
āĻāĻŽāĻ°āĻž āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ: tcpdump
(libpcap
), seccomp, xt_bpf
, cls_bpf
.
tcpdump
āĻŦāĻŋāĻĒāĻŋāĻāĻĢā§āĻ° āĻŦāĻŋāĻāĻžāĻļ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄā§āĻ° āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ - āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ tcpdump
. āĻāĻŦāĻ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻ
āĻ¨ā§āĻ āĻ
āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻžāĻā§āĻ¨āĻ¤āĻŽ āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŦāĻŋāĻā§āĻ¯āĻžāĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻŦāĨ¤
(āĻāĻŽāĻŋ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§āĻāĻŋ 5.6.0-rc6
. āĻāĻžāĻ˛ āĻĒāĻ āĻ¨āĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻāĻāĻĒā§āĻ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤)
āĻāĻĻāĻžāĻšāĻ°āĻŖ: IPv6 āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ āĻāĻ°āĻž
āĻāĻ¸ā§āĻ¨ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻŋ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ IPv6 āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĻā§āĻāĻ¤ā§ āĻāĻžāĻ eth0
. āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ tcpdump
āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¸āĻš ip6
:
$ sudo tcpdump -i eth0 ip6
āĻāĻāĻāĻžāĻŦā§ tcpdump
āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°ā§ ip6
BPF āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻŦāĻžāĻāĻāĻā§āĻĄā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻĒāĻžāĻ āĻžāĻ¨ (āĻŦāĻŋāĻāĻžāĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĻā§āĻā§āĻ¨ eth0
. āĻ¯āĻĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻ
-āĻļā§āĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ n
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ n
āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻŦāĻžāĻāĻ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻāĻĒāĻŋ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻāĻāĻĒā§āĻā§ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦ tcpdump
.
āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻā§āĻ¨ āĻŦāĻžāĻāĻāĻā§āĻĄ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§ āĻ¤āĻž āĻāĻŽāĻ°āĻž āĻ¸āĻšāĻā§āĻ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ tcpdump
āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ tcpdump
, āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻ
āĻĒāĻļāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻžāĻ˛āĻžāĻ -d
:
$ sudo tcpdump -i eth0 -d ip6
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 3
(002) ret #262144
(003) ret #0
āĻļā§āĻ¨ā§āĻ¯ āĻ˛āĻžāĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ ldh [12]
, āĻ¯āĻžāĻ° āĻ
āĻ°ā§āĻĨ āĻšāĻ˛ âāĻ˛ā§āĻĄ āĻāĻ¨ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° A
āĻ
āĻ°ā§āĻ§ā§āĻ āĻļāĻŦā§āĻĻ (16 āĻŦāĻŋāĻ) āĻ āĻŋāĻāĻžāĻ¨āĻž 12" āĻ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŦāĻ āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ°āĻļā§āĻ¨ āĻšāĻ˛ āĻāĻŽāĻ°āĻž āĻā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° āĻŽā§āĻŽāĻ°āĻŋāĻā§ āĻ¸āĻŽā§āĻŦā§āĻ§āĻ¨ āĻāĻ°āĻāĻŋ? āĻāĻ¤ā§āĻ¤āĻ° āĻšāĻ˛ āĻ¯ā§ āĻ x
āĻļā§āĻ°ā§ (x+1)
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŋāĻ¤ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ¤āĻŽ āĻŦāĻžāĻāĻāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻĨāĻžāĻ°āĻ¨ā§āĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĨā§āĻā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒāĻĄāĻŧāĻŋ eth0
āĻāĻŦāĻ āĻāĻ
6 6 2
|Destination MAC|Source MAC|Ether Type|...|
āĻ¤āĻžāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ° ldh [12]
āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ A
āĻāĻāĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻšāĻŦā§ Ether Type
â āĻāĻ āĻāĻĨāĻžāĻ°āĻ¨ā§āĻ āĻĢā§āĻ°ā§āĻŽā§ āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ§āĻ°āĻ¨āĨ¤ āĻ˛āĻžāĻāĻ¨ 1 āĻ āĻāĻŽāĻ°āĻž āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋ A
(āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ§āĻ°āĻ¨) āĻ 0x86dd
āĻāĻŦāĻ āĻāĻ jt 2
и jf 3
â āĻ¤ā§āĻ˛āĻ¨āĻž āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§ āĻ¯ā§ āĻāĻŋāĻšā§āĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§ (A == 0x86dd
) āĻāĻŦāĻ āĻ
āĻ¸āĻĢāĻ˛āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻāĻāĻŋ āĻ¸āĻĢāĻ˛ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ (IPv6) āĻāĻŽāĻ°āĻž āĻ˛āĻžāĻāĻ¨ 2 āĻ āĻ¯āĻžāĻ, āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ
āĻ¸āĻĢāĻ˛ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ - āĻ˛āĻžāĻāĻ¨ 3 āĻāĨ¤ āĻ˛āĻžāĻāĻ¨ 3 āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻā§āĻĄ 0 āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻˇ āĻšāĻ¯āĻŧ (āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻ
āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž), āĻ˛āĻžāĻāĻ¨ 2-āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻˇ āĻšāĻ¯āĻŧāĨ¤ 262144 (āĻāĻŽāĻžāĻā§ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ 256 āĻāĻŋāĻ˛ā§āĻŦāĻžāĻāĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ
āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°ā§āĻ¨)āĨ¤
āĻāĻāĻāĻŋ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻāĻĻāĻžāĻšāĻ°āĻŖ: āĻāĻŽāĻ°āĻž āĻāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§āĻ°ā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž TCP āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻŋ
āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĻā§āĻāĻ¤ā§ āĻā§āĻŽāĻ¨ āĻ¤āĻž āĻāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§āĻ°ā§āĻ 666 āĻ¸āĻš āĻ¸āĻŽāĻ¸ā§āĻ¤ TCP āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻĒāĻŋ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ°āĻž IPv4 āĻā§āĻ¸āĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŦ, āĻ¯ā§āĻšā§āĻ¤ā§ IPv6 āĻā§āĻ¸āĻāĻŋ āĻ¸āĻšāĻāĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻžāĻ¯āĻŧāĻžāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§ IPv6 āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¨āĻŋāĻā§āĻā§ āĻ
āĻ¨ā§āĻŦā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (ip6 and tcp dst port 666
) āĻāĻŦāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° (tcp dst port 666
) āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻ¯ā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋāĻ¤ā§ āĻāĻā§āĻ°āĻšā§ āĻ¤āĻž āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻā§āĻā§:
$ sudo tcpdump -i eth0 -d ip and tcp dst port 666
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 10
(002) ldb [23]
(003) jeq #0x6 jt 4 jf 10
(004) ldh [20]
(005) jset #0x1fff jt 10 jf 6
(006) ldxb 4*([14]&0xf)
(007) ldh [x + 16]
(008) jeq #0x29a jt 9 jf 10
(009) ret #262144
(010) ret #0
āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻžāĻ¨āĻŋ āĻ˛āĻžāĻāĻ¨ 0 āĻāĻŦāĻ 1 āĻāĻŋ āĻāĻ°ā§āĨ¤ āĻ˛āĻžāĻāĻ¨ 2-āĻ āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻāĻŋ āĻ¯ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ IPv4 āĻĒā§āĻ¯āĻžāĻā§āĻ (āĻāĻĨāĻžāĻ° āĻĒā§āĻ°āĻāĻžāĻ° = 0x800
) āĻāĻŦāĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨ A
āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° 24 āĻ¤āĻŽ āĻŦāĻžāĻāĻāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻā§āĻā§
14 8 1 1
|ethernet header|ip fields|ttl|protocol|...|
āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ A
āĻāĻāĻĒāĻŋ āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻā§āĻˇā§āĻ¤ā§āĻ°, āĻ¯āĻž āĻ¯ā§āĻā§āĻ¤āĻŋāĻ, āĻāĻžāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° TCP āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻĒāĻŋ āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĨ¤ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋ 0x6
(IPPROTO_TCP
āĻ˛āĻžāĻāĻ¨ 4 āĻāĻŦāĻ 5 āĻ āĻāĻŽāĻ°āĻž āĻ āĻŋāĻāĻžāĻ¨āĻž 20 āĻ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻžāĻĢāĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ jset
āĻ¤āĻŋāĻ¨āĻāĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻāĻ°āĻž āĻāĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨ jset
āĻ¤āĻŋāĻ¨āĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻ āĻ¸āĻžāĻĢ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŦāĻŋāĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĻā§āĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦāĻ˛ā§ āĻ¯ā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŖā§āĻĄāĻŋāĻ¤ āĻāĻāĻĒāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ
āĻāĻļ āĻāĻŋāĻ¨āĻž āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻļā§āĻˇ āĻāĻŖā§āĻĄ āĻāĻŋāĻ¨āĻžāĨ¤ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻŦāĻŋāĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻŦāĻ āĻļā§āĻ¨ā§āĻ¯ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻŽāĻ°āĻž āĻ
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻž āĻāĻžāĻāĻž āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŦāĻŋāĻ āĻā§āĻ āĻāĻ°āĻŋāĨ¤
āĻ˛āĻžāĻāĻ¨ 6 āĻāĻ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ. āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ ldxb 4*([14]&0xf)
āĻŽāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ X
āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻĒāĻā§āĻāĻĻāĻļ āĻŦāĻžāĻāĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ¤āĻžā§āĻĒāĻ°ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻ°āĻāĻŋ āĻŦāĻŋāĻāĻā§ 4 āĻĻā§āĻŦāĻžāĻ°āĻž āĻā§āĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒāĻā§āĻāĻĻāĻļ āĻŦāĻžāĻāĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻāĻžāĻ°āĻāĻŋ āĻŦāĻŋāĻ āĻšāĻ˛ āĻā§āĻˇā§āĻ¤ā§āĻ° 4*([14]&0xf)
āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻ
ā§āĻ¯āĻžāĻĄā§āĻ°ā§āĻ¸āĻŋāĻ āĻ¸ā§āĻāĻŋāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻĒāĻžāĻ§āĻŋ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻĢāĻ°ā§āĻŽā§ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ X
, āĻ
āĻ°ā§āĻĨāĻžā§ āĻāĻŽāĻ°āĻžāĻ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž ldb 4*([14]&0xf)
āĻ
āĻĨāĻŦāĻž ldxb 5*([14]&0xf)
(āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻ
āĻĢāĻ¸ā§āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, ldxb 4*([16]&0xf)
) āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻāĻ āĻ
ā§āĻ¯āĻžāĻĄā§āĻ°ā§āĻ¸āĻŋāĻ āĻ¸ā§āĻāĻŋāĻŽāĻāĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻŦāĻŋāĻāĻ˛ BPF-āĻ¤ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ X
(āĻāĻ¨āĻĄā§āĻā§āĻ¸ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°) IPv4 āĻšā§āĻĄāĻžāĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯āĨ¤
āĻ¤āĻžāĻ āĻ˛āĻžāĻāĻ¨ 7 āĻ āĻāĻŽāĻ°āĻž āĻ
āĻ°ā§āĻ§ā§āĻ āĻļāĻŦā§āĻĻ āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ (X+16)
. āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ 14 āĻŦāĻžāĻāĻ āĻāĻĨāĻžāĻ°āĻ¨ā§āĻ āĻšā§āĻĄāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĻāĻāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻŦāĻ X
IPv4 āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻŽāĻ°āĻž āĻŦā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ A
TCP āĻāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§āĻ°ā§āĻ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
14 X 2 2
|ethernet header|ip header|source port|destination port|
āĻ āĻŦāĻļā§āĻˇā§, 8 āĻ˛āĻžāĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻŽāĻžāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋ āĻāĻŦāĻ 9 āĻŦāĻž 10 āĻ˛āĻžāĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ - āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻ āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°āĻž āĻšā§āĻ āĻŦāĻž āĻ¨āĻž āĻšā§āĻāĨ¤
Tcpdump: āĻ˛ā§āĻĄ āĻšāĻā§āĻā§
āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ¤ā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻŦāĻžāĻāĻāĻā§āĻĄ āĻā§āĻāĻžāĻŦā§ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§ āĻŦāĻ˛āĻ¤ā§, tcpdump
āĻ
āĻ¨ā§āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻĒā§āĻ°ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ tcpdump
libpcap
libpcap
, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
- āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āĻŦāĻ°ā§āĻŖāĻ¨āĻžāĻāĻžāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
pcap_t
āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻ¨āĻžāĻŽ āĻĨā§āĻā§: ,pcap_create
- āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°ā§āĻ¨:
,pcap_activate
- āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°:
,pcap_compile
- āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
.pcap_setfilter
āĻāĻŋāĻāĻžāĻŦā§ āĻĢāĻžāĻāĻļāĻ¨ āĻĻā§āĻāĻ¤ā§ pcap_setfilter
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ strace
(āĻāĻŋāĻā§ āĻ˛āĻžāĻāĻ¨ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž āĻšāĻ¯āĻŧā§āĻā§):
$ sudo strace -f -e trace=%network tcpdump -p -i eth0 ip
socket(AF_PACKET, SOCK_RAW, 768) = 3
bind(3, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex("eth0"), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 20) = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=4, filter=0xb00bb00bb00b}, 16) = 0
...
āĻāĻāĻāĻĒā§āĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĻā§āĻ āĻ˛āĻžāĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ eth0
āĨ¤ āĻĨā§āĻā§ ip
āĻāĻžāĻ°āĻāĻŋ BPF āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĨāĻžāĻāĻŦā§, āĻāĻŦāĻ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻ˛āĻžāĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ āĻ¤āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ SO_ATTACH_FILTER
setsockopt
āĻāĻŽāĻ°āĻž 4 āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛ā§āĻĄ āĻāĻŦāĻ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻŋāĨ¤ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĨ¤
āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF-āĻ, āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻāĻŦāĻ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻž āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻā§ āĻāĻŦāĻ BPF-āĻāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§, āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻā§āĻ¨ā§āĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦāĻžāĻāĻ§āĻžāĻ āĻāĻ°āĻž āĻ¸āĻŽāĻ¯āĻŧāĻŽāĻ¤ āĻāĻ˛āĻžāĻĻāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻĒāĻ¨ āĻ¸āĻ¤ā§āĻ¯
āĻāĻāĻāĻĒā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻāĻ°ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
$ sudo strace -f -e trace=%network tcpdump -p -i eth0 ip
socket(AF_PACKET, SOCK_RAW, 768) = 3
bind(3, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex("eth0"), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 20) = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=1, filter=0xbeefbeefbeef}, 16) = 0
recvfrom(3, 0x7ffcad394257, 1, MSG_TRUNC, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=4, filter=0xb00bb00bb00b}, 16) = 0
...
āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻ˛āĻŋāĻāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻ°āĻž 5 āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸āĻā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻŋ, āĻāĻŋāĻ¨ā§āĻ¤ā§ 3 āĻāĻŦāĻ 4 āĻ˛āĻžāĻāĻ¨ā§ āĻā§ āĻāĻā§? āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻāĻ libpcap
āĻāĻŽāĻžāĻĻā§āĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨ā§āĻ¯āĻŧ - āĻ¯āĻžāĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻĒā§āĻā§ āĻāĻŽāĻ¨ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻ¨āĻž āĻšāĻ¯āĻŧ āĻ¯āĻž āĻāĻāĻŋāĻā§ āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ āĻāĻ°ā§ āĻ¨āĻž, āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ ret #0
(āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĄā§āĻ°āĻĒ āĻāĻ°ā§āĻ¨), āĻ¸āĻā§āĻāĻāĻŋāĻā§ āĻ¨āĻ¨-āĻŦā§āĻ˛āĻāĻŋāĻ āĻŽā§āĻĄā§ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻā§āĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻĨāĻžāĻāĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŦāĻŋāĻ¯āĻŧā§āĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĨ¤
āĻŽā§āĻ, āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§ struct sock_fprog
āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻž āĻ¸āĻā§āĻ, āĻ¯āĻžāĻ° āĻĒāĻ°ā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ setsockopt
.
āĻŽāĻāĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛, āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻžāĻāĻāĻž āĻ¨āĻ¯āĻŧ, āĻ¯ā§āĻā§āĻ¨ā§ āĻ¸āĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻāĻžāĻ¨ā§
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°ā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ setsockopt
āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¸āĻāĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯, āĻĻā§āĻā§āĻ¨ struct sock_fprog
āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻžāĻĄāĻŧāĻž tcpdump
āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻžāĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦ
āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻāĻŦāĻ XNUMX āĻļāĻ¤āĻā§āĻ°
BPF 1997 āĻ¸āĻžāĻ˛ā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻā§āĻ° āĻā§āĻĄāĻŧāĻž āĻšāĻŋāĻ¸ā§āĻŦā§ āĻ°āĻ¯āĻŧā§ āĻā§āĻā§ libpcap
āĻā§āĻ¨ā§ āĻŦāĻŋāĻļā§āĻˇ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻžāĻĄāĻŧāĻžāĻ (āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨, āĻ
āĻŦāĻļā§āĻ¯āĻ, x86_64
āĻā§āĻĄāĨ¤
JIT āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻļā§āĻā§āĻāĻ˛ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŋāĻ˛: 2012 āĻ¸āĻžāĻ˛ā§ xt_bpf
, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻĻā§āĻ¯āĻŧ iptables
BPF āĻāĻ° āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻžāĻ¯āĻŧ āĻāĻŦāĻ 2013 āĻ¸āĻžāĻ˛ā§āĻ° āĻ
āĻā§āĻā§āĻŦāĻ°ā§ āĻāĻŋāĻ˛ cls_bpf
, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻ˛āĻŋāĻāĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻŽāĻ°āĻž āĻļā§āĻā§āĻ°āĻ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻāĻ°āĻ āĻŦāĻŋāĻļāĻĻā§ āĻĻā§āĻāĻŦ, āĻ¤āĻŦā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§ āĻšāĻŦā§ āĻ¯ā§ āĻā§āĻāĻžāĻŦā§ āĻŦāĻŋāĻĒāĻŋāĻāĻĢā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻāĻžāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻ˛āĻŋāĻāĻ¤ā§ āĻāĻŦāĻ āĻ¸āĻāĻāĻ˛āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻā§āĻˇāĻŽāĻ¤āĻžāĻā§āĻ˛āĻŋ libpcap
āĻ¸ā§āĻŽāĻŋāĻ¤ (āĻ¸āĻ°āĻ˛ āĻāĻĻāĻžāĻšāĻ°āĻŖ: āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¤ā§āĻ°āĻŋ libpcap
āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻāĻŋ āĻŽāĻžāĻ¨ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§ - 0 āĻŦāĻž 0x40000) āĻŦāĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, seccomp āĻāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻā§āĻ° āĻšāĻžāĻ¤ā§ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ
āĻāĻ¸ā§āĻ¨ BPF āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ° āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻ, āĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻšāĻ:
16 8 8 32
| code | jt | jf | k |
āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ 64 āĻŦāĻŋāĻ āĻĻāĻāĻ˛ āĻāĻ°ā§, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽ 16 āĻŦāĻŋāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ¨āĻž āĻā§āĻĄ, āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻĻā§āĻāĻŋ āĻāĻ-āĻŦāĻŋāĻ āĻāĻ¨ā§āĻĄā§āĻ¨ā§āĻ āĻ°āĻ¯āĻŧā§āĻā§, jt
и jf
, āĻāĻŦāĻ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ 32 āĻŦāĻŋāĻ K
, āĻ¯āĻžāĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĨā§āĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻžāĻ¨ā§āĻĄ ret
, āĻ¯āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§ āĻā§āĻĄ āĻāĻā§ 6
, āĻāĻŦāĻ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨ āĻ§ā§āĻ°ā§āĻŦāĻ āĻĨā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ K
. āĻ¸āĻŋ-āĻ¤ā§, āĻāĻāĻāĻŋ āĻāĻāĻ BPF āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧ
struct sock_filter {
__u16 code;
__u8 jt;
__u8 jf;
__u32 k;
}
āĻāĻŦāĻ āĻĒā§āĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻāĻžāĻ°ā§
struct sock_fprog {
unsigned short len;
struct sock_filter *filter;
}
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ¨āĻž āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ¨āĻŋ ip6
āĻĨā§āĻā§
struct sock_filter code[] = {
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 1, 0x000086dd },
{ 0x06, 0, 0, 0x00040000 },
{ 0x06, 0, 0, 0x00000000 },
};
struct sock_fprog prog = {
.len = ARRAY_SIZE(code),
.filter = code,
};
āĻāĻžāĻ°ā§āĻ¯āĻā§āĻ°āĻŽ prog
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻ˛ā§ āĻāĻāĻ¨āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ
setsockopt(sk, SOL_SOCKET, SO_ATTACH_FILTER, &prog, sizeof(prog))
āĻŽā§āĻļāĻŋāĻ¨ āĻā§āĻĄ āĻāĻāĻžāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛ā§āĻāĻž āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻ, āĻāĻāĻ¨āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž, HabrÊ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ˛ā§āĻāĻž āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)āĨ¤ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻĢāĻžāĻāĻ˛ā§ <linux/filter.h>
āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻŽā§āĻ¯āĻžāĻā§āĻ°ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ - āĻāĻĒāĻ°ā§āĻ° āĻŽāĻ¤ā§ āĻāĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
struct sock_filter code[] = {
BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 12),
BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, ETH_P_IPV6, 0, 1),
BPF_STMT(BPF_RET|BPF_K, 0x00040000),
BPF_STMT(BPF_RET|BPF_K, 0),
}
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ°āĻ°āĻž āĻāĻāĻŋāĻ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ¯ā§āĻā§āĻ¤ āĻāĻŦāĻ āĻ¤āĻžāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ tools/bpf
āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻžāĻˇāĻž āĻĄāĻŋāĻŦāĻžāĻ āĻāĻāĻāĻĒā§āĻ āĻ
āĻ¨ā§āĻ°ā§āĻĒ tcpdump
, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤ā§āĻā§ āĻ˛ā§āĻŦā§āĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¯āĻž TCP/IPv4 āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĄā§āĻ°āĻĒ āĻāĻ°ā§:
$ cat /tmp/tcp-over-ipv4.bpf
ldh [12]
jne #0x800, drop
ldb [23]
jneq #6, drop
ret #-1
drop: ret #0
āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§, āĻ
ā§āĻ¯āĻžāĻ¸ā§āĻŽā§āĻŦāĻ˛āĻžāĻ° āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻā§ āĻā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ <ĐēĐžĐģиŅĐĩŅŅвО иĐŊŅŅŅŅĐēŅиК>,<code1> <jt1> <jf1> <k1>,...
, TCP āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻšāĻŦā§
$ tools/bpf/bpf_asm /tmp/tcp-over-ipv4.bpf
6,40 0 0 12,21 0 3 2048,48 0 0 23,21 0 1 6,6 0 0 4294967295,6 0 0 0,
āĻ¸āĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ°āĻĻā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻāĻāĻāĻĒā§āĻ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
$ tools/bpf/bpf_asm -c /tmp/tcp-over-ipv4.bpf
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 3, 0x00000800 },
{ 0x30, 0, 0, 0x00000017 },
{ 0x15, 0, 1, 0x00000006 },
{ 0x06, 0, 0, 0xffffffff },
{ 0x06, 0, 0, 0000000000 },
āĻāĻ āĻā§āĻā§āĻ¸āĻ āĻāĻžāĻāĻĒ āĻāĻ āĻ¨ āĻ¸āĻāĻā§āĻāĻž āĻ
āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ struct sock_filter
, āĻ¯ā§āĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŦāĻ āĻ¨ā§āĻāĻ¸ā§āĻ¨āĻŋāĻĢ-āĻāĻ¨āĻāĻŋ āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨
āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻāĻžāĻĄāĻŧāĻžāĻ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŦāĻ tools/bpf/bpf_asm
āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻŦāĻ struct sk_buff
, āĻ¯āĻž āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯āĻāĻžāĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻāĻā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ ldw cpu
āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ˛ā§āĻĄ āĻšāĻŦā§ A
āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ raw_smp_processor_id()
. (BPF-āĻāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§, āĻāĻ āĻ
-āĻŽāĻžāĻ¨āĻ āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻŽā§āĻŽāĻ°āĻŋ, āĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ° āĻāĻŦāĻ āĻāĻā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻ¸āĻš āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤) āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻĒāĻŋ āĻāĻ°āĻŋāĨ¤ āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻšā§āĻĄāĻžāĻ° poff
, āĻĒā§āĻ˛ā§āĻĄ āĻ
āĻĢāĻ¸ā§āĻ:
ld poff
ret a
BPF āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻž tcpdump
, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻāĻžāĻ°āĻŖ netsniff-ng
netsniff-ng
, āĻ¯āĻž, BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°āĻ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻ°āĻ āĻāĻ¨ā§āĻ¨āĻ¤ tools/bpf/bpf_asm
, āĻāĻāĻāĻ¨ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻ
ā§āĻ¯āĻžāĻ¸ā§āĻŽā§āĻŦāĻ˛āĻžāĻ°āĻā§ āĻĄāĻžāĻāĻž āĻšāĻ¯āĻŧā§āĻā§ bpfc
. āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋāĻ¤ā§ āĻŦā§āĻļ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻļā§āĻˇā§ āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋāĻ āĻĻā§āĻā§āĻ¨āĨ¤
āĻ¸ā§āĻāĻŽā§āĻĒāĻŽā§āĻĒ
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻžāĻ¨āĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻāĻžāĻ°ā§ āĻāĻāĻŋāĻ˛āĻ¤āĻžāĻ° BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¨āĻ¤ā§āĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻšāĻ˛ seccomp āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ, āĻ¯āĻž BPF āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻ¸ā§āĻ āĻāĻŦāĻ āĻ¸ā§āĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻŦāĻāĻļāĻ§āĻ°āĨ¤
seccomp-āĻāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ 2005 āĻ¸āĻžāĻ˛ā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻŦ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻŋāĻ˛ āĻ¨āĻž, āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĻ˛ - āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻāĻ°āĻ¤ā§: read
, write
, exit
и sigreturn
, āĻāĻŦāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻā§āĻāĻ¨āĻāĻžāĻ°ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻšāĻ¤ā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ SIGKILL
. āĻ¯āĻžāĻāĻšā§āĻ, 2012 āĻ¸āĻžāĻ˛ā§, seccomp BPF āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¯ā§āĻ āĻāĻ°ā§āĻā§, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻŽāĻ¨āĻāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ (āĻŽāĻāĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛, āĻā§āĻ°ā§āĻŽ āĻāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻ¨ āĻāĻŋāĻ˛, āĻāĻŦāĻ āĻā§āĻ°ā§āĻŽ āĻ˛ā§āĻā§āĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ BPF-āĻāĻ° āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻāĻāĻŋ KRSI āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻā§ āĻāĻŦāĻ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻŽāĻĄāĻŋāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻāĻžāĻ¸ā§āĻāĻŽāĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻā§āĻā§āĨ¤) āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ā§āĻ° āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋ āĻļā§āĻˇā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ°
āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ āĻ¸ā§āĻāĻŽāĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻšāĻžāĻŦā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ°āĻ¯āĻŧā§āĻā§, āĻšāĻ¯āĻŧāĻ¤ āĻā§āĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻĒāĻŦāĻŋāĻāĻžāĻāĻā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻā§ (āĻŦāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§) āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻāĻžāĻāĻŦā§āĨ¤ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ seccomp
āĻŦā§āĻ¯āĻŧāĻžāĻ° āĻ¸āĻŋ āĻāĻŦāĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ libseccomp
āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻāĻŦāĻ āĻ
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻā§āĻ˛āĻŋ āĻā§ āĻāĻŦāĻ āĻ
āĻŦāĻļā§āĻˇā§, āĻāĻ¸ā§āĻ¨ āĻĻā§āĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻ¸ā§āĻāĻŽāĻĒ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ strace
.
seccomp-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛ā§āĻāĻž āĻāĻŦāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻž
āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻžāĻ¨āĻŋ āĻāĻŋāĻāĻžāĻŦā§ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻāĻ¸ā§āĻ¨ āĻĒā§āĻ°āĻĨāĻŽā§ seccomp āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋ āĻĻā§āĻāĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸ā§āĻ¤āĻ°ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻŦāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļāĻŋāĻļā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦāĻŋāĻ§āĻŋāĻ¨āĻŋāĻˇā§āĻ§ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ°ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ seccomp(2)
seccomp(SECCOMP_SET_MODE_FILTER, flags, &filter)
āĻ¯ā§āĻāĻžāĻ¨ā§ &filter
- āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ struct sock_fprog
, āĻ
āĻ°ā§āĻĨāĻžā§ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĨ¤
āĻāĻŋāĻāĻžāĻŦā§ seccomp āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¸āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĨā§āĻā§ āĻāĻ˛āĻžāĻĻāĻž? āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻĒā§āĻ°āĻ¸āĻā§āĻāĨ¤ āĻ¸āĻā§āĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ¸āĻŽā§āĻŦāĻ˛āĻŋāĻ¤ āĻāĻāĻāĻŋ āĻŽā§āĻŽāĻ°āĻŋ āĻāĻ˛āĻžāĻāĻž āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻāĻŦāĻ seccomp-āĻāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
struct seccomp_data {
int nr;
__u32 arch;
__u64 instruction_pointer;
__u64 args[6];
};
āĻāĻāĻž āĻšāĻ˛ nr
āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻ¨āĻŽā§āĻŦāĻ° āĻšāĻ˛, arch
- āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° (āĻ¨āĻŋāĻā§ āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ), args
- āĻāĻ¯āĻŧāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ, āĻāĻŦāĻ instruction_pointer
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ āĻ¯āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻāĻ°ā§āĻā§āĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ A
āĻāĻŽāĻžāĻĻā§āĻ° āĻŦāĻ˛āĻ¤ā§ āĻšāĻŦā§
ldw [0]
seccomp āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻ¸āĻā§āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 32-āĻŦāĻŋāĻ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋāĻāĻāĻ°āĻŖā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻ
āĻ°ā§āĻ§ā§āĻ āĻļāĻŦā§āĻĻ āĻŦāĻž āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻž - āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻā§āĻ¨ ldh [0]
āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ seccomp
āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻŦā§ EINVAL
. āĻĢāĻžāĻāĻļāĻ¨ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻā§āĻ āĻāĻ°ā§ seccomp_check_filter()
mod
(āĻŦāĻŋāĻāĻžāĻ āĻ
āĻŦāĻļāĻŋāĻˇā§āĻ) āĻāĻŦāĻ āĻāĻāĻ¨ āĻāĻāĻŋāĻ° āĻ¸āĻāĻ¯ā§āĻāĻ¨ā§āĻ° āĻĒāĻ° āĻĨā§āĻā§ seccomp BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻĒāĻ˛āĻŦā§āĻ§
āĻŽā§āĻ˛āĻ¤, seccomp āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻāĻŦāĻ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ¨āĻŋāĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻžāĻĻāĻž āĻŦāĻž āĻāĻžāĻ˛ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻžāĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ
ld [0]
jeq #304, bad
jeq #176, bad
jeq #239, bad
jeq #279, bad
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
bad: ret #0
304, 176, 239, 279 āĻ¨āĻŽā§āĻŦāĻ°āĻ¯ā§āĻā§āĻ¤ āĻāĻžāĻ°āĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻā§āĻ˛āĻŋ āĻā§? āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤āĻāĻžāĻŦā§ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻžāĻ¨āĻŋ āĻ¨āĻž āĻā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ
āĻ¤āĻāĻŦ, seccomp āĻ˛ā§āĻāĻ arch
āĻāĻžāĻ āĻžāĻŽā§ struct seccomp_data
) āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻā§āĻ āĻāĻ°āĻž āĻšāĻ˛ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻļā§āĻ°ā§āĻāĻž āĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻŦā§:
ld [4]
jne #0xc000003e, bad_arch ; SCMP_ARCH_X86_64
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŽāĻžāĻ¨ āĻĒāĻžāĻŦā§āĻ¨āĨ¤
āĻāĻŽāĻ°āĻž seccomp āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛āĻŋāĻāĻŋ āĻāĻŦāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ libseccomp
āĻ¨ā§āĻāĻŋāĻ āĻā§āĻĄā§ āĻŦāĻž BPF āĻ
ā§āĻ¯āĻžāĻ¸ā§āĻŽā§āĻŦāĻ˛āĻŋāĻ¤ā§ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻ˛ā§āĻāĻžāĻ° āĻĢāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻāĻĒāĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ°āĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§, āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻĒā§āĻ°ā§āĻā§āĻŦāĻ˛ āĻāĻŦāĻ/āĻ
āĻĨāĻŦāĻž āĻĒāĻ āĻ¨āĻ¯ā§āĻā§āĻ¯ āĻā§āĻĄ āĻĨāĻžāĻāĻž āĻŦāĻžāĻā§āĻāĻ¨ā§āĻ¯āĻŧāĨ¤ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§
āĻāĻ¸ā§āĻ¨, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ˛āĻŋāĻāĻŋ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻĢāĻžāĻāĻ˛ āĻāĻžāĻ˛āĻžāĻ¯āĻŧ, āĻāĻ° āĻāĻā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻāĻā§
#include <seccomp.h>
#include <unistd.h>
#include <err.h>
static int sys_numbers[] = {
__NR_mount,
__NR_umount2,
// ... ĐĩŅĐĩ 40 ŅиŅŅĐĩĐŧĐŊŅŅ
вŅСОвОв ...
__NR_vmsplice,
__NR_perf_event_open,
};
int main(int argc, char **argv)
{
scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW);
for (size_t i = 0; i < sizeof(sys_numbers)/sizeof(sys_numbers[0]); i++)
seccomp_rule_add(ctx, SCMP_ACT_TRAP, sys_numbers[i], 0);
seccomp_load(ctx);
execvp(argv[1], &argv[1]);
err(1, "execlp: %s", argv[1]);
}
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻ°ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŋ sys_numbers
āĻŦā§āĻ˛āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ 40+ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¨āĻŽā§āĻŦāĻ°āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°, āĻĒā§āĻ°āĻ¸āĻā§āĻ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨ ctx
āĻāĻŦāĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°ā§āĻā§ āĻŦāĻ˛ā§āĻ¨ āĻāĻŽāĻ°āĻž āĻāĻŋ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¤ā§ āĻāĻžāĻ (SCMP_ACT_ALLOW
) āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ (āĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¸āĻšāĻ)āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°, āĻāĻā§ āĻāĻā§, āĻāĻŽāĻ°āĻž āĻāĻžāĻ˛ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻŋ SCMP_ACT_TRAP
, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ seccomp āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¤ āĻĒāĻžāĻ āĻžāĻŦā§ SIGSYS
āĻā§āĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻā§āĻāĻ¨ āĻāĻ°ā§āĻā§ āĻ¤āĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ¸āĻšāĨ¤ āĻ
āĻŦāĻļā§āĻˇā§, āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ seccomp_load
, āĻ¯āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻŦā§ seccomp(2)
.
āĻ¸āĻĢāĻ˛ āĻ¸āĻāĻāĻ˛āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻ
āĻŦāĻļā§āĻ¯āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ libseccomp
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ,
cc -std=c17 -Wall -Wextra -c -o seccomp_lib.o seccomp_lib.c
cc -o seccomp_lib seccomp_lib.o -lseccomp
āĻāĻāĻāĻŋ āĻ¸āĻĢāĻ˛ āĻā§āĻā§āĻˇā§āĻĒāĻŖā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ:
$ ./seccomp_lib echo ok
ok
āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ:
$ sudo ./seccomp_lib mount -t bpf bpf /tmp
Bad system call
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° strace
āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯:
$ sudo strace -e seccomp ./seccomp_lib mount -t bpf bpf /tmp
seccomp(SECCOMP_SET_MODE_FILTER, 0, {len=50, filter=0x55d8e78428e0}) = 0
--- SIGSYS {si_signo=SIGSYS, si_code=SYS_SECCOMP, si_call_addr=0xboobdeadbeef, si_syscall=__NR_mount, si_arch=AUDIT_ARCH_X86_64} ---
+++ killed by SIGSYS (core dumped) +++
Bad system call
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻžāĻ¨āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻāĻāĻāĻŋ āĻ
āĻŦā§āĻ§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻžāĻ°āĻŖā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§ āĻā§āĻā§ mount(2)
.
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛āĻŋāĻā§āĻāĻŋ libseccomp
, āĻāĻžāĻ° āĻ˛āĻžāĻāĻ¨ā§ āĻ
-āĻ¤ā§āĻā§āĻ āĻā§āĻĄ āĻĢāĻŋāĻāĻŋāĻāĨ¤ āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻāĻāĻŋ āĻ¤ā§āĻ˛āĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŽāĻžāĻ¤ā§āĻ°āĨ¤ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, libseccomp āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻāĻŋāĻ˛ SCMP_FLTATR_CTL_OPTIMIZE
. āĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻāĻŋ 2 āĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻāĻ°āĻŦā§āĨ¤
āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻžāĻšāĻ˛ā§ āĻĻā§āĻā§ āĻ¨āĻŋāĻ¨
$ echo 1 3 6 8 13 | ./generate_bin_search_bpf.py
ld [0]
jeq #6, bad
jgt #6, check8
jeq #1, bad
jeq #3, bad
ret #0x7fff0000
check8:
jeq #8, bad
jeq #13, bad
ret #0x7fff0000
bad: ret #0
āĻāĻĒāĻ¨āĻŋ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻĻā§āĻ°ā§āĻ¤ āĻāĻŋāĻā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦā§āĻ¨ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻ¨ā§āĻĄā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻāĻžāĻŽā§āĻĒ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž (āĻāĻŽāĻ°āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, jmp A
āĻŦāĻž jmp [label+X]
) āĻāĻŦāĻ āĻ¤āĻžāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ¸ā§āĻĨāĻŋāĻ°āĨ¤
seccomp āĻāĻŦāĻ strace
āĻāĻĒāĻ¯ā§āĻāĻŋāĻ¤āĻž āĻ¸āĻŦāĻžāĻ āĻāĻžāĻ¨ā§ strace
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻ°āĻŖ āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ
āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻšāĻžāĻ¤āĻŋāĻ¯āĻŧāĻžāĻ°āĨ¤ āĻ¤āĻŦā§ āĻ
āĻ¨ā§āĻā§āĻ āĻāĻ° āĻāĻĨāĻžāĻ āĻļā§āĻ¨ā§āĻā§āĻ¨ strace
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻšāĻ¯āĻŧ ptrace(2)
, āĻāĻŦāĻ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž āĻ¯ā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻā§āĻ¨ āĻ¸ā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¯ā§āĻŽāĻ¨, āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ
$ time strace du /usr/share/ >/dev/null 2>&1
real 0m3.081s
user 0m0.531s
sys 0m2.073s
и
$ time strace -e open du /usr/share/ >/dev/null 2>&1
real 0m2.404s
user 0m0.193s
sys 0m1.800s
āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻā§āĻ°ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĨ¤
āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒ --seccomp-bpf
, āĻ¯ā§āĻ āĻāĻ°ā§ strace
āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 5.3, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻā§ āĻ
āĻ¨ā§āĻāĻŦāĻžāĻ° āĻāĻ¤āĻŋ āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻā§āĻ°ā§āĻ¸ā§āĻ° āĻ
āĻ§ā§āĻ¨ā§ āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻāĻĒā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻāĻĒā§āĻ° āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨ā§āĻ¯āĻŧ:
$ time strace --seccomp-bpf -e open du /usr/share/ >/dev/null 2>&1
real 0m0.148s
user 0m0.017s
sys 0m0.131s
$ time du /usr/share/ >/dev/null 2>&1
real 0m0.140s
user 0m0.024s
sys 0m0.116s
(āĻāĻāĻžāĻ¨ā§, āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻāĻāĻāĻŋ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻžāĻ°āĻŖāĻž āĻāĻā§ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻā§āĻ°ā§āĻ¸ āĻāĻ°āĻāĻŋ āĻ¨āĻžāĨ¤ āĻāĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻā§āĻ°ā§āĻ¸āĻŋāĻ āĻāĻ°āĻ¤āĻžāĻŽ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, newfsstat
āĻ¤āĻžāĻ°āĻĒāĻ° strace
āĻŦā§āĻ°ā§āĻ āĻšāĻŦā§ āĻ āĻŋāĻ āĻ¯ā§āĻŽāĻ¨ āĻāĻ āĻŋāĻ¨ āĻāĻžāĻĄāĻŧāĻž --seccomp-bpf
.)
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻāĻžāĻ āĻāĻ°ā§? āĻ¤āĻžāĻšāĻžāĻā§ āĻŦā§āĻ¯āĻ¤āĻŋāĻ¤ strace
āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻļā§āĻ°ā§ āĻāĻ°ā§ PTRACE_SYSCALL
. āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻŋāĻ¤ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻāĻāĻŋ (āĻ¯ā§āĻā§āĻ¨ā§) āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻāĻ¸ā§āĻ¯ā§ āĻāĻ°ā§, āĻ¤āĻāĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ strace
, āĻ¯āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻĻā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻžāĻ˛āĻžāĻ¯āĻŧ PTRACE_SYSCALL
. āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻĒāĻ°ā§, āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛āĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻŦāĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ strace
, āĻ¯āĻž āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻĻā§āĻā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻāĻ°ā§ PTRACE_SYSCALL
, āĻāĻŦāĻ āĻ¤āĻžāĻāĨ¤
seccomp āĻāĻ° āĻ¸āĻžāĻĨā§, āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ āĻŋāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻāĻ¨ā§āĻĻ āĻŽāĻ¤ā§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¯āĻĨāĻž, āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻĻā§āĻāĻ¤ā§ āĻāĻžāĻ X
, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ BPF āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ X
āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ SECCOMP_RET_TRACE
, āĻāĻŦāĻ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻā§āĻ°āĻšā§āĻ° āĻ¨āĻ¯āĻŧ - SECCOMP_RET_ALLOW
:
ld [0]
jneq #X, ignore
trace: ret #0x7ff00000
ignore: ret #0x7fff0000
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ strace
āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻļā§āĻ°ā§ āĻāĻ°ā§ PTRACE_CONT
, āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ¨āĻž āĻšāĻ¯āĻŧ X
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ˛āĻ¤ā§ āĻĨāĻžāĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻ X
, āĻ¤āĻžāĻ°āĻĒāĻ° seccomp āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻŦā§ strace
āĻ¯āĻž āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻĻā§āĻāĻŦā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§ PTRACE_SYSCALL
(āĻ¯ā§āĻšā§āĻ¤ā§ seccomp āĻāĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¨ā§āĻ)āĨ¤ āĻ¯āĻāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻšāĻ¯āĻŧ, strace
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻāĻ°āĻŽā§āĻ āĻāĻ°āĻŦā§ PTRACE_CONT
āĻāĻŦāĻ seccomp āĻĨā§āĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻŦā§āĨ¤
āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ --seccomp-bpf
āĻĻā§āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻāĻā§āĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ āĻ¯ā§āĻāĻĻāĻžāĻ¨ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§ āĻ¨āĻž (āĻŦāĻŋāĻāĻ˛ā§āĻĒ -p
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ strace
), āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ seccomp āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻ¤, āĻā§āĻ¨ āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻ¨ā§āĻ āĻ¨āĻž āĻāĻžāĻāĻ˛ā§āĻĄ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻā§āĻ˛āĻŋ āĻĻā§āĻā§āĻ¨, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸ā§āĻāĻŽāĻĒ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻāĻāĻŋ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻžāĻāĻ˛ā§āĻĄ āĻĒā§āĻ°āĻ¸ā§āĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ°āĻ¸ā§āĻ¤ā§āĻ°ā§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻ āĻŋāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ strace
āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§ seccomp
āĻĨā§āĻā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
xt_bpf
āĻāĻāĻ¨ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻāĻāĻ¤ā§ āĻĢāĻŋāĻ°ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻāĨ¤
āĻĒāĻāĻā§āĻŽāĻŋ: āĻ
āĻ¨ā§āĻ āĻāĻā§, 2007 āĻ¸āĻžāĻ˛ā§, āĻŽā§āĻ˛ āĻāĻŋāĻ˛ xt_u32
āĻ¨ā§āĻāĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻ āĻĒā§āĻ°āĻžāĻā§āĻ¨ āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĻā§āĻļā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ cls_u32
āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¸āĻšāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ iptables-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻāĻžāĻ°ā§ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ: āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĨā§āĻā§ 32 āĻŦāĻŋāĻ āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻĒāĻ° āĻĒāĻžāĻāĻŋāĻāĻŖāĻŋāĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻ¸āĻā§āĻāĻžāĻ˛āĻ¨ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ,
sudo iptables -A INPUT -m u32 --u32 "6&0xFF=1" -j LOG --log-prefix "seen-by-xt_u32"
āĻāĻāĻĒāĻŋ āĻšā§āĻĄāĻžāĻ°ā§āĻ° 32 āĻŦāĻŋāĻ āĻ˛ā§āĻĄ āĻāĻ°ā§, āĻĒā§āĻ¯āĻžāĻĄāĻŋāĻ 6 āĻĨā§āĻā§ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻĒāĻ° āĻāĻāĻāĻŋ āĻŽāĻžāĻ¸ā§āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§ 0xFF
(āĻ˛ā§ āĻŦāĻžāĻāĻ āĻ¨āĻŋāĻ¨)āĨ¤ āĻāĻ āĻŽāĻžāĻ protocol
āĻāĻāĻĒāĻŋ āĻšā§āĻĄāĻžāĻ° āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ 1 (ICMP) āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽā§ āĻ
āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻā§āĻ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻ
āĻĒāĻžāĻ°ā§āĻāĻ°āĻā§āĻ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ @
- X āĻŦāĻžāĻāĻ āĻĄāĻžāĻ¨āĻĻāĻŋāĻā§ āĻ¸āĻ°āĻžāĻ¨āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¨āĻŋāĻ¯āĻŧāĻŽ
iptables -m u32 --u32 "6&0xFF=0x6 && 0>>22&0x3C@4=0x29"
TCP āĻ¸āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸ āĻ¨āĻŽā§āĻŦāĻ° āĻ¸āĻŽāĻžāĻ¨ āĻ¨āĻž āĻšāĻ˛ā§ āĻā§āĻ āĻāĻ°ā§ 0x29
. āĻāĻŽāĻŋ āĻāĻ°āĻ āĻŦāĻŋāĻļāĻĻā§ āĻ¯āĻžāĻŦ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻšāĻžāĻ¤ā§ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋ āĻ˛ā§āĻāĻž āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§ xt_u32
. āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻļā§āĻˇā§ āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋāĻ āĻĻā§āĻā§āĻ¨āĨ¤
2013 āĻ¸āĻžāĻ˛ āĻĨā§āĻā§ āĻŽāĻĄāĻŋāĻāĻ˛ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻŽāĻĄāĻŋāĻāĻ˛ xt_u32
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ BPF āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻŽāĻĄāĻŋāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ xt_bpf
. āĻ¯ā§ āĻā§āĻ āĻāĻ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻĄāĻŧā§āĻā§āĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻ° āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¨ā§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤: iptables āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§ BPF āĻŦāĻžāĻāĻāĻā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻ°āĻāĻŽ:
iptables -A INPUT -m bpf --bytecode <йаКŅĐēОд> -j LOG
āĻāĻāĻžāĻ¨ā§ <йаКŅĐēОд>
- āĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻ¸ā§āĻŽā§āĻŦāĻ˛āĻžāĻ° āĻāĻāĻāĻĒā§āĻ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻā§ āĻā§āĻĄ bpf_asm
āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ,
$ cat /tmp/test.bpf
ldb [9]
jneq #17, ignore
ret #1
ignore: ret #0
$ bpf_asm /tmp/test.bpf
4,48 0 0 9,21 0 1 17,6 0 0 1,6 0 0 0,
# iptables -A INPUT -m bpf --bytecode "$(bpf_asm /tmp/test.bpf)" -j LOG
āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ UDP āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻāĻŋāĨ¤ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāĻ˛ā§ āĻāĻāĻāĻŋ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻĒā§āĻ°āĻ¸āĻā§āĻ xt_bpf
, āĻ
āĻŦāĻļā§āĻ¯āĻ, iptables āĻāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, IPv4 āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĄā§āĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§āĨ¤ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĨā§āĻā§ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨ false
āĻŽāĻžāĻ¨ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŽā§āĻ˛ā§āĻ¨āĻŋāĨ¤
āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻŽāĻĄāĻŋāĻāĻ˛ xt_bpf
āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻā§āĻ¯āĻŧā§ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻ¸ā§āĻ¨ āĻā§āĻ˛āĻžāĻāĻĄāĻĢā§āĻ¯āĻŧāĻžāĻ° āĻĨā§āĻā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻŋāĨ¤ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¤āĻžāĻ°āĻž āĻŽāĻĄāĻŋāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ xt_bpf
DDoS āĻāĻā§āĻ°āĻŽāĻŖ āĻĨā§āĻā§ āĻ°āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§āĨ¤ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§ bpfgen
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¨āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ DNS āĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻ˛ā§ habr.com
:
$ ./bpfgen --assembly dns -- habr.com
ldx 4*([0]&0xf)
ld #20
add x
tax
lb_0:
ld [x + 0]
jneq #0x04686162, lb_1
ld [x + 4]
jneq #0x7203636f, lb_1
ldh [x + 8]
jneq #0x6d00, lb_1
ret #65535
lb_1:
ret #0
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ X
āĻ˛āĻžāĻāĻ¨ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻļā§āĻ°ā§ x04habrx03comx00
āĻāĻāĻāĻŋ UDP āĻĄā§āĻāĻžāĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨: 0x04686162 <-> "x04hab"
āĻāĻŦāĻ āĻ¤āĻžāĻ āĻ
āĻ¨
āĻāĻāĻā§ āĻĒāĻ°ā§, āĻā§āĻ˛āĻžāĻāĻĄāĻĢā§āĻ¯āĻŧāĻžāĻ° p0f -> BPF āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻā§āĻĄ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĻā§āĨ¤ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ā§
$ ./bpfgen p0f -- 4:64:0:0:*,0::ack+:0
39,0 0 0 0,48 0 0 8,37 35 0 64,37 0 34 29,48 0 0 0,
84 0 0 15,21 0 31 5,48 0 0 9,21 0 29 6,40 0 0 6,
...
āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ āĻāĻ° āĻā§āĻ˛āĻžāĻāĻĄāĻĢā§āĻ¯āĻŧāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻā§ āĻ¨āĻž xt_bpf
, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻž XDP-āĻ¤ā§ āĻāĻ˛ā§ āĻā§āĻā§ - BPF āĻāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ, āĻĻā§āĻā§āĻ¨āĨ¤
cls_bpf
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻļā§āĻˇ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻ˛ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° cls_bpf
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛ āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯, ā§¨ā§Ļā§§ā§Š āĻ¸āĻžāĻ˛ā§āĻ° āĻļā§āĻˇā§āĻ° āĻĻāĻŋāĻā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ§āĻžāĻ°āĻŖāĻžāĻāĻ¤āĻāĻžāĻŦā§ āĻĒā§āĻ°āĻžāĻā§āĻ¨āĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ cls_u32
.
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻ¨ āĻāĻžāĻā§āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ āĻ¨āĻž cls_bpf
, āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻāĻžāĻ¨ā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻā§āĻ āĻĻā§āĻŦā§ āĻ¨āĻž - āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ BPF āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋāĻ¤ā§, āĻāĻŽāĻ°āĻž āĻāĻāĻžāĻ§āĻŋāĻāĻŦāĻžāĻ° āĻāĻ āĻļā§āĻ°ā§āĻŖāĻŋāĻŦāĻĻā§āĻ§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĻā§āĻāĻž āĻāĻ°āĻŦāĨ¤
āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻ¨āĻž āĻŦāĻ˛āĻžāĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻāĻžāĻ°āĻŖ āĻ cls_bpf
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛, āĻāĻā§āĻ¸āĻā§āĻ¨ā§āĻĄā§āĻĄ āĻŦāĻŋāĻĒāĻŋāĻāĻĢā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻāĻŽā§āĻ˛ āĻ¸āĻāĻā§āĻāĻŋāĻ¤: āĻā§āĻ˛āĻžāĻ¸āĻŋāĻā§āĻ¯āĻžāĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž āĻāĻŦāĻ āĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻžāĨ¤
āĻ¤āĻžāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§āĻā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻŦāĻŋāĻĒāĻŋāĻāĻĢāĻā§ āĻŦāĻŋāĻĻāĻžāĻ¯āĻŧ āĻāĻžāĻ¨āĻžāĻ¨ā§āĻ° āĻāĻŦāĻ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§āĻ° āĻĻāĻŋāĻā§ āĻ¤āĻžāĻāĻžāĻ¨ā§āĻ°āĨ¤
āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻŦāĻŋāĻĻāĻžāĻ¯āĻŧ
āĻ¨āĻŦā§āĻŦāĻ āĻĻāĻļāĻā§āĻ° āĻā§āĻĄāĻŧāĻžāĻ° āĻĻāĻŋāĻā§ āĻŦāĻŋāĻāĻļāĻŋāĻ¤ BPF āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻ āĻļāĻ¤āĻžāĻŦā§āĻĻā§āĻ° āĻāĻ āĻāĻ¤ā§āĻ°ā§āĻĨāĻžāĻāĻļ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻŦā§āĻāĻā§ āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻļā§āĻˇ āĻ
āĻŦāĻ§āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻā§āĻā§ āĻ¤āĻž āĻāĻŽāĻ°āĻž āĻĻā§āĻā§āĻāĻŋāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻŽā§āĻļāĻŋāĻ¨ āĻĨā§āĻā§ RISC-āĻ¤ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°ā§āĻ° āĻ
āĻ¨ā§āĻ°ā§āĻĒ, āĻ¯āĻž āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF-āĻāĻ° āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻ°āĻŖāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĻāĻŋāĻ˛, 32-āĻāĻ° āĻĻāĻļāĻā§ 64-āĻŦāĻŋāĻ āĻĨā§āĻā§ XNUMX-āĻŦāĻŋāĻ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻāĻāĻŋ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻ
āĻĒā§āĻ°āĻāĻ˛āĻŋāĻ¤ āĻšāĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻāĻŋāĻ˛āĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF-āĻāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻā§āĻŦ āĻ¸ā§āĻŽāĻŋāĻ¤, āĻāĻŦāĻ āĻĒā§āĻ°āĻžāĻ¨ā§ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻāĻžāĻĄāĻŧāĻžāĻ - BPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ°āĻžāĻā§āĻ¯ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨ā§āĻ, āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻāĻžāĻ°āĻ
ā§āĻ¯āĻžāĻāĻļāĻ¨ā§āĻ° āĻā§āĻ¨ā§ āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻ¨ā§āĻ, āĻāĻ¨ā§āĻāĻžāĻ°āĻ
ā§āĻ¯āĻžāĻā§āĻ āĻāĻ°āĻžāĻ° āĻā§āĻ¨ā§ āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻ¨ā§āĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§, āĻ¸ā§āĻŽāĻŋāĻ¤ āĻ¸āĻāĻā§āĻ¯āĻ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĒāĻĄāĻŧāĻž āĻāĻžāĻĄāĻŧāĻž sk_buff
āĻāĻŦāĻ āĻ¸āĻšāĻāĻ¤āĻŽ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF-āĻāĻ° āĻ¯āĻž āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻāĻā§ āĻ¤āĻž āĻšāĻ˛ API āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸, āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ, āĻ¤āĻž āĻ¸āĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻŦāĻž seccomp āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°, āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§, āĻāĻā§āĻ¸āĻā§āĻ¨ā§āĻĄā§āĻĄ āĻŦāĻŋāĻĒāĻŋāĻāĻĢ-āĻ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ (āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ āĻŋāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻāĻā§ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤)
āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ 2013 āĻ¸āĻžāĻ˛ā§, āĻ¯āĻāĻ¨ āĻāĻ˛ā§āĻā§āĻ¸āĻŋ āĻ¸ā§āĻāĻžāĻ°āĻāĻ¯āĻŧā§āĻāĻ āĻāĻāĻāĻŋ BPF āĻāĻĒāĻĄā§āĻ āĻ¸ā§āĻāĻŋāĻŽ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨āĨ¤ 2014 āĻ¸āĻžāĻ˛ā§ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻĒā§āĻ¯āĻžāĻ
āĻāĻ āĻ¸āĻŋāĻ°āĻŋāĻā§āĻ° āĻāĻ°āĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻžāĻ° āĻāĻ°āĻŦā§, āĻ¯āĻž āĻĒā§āĻ°āĻĨāĻŽā§ āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ BPF, āĻ¤āĻžāĻ°āĻĒāĻ° āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ BPF āĻāĻŦāĻ āĻāĻāĻ¨ āĻā§āĻŦāĻ˛ BPF āĻ¨āĻžāĻŽā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĨ¤
āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸
- āĻ¸ā§āĻāĻŋāĻā§āĻ¨ āĻŽā§āĻ¯āĻžāĻāĻā§āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ¨ āĻā§āĻ¯āĻžāĻāĻŦāĻ¸āĻ¨, "āĻĻā§āĻ¯ āĻŦāĻŋāĻāĻ¸āĻĄāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°: āĻāĻāĻāĻžāĻ°-āĻ˛ā§āĻā§āĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°",
https://www.tcpdump.org/papers/bpf-usenix93.pdf
- āĻ¸ā§āĻāĻŋāĻā§āĻ¨ āĻŽā§āĻ¯āĻžāĻāĻā§āĻ¯āĻžāĻ¨, "libpcap: āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻāĻŦāĻ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ",
https://sharkfestus.wireshark.org/sharkfest.11/presentations/McCanne-Sharkfest'11_Keynote_Address.pdf
tcpdump
,libpcap
:https://www.tcpdump.org/ IPtable U32 āĻŽā§āĻ¯āĻžāĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ .- BPF - āĻā§āĻ˛ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻŦāĻžāĻāĻāĻā§āĻĄ:
https://blog.cloudflare.com/bpf-the-forgotten-bytecode/
- BPF āĻā§āĻ˛ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻā§āĻā§:
https://blog.cloudflare.com/introducing-the-bpf-tools/
bpf_cls
:http://man7.org/linux/man-pages/man8/tc-bpf.8.html
- āĻāĻāĻāĻŋ seccomp āĻāĻāĻžāĻ°āĻāĻŋāĻ:
https://lwn.net/Articles/656307/
https://github.com/torvalds/linux/blob/master/Documentation/userspace-api/seccomp_filter.rst
habr: āĻ§āĻžāĻ°āĻ āĻāĻŦāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž: seccomp habr: āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻĄā§āĻŽāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨ āĻāĻ°āĻž āĻŦāĻž "āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻĄāĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ!" - āĻĒāĻ˛ āĻā§āĻāĻāĻ¨āĻ¨, "āĻ¸ā§āĻā§āĻ°ā§āĻ¸ --āĻ¸ā§āĻāĻŽāĻĒ-āĻŦāĻŋāĻĒāĻŋāĻāĻĢ: āĻ āĻ˛ā§āĻ āĻāĻ¨ā§āĻĄāĻžāĻ° āĻĻā§āĻ¯ āĻšā§āĻĄ",
https://fosdem.org/2020/schedule/event/debugging_strace_bpf/
netsniff-ng
:http://netsniff-ng.org/
āĻāĻ¤ā§āĻ¸: www.habr.com