เชฌเชฐเซเชเชฒเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเซเชธ (BPF) เช เชเช Linux เชเชฐเซเชจเชฒ เชเซเชเชจเซเชฒเซเชเซ เชเซ เชเซ เชเซเชฒเซเชฒเชพ เชเชฃเชพ เชตเชฐเซเชทเซเชฅเซ เช
เชเชเซเชฐเซเชเซ เชญเชพเชทเชพเชจเชพ เชเซเช เชชเซเชฐเชเชพเชถเชจเซเชจเชพ เชชเชนเซเชฒเชพ เชชเชพเชจเชพ เชชเชฐ เชเซ. เชเซเชจเซเชซเชฐเชจเซเชธ BPF เชจเชพ เชเชชเชฏเซเช เช
เชจเซ เชตเชฟเชเชพเชธ เชชเชฐเชจเชพ เช
เชนเซเชตเชพเชฒเซเชฅเซ เชญเชฐเซเชฒเซ เชเซ. เชกเซเชตเชฟเชก เชฎเชฟเชฒเชฐ, เชฒเชฟเชจเชเซเชธ เชจเซเชเชตเชฐเซเช เชธเชฌเชธเชฟเชธเซเชเชฎ เชเชพเชณเชตเชจเชพเชฐ, Linux Plumbers 2018 เชชเชฐ เชคเซเชฎเชจเซ เชตเชพเชค เชเชนเซ เชเซ
Habrรฉ เชชเชฐ เชนเชเซ เชชเชฃ BPF เชจเซเช เชเซเช เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชตเชฐเซเชฃเชจ เชจเชฅเซ, เช
เชจเซ เชคเซเชฅเซ เชฒเซเชเซเชจเซ เชถเซเชฐเซเชฃเซเชฎเชพเช เชนเซเช เชเซเชเซเชจเซเชฒเซเชเซเชจเชพ เชเชคเชฟเชนเชพเชธ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถ, เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เช
เชจเซ เชตเชฟเชเชพเชธ เชธเชพเชงเชจเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเชถ เช
เชจเซ BPF เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเชพ เชเซเชทเซเชคเซเชฐเซ เช
เชจเซ เชชเซเชฐเซเชเซเชเชฟเชธเชจเซ เชฐเซเชชเชฐเซเชเชพ เชเชชเซเชถ. เช เชฒเซเช, เชถเซเชจเซเชฏ, เชถเซเชฐเซเชฃเซเชฎเชพเช, เชเซเชฒเชพเชธเชฟเช BPF เชจเชพ เชเชคเชฟเชนเชพเชธ เช
เชจเซ เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชจเซ เชเชนเซ เชเซ, เช
เชจเซ เชคเซเชจเชพ เชธเชเชเชพเชฒเชจ เชธเชฟเชฆเซเชงเชพเชเชคเซเชจเชพ เชฐเชนเชธเซเชฏเซ เชชเชฃ เชเชฃเชพเชตเซ เชเซ. tcpdump
, seccomp
, strace
, เช
เชจเซ เชเชฃเซเช เชฌเชงเซเช.
BPF เชจเชพ เชตเชฟเชเชพเชธเชจเซ Linux เชจเซเชเชตเชฐเซเชเชฟเชเช เชธเชฎเซเชฆเชพเชฏ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, BPF เชจเซ เชฎเซเชเซเชฏ เชตเชฐเซเชคเชฎเชพเชจ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชจเซเชเชตเชฐเซเช เชธเชพเชฅเซ เชธเชเชฌเชเชงเชฟเชค เชเซ เช
เชจเซ เชคเซเชฅเซ เชชเชฐเชตเชพเชจเชเซ เชธเชพเชฅเซ
เชฌเซเชชเซเชเชซเชจเชพ เชเชคเชฟเชนเชพเชธเชฎเชพเช เชเซเชเชเซ เช เชญเซเชฏเชพเชธเชเซเชฐเชฎ(c)
เชเชงเซเชจเชฟเช BPF เชเซเชเซเชจเซเชฒเซเชเซ เช เช เชจเชพเชฎเชจเซ เชเซเชจเซ เชเซเชเซเชจเซเชฒเซเชเซเชจเซเช เชธเซเชงเชพเชฐเซเชฒเซเช เช
เชจเซ เชตเชฟเชธเซเชคเซเชค เชตเชฐเซเชเชจ เชเซ, เชเซเชจเซ เชฎเซเชเชเชตเชฃ เชเชพเชณเชตเชพ เชฎเชพเชเซ เชนเชตเซ เชเซเชฒเชพเชธเชฟเช BPF เชเชนเซเชตเชพเชฏ เชเซ. เชเซเชฒเชพเชธเชฟเช BPF เชจเชพ เชเชงเชพเชฐเซ เชเช เชเชพเชฃเซเชคเซ เชเชชเชฏเซเชเชฟเชคเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ tcpdump
, เชฎเชฟเชเซเชจเชฟเชเชฎ seccomp
, เชคเซเชฎเช เชเชเชพ เชเชพเชฃเซเชคเชพ เชฎเซเชกเซเชฏเซเชฒเซ xt_bpf
เชฎเชพเชเซ iptables
เช
เชจเซ เชตเชฐเซเชเซเชเซเชค cls_bpf
. เชเชงเซเชจเชฟเช เชฒเชฟเชจเชเซเชธเชฎเชพเช, เชเซเชฒเชพเชธเชฟเช BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชจเชตเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชเชชเชฎเซเชณเซ เช
เชจเซเชตเชพเชฆเชฟเชค เชฅเชพเชฏ เชเซ, เชเซ เชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ, API เชธเซเชฅเชพเชจเซ เชฐเชนเซเชฏเซเช เชเซ เช
เชจเซ เชเซเชฒเชพเชธเชฟเช BPF เชฎเชพเชเซ เชจเชตเชพ เชเชชเชฏเซเชเซ, เชเซเชฎ เชเซ เชเชชเชฃเซ เช เชฒเซเชเชฎเชพเช เชเซเชเชถเซเช, เชนเชเซ เชชเชฃ เชเซเชตเชพ เชฎเชณเซ เชฐเชนเซเชฏเชพ เชเซ. เช เชเชพเชฐเชฃเซเชธเชฐ, เช
เชจเซ เช เชชเชฃ เชเชพเชฐเชฃ เชเซ Linux เชฎเชพเช เชเซเชฒเชพเชธเชฟเชเชฒ BPF เชจเชพ เชตเชฟเชเชพเชธเชจเชพ เชเชคเชฟเชนเชพเชธเชจเซ เช
เชจเซเชธเชฐเซเชจเซ, เชคเซ เชธเซเชชเชทเซเช เชฅเช เชเชถเซ เชเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เช
เชจเซ เชถเชพ เชฎเชพเชเซ เชคเซเชจเชพ เชเชงเซเชจเชฟเช เชธเซเชตเชฐเซเชชเชฎเชพเช เชตเชฟเชเชธเชฟเชค เชฅเชฏเซเช, เชฎเซเช เชเซเชฒเชพเชธเชฟเชเชฒ BPF เชตเชฟเชถเซเชจเชพ เชฒเซเช เชธเชพเชฅเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช.
เชเซเชฒเซเชฒเซ เชธเชฆเซเชจเชพ เชเชเชธเซเชจเชพ เชฆเชพเชฏเชเชพเชจเชพ เช เชเชคเชฎเชพเช, เชชเซเชฐเชเซเชฏเชพเชค เชฒเซเชฐเซเชจเซเชธ เชฌเชฐเซเชเชฒเซ เชฒเซเชฌเซเชฐเซเชเชฐเซเชจเชพ เชเชเชจเซเชฐเซเชจเซ เชเซเชฒเซเชฒเซ เชธเชฆเซเชจเชพ เชเชเชธเซเชจเชพ เชฆเชพเชฏเชเชพเชจเชพ เช เชเชคเชฎเชพเช เชเชงเซเชจเชฟเช เชเชตเชพ เชนเชพเชฐเซเชกเชตเซเชฐ เชชเชฐ เชจเซเชเชตเชฐเซเช เชชเซเชเซเชเซเชธเชจเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเซเชตเซ เชฐเซเชคเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเชตเซเช เชคเซ เชชเซเชฐเชถเซเชจเชฎเชพเช เชฐเชธ เชชเชกเซเชฏเซ. เชซเชฟเชฒเซเชเชฐเชฟเชเชเชจเซ เชฎเซเชณ เชตเชฟเชเชพเชฐ, เชฎเซเชณ เชฐเซเชชเซ CSPF (CMU/เชธเซเชเซเชจเชซเซเชฐเซเชก เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐ) เชเซเชเซเชจเซเชฒเซเชเซเชฎเชพเช เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ, เชคเซ เชถเชเซเชฏ เชคเซเชเชฒเซ เชตเชนเซเชฒเซ เชคเชเซ เชฌเชฟเชจเชเชฐเซเชฐเซ เชชเซเชเซเชเซเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเชตเชพเชจเซ เชนเชคเซ, เชเชเชฒเซ เชเซ. เชเชฐเซเชจเชฒ เชธเซเชชเซเชธเชฎเชพเช, เชเชพเชฐเชฃ เชเซ เช เชฌเชฟเชจเชเชฐเซเชฐเซ เชกเซเชเชพเชจเซ เชฏเซเชเชฐ เชธเซเชชเซเชธเชฎเชพเช เชจเชเชฒ เชเชฐเชตเชพเชจเซเช เชเชพเชณเซ เชเซ. เชเชฐเซเชจเชฒ เชเชเซเชฏเชพเชฎเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซเชก เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชฐเชจเชเชพเชเชฎ เชธเซเชฐเชเซเชทเชพ เชชเซเชฐเซ เชชเชพเชกเชตเชพ เชฎเชพเชเซ, เชธเซเชจเซเชกเชฌเซเชเซเชธเชตเชพเชณเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ.
เชเซ เชเซ, เชนเชพเชฒเชจเชพ เชซเชฟเชฒเซเชเชฐเซเชธ เชฎเชพเชเซเชจเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเซ เชธเซเชเซเช-เชเชงเชพเชฐเชฟเชค เชฎเชถเซเชจเซ เชชเชฐ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชกเชฟเชเชพเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ เช
เชจเซ เชจเชตเซ RISC เชฎเชถเซเชจเซ เชชเชฐ เชคเซเชเชฒเซ เช
เชธเชฐเชเชพเชฐเช เชฐเซเชคเซ เชเชพเชฒเชคเซ เชจ เชนเชคเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชฌเชฐเซเชเชฒเซ เชฒเซเชฌเซเชธเชจเชพ เชเชจเซเชเชฟเชจเชฟเชฏเชฐเซเชจเชพ เชชเซเชฐเชฏเชคเซเชจเซ เชฆเซเชตเชพเชฐเชพ, เชจเชตเซ BPF (เชฌเชฐเซเชเชฒเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเซเชธ) เชคเชเชจเซเช เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ, เชเซเชจเซเช เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ Motorola 6502 เชชเซเชฐเซเชธเซเชธเชฐ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชนเชคเซเช - เชเซเชฎ เชเซ เชเชพเชฃเซเชคเชพ เชเชคเซเชชเชพเชฆเชจเซเชจเซเช เชตเชฐเซเชเชนเซเชฐเซเชธ.
BPF เชฎเชถเซเชจ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ
เช
เชฎเซ เชเชฆเชพเชนเชฐเชฃเซเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซเชจเซ, เชเชพเชฐเซเชฏเชเชพเชฐเซ เชฐเซเชคเซ เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชฅเซ เชชเชฐเชฟเชเชฟเชค เชฅเชเชถเซเช. เชเซ เชเซ, เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชเชนเซเช เชเซ เชฎเชถเซเชจเชฎเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฎเชพเชเซ เชธเซเชฒเชญ เชฌเซ 32-เชฌเซเช เชฐเชเชฟเชธเซเชเชฐ เชนเชคเชพ, เชเช เชธเชเชเชฏเช A
เช
เชจเซ เชเชจเซเชกเซเชเซเชธ เชฐเชเซเชธเซเชเชฐ X
, 64 เชฌเชพเชเชเซเชธ เชฎเซเชฎเชฐเซ (16 เชถเชฌเซเชฆเซ), เชฒเซเชเชจ เช
เชจเซ เช
เชจเซเชเชพเชฎเซ เชตเชพเชเชเชจ เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชเซ, เช
เชจเซ เช เชเชฌเซเชเซเชเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฆเซเชถเซเชจเซ เชเช เชจเชพเชจเซ เชธเชฟเชธเซเชเชฎ. เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชฎเชพเช เชถเชฐเชคเซ เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟเช เชฒเชพเชเซ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชธเซเชเชจเชพเช เชชเชฃ เชเชชเชฒเชฌเซเชง เชนเชคเซ, เชชเชฐเชเชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชธเชฎเชฏเชธเชฐ เชชเซเชฐเซเชฃเชคเชพเชจเซ เชเชพเชคเชฐเซ เชเชชเชตเชพ เชฎเชพเชเซ, เชเซเชฆเชเชพ เชฎเชพเชคเซเชฐ เชเชเชณ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเชเชฒเซ เชเซ, เชเชพเชธ เชเชฐเซเชจเซ, เชฒเซเชชเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซ เชฎเชจเชพเช เชนเชคเซ.
เชฎเชถเซเชจ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชฏเซเชเชจเชพ เชจเซเชเซ เชฎเซเชเชฌ เชเซ. เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ BPF เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชฎเชพเชเซ เชเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฌเชจเชพเชตเซ เชเซ เช เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชฒเชพเช เชเชฐเซเชจเชฒ เชฎเชฟเชเซเชจเชฟเชเชฎ (เชเซเชฎ เชเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ), เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชฒเซเชก เชเชฐเซ เชเซ เช เชจเซ เชเชจเซเชเซเช เชเชฐเซ เชเซ เชเซเชเชฒเชพเชเชจเซ เชเชฐเซเชจเชฒเชฎเชพเช เชเชตเซเชจเซเช เชเชจเชฐเซเชเชฐ เชชเชฐ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชตเซเชจเซเช เช เชจเซเชเชตเชฐเซเช เชเชพเชฐเซเชก เชชเชฐเชจเชพ เชเชเชฒเชพ เชชเซเชเซเชเชจเซเช เชเชเชฎเชจ เชเซ). เชเซเชฏเชพเชฐเซ เชเซเช เชเชเชจเชพ เชฌเชจเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเชฐเซเชจเชฒ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชฒเชพเชตเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฆเซเชญเชพเชทเชฟเชฏเชพเชฎเชพเช), เช เชจเซ เชฎเชถเซเชจ เชฎเซเชฎเชฐเซเชจเซ เช เชจเซเชฐเซเชช เชเซเชเชฒเชพเชเชจเซ เชเชฐเซเชจเชฒ เชฎเซเชฎเชฐเซ เชชเซเชฐเชฆเซเชถ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชจเชเชฎเชฟเชเช เชชเซเชเซเชเชจเซ เชกเซเชเชพ).
เชเชชเชฐเซเชเซเชค เช
เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชฆเชพเชนเชฐเชฃเซ เชเซเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซเช เชนเชถเซ: เช
เชฎเซ เชธเชฟเชธเซเชเชฎ เช
เชจเซ เชเชฎเชพเชจเซเชก เชซเซเชฐเซเชฎเซเช เชธเชพเชฅเซ เชเชฐเซเชฐเซ เชคเชฐเซเชเซ เชชเชฐเชฟเชเชฟเชค เชฅเชเชถเซเช. เชเซ เชคเชฎเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเชจเซ เชเชฎเชพเชจเซเชก เชธเชฟเชธเซเชเชฎเชจเซ เชคเชพเชคเซเชเชพเชฒเชฟเช เช
เชญเซเชฏเชพเชธ เชเชฐเชตเชพ เช
เชจเซ เชคเซเชจเซ เชคเชฎเชพเชฎ เชเซเชทเชฎเชคเชพเช เชตเชฟเชถเซ เชเชพเชฃเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ, เชคเซ เชคเชฎเซ เชฎเซเชณ เชฒเซเช เชตเชพเชเชเซ เชถเชเซ เชเซ. libpcap
: เชชเซเชเซเช เชเซเชชเซเชเชฐ เชฎเชพเชเซ เชเช เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เช
เชจเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชชเชฆเซเชงเชคเชฟlibpcap
.
เช
เชฎเซ Linux เชชเชฐ เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเชพ เชคเชฎเชพเชฎ เชจเซเชเชงเชชเชพเชคเซเชฐ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพ เชเชเชณ เชตเชงเซเช เชเซเช: tcpdump
(libpcap
), seccomp, xt_bpf
, cls_bpf
.
tcpdump
BPF เชจเซ เชตเชฟเชเชพเชธ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช เชฎเชพเชเซ เชซเซเชฐเชจเซเชเชเชจเซเชกเชจเชพ เชตเชฟเชเชพเชธ เชธเชพเชฅเซ เชธเชฎเชพเชเชคเชฐ เชฐเซเชคเซ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ - เชเช เชเชพเชฃเซเชคเซ เชเชชเชฏเซเชเชฟเชคเชพ tcpdump
. เช
เชจเซ, เชเชฃเชพ เชเชชเชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎเซเชธ เชชเชฐ เชเชชเชฒเชฌเซเชง เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เช เชธเซเชฅเซ เชเซเชจเซเช เช
เชจเซ เชธเซเชฅเซ เชชเซเชฐเชเซเชฏเชพเชค เชเชฆเชพเชนเชฐเชฃ เชนเซเชตเชพเชฅเซ, เช
เชฎเซ เชคเซเชจเซ เชธเชพเชฅเซ เชเซเชเซเชจเซเชฒเซเชเซเชจเซ เช
เชฎเชพเชฐเซ เช
เชญเซเชฏเชพเชธ เชถเชฐเซ เชเชฐเซเชถเซเช.
(เชฎเซเช เช เชฒเซเชเชจเชพ เชคเชฎเชพเชฎ เชเชฆเชพเชนเชฐเชฃเซ Linux เชชเชฐ เชเชฒเชพเชตเซเชฏเชพ เชเซ 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
(เชชเซเชเซเช เชชเซเชฐเชเชพเชฐ) c 0x86dd
, เช
เชจเซ เช jt 2
ะธ jf 3
- เชเซ เชธเชฐเชเชพเชฎเชฃเซ เชธเชซเชณ เชฅเชพเชฏ เชคเซ เชคเชฎเชพเชฐเซ เชเซ เชเชฟเชนเซเชจเซ เชชเชฐ เชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (A == 0x86dd
) เช
เชจเซ เช
เชธเชซเชณ. เชคเซเชฅเซ, เชธเชซเชณ เชเชฟเชธเซเชธเชพเชฎเชพเช (IPv6) เชเชชเชฃเซ เชฒเชพเชเชจ 2 เชชเชฐ เชเชเช เชเซเช, เช
เชจเซ เช
เชธเชซเชณ เชเชฟเชธเซเชธเชพเชฎเชพเช - เชฒเชพเชเชจ 3 เชชเชฐ. เชฒเชพเชเชจ 3 เชชเชฐ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซเชก 0 เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ (เชชเซเชเซเชเชจเซ เชจเชเชฒ เชเชฐเชถเซ เชจเชนเซเช), เชฒเชพเชเชจ 2 เชชเชฐ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซเชก เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ. 262144 (เชฎเชจเซ เชฎเชนเชคเซเชคเชฎ 256 เชเชฟเชฒเซเชฌเชพเชเช เชชเซเชเซเชเชจเซ เชจเชเชฒ เชเชฐเซ).
เชตเชงเซ เชเชเชฟเชฒ เชเชฆเชพเชนเชฐเชฃ: เช เชฎเซ เชเชเชคเชตเซเชฏ เชชเซเชฐเซเช เชฆเซเชตเชพเชฐเชพ TCP เชชเซเชเซเชเซ เชเซเชเช เชเซเช
เชเชพเชฒเซ เชเซเชเช เชเซ เชซเชฟเชฒเซเชเชฐ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ เชเซ เชคเชฎเชพเชฎ TCP เชชเซเชเซเชเซเชจเซ เชเชเชคเชตเซเชฏ เชชเซเชฐเซเช 666 เชธเชพเชฅเซ เชจเชเชฒ เชเชฐเซ เชเซ. เช
เชฎเซ 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
IP เชนเซเชกเชฐเชจเซเช เชชเซเชฐเซเชเซเชเซเชฒ เชเซเชทเซเชคเซเชฐ, เชเซ เชคเชพเชฐเซเชเชฟเช เชเซ, เชเชพเชฐเชฃ เชเซ เชเชชเชฃเซ เชซเชเซเชค TCP เชชเซเชเซเชเซเชจเซ เชจเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเชเซเช เชเซเช. เช
เชฎเซ เชชเซเชฐเซเชเซเชเซเชฒ เชธเชพเชฅเซ เชธเชฐเชเชพเชฎเชฃเซ เชเชฐเซเช เชเซเช 0x6
(IPPROTO_TCP
4 เช
เชจเซ 5 เชฒเซเชเซเช เชชเชฐ เชเชชเชฃเซ เชเชกเซเชฐเซเชธ 20 เชชเชฐ เชธเซเชฅเชฟเชค เชนเชพเชซเชตเชฐเซเชกเซเชธ เชฒเซเชก เชเชฐเซเช เชเซเช เช
เชจเซ เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช jset
เชคเซเชฐเชฃเชฎเชพเชเชฅเซ เชเช เชธเซเช เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ jset
เชคเซเชฐเชฃ เชธเซเชฅเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฌเชฟเชเซเชธ เชธเชพเชซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเชฐเชฃเชฎเชพเชเชฅเซ เชฌเซ เชฌเชฟเชเซเชธ เช
เชฎเชจเซ เชเชฃเชพเชตเซ เชเซ เชเซ เชถเซเช เชชเซเชเซเช เชเชเชกเชฟเชค IP เชชเซเชเซเชเชจเซ เชญเชพเช เชเซ, เช
เชจเซ เชเซ เชเชฎ เชนเซเชฏ เชคเซ, เชถเซเช เชคเซ เชเซเชฒเซเชฒเซ เชเซเชเชกเซ เชเซ. เชคเซเชฐเซเชเซ เชฌเซเช เชเชฐเชเซเชทเชฟเชค เชเซ เช
เชจเซ เชถเซเชจเซเชฏ เชนเซเชตเซ เชเซเชเช. เช
เชฎเซ เช
เชชเซเชฐเซเชฃ เช
เชฅเชตเชพ เชคเซเชเซเชฒเชพ เชชเซเชเซเชเซ เชคเชชเชพเชธเชตเชพ เชฎเชพเชเชเชคเชพ เชจเชฅเซ, เชคเซเชฅเซ เช
เชฎเซ เชคเซเชฐเชฃเซเชฏ เชฌเชฟเชเซเชธ เชคเชชเชพเชธเซเช เชเซเช.
เช เชธเซเชเชฟเชฎเชพเช เชฒเชพเชเชจ 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: เชฒเซเชก เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เช
เชเชพเชเชจเชพ เชเชฆเชพเชนเชฐเชฃเซเชฎเชพเช, เช
เชฎเซ เชเชพเชธ เชเชฐเซเชจเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช เชฎเชพเชเซ เชเชฐเซเชจเชฒเชฎเชพเช BPF เชฌเชพเชเชเชเซเชก เชเซเชตเซ เชฐเซเชคเซ เชฒเซเชก เชเชฐเซเช เชเซเช เชคเซเชจเชพ เชชเชฐ เชตเชฟเชเชคเชตเชพเชฐ เชงเซเชฏเชพเชจ เชเชชเซเชฏเซเช เชจเชฅเซ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชนเซเช เชคเซ, tcpdump
เชเชฃเซ เชธเชฟเชธเซเชเชฎเซ เชชเชฐ เชชเซเชฐเซเชเซเชก เช
เชจเซ เชซเชฟเชฒเซเชเชฐเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ tcpdump
libpcap
libpcap
, เชคเชฎเชพเชฐเซ เชจเซเชเซเชจเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
- เชเช เชชเซเชฐเชเชพเชฐเชจเซเช เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชฌเชจเชพเชตเซ
pcap_t
เชเชจเซเชเชฐเชซเซเชธ เชจเชพเชฎ เชชเชฐเชฅเซ: ,pcap_create
- เชเชจเซเชเชฐเชซเซเชธ เชธเชเซเชฐเชฟเชฏ เชเชฐเซ:
,pcap_activate
- เชเชฎเซเชชเชพเชเชฒ เชซเชฟเชฒเซเชเชฐ:
,pcap_compile
- เชซเชฟเชฒเซเชเชฐเชจเซ เชเชจเซเชเซเช เชเชฐเซ:
.pcap_setfilter
เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชเซเชตเชพ เชฎเชพเชเซ pcap_setfilter
Linux เชฎเชพเช เช
เชฎเชฒเชฎเชพเช, เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช 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 เชฎเชพเช Linux เชฎเชพเช เชธเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช เช
เชจเซ เชคเซ เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ เชตเชฐเซเชเชนเซเชฐเซเชธ เชฐเชนเซเชฏเซเช เชเซ libpcap
เชเซเชเชชเชฃ เชเชพเชธ เชซเซเชฐเชซเชพเชฐเซ เชตเชฟเชจเชพ (เชฒเชฟเชจเชเซเชธ-เชตเชฟเชถเชฟเชทเซเช เชซเซเชฐเชซเชพเชฐเซ, เช
เชฒเชฌเชคเซเชค, x86_64
เชเซเชก
JIT เชเชฎเซเชชเชพเชเชฒเชฐ เชซเซเชฐเชซเชพเชฐเซเชจเซ เชธเชพเชเชเชณเชฎเชพเช เชชเซเชฐเชฅเชฎ เชนเชคเซเช: 2012 เชฎเชพเช xt_bpf
, เชเซ เชคเชฎเชจเซ เชจเชฟเชฏเชฎเซ เชฒเชเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ iptables
BPF เชจเซ เชฎเชฆเชฆ เชธเชพเชฅเซ, เช
เชจเซ เชเชเซเชเซเชฌเชฐ 2013 เชฎเชพเช เชนเชคเซ cls_bpf
, เชเซ เชคเชฎเชจเซ BPF เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชฐเชพเชซเชฟเช เชตเชฐเซเชเซเชเชฐเชฃ เชฒเชเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ.
เช
เชฎเซ เช เชคเชฎเชพเชฎ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชเซเชเช เชธเชฎเชฏเชฎเชพเช เชตเชงเซ เชตเชฟเชเชคเชฎเชพเช เชเซเชเชถเซเช, เชชเชฐเชเชคเซ เชชเซเชฐเชฅเชฎ เชคเซ เช
เชฎเชพเชฐเชพ เชฎเชพเชเซ BPF เชฎเชพเชเซ เชฎเชจเชธเซเชตเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเชพ เช
เชจเซ เชเชฎเซเชชเชพเชเชฒ เชเชฐเชตเชพ เชคเซ เชถเซเชเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเซ เชฅเชถเซ, เชเชพเชฐเชฃ เชเซ เชชเซเชธเซเชคเชเชพเชฒเชฏ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชเซเชทเชฎเชคเชพเช libpcap
เชฎเชฐเซเชฏเชพเชฆเชฟเชค (เชธเชฐเชณ เชเชฆเชพเชนเชฐเชฃ: เชซเชฟเชฒเซเชเชฐ เชเชจเชฐเซเช libpcap
เชซเชเซเชค เชฌเซ เชฎเซเชฒเซเชฏเซ เชชเชฐเชค เชเชฐเซ เชถเชเซ เชเซ - 0 เช
เชฅเชตเชพ 0x40000) เช
เชฅเชตเชพ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชเซเชฎ เชเซ เชธเซเชเชเซเชฎเซเชชเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฒเชพเชเซ เชชเชกเชคเซเช เชจเชฅเซ.
เชเชชเชฃเชพ เชชเซเชคเชพเชจเชพ เชนเชพเชฅเชฅเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช
เชเชพเชฒเซ BPF เชธเซเชเชจเชพเชเชจเชพ เชฌเชพเชเชจเชฐเซ เชซเซเชฐเซเชฎเซเชเชฅเซ เชชเชฐเชฟเชเชฟเชค เชฅเชเช, เชคเซ เชเซเชฌ เช เชธเชฐเชณ เชเซ:
16 8 8 32
| code | jt | jf | k |
เชฆเชฐเซเช เชธเซเชเชจเชพ 64 เชฌเชฟเชเซเชธ เชงเชฐเชพเชตเซ เชเซ, เชเซเชฎเชพเช เชชเซเชฐเชฅเชฎ 16 เชฌเชฟเชเซเชธ เชธเซเชเชจเชพ เชเซเชก เชเซ, เชชเชเซ เชฌเซ เชเช -เชฌเชฟเช เชเชจเซเชกเซเชจเซเชเซเชธ เชเซ, jt
ะธ jf
, เช
เชจเซ เชฆเชฒเซเชฒ เชฎเชพเชเซ 32 เชฌเชฟเชเซเชธ K
, เชเซเชจเซ เชนเซเชคเซ เชเชฆเซเชถเชฅเซ เชเชฆเซเชถเชฎเชพเช เชฌเชฆเชฒเชพเชฏ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชฆเซเชถ ret
, เชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชธเชฎเชพเชชเซเชค เชเชฐเซ เชเซ เชคเซ เชเซเชก เชงเชฐเชพเชตเซ เชเซ 6
, เช
เชจเซ เชตเชณเชคเชฐ เชฎเซเชฒเซเชฏ เชธเซเชฅเชฟเชฐเชพเชเชเชฎเชพเชเชฅเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ K
. C เชฎเชพเช, เชเช 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))
เชฎเชถเซเชจ เชเซเชกเชจเชพ เชฐเซเชชเชฎเชพเช เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฒเชเชตเชพ เช เชเซเชฌ เช
เชจเซเชเซเชณ เชจเชฅเซ, เชชเชฐเชเชคเซ เชเซเชเชฒเซเชเชตเชพเชฐ เชคเซ เชเชฐเซเชฐเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชกเชฟเชฌเชเซเชเช เชฎเชพเชเซ, เชเชเชฎ เชชเชฐเซเชเซเชทเชฃเซ เชฌเชจเชพเชตเชตเชพ, เชนเซเชฌเซเชฐเซ เชชเชฐ เชฒเซเชเซ เชฒเชเชตเชพ เชตเชเซเชฐเซ). เชธเชเชตเชก เชฎเชพเชเซ, เชซเชพเชเชฒเชฎเชพเช <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),
}
เชเซ เชเซ, เช เชตเชฟเชเชฒเซเชช เชเซเชฌ เช
เชจเซเชเซเชณ เชจเชฅเซ. เช เชคเซ เชเซ เชเซ Linux เชเชฐเซเชจเชฒ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐเซเช เชคเชฐเซเช เชเชชเซเชฏเซ เชเซ, เช
เชจเซ เชคเซเชฅเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช 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
, เชเซเชฎ เชเชชเชฃเซ เช เชตเชฟเชญเชพเชเชจเซ เชถเชฐเซเชเชคเชฎเชพเช เชเชฐเซเชฏเซเช เชนเชคเซเช.
Linux เช เชจเซ netsniff-ng เชเชเซเชธเซเชเซเชเชถเชจ
เชชเซเชฐเชฎเชพเชฃเชญเซเชค BPF เชเชชเชฐเชพเชเชค, Linux เช
เชจเซ 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
, เชเช BPF เชเชธเซเชฎเซเชฌเชฒเชฐเชจเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซ bpfc
. เชชเซเชเซเชเชฎเชพเช เชเซเชฌ เชตเชฟเชเชคเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซเชเซ เชเซ, เชฒเซเชเชจเชพ เช
เชเชคเซ เชฒเชฟเชเชเซเชธ เชชเชฃ เชเซเช.
เชธเซเชเชฎเซเชช
เชคเซเชฅเซ, เชเชชเชฃเซ เชชเชนเซเชฒเชพเชฅเซ เช เชเชพเชฃเซเช เชเซเช เชเซ เชฎเชจเชธเซเชตเซ เชเชเชฟเชฒเชคเชพเชจเชพ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเชพ เช เชจเซ เชจเชตเชพ เชเชฆเชพเชนเชฐเชฃเซ เชเซเชตเชพ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชเซเช, เชเซเชฎเชพเชเชฅเซ เชชเซเชฐเชฅเชฎ เชธเซเชเชเซเชฎเซเชช เชเซเชเซเชจเซเชฒเซเชเซ เชเซ, เชเซ BPF เชซเชฟเชฒเซเชเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชเชชเชฒเชฌเซเชง เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชฆเชฒเซเชฒเซเชจเชพ เชธเซเช เช เชจเซ เชธเซเชเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชเชชเซเชฒ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เช เชจเซ เชคเซเชจเชพ เชตเชเชถเชเซ.
seccomp เชจเซเช เชชเซเชฐเชฅเชฎ เชธเชเชธเซเชเชฐเชฃ 2005 เชฎเชพเช เชเชฐเซเชจเชฒเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช เช
เชจเซ เชคเซ เชเซเชฌ เชฒเซเชเชชเซเชฐเชฟเชฏ เชจ เชนเชคเซเช, เชเชพเชฐเชฃ เชเซ เชคเซ เชซเชเซเชค เชเช เช เชตเชฟเชเชฒเซเชช เชชเซเชฐเซ เชชเชพเชกเซ เชเซ - เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเชพ เชธเซเชเชจเซ เชจเซเชเซเชจเชพ เชธเซเชงเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเชฐเชตเชพ: read
, write
, exit
ะธ sigreturn
, เช
เชจเซ เชจเชฟเชฏเชฎเซเชจเซเช เชเชฒเซเชฒเชเชเชจ เชเชฐเชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชนเชคเซเชฏเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ SIGKILL
. เชเซ เชเซ, 2012 เชฎเชพเช, seccomp เช BPF เชซเชฟเชฒเซเชเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชเชฎเซเชฐเซ, เชเซเชจเชพเชฅเซ เชคเชฎเซ เชฎเชพเชจเซเชฏ เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเชพ เชธเชฎเซเชนเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชถเชเซ เชเซ เช
เชจเซ เชคเซเชฎเชจเซ เชฆเชฒเซเชฒเซ เชชเชฐ เชคเชชเชพเชธ เชชเชฃ เชเชฐเซ เชถเชเซ เชเซ. (เชฐเชธเชชเซเชฐเชฆ เชตเชพเชค เช เชเซ เชเซ, เชเซเชฐเซเชฎ เช เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเชพ เชชเซเชฐเชฅเชฎ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชฎเชพเชเชจเซเช เชเช เชนเชคเซเช, เช
เชจเซ เชเซเชฐเซเชฎ เชฒเซเชเซ เชนเชพเชฒเชฎเชพเช BPF เชจเชพ เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃ เชชเชฐ เชเชงเชพเชฐเชฟเชค KRSI เชฎเชฟเชเซเชจเชฟเชเชฎ เชตเชฟเชเชธเชพเชตเซ เชฐเชนเซเชฏเชพ เชเซ เช
เชจเซ Linux เชธเซเชฐเชเซเชทเชพ เชฎเซเชกเซเชฏเซเชฒเซเชธเชจเซ เชเชธเซเชเชฎเชพเชเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.) เชตเชงเชพเชฐเชพเชจเชพ เชฆเชธเซเชคเชพเชตเซเชเซเชจเซ เชฒเชฟเชเชเซเชธ เช
เชเชคเซ เชฎเชณเซ เชถเชเซ เชเซ. เชฒเซเชเชจเชพ.
เชจเซเชเชง เชเชฐเซ เชเซ เชธเซเชเชเซเชฎเซเชชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชตเชฟเชถเซ เชนเชฌ เชชเชฐ เชชเชนเซเชฒเชพเชฅเซ เช เชฒเซเชเซ เชเซ, เชเชฆเชพเช เชเซเช เชคเซเชจเซ เชจเซเชเซเชจเชพ เชชเซเชเชพเชตเชฟเชญเชพเชเซ เชตเชพเชเชเชคเชพ เชชเชนเซเชฒเชพ (เช
เชฅเชตเชพ เชคเซเชจเชพ เชฌเชฆเชฒเซ) เชตเชพเชเชเชตเชพ เชฎเชพเชเชเชถเซ. เชฒเซเชเชฎเชพเช
เชเชเชณ เชเชชเชฃเซ เชเซเชเชถเซเช เชเซ เชซเชฟเชฒเซเชเชฐเซเชธ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเชพ เช
เชจเซ เชฒเซเชก เชเชฐเชตเชพ seccomp
เชเชเชฆเชฎ เชธเซเชฎเชพเช เช
เชจเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ libseccomp
เช
เชจเซ เชฆเชฐเซเช เชตเชฟเชเชฒเซเชชเชจเชพ เชซเชพเชฏเชฆเชพ เช
เชจเซ เชเซเชฐเชซเชพเชฏเชฆเชพ เชถเซเช เชเซ, เช
เชจเซ เช
เชเชคเซ, เชเชพเชฒเซ เชเซเชเช เชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชธเซเชเชเซเชฎเซเชชเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ strace
.
เชธเซเชเชเซเชฎเซเชช เชฎเชพเชเซ เชซเชฟเชฒเซเชเชฐเซเชธ เชฒเชเชตเซเช เช เชจเซ เชฒเซเชก เชเชฐเชตเซเช
BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเชพ เชคเซ เชเชชเชฃเซ เชชเชนเซเชฒเชพเชฅเซ เช เชเชพเชฃเซเช เชเซเช, เชคเซ เชเชพเชฒเซ เชชเชนเซเชฒเชพ seccomp เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชเชจเซเชเชฐเชซเซเชธ เชเซเชเช. เชคเชฎเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเซเชคเชฐ เชชเชฐ เชซเชฟเชฒเซเชเชฐ เชธเซเช เชเชฐเซ เชถเชเซ เชเซ, เช
เชจเซ เชคเชฎเชพเชฎ เชฌเชพเชณ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชชเซเชฐเชคเชฟเชฌเชเชงเซ เชตเชพเชฐเชธเชพเชฎเชพเช เชฎเซเชณเชตเชถเซ. เช เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ seccomp(2)
seccomp(SECCOMP_SET_MODE_FILTER, flags, &filter)
เชเซเชฏเชพเช &filter
- เช เช
เชฎเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชชเชฐเชฟเชเชฟเชค เชฎเชพเชณเชเซเช เชฎเชพเชเซ เชจเชฟเชฐเซเชฆเซเชถเช เชเซ struct sock_fprog
, เชเชเชฒเซ เชเซ BPF เชเชพเชฐเซเชฏเชเซเชฐเชฎ.
เชธเซเชเชเซเชฎเซเชช เชฎเชพเชเซเชจเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชธเซเชเซเชเซเชธ เชฎเชพเชเซเชจเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เช เชฒเช เชชเชกเซ เชเซ? เชชเซเชฐเชธเชพเชฐเชฟเชค เชธเชเชฆเชฐเซเชญ. เชธเซเชเซเชเซเชธเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เชฎเชจเซ เชชเซเชเซเช เชงเชฐเชพเชตเชคเซ เชฎเซเชฎเชฐเซ เชตเชฟเชธเซเชคเชพเชฐ เชเชชเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ, เช เชจเซ เชธเซเชเชเซเชฎเซเชชเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เช เชฎเชจเซ เชเช เชฎเชพเชณเชเซเช เชเชชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช เชเซเชฎ เชเซ
struct seccomp_data {
int nr;
__u32 arch;
__u64 instruction_pointer;
__u64 args[6];
};
เชคเซ nr
เชฒเซเชเช เชฅเชจเชพเชฐ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชจเชเชฌเชฐ เชเซ, arch
- เชตเชฐเซเชคเชฎเชพเชจ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ (เชจเซเชเซ เชเชจเชพ เชชเชฐ เชตเชงเซ), args
- เช เชธเซเชงเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชฆเชฒเซเชฒเซ, เช
เชจเซ instruction_pointer
เช เชฏเซเชเชฐ เชธเซเชชเซเชธ เชธเซเชเชจเชพ เชฎเชพเชเซ เชเช เชจเชฟเชฐเซเชฆเซเชถเช เชเซ เชเซเชฃเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเชฐเซเชฏเซ เชนเชคเซ. เชเชฎ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฐเชเชฟเชธเซเชเชฐเชฎเชพเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชจเชเชฌเชฐ เชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ A
เชเชชเชฃเซ เชเชนเซเชตเซเช เชชเชกเชถเซ
ldw [0]
เชธเซเชเชเซเชฎเซเชช เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฎเชพเชเซ เช
เชจเซเชฏ เชธเซเชตเชฟเชงเชพเช เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเชเชฆเชฐเซเชญ เชซเชเซเชค 32-เชฌเซเช เชเซเช เชตเชฃเซ เชฆเซเชตเชพเชฐเชพ เช เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเชพเชฏ เชเซ เช
เชจเซ เชคเชฎเซ เช
เชกเชงเซ เชถเชฌเซเชฆ เช
เชฅเชตเชพ เชฌเชพเชเช เชฒเซเชก เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ - เชเซเชฏเชพเชฐเซ เชซเชฟเชฒเซเชเชฐ เชฒเซเชก เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชฐเชนเซเชฏเชพ เชนเซเชฏ ldh [0]
เชธเชฟเชธเซเชเชฎ เชเซเชฒ seccomp
เชชเชพเชเชพ เชเชตเชธเซ EINVAL
. เชซเชเชเซเชถเชจ เชฒเซเชก เชเชฐเซเชฒเชพ เชซเชฟเชฒเซเชเชฐเซเชธเชจเซ เชคเชชเชพเชธเซ เชเซ seccomp_check_filter()
mod
(เชตเชฟเชญเชพเช เชถเซเชท) เช
เชจเซ เชนเชตเซ เชธเซเชเชเซเชฎเซเชช BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชฎเชพเชเซ เช
เชจเซเชชเชฒเชฌเซเชง เชเซ, เชคเซเชฏเชพเชฐเชฅเซ เชคเซเชจเชพ เชเชฎเซเชฐเชพเชฅเซ
เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เชเชชเชฃเซ เชธเซเชเชเซเชฎเซเชช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฒเชเชตเชพ เช เชจเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เชชเชนเซเชฒเชพเชฅเซ เช เชฌเชงเซเช เชเชพเชฃเซเช เชเซเช. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฒเซเชเชฟเช เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธเชจเซ เชธเชซเซเชฆ เช เชฅเชตเชพ เชเชพเชณเซ เชธเซเชเชฟ เชคเชฐเซเชเซ เชเซเช เชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ
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
Linux เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเชพ เชตเชฐเซเชคเชจเชจเซ เช
เชญเซเชฏเชพเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เช
เชจเชฟเชตเชพเชฐเซเชฏ เชธเชพเชงเชจ เชเซ. เชเซ เชเซ, เชเชฃเชพเช เชคเซเชจเชพ เชตเชฟเชถเซ เชชเชฃ เชธเชพเชเชญเชณเซเชฏเซเช เชเซ 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
, เช
เชจเซ เชคเซเชฅเซ เชตเชงเซ.
เชธเซเชเชเซเชฎเซเชช เชธเชพเชฅเซ, เชเซ เชเซ, เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชชเชฃเซ เชเชเซเชเซเช เชคเซ เชฐเซเชคเซ เชฌเชฐเชพเชฌเชฐ เชเชชเซเชเชฟเชฎเชพเชเช เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชเซเชฎ เชเซ, เชเซ เชเชชเชฃเซ เชซเชเซเชค เชธเชฟเชธเซเชเชฎ เชเซเชฒเชจเซ เชเซเชตเชพ เชฎเชพเชเชเซเช เชเซเช 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 เชฆเซเชตเชพเชฐเชพ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ. เชฌเซเชเซเช, เชคเซเชฏเชพเช เชเซเช เชถเชเซเชฏเชคเชพ เชจเชฅเซ เชจเชฅเซ เชฌเชพเชณ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชเซเช, เชเชพเชฐเชฃ เชเซ 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"
IP เชนเซเชกเชฐเชจเชพ 32 เชฌเชฟเชเซเชธ เชฒเซเชก เชเชฐเซ เชเซ, เชเซ เชชเซเชกเชฟเชเช 6 เชฅเซ เชถเชฐเซ เชฅเชพเชฏ เชเซ, เช
เชจเซ เชคเซเชฎเชจเชพ เชชเชฐ เชฎเชพเชธเซเช เชฒเชพเชเซ เชเชฐเซ เชเซ 0xFF
(เชฒเซ เชฌเชพเชเช เชฒเซ). เช เชเซเชทเซเชคเซเชฐ protocol
IP เชนเซเชกเชฐ เช
เชจเซ เช
เชฎเซ เชคเซเชจเซ เชธเชฐเชเชพเชฎเชฃเซ 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
เชเชชเชฐเชจเชพ เชเชฆเชพเชนเชฐเชฃ เชเชฐเชคเชพเช เชตเชงเซ เชเชเชฟเชฒ เชซเชฟเชฒเซเชเชฐเซเชธเชจเซ เชธเชชเซเชฐเซเช เชเชฐเซ เชเซ. เชเชพเชฒเซ Cloudfare เชจเชพ เชตเชพเชธเซเชคเชตเชฟเช เชเชฆเชพเชนเชฐเชฃเซ เชเซเชเช. เชคเชพเชเซเชคเชฐเชฎเชพเช เชธเซเชงเซ เชคเซเช เชฎเซเชกเซเชฏเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเชคเชพ เชนเชคเชพ xt_bpf
DDoS เชนเซเชฎเชฒเชพเช เชธเชพเชฎเซ เชฐเชเซเชทเชฃ เชเชชเชตเชพ เชฎเชพเชเซ. เชฒเซเชเชฎเชพเช bpfgen
เชคเชฎเซ เชจเชพเชฎ เชฎเชพเชเซ DNS เชเซเชตเซเชฐเซ เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชคเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ 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
เชฒเชฟเชจเชเซเชธเชฎเชพเช เชเซเชฐเชพเชซเชฟเช เชเชเชเซเชฐเซเชฒ เชธเชฌเชธเชฟเชธเซเชเชฎ เชฎเชพเชเซ, 2013เชจเชพ เช
เชเชคเชฎเชพเช เชฒเชฟเชจเชเซเชธเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช เช
เชจเซ เชตเซเชเชพเชฐเชฟเช เชฐเซเชคเซ เชชเซเชฐเชพเชเซเชจเชจเซ เชฌเชฆเชฒเซเชจเซ cls_u32
.
เชเซ เชเซ, เช
เชฎเซ เชนเชตเซ เชเชพเชฐเซเชฏเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเชถเซเช เชจเชนเซเช cls_bpf
, เชเชพเชฐเชฃ เชเซ เชเซเชฒเชพเชธเชฟเช BPF เชตเชฟเชถเซเชจเชพ เชเซเชเชพเชจเชจเชพ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ เช เช
เชฎเชจเซ เชเชเชเชชเชฃ เชเชชเชถเซ เชจเชนเซเช - เช
เชฎเซ เชชเชนเซเชฒเซเชฅเซ เช เชฌเชงเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชฅเซ เชชเชฐเชฟเชเชฟเชค เชฅเช เชเชฏเชพ เชเซเช. เชตเชงเซเชฎเชพเช, เชตเชฟเชธเซเชคเซเชค BPF เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชคเชพ เช
เชจเซเชเชพเชฎเซ เชฒเซเชเซเชฎเชพเช, เช
เชฎเซ เช เชตเชฐเซเชเซเชเชฐเชฃเชเชฐเซเชคเชพเชจเซ เชเช เชเชฐเชคเชพ เชตเชงเซ เชตเชพเชฐ เชฎเชณเซเชถเซเช.
เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชตเชฟเชถเซ เชตเชพเชค เชจ เชเชฐเชตเชพเชจเซเช เชฌเซเชเซเช เชเชพเชฐเชฃ c cls_bpf
เชธเชฎเชธเซเชฏเชพ เช เชเซ เชเซ, เชตเชฟเชธเซเชคเซเชค BPF เชจเซ เชคเซเชฒเชจเชพเชฎเชพเช, เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชฒเชพเชเซ เชฅเชตเชพเชจเซ เช
เชตเชเชพเชถ เชงเชฐเชฎเซเชณเชฅเซ เชธเชเชเซเชเชฟเชค เชเซ: เชเซเชฒเชพเชธเชฟเชเชฒ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชชเซเชเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซเชจเซ เชฌเชฆเชฒเซ เชถเชเชคเชพ เชจเชฅเซ เช
เชจเซ เชเซเชฒเซเชธ เชตเชเซเชเซ เชธเซเชฅเชฟเชคเชฟ เชธเชพเชเชตเซ เชถเชเชคเชพ เชจเชฅเซ.
เชคเซเชฅเซ เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เช เชฒเชตเชฟเชฆเชพ เชเชนเซเชตเชพเชจเซ เช เชจเซ เชญเชตเชฟเชทเซเชฏ เชคเชฐเชซ เชงเซเชฏเชพเชจ เชเชชเชตเชพเชจเซ เช เชธเชฎเชฏ เชเซ.
เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เชตเชฟเชฆเชพเชฏ
เช
เชฎเซ เชเซเชฏเซเช เชเซ เชเซเชตเซ เชฐเซเชคเซ เชจเซเชตเซเชเชจเชพ เชฆเชพเชฏเชเชพเชจเซ เชถเชฐเซเชเชคเชฎเชพเช เชตเชฟเชเชธเชฟเชค เชฅเชฏเซเชฒ BPF เชเซเชเซเชจเซเชฒเซเชเซ, เชเช เชธเชฆเซเชจเชพ เชเช เชเซเชตเชพเชฐเซเชเชฐ เชธเซเชงเซ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชเซเชตเซ เช
เชจเซ เช
เชเชค เชธเซเชงเซ เชจเชตเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชณเซ. เชเซ เชเซ, เชธเซเชเซเช เชฎเชถเซเชจเซเชฅเซ RISC เชฎเชพเช เชธเชเชเซเชฐเชฎเชฃเชจเซ เชเซเชฎ, เชเซ เชเซเชฒเชพเชธเชฟเช BPF เชจเชพ เชตเชฟเชเชพเชธ เชฎเชพเชเซ เชชเซเชฐเซเชคเซเชธเชพเชนเชจ เชคเชฐเซเชเซ เชธเซเชตเชพ เชเชชเซ เชนเชคเซ, 32 เชจเชพ เชฆเชพเชฏเชเชพเชฎเชพเช 64-bit เชฅเซ XNUMX-bit เชฎเชถเซเชจเซเชฎเชพเช เชธเชเชเซเชฐเชฎเชฃ เชฅเชฏเซเช เชนเชคเซเช เช
เชจเซ เชเซเชฒเชพเชธเชฟเช BPF เช
เชชเซเชฐเชเชฒเชฟเชค เชฅเชตเชพ เชฒเชพเชเซเชฏเซเช เชนเชคเซเช. เชตเชงเซเชฎเชพเช, เชเซเชฒเชพเชธเชฟเช BPF เชจเซ เชเซเชทเชฎเชคเชพเช เชเซเชฌ เช เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเซ, เช
เชจเซ เชเซเชจเชพ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชเชชเชฐเชพเชเชค - เช
เชฎเชพเชฐเซ เชชเชพเชธเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชชเชฐเชจเชพ เชเซเชฒเซเชธ เชตเชเซเชเซ เชฐเชพเชเซเชฏ เชฌเชเชพเชตเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชจเชฅเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชธเซเชงเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเช เชถเชเซเชฏเชคเชพ เชจเชฅเซ, เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเช เชถเชเซเชฏเชคเชพ เชจเชฅเซ. เชเชฐเซเชจเชฒ เชธเชพเชฅเซ, เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเชเชเซเชฏเชพเชฎเชพเช เชธเซเชเซเชฐเชเซเชเชฐ เชซเซเชฒเซเชกเซเชธ เชตเชพเชเชเชตเชพ เชธเชฟเชตเชพเชฏ sk_buff
เช
เชจเซ เชธเซเชฅเซ เชธเชฐเชณ เชนเซเชฒเซเชชเชฐ เชซเชเชเซเชถเชจเซเชธ เชฒเซเชจเซเช เชเชฐเซเชจเซ, เชคเชฎเซ เชชเซเชเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซ เชฌเชฆเชฒเซ เชถเชเชคเชพ เชจเชฅเซ เช
เชจเซ เชคเซเชฎเชจเซ เชฐเซเชกเชพเชฏเชฐเซเชเซเช เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ.
เชตเชพเชธเซเชคเชตเชฎเชพเช, เชนเชพเชฒเชฎเชพเช Linux เชฎเชพเช เชเซเชฒเชพเชธเชฟเช BPF เชจเชพ เชฌเชพเชเซ เชฐเชนเซเชฒ เชคเชฎเชพเชฎ API เชเชจเซเชเชฐเชซเซเชธ เชเซ, เช เชจเซ เชเชฐเซเชจเชฒเชจเซ เช เชเชฆเชฐ เชคเชฎเชพเชฎ เชเซเชฒเชพเชธเชฟเช เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ, เชชเชเซ เชญเชฒเซ เชคเซ เชธเซเชเซเช เชซเชฟเชฒเซเชเชฐเซเชธ เชนเซเชฏ เชเซ seccomp เชซเชฟเชฒเซเชเชฐเซเชธ, เชเช เชจเชตเชพ เชซเซเชฐเซเชฎเซเช, เชตเชฟเชธเซเชคเซเชค BPFเชฎเชพเช เชเชชเชฎเซเชณเซ เช เชจเซเชตเชพเชฆเชฟเชค เชฅเชพเชฏ เชเซ. (เช เชเซเชตเซ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ เชคเซ เชตเชฟเชถเซ เช เชฎเซ เชเชเชฒเชพ เชฒเซเชเชฎเชพเช เชตเชพเชค เชเชฐเซเชถเซเช.)
เชจเชตเชพ เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชฎเชพเช เชธเชเชเซเชฐเชฎเชฃ 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
- เชธเซเชเชเซเชฎเซเชช เชตเชฟเชนเชเชเชพเชตเชฒเซเชเชจ:
https://lwn.net/Articles/656307/
https://github.com/torvalds/linux/blob/master/Documentation/userspace-api/seccomp_filter.rst
habr: เชเชจเซเชเซเชจเชฐ เช เชจเซ เชธเซเชฐเชเซเชทเชพ: seccomp habr: systemd เชธเชพเชฅเซ เชกเชฟเชฎเชจเซเชธเชจเซ เช เชฒเช เชเชฐเชตเซเช เช เชฅเชตเชพ "เชคเชฎเชจเซ เช เชฎเชพเชเซ เชกเซเชเชฐเชจเซ เชเชฐเซเชฐ เชจเชฅเซ!" - เชชเซเชฒ เชเซเชเชจเชจ, "เชธเซเชเซเชฐเซเชธ --เชธเซเชเชเซเชฎเซเชช-เชฌเซเชชเซเชเชซ: เช
เชฒเซเช เช
เชจเซเชกเชฐ เชง เชนเซเชก",
https://fosdem.org/2020/schedule/event/debugging_strace_bpf/
netsniff-ng
:http://netsniff-ng.org/
เชธเซเชฐเซเชธ: www.habr.com