เจฌเจฐเจเจฒเฉ เจชเฉเจเฉเจ เจซเจฟเจฒเจเจฐเจธ (BPF) เจเฉฑเจ เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจคเจเจจเจพเจฒเฉเจเฉ เจนเฉ เจเฉ เจชเจฟเจเจฒเฉ เจเจ เจธเจพเจฒเจพเจ เจคเฉเจ เจ
เฉฐเจเจฐเฉเจเจผเฉ-เจญเจพเจธเจผเจพ เจฆเฉ เจคเจเจจเฉเจเฉ เจชเฉเจฐเจเจพเจธเจผเจจเจพเจ เจฆเฉ เจชเจนเจฟเจฒเฉ เจชเฉฐเจจเจฟเจเจ 'เจคเฉ เจนเฉเฅค เจเจพเจจเจซเจฐเฉฐเจธเจพเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฐเจคเฉเจ เจ
เจคเฉ เจตเจฟเจเจพเจธ เจฌเจพเจฐเฉ เจฐเจฟเจชเฉเจฐเจเจพเจ เจจเจพเจฒ เจญเจฐเฉเจเจ เจนเฉเจเจเจ เจนเจจเฅค เจกเฉเจตเจฟเจก เจฎเจฟเจฒเจฐ, เจฒเฉเจจเจเจธ เจจเฉเฉฑเจเจตเจฐเจ เจธเจฌ-เจธเจฟเจธเจเจฎ เจฎเฉเจจเจเฉเจจเจฐ, เจฒเฉเจจเจเจธ เจชเจฒเฉฐเจฌเจฐเจเจผ 2018 'เจคเฉ เจเจชเจฃเฉ เจญเจพเจธเจผเจฃ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจฆเจพ เจนเฉ
Habrรฉ 'เจคเฉ BPF เจฆเจพ เจ
เจเฉ เจตเฉ เจเฉเจ เจตเจฟเจตเจธเจฅเจฟเจค เจตเจฐเจฃเจจ เจจเจนเฉเจ เจนเฉ, เจ
เจคเฉ เจเจธเจฒเจ เจฒเฉเจเจพเจ เจฆเฉ เจเฉฑเจ เจฒเฉเฉ เจตเจฟเฉฑเจ เจฎเฉเจ เจคเจเจจเจพเจฒเฉเจเฉ เจฆเฉ เจเจคเจฟเจนเจพเจธ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจพเจเจเจพ, เจเจฐเจเฉเจเฉเจเจเจฐ เจ
เจคเฉ เจตเจฟเจเจพเจธ เจธเจพเจงเจจเจพเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจพเจเจเจพ, เจ
เจคเฉ BPF เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจเจพเจฐเจ เจ
เจคเฉ เจ
เจญเจฟเจเจธ เจฆเฉ เจเฉเจคเจฐเจพเจ เจฆเฉ เจฐเฉเจชเจฐเฉเจเจพ เจฌเจฃเจพเจตเจพเจเจเจพเฅค เจเจน เจฒเฉเจ, เจเจผเฉเจฐเฉ, เจฒเฉเฉ เจตเจฟเฉฑเจ, เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจเจคเจฟเจนเจพเจธ เจ
เจคเฉ เจเจฐเจเฉเจเฉเจเจเจฐ เจจเฉเฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉ, เจ
เจคเฉ เจเจธเจฆเฉ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจงเจพเจเจคเจพเจ เจฆเฉ เจญเฉเจฆ เจตเฉ เจชเฉเจฐเจเจ เจเจฐเจฆเจพ เจนเฉเฅค tcpdump
, seccomp
, strace
, เจ
เจคเฉ เจนเฉเจฐ เจฌเจนเฉเจค เจเฉเจเฅค
เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฟเจเจพเจธ เจจเฉเฉฐ เจฒเฉเจจเจเจธ เจจเฉเจเจตเจฐเจเจฟเฉฐเจ เจเจฎเจฟเจเจจเจฟเจเฉ เจฆเฉเจเจฐเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจฌเฉเจชเฉเจเจซ เจฆเฉเจเจ เจฎเฉเฉฑเจ เจฎเฉเจเฉเจฆเจพ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเจเจตเจฐเจ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเจจ เจ
เจคเฉ เจเจธเจฒเจ, เจเจเจพเจเจผเจค เจจเจพเจฒ
เจฌเฉเจชเฉเจเจซ เจฆเฉ เจเจคเจฟเจนเจพเจธ เจตเจฟเฉฑเจ เจเฉฑเจ เจเฉเจเจพ เจเฉเจฐเจธ (c)
เจเจงเฉเจจเจฟเจ BPF เจคเจเจจเจพเจฒเฉเจเฉ เจเจธเฉ เจจเจพเจฎ เจจเจพเจฒ เจชเฉเจฐเจพเจฃเฉ เจคเจเจจเจพเจฒเฉเจเฉ เจฆเจพ เจเฉฑเจ เจธเฉเจงเจพเจฐเจฟเจ เจ
เจคเฉ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฐเฉเจช เจนเฉ, เจเจฟเจธเจจเฉเฉฐ เจนเฉเจฃ เจเจฒเจเจฃ เจคเฉเจ เจฌเจเจฃ เจฒเจ เจเจฒเจพเจธเจฟเจ BPF เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจ
เจงเจพเจฐ เจคเฉ เจเฉฑเจ เจฎเจธเจผเจนเฉเจฐ เจเจชเจฏเฉเจเจคเจพ เจฌเจฃเจพเจ เจเจ เจธเฉ tcpdump
, เจตเจฟเจงเฉ seccomp
, เจจเจพเจฒ เจนเฉ เจเฉฑเจ เจเจพเจฃเฉ เจเจพเจเจฆเฉ เจฎเฉเจกเฉเจเจฒ xt_bpf
เจจเฉเฉฐ iptables
เจ
เจคเฉ เจตเจฐเจเฉเจเจฐเจฃเจเจพเจฐ cls_bpf
. เจเจงเฉเจจเจฟเจ เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ, เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฆเจพ เจเจชเจฃเฉ เจเจช เจนเฉ เจจเจตเฉเจ เจฐเฉเจช เจตเจฟเฉฑเจ เจ
เจจเฉเจตเจพเจฆ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจนเจพเจฒเจพเจเจเจฟ, เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ, เจเจชเฉเจเจ เจเจพเจเจฎ เจนเฉ เจ
เจคเฉ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฒเจ เจจเจตเฉเจ เจเจชเจฏเฉเจ, เจเจฟเจตเฉเจ เจเจฟ เจ
เจธเฉเจ เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจฆเฉเจเจพเจเจเฉ, เจ
เจเฉ เจตเฉ เจฒเฉฑเจญเฉ เจเจพ เจฐเจนเฉ เจนเจจเฅค เจเจธ เจเจพเจฐเจจ เจเจฐเจเฉ, เจ
เจคเฉ เจเจน เจตเฉ เจเจฟเจเจเจเจฟ เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจเจฒเจพเจธเฉเจเจฒ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจเจคเจฟเจนเจพเจธ เจฆเฉ เจชเจพเจฒเจฃเจพ เจเจฐเจฆเฉ เจนเฉเจ, เจเจน เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจพเจตเฉเจเจพ เจเจฟ เจเจน เจเจธเจฆเฉ เจเจงเฉเจจเจฟเจ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจฟเจตเฉเจ เจ
เจคเฉ เจเจฟเจเจ เจตเจฟเจเจธเจค เจนเฉเจเจ, เจฎเฉเจ เจเจฒเจพเจธเฉเจเจฒ เจฌเฉเจชเฉเจเจซ เจฌเจพเจฐเฉ เจเฉฑเจ เจฒเฉเจ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพเฅค
เจชเจฟเจเจฒเฉ เจธเจฆเฉ เจฆเฉ เจ เฉฑเจธเฉเจตเจฟเจเจ เจฆเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ, เจฎเจธเจผเจนเฉเจฐ เจฒเจพเจฐเฉเจเจธ เจฌเจฐเจเจฒเฉ เจฒเฉเจฌเจพเจฐเจเจฐเฉ เจฆเฉ เจเฉฐเจเฉเจจเฉเจ เจฐ เจเจธ เจธเจตเจพเจฒ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจธเจจ เจเจฟ เจชเจฟเจเจฒเฉ เจธเจฆเฉ เจฆเฉ เจ เฉฑเจธเฉเจตเจฟเจเจ เจฆเฉ เจ เจเฉเจฐ เจตเจฟเฉฑเจ เจเจงเฉเจจเจฟเจ เจนเจพเจฐเจกเจตเฉเจ เจฐ เจเฉฑเจคเฉ เจจเฉเจเจตเจฐเจ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจซเจฟเจฒเจเจฐ เจเจฐเจจเจพ เจนเฉเฅค เจซเจฟเจฒเจเจฐเจฟเฉฐเจ เจฆเจพ เจฎเฉเจฒ เจตเจฟเจเจพเจฐ, เจ เจธเจฒ เจตเจฟเฉฑเจ CSPF (CMU/เจธเจเฉเจจเจซเฉเจฐเจก เจชเฉเจเฉเจ เจซเจฟเจฒเจเจฐ) เจคเจเจจเจพเจฒเฉเจเฉ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจฌเฉเจฒเฉเฉเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจเจฟเฉฐเจจเฉ เจเจฒเจฆเฉ เจนเฉ เจธเจเฉ เจซเจฟเจฒเจเจฐ เจเจฐเจจเจพ เจธเฉ, เจฏเจพเจจเฉ. เจเจฐเจจเจฒ เจธเจชเฉเจธ เจตเจฟเฉฑเจ, เจเจฟเจเจเจเจฟ เจเจน เจฏเฉเจเจผเจฐ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจฌเฉเจฒเฉเฉเฉ เจกเฉเจเจพ เจฆเฉ เจจเจเจฒ เจเจฐเจจ เจคเฉเจ เจฌเจเจฆเจพ เจนเฉเฅค เจเจฐเจจเจฒ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจฏเฉเจเจผเจฐ เจเฉเจก เจเจฒเจพเจเจฃ เจฒเจ เจฐเจจเจเจพเจเจฎ เจธเฉเจฐเฉฑเจเจฟเจ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฒเจ, เจเฉฑเจ เจธเฉเจเจกเจฌเฉเจเจธเจก เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจตเจฐเจคเฉ เจเจ เจธเฉเฅค
เจนเจพเจฒเจพเจเจเจฟ, เจฎเฉเจเฉเจฆเจพ เจซเจฟเจฒเจเจฐเจพเจ เจฒเจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจเจพเจ เจธเจเฉเจ-เจ
เจงเจพเจฐเจฟเจค เจฎเจธเจผเฉเจจเจพเจ 'เจคเฉ เจเฉฑเจฒเจฃ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉเจเจ เจเจเจเจ เจธเจจ เจ
เจคเฉ เจจเจตเฉเจเจ 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
(เจชเฉเจเฉเจ เจฆเฉ เจเจฟเจธเจฎ) c 0x86dd
, เจ
เจคเฉ เจเจน jt 2
ะธ jf 3
- เจเฉเจเจฐ เจคเฉเจฒเจจเจพ เจธเจซเจฒ เจนเฉเฉฐเจฆเฉ เจนเฉ เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเจพเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ (A == 0x86dd
) เจ
เจคเฉ เจ
เจธเจซเจฒเฅค เจเจธ เจฒเจ, เจเฉฑเจ เจธเจซเจฒ เจเฉเจธ (IPv6) เจตเจฟเฉฑเจ เจ
เจธเฉเจ เจฒเจพเจเจจ 2 เจคเฉ เจเจพเจเจฆเฉ เจนเจพเจ, เจ
เจคเฉ เจเฉฑเจ เจ
เจธเจซเจฒ เจเฉเจธ เจตเจฟเฉฑเจ - เจฒเจพเจเจจ 3 เจคเฉเฅค เจฒเจพเจเจจ 3 เจเฉฑเจคเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉเจก 0 เจจเจพเจฒ เจธเจฎเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ (เจชเฉเจเฉเจ เจฆเฉ เจจเจเจฒ เจจเจพ เจเจฐเฉ), เจฒเจพเจเจจ 2 เจเฉฑเจคเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉเจก เจจเจพเจฒ เจธเจฎเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉเฅค 262144 (เจฎเฉเจจเฉเฉฐ เจตเฉฑเจง เจคเฉเจ เจตเฉฑเจง 256 เจเจฟเจฒเฉเจฌเจพเจเจ เจชเฉเจเฉเจ เจเจพเจชเฉ เจเจฐเฉ)เฅค
เจเฉฑเจ เจนเฉเจฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเจฆเจพเจนเจฐเจจ: เจ เจธเฉเจ เจเฉเจธเฉเจชเฉ เจชเฉเจเฉเจ เจจเฉเฉฐ เจฎเฉฐเจเจผเจฟเจฒ เจชเฉเจฐเจ เจฆเฉเจเจฐเจพ เจฆเฉเจเจฆเฉ เจนเจพเจ
เจเจ เจฆเฉเจเฉเจ เจเจฟ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจเจฟเจนเฉ เจเจฟเจนเจพ เจฆเจฟเจธเจฆเจพ เจนเฉ เจเฉ เจเจฟ เจฎเฉฐเจเจผเจฟเจฒ เจชเฉเจฐเจ 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
IP เจธเจฟเจฐเจฒเฉเจ เจฆเจพ เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจเฉเจคเจฐ, เจเฉ เจเจฟ เจฒเจพเจเจผเฉเจเจฒ เจนเฉ, เจเจฟเจเจเจเจฟ เจ
เจธเฉเจ เจธเจฟเจฐเจซเจผ TCP เจชเฉเจเฉเจเจพเจ เจฆเฉ เจจเจเจฒ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค เจ
เจธเฉเจ เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจจเจพเจฒ เจคเฉเจฒเจจเจพ เจเจฐเจฆเฉ เจนเจพเจ 0x6
(IPPROTO_TCP
เจฒเจพเจเจจเจพเจ 4 เจ
เจคเฉ 5 'เจคเฉ เจ
เจธเฉเจ เจเจกเจฐเฉเฉฑเจธ 20 'เจคเฉ เจธเจฅเจฟเจค เจ
เฉฑเจงเฉ เจธเจผเจฌเจฆเจพเจ เจจเฉเฉฐ เจฒเฉเจก เจเจฐเจฆเฉ เจนเจพเจ เจ
เจคเฉ เจเจฎเจพเจเจก เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ jset
เจเจพเจเจ เจเจฐเฉ เจเจฟ เจเฉ เจคเจฟเฉฐเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจธเฉเฉฑเจ เจนเฉ jset
เจคเจฟเฉฐเจจ เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจฌเจฟเฉฑเจ เจธเจพเจซเจผ เจเฉเจคเฉ เจเจ เจนเจจเฅค เจคเจฟเฉฐเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจฆเฉ เจฌเจฟเฉฑเจ เจธเจพเจจเฉเฉฐ เจฆเฉฑเจธเจฆเฉ เจนเจจ เจเจฟ เจเฉ เจชเฉเจเฉเจ เจเฉฑเจ เจเฉฐเจกเจฟเจค IP เจชเฉเจเฉเจ เจฆเจพ เจนเจฟเฉฑเจธเจพ เจนเฉ, เจ
เจคเฉ เจเฉเจเจฐ เจ
เจเจฟเจนเจพ เจนเฉ, เจคเจพเจ เจเฉ เจเจน เจเจเจฐเฉ เจเฉเจเฉเจพ เจนเฉเฅค เจคเฉเจเจพ เจฌเจฟเฉฑเจ เจฐเจพเจเจตเจพเจ เจนเฉ เจ
เจคเฉ เจเจผเฉเจฐเฉ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจ
เจธเฉเจ เจ
เจงเฉเจฐเฉ เจเจพเจ เจเฉเฉฑเจเฉ เจนเฉเจ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจเจพเจเจ เจจเจนเฉเจ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ, เจเจธ เจฒเจ เจ
เจธเฉเจ เจธเจพเจฐเฉ เจคเจฟเฉฐเจจ เจฌเจฟเฉฑเจเจพเจ เจฆเฉ เจเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจฒเจพเจเจจ 6 เจเจธ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจฆเจฟเจฒเจเจธเจช เจนเฉ. เจธเจฎเฉเจเจฐเจจ ldxb 4*([14]&0xf)
เจญเจพเจต เจ
เจธเฉเจ เจฐเจเจฟเจธเจเจฐ เจตเจฟเฉฑเจ เจฒเฉเจก เจเจฐเจฆเฉ เจนเจพเจ X
เจชเฉเจเฉเจ เจฆเฉ เจชเฉฐเจฆเจฐเฉเจนเจตเฉเจ เจฌเจพเจเจ เจฆเฉ เจธเจญ เจคเฉเจ เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจเจพเจฐ เจฌเจฟเฉฑเจเจพเจ เจจเฉเฉฐ 4 เจจเจพเจฒ เจเฉเจฃเจพ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจชเฉฐเจฆเจฐเจตเฉเจ เจฌเจพเจเจ เจฆเฉ เจธเจญ เจคเฉเจ เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจเจพเจฐ เจฌเจฟเฉฑเจ เจเฉเจคเจฐ เจนเฉ 4*([14]&0xf)
เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ เจเจกเจฐเฉเจธเจฟเฉฐเจ เจธเจเฉเจฎ เจฒเจ เจเฉฑเจ เจ
เจนเฉเจฆเจพ เจนเฉ เจเฉ เจธเจฟเจฐเจซเจผ เจเจธ เจซเจพเจฐเจฎ เจตเจฟเฉฑเจ เจ
เจคเฉ เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจฐเจเจฟเจธเจเจฐ เจฒเจ เจตเจฐเจคเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ X
, i.e. เจ
เจธเฉเจ เจตเฉ เจจเจนเฉเจ เจเจนเจฟ เจธเจเจฆเฉ 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
เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจ
เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ 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
(เจธเจพเจฐเฉ เจชเฉเจเฉเจ เจเฉฑเจกเฉ), เจธเจพเจเจ เจจเฉเฉฐ เจจเจพเจจ-เจฌเจฒเจพเจเจฟเฉฐเจ เจฎเฉเจก เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉ เจ
เจคเฉ เจธเจพเจฐเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจเจเจพเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ เจเฉ เจชเจฟเจเจฒเฉ เจซเจฟเจฒเจเจฐเจพเจ เจคเฉเจ เจฐเจนเจฟ เจธเจเจฆเฉ เจนเจจเฅค
เจเฉเจฒ เจฎเจฟเจฒเจพ เจเฉ, เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจฒเฉเจจเจเจธ เจเฉฑเจคเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจซเจฟเจฒเจเจฐ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจเฉฑเจ เจขเจพเจเจเฉ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเจฟเจตเฉเจ เจเจฟ struct sock_fprog
เจ
เจคเฉ เจเฉฑเจ เจเฉเฉฑเจฒเจพ เจธเจพเจเจ, เจเจฟเจธ เจคเฉเจ เจฌเจพเจ
เจฆ เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจธเจฟเจธเจเจฎ เจเจพเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเจพเจเจ เจจเจพเจฒ เจเฉเฉเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ setsockopt
.
เจฆเจฟเจฒเจเจธเจช เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจเจฟเจธเฉ เจตเฉ เจธเจพเจเจ เจจเจพเจฒ เจเฉเฉเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจจเจพ เจเจฟ เจธเจฟเจฐเจซ เจเฉฑเจเจพ. เจเจฅเฉ
เจตเจฐเจคเฉเจ เจฌเจพเจฐเฉ เจนเฉเจฐ เจตเฉเจฐเจตเฉ setsockopt
เจซเจฟเจฒเจเจฐเจพเจ เจจเฉเฉฐ เจเฉเฉเจจ เจฒเจ, เจตเฉเจเฉ struct sock_fprog
เจฎเจฆเจฆ เจฆเฉ เจฌเจเฉเจฐ tcpdump
เจ
เจธเฉเจ เจญเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจฒ เจเจฐเจพเจเจเฉ
เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจ เจคเฉ 21เจตเฉเจ เจธเจฆเฉ
เจฌเฉเจชเฉเจเจซ เจจเฉเฉฐ 1997 เจตเจฟเฉฑเจ เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเจพ เจเจฟเจ เจธเฉ เจ
เจคเฉ เจฒเฉฐเจฌเฉ เจธเจฎเฉเจ เจคเฉเจ เจเฉฑเจ เจตเจฐเจ เจนเจพเจฐเจธ เจฐเจฟเจนเจพ เจนเฉ libpcap
เจฌเจฟเจจเจพเจ เจเจฟเจธเฉ เจตเจฟเจธเจผเฉเจธเจผ เจคเจฌเจฆเฉเจฒเฉเจเจ (เจฒเฉเจจเจเจธ-เจตเจฟเจธเจผเฉเจธเจผ เจคเจฌเจฆเฉเจฒเฉเจเจ, เจฌเฉเจธเจผเจ, x86_64
เจเฉเจกเฅค
JIT เจเฉฐเจชเจพเจเจฒเจฐ เจคเจฌเจฆเฉเจฒเฉเจเจ เจฆเฉ เจฒเฉเฉ เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเจพ เจธเฉ: 2012 เจตเจฟเฉฑเจ xt_bpf
, เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฒเจ เจจเจฟเจฏเจฎ เจฒเจฟเจเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ iptables
เจฌเฉเจชเฉเจเจซ เจฆเฉ เจฎเจฆเจฆ เจจเจพเจฒ, เจ
เจคเฉ เจ
เจเจคเฉเจฌเจฐ 2013 เจตเจฟเฉฑเจ เจธเฉ cls_bpf
, เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ BPF เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจเฉเจฐเฉเจซเจฟเจ เจตเจฐเจเฉเจเจฐเจฃ เจฒเจฟเจเจฃ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค
เจ
เจธเฉเจ เจเจนเจจเจพเจ เจธเจพเจฐเฉเจเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจจเฉเฉฐ เจเจฒเจฆเฉ เจนเฉ เจนเฉเจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจฆเฉเจเจพเจเจเฉ, เจชเจฐ เจชเจนเจฟเจฒเจพเจ เจเจน เจธเจพเจกเฉ เจฒเจ เจเจน เจธเจฟเฉฑเจเจฃเจพ เจฒเจพเจญเจฆเจพเจเจ เจนเฉเจตเฉเจเจพ เจเจฟ BPF เจฒเจ เจเจฐเจฌเจฟเจเจฐเฉเจฐเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจ
เจคเฉ เจเฉฐเจชเจพเจเจฒ เจเจฐเจจเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเฉเจเจ เจเจเจเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ libpcap
เจธเฉเจฎเจฟเจค (เจธเจงเจพเจฐเจจ เจเจฆเจพเจนเจฐเจจ: เจซเจฟเจฒเจเจฐ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ libpcap
เจธเจฟเจฐเจซ เจฆเฉ เจฎเฉเฉฑเจฒ เจตเจพเจชเจธ เจเจฐ เจธเจเจฆเฉ เจนเจจ - 0 เจเจพเจ 0x40000) เจเจพเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจเจฟเจตเฉเจ เจเจฟ seccomp เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจฒเจพเจเฉ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค
เจธเจพเจกเฉ เจเจชเจฃเฉ เจนเฉฑเจฅเจพเจ เจจเจพเจฒ เจฌเฉเจชเฉเจเจซ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ
เจเจ 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>
helper macros เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ - เจเจชเจฐเฉเจเจค เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจนเฉ เจเจฆเจพเจนเจฐเจจ เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ
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,
C เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐเจพเจ เจฆเฉ เจธเจนเฉเจฒเจค เจฒเจ, เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจเจเจเจชเฉเฉฑเจ เจซเจพเจฐเจฎเฉเจ เจตเจฐเจคเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ:
$ 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 เจเจเจธเจเฉเจเจธเจผเจจ
เจธเจเฉเจเจกเจฐเจก เจฌเฉเจชเฉเจเจซ เจคเฉเจ เจเจฒเจพเจตเจพ, เจฒเฉเจจเจเจธ เจ
เจคเฉ 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 เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจนเฉ เจ เจคเฉ เจจเจตเฉเจเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจจเฉเฉฐ เจฆเฉเจเจฃ เจฒเจ เจคเจฟเจเจฐ เจนเจพเจ, เจเจฟเจจเฉเจนเจพเจ เจตเจฟเฉฑเจเฉเจ เจชเจนเจฟเจฒเฉ เจนเฉ seccomp เจคเจเจจเจพเจฒเฉเจเฉ, เจเฉ เจเจฟ BPF เจซเจฟเจฒเจเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ, เจเจชเจฒเจฌเจง เจธเจฟเจธเจเจฎ เจเจพเจฒ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจฆเฉ เจธเฉเฉฑเจ เจ เจคเฉ เจธเฉเฉฑเจ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉ เจนเฉเฅค เจเฉฑเจ เจฆเจฟเฉฑเจคเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจ เจคเฉ เจเจธเจฆเฉ เจตเฉฐเจธเจผเจ.
seccomp เจฆเจพ เจชเจนเจฟเจฒเจพ เจธเฉฐเจธเจเจฐเจฃ 2005 เจตเจฟเฉฑเจ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจเฉเฉเจฟเจ เจเจฟเจ เจธเฉ เจ
เจคเฉ เจฌเจนเฉเจค เจฎเจธเจผเจนเฉเจฐ เจจเจนเฉเจ เจธเฉ, เจเจฟเจเจเจเจฟ เจเจธเจจเฉ เจธเจฟเจฐเจซ เจเฉฑเจ เจตเจฟเจเจฒเจช เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเจพ เจธเฉ - เจเฉฑเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฒเจ เจเจชเจฒเจฌเจง เจธเจฟเจธเจเจฎ เจเจพเจฒเจพเจ เจฆเฉ เจธเฉเฉฑเจ เจจเฉเฉฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจคเฉฑเจ เจธเฉเจฎเจค เจเจฐเจจ เจฒเจ: read
, write
, exit
ะธ sigreturn
, เจ
เจคเฉ เจจเจฟเจฏเจฎเจพเจ เจฆเฉ เจเจฒเฉฐเจเจฃเจพ เจเจฐเจจ เจตเจพเจฒเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจฎเจพเจฐเจฟเจ เจเจฟเจ เจธเฉ SIGKILL
. เจนเจพเจฒเจพเจเจเจฟ, 2012 เจตเจฟเฉฑเจ, seccomp เจจเฉ BPF เจซเจฟเจฒเจเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจคเจพ เจจเฉเฉฐ เจเฉเฉเจฟเจ, เจเจฟเจธ เจจเจพเจฒ เจคเฉเจธเฉเจ เจฎเจจเจเจผเฉเจฐเจธเจผเฉเจฆเจพ เจธเจฟเจธเจเจฎ เจเจพเจฒเจพเจ เจฆเฉ เจเฉฑเจ เจธเจฎเฉเจน เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐ เจธเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจนเจจเจพเจ เจฆเฉเจเจ เจฆเจฒเฉเจฒเจพเจ เจฆเฉ เจเจพเจเจ เจตเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค (เจฆเจฟเจฒเจเจธเจช เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ, เจเฉเจฐเฉเจฎ เจเจธ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพ เจฆเฉ เจชเจนเจฟเจฒเฉ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจธเฉ, เจ
เจคเฉ Chrome เจฒเฉเจ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ BPF เจฆเฉ เจเฉฑเจ เจจเจตเฉเจ เจธเฉฐเจธเจเจฐเจฃ เจฆเฉ เจ
เจงเจพเจฐ เจคเฉ เจเฉฑเจ KRSI เจตเจฟเจงเฉ เจตเจฟเจเจธเจฟเจค เจเจฐ เจฐเจนเฉ เจนเจจ เจ
เจคเฉ เจฒเฉเจจเจเจธ เจธเฉเจฐเฉฑเจเจฟเจ เจฎเฉเจกเฉเจเจฒ เจจเฉเฉฐ เจ
เจจเฉเจเฉเจฒเจฟเจค เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเฉ เจฐเจนเฉ เจนเจจเฅค) เจตเจพเจงเฉ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจฆเฉ เจฒเจฟเฉฐเจ เจ
เฉฐเจค เจตเจฟเฉฑเจ เจฒเฉฑเจญเฉ เจเจพ เจธเจเจฆเฉ เจนเจจ เจฒเฉเจ เจฆเฉ.
เจจเฉเจ เจเจฐเฉ เจเจฟ seccomp เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฌเจพเจฐเฉ เจนเฉฑเจฌ 'เจคเฉ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฒเฉเจ เจนเจจ, เจนเฉ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจเฉเจ เจตเจฟเจ
เจเจคเฉ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเจช-เจญเจพเจเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ (เจเจพเจ เจเจธ เจฆเฉ เจฌเจเจพเจ) เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจเจพ เจเจพเจนเฉเจเจพเฅค เจฒเฉเจ เจตเจฟเจ
เจ
เฉฑเจเฉ เจ
เจธเฉเจ เจฆเฉเจเจพเจเจเฉ เจเจฟ เจซเจฟเจฒเจเจฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเฉ เจ
เจคเฉ เจฒเฉเจก เจเจฐเจจเฉ เจนเจจ seccomp
เจฌเฉเจ
เจฐ C เจตเจฟเฉฑเจ เจ
เจคเฉ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ libseccomp
เจ
เจคเฉ เจนเจฐเฉเจ เจตเจฟเจเจฒเจช เจฆเฉ เจซเจพเจเจฆเฉ เจ
เจคเฉ เจจเฉเจเจธเจพเจจ เจเฉ เจนเจจ, เจ
เจคเฉ เจ
เฉฐเจค เจตเจฟเฉฑเจ, เจเจ เจฆเฉเจเฉเจ เจเจฟ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉเจเจฐเจพ seccomp เจฆเฉ เจตเจฐเจคเฉเจ เจเจฟเจตเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ strace
.
seccomp เจฒเจ เจซเจฟเจฒเจเจฐ เจฒเจฟเจเจฃเจพ เจ เจคเฉ เจฒเฉเจก เจเจฐเจจเจพ
เจ
เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจพเจฃเจฆเฉ เจนเจพเจ เจเจฟ BPF เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเฉ เจนเจจ, เจเจธ เจฒเจ เจเจ เจชเจนเจฟเจฒเจพเจ seccomp เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจตเฉเจเฉเจเฅค เจคเฉเจธเฉเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจชเฉฑเจงเจฐ 'เจคเฉ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจธเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจ
เจคเฉ เจธเจพเจฐเฉเจเจ เจฌเจพเจฒ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจชเจพเจฌเฉฐเจฆเฉเจเจ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจเฉเจเจเฅค เจเจน เจธเจฟเจธเจเจฎ เจเจพเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ seccomp(2)
seccomp(SECCOMP_SET_MODE_FILTER, flags, &filter)
เจเจฟเฉฑเจฅเฉ &filter
- เจเจน เจธเจพเจกเฉ เจฒเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจเจพเจฃเฉ เจฌเจฃเจคเจฐ เจฆเจพ เจธเฉฐเจเฉเจค เจนเฉ struct sock_fprog
, i.e. เจฌเฉเจชเฉเจเจซ เจชเฉเจฐเฉเจเจฐเจพเจฎ.
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 เจฆเฉเจเจฐเจพ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเฉเฅค เจฆเฉเจเจพ, เจเฉเจ เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉเจ เจนเฉ เจจเจพ เจเจพเจเจฒเจก เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจฆเฉเจเฉ, เจเจฟเจเจเจเจฟ 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
. เจเฉเจ เจตเฉ เจเจฟเจธเจจเฉ เจเจธ เจจเฉเฉฐ เจนเฉเจฃ เจคเฉฑเจ เจชเฉเฉเจนเจฟเจ เจนเฉ เจเจธเจจเฉเฉฐ เจเจธเจฆเฉ เจเจพเจฐเจ เจฆเฉ เจธเจฟเจงเจพเจเจค เจฌเจพเจฐเฉ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจธเจชเฉฑเจธเจผเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ: BPF เจฌเจพเจเจเจเฉเจก เจจเฉเฉฐ iptables เจจเจฟเจฏเจฎเจพเจ เจตเจเฉเจ เจเจฒเจพเจเฅค เจคเฉเจธเฉเจ เจเฉฑเจ เจจเจตเจพเจ เจจเจฟเจฏเจฎ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจธ เจคเจฐเฉเจนเจพเจ:
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,
...
เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ Cloudfare เจฆเฉ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเฉ xt_bpf
, เจเจฟเจเจเจเจฟ เจเจน XDP เจตเจฟเฉฑเจ เจเจฒเฉ เจเจ เจนเจจ - BPF เจฆเฉ เจจเจตเฉเจ เจธเฉฐเจธเจเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจตเจฟเจเจฒเจชเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ, เจตเฉเจเฉเฅค
cls_bpf
เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจเจเจฐเฉ เจเจฆเจพเจนเจฐเจฃ เจเจฒเจพเจธเฉเจซเจพเจเจฐ เจนเฉ cls_bpf
เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจเฉเจฐเฉเจซเจฟเจ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจเจช-เจธเจฟเจธเจเจฎ เจฒเจ, 2013 เจฆเฉ เจ
เฉฐเจค เจตเจฟเฉฑเจ เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจเฉเฉเจฟเจ เจเจฟเจ เจ
เจคเฉ เจธเฉฐเจเจฒเจชเจฟเจ เจคเฉเจฐ 'เจคเฉ เจชเฉเจฐเจพเจเฉเจจ เจจเฉเฉฐ เจฌเจฆเจฒเจฟเจ เจเจฟเจเฅค cls_u32
.
เจนเจพเจฒเจพเจเจเจฟ, เจ
เจธเฉเจ เจนเฉเจฃ เจเฉฐเจฎ เจฆเจพ เจตเจฐเจฃเจจ เจจเจนเฉเจ เจเจฐเจพเจเจเฉ cls_bpf
, เจเจฟเจเจเจเจฟ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฌเจพเจฐเฉ เจเจฟเจเจจ เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ เจเจน เจธเจพเจจเฉเฉฐ เจเฉเจ เจจเจนเฉเจ เจฆเฉเจตเฉเจเจพ - เจ
เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจธเจพเจฐเฉเจเจ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพเจตเจพเจ เจคเฉเจ เจเจพเจฃเฉ เจนเฉ เจเจ เจนเจพเจเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฌเฉเจชเฉเจเจซ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจจ เจตเจพเจฒเฉ เจ
เจเจฒเฉ เจฒเฉเจเจพเจ เจตเจฟเฉฑเจ, เจ
เจธเฉเจ เจเจธ เจตเจฐเจเฉเจซเจพเจเจฐ เจจเฉเฉฐ เจเฉฑเจ เจคเฉเจ เจตเฉฑเจง เจตเจพเจฐ เจฎเจฟเจฒเจพเจเจเฉเฅค
เจเจฒเจพเจธเจฟเจ BPF c เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจจเจพ เจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเฉเจฐ เจเจพเจฐเจจ cls_bpf
เจธเจฎเฉฑเจธเจฟเจ เจเจน เจนเฉ เจเจฟ, เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฌเฉเจชเฉเจเจซ เจฆเฉ เจคเฉเจฒเจจเจพ เจตเจฟเฉฑเจ, เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจนเฉเจฃ เจฆเจพ เจฆเจพเจเจฐเจพ เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเฉฐเจเฉเจเจฟเจค เจนเฉ: เจเจฒเจพเจธเฉเจเจฒ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจจเจนเฉเจ เจฌเจฆเจฒ เจธเจเจฆเฉ เจ
เจคเฉ เจเจพเจฒเจพเจ เจตเจฟเจเจเจพเจฐ เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเจจเฅค
เจเจธ เจฒเจ เจเจน เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจจเฉเฉฐ เจ เจฒเจตเจฟเจฆเจพ เจเจนเจฟเจฃ เจ เจคเฉ เจญเจตเจฟเฉฑเจ เจตเฉฑเจฒ เจฆเฉเจเจฃ เจฆเจพ เจธเจฎเจพเจ เจนเฉเฅค
เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจจเฉเฉฐ เจ เจฒเจตเจฟเจฆเจพ
เจ
เจธเฉเจ เจฆเฉเจเจฟเจ เจเจฟ เจเจฟเจตเฉเจ BPF เจคเจเจจเจพเจฒเฉเจเฉ, เจจเฉฑเจฌเฉ เจฆเฉ เจฆเจนเจพเจเฉ เจฆเฉ เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ เจตเจฟเจเจธเจค เจนเฉเจ, เจเฉฑเจ เจธเจฆเฉ เจฆเฉ เจเฉฑเจ เจเฉเจฅเจพเจ เจนเจฟเฉฑเจธเฉ เจคเฉฑเจ เจธเจซเจฒเจคเจพเจชเฉเจฐเจตเจ เจเจฟเจเจเจฆเฉ เจฐเจนเฉ เจ
เจคเฉ เจ
เฉฐเจค เจคเฉฑเจ เจจเจตเฉเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฒเฉฑเจญเฉเจเจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเจเฉเจ เจฎเจธเจผเฉเจจเจพเจ เจคเฉเจ เจเจฐเจเจเจเจธเจธเฉ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉ เจฆเฉ เจธเจฎเจพเจจ, เจเจฟเจธเจจเฉ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจตเจฟเจเจพเจธ เจฒเจ เจเฉฑเจ เจชเฉเจฐเฉเจฐเจฃเจพ เจตเจเฉเจ เจเฉฐเจฎ เจเฉเจคเจพ, 32 เจฆเฉ เจฆเจนเจพเจเฉ เจตเจฟเฉฑเจ 64-เจฌเจฟเฉฑเจ เจคเฉเจ XNUMX-เจฌเจฟเฉฑเจ เจฎเจธเจผเฉเจจเจพเจ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉ เจนเฉเจ เจ
เจคเฉ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจชเฉเจฐเจพเจฃเจพ เจนเฉเจฃเจพ เจธเจผเฉเจฐเฉ เจนเฉ เจเจฟเจเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉเจเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ เจฌเจนเฉเจค เจธเฉเจฎเจค เจนเจจ, เจ
เจคเฉ เจชเฉเจฐเจพเจฃเฉ เจเจฐเจเฉเจเฉเจเจเจฐ เจคเฉเจ เจเจฒเจพเจตเจพ - เจธเจพเจกเฉ เจเฉเจฒ เจฌเฉเจชเฉเจเจซ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฒเจ เจเจพเจฒเจพเจ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจฐเจพเจ เจจเฉเฉฐ เจฌเจเจพเจเจฃ เจฆเฉ เจธเจฎเจฐเฉฑเจฅเจพ เจจเจนเฉเจ เจนเฉ, เจธเจฟเฉฑเจงเฉ เจเจชเจญเฉเจเจคเจพ เจเฉฐเจเจฐเฉเจเจธเจผเจจ เจฆเฉ เจเฉเจ เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉเจ เจนเฉ, เจเฉฐเจเจฐเฉเจเจ เจเจฐเจจ เจฆเฉ เจเฉเจ เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉเจ เจนเฉ. เจเจฐเจจเจฒ เจฆเฉ เจจเจพเจฒ, เจขเจพเจเจเจพ เจเฉเจคเจฐเจพเจ เจฆเฉ เจเฉฑเจ เจธเฉเจฎเจค เจเจฟเจฃเจคเฉ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจจเฉเฉฐ เจเฉฑเจก เจเฉ sk_buff
เจ
เจคเฉ เจธเจญ เจคเฉเจ เจธเจฐเจฒ เจธเจนเจพเจเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจจเจพเจฒ, เจคเฉเจธเฉเจ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจฌเจฆเจฒ เจจเจนเฉเจ เจธเจเจฆเฉ เจ
เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจฐเฉเจกเจพเจเจฐเฉเจเจ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉเฅค
เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ เจเจฒเจพเจธเจฟเจ เจฌเฉเจชเฉเจเจซ เจฆเฉ เจฌเจเฉ เจนเฉเจ เจธเจพเจฐเฉ เจเจชเฉเจเจ เจเฉฐเจเจฐเจซเฉเจธ เจนเจจ, เจ เจคเฉ เจเจฐเจจเจฒ เจฆเฉ เจ เฉฐเจฆเจฐ เจธเจพเจฐเฉ เจเจฒเจพเจธเจฟเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ, เจญเจพเจตเฉเจ เจเจน เจธเจพเจเจ เจซเจฟเจฒเจเจฐ เจเจพเจ เจธเฉเจเฉเจเจช เจซเจฟเจฒเจเจฐ เจนเฉเจฃ, เจเจชเจฃเฉ เจเจช เจเฉฑเจ เจจเจตเฉเจ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจ เจจเฉเจตเจพเจฆ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฌเฉเจชเฉเจเจซเฅค (เจ เจธเฉเจ เจ เจเจฒเฉ เจฒเฉเจ เจตเจฟเจ เจเจธ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจพเจเจเฉ เจเจฟ เจเจน เจเจฟเจตเฉเจ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค)
เจเฉฑเจ เจจเจตเฉเจ เจเจฐเจเฉเจเฉเจเจเจฐ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉ 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 เจนเฉเจฌเจฐ: เจธเจฟเจธเจเจฎเจก เจจเจพเจฒ เจกเฉเจฎเจจ เจจเฉเฉฐ เจ เจฒเฉฑเจ เจเจฐเจจเจพ เจเจพเจ "เจคเฉเจนเจพเจจเฉเฉฐ เจเจธ เจฒเจ เจกเฉเจเจฐ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ!" - เจชเฉเจฒ เจเฉเจเจจเจจ, "เจธเจเจฐเฉเจธ --เจธเฉเจเฉเจเจช-เจฌเฉเจชเฉเจเจซ: เจนเฉเฉฑเจก เจฆเฉ เจนเฉเจ เจพเจ เจเฉฑเจ เจจเจเจผเจฐ",
https://fosdem.org/2020/schedule/event/debugging_strace_bpf/
netsniff-ng
:http://netsniff-ng.org/
เจธเจฐเฉเจค: www.habr.com