เดšเต†เดฑเดฟเดฏ เด•เตเดŸเตเดŸเดฟเด•เตพเด•เตเด•เตเดณเตเดณ เดฌเดฟเดชเดฟเดŽเดซเต, เดญเดพเด—เด‚ เดชเต‚เดœเตเดฏเด‚: เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต

เดฌเต†เตผเด•เตเด•เตโ€Œเดฒเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ (เดฌเดฟเดชเดฟเดŽเดซเต) เด’เดฐเต เดฒเดฟเดจเด•เตเดธเต เด•เต‡เตผเดฃเตฝ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเดพเดฃเต, เด…เดคเต เด‡เดชเตเดชเต‹เตพ เดตเตผเดทเด™เตเด™เดณเดพเดฏเดฟ เด‡เด‚เด—เตเดฒเต€เดทเต เดญเดพเดทเดพ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เดฎเตเตป เดชเต‡เดœเตเด•เดณเดฟเตฝ เด‰เดฃเตเดŸเต. เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เด‰เดชเดฏเต‹เด—เดคเตเดคเต†เดฏเตเด‚ เดตเดฟเด•เดธเดจเดคเตเดคเต†เดฏเตเด‚ เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เด•เตŠเดฃเตเดŸเต เด•เต‹เตบเดซเดฑเตปเดธเตเด•เตพ เดจเดฟเดฑเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฒเดฟเดจเด•เตเดธเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเดฌเตเดธเดฟเดธเตเดฑเตเดฑเด‚ เดฎเต†เดฏเดฟเตปเตเดฑเดจเตผ เดกเต‡เดตเดฟเดกเต เดฎเดฟเดฒเตเดฒเตผ, เดฒเดฟเดจเด•เตเดธเต เดชเตเดฒเด‚เดฌเต‡เดดเตเดธเต 2018-เตฝ เดคเตปเตเดฑเต† เดชเตเดฐเดธเด‚เด—เด‚ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต โ€œเดˆ เดธเด‚เดธเดพเดฐเด‚ XDP เดฏเต† เด•เตเดฑเดฟเดšเตเดšเดฒเตเดฒโ€ (เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเดฏเต‹เด— เด•เต‡เดธเดพเดฃเต XDP). เดฌเตเดฐเดฃเตเดŸเตป เด—เตเดฐเต†เด—เต เดŽเดจเตเดจ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเตฝ เดชเตเดฐเดธเด‚เด—เด™เตเด™เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเต Linux BPF เดธเต‚เดชเตเดชเตผ เดชเดตเตผเดธเต. เดŸเต‹เด•เตเด•เต เดนเต‹เดฏเตโ€Œเดฒเดพเตปเดกเต-เดœเต‹เตผเด—เตปเดธเต†เตป เดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเตเด•เต‡เตผเดฃเตฝ เด‡เดชเตเดชเต‹เตพ เด’เดฐเต เดฎเตˆเด•เตเดฐเต‹เด•เต†เตผเดฃเตฝ เด†เดฃเต†เดจเตเดจเต. เดคเต‹เดฎเดธเต เด—เตเดฐเดพเดซเต เดˆ เด†เดถเดฏเด‚ เดชเตเดฐเต‹เดคเตเดธเดพเดนเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เด•เต†เตผเดฃเดฒเดฟเดจเตเดณเตเดณ เดœเดพเดตเดพเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดพเดฃเต เดฌเดฟเดชเดฟเดŽเดซเต.

เดนเดฌเตเดฐเต†เดฏเดฟเตฝ เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดšเดฟเดŸเตเดŸเดฏเดพเดฏ เดตเดฟเดตเดฐเดฃเดฎเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เด’เดฐเต เดฒเต‡เด–เดจ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเตฝ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดŸเต† เดšเดฐเดฟเดคเตเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ, เดกเต†เดตเดฒเดชเตโ€Œเดฎเต†เตปเตเดฑเต เดŸเต‚เดณเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดฌเดฟเดชเดฟเดŽเดซเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดชเดฐเดฟเดถเต€เดฒเดจเดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดฎเต‡เด–เดฒเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดžเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด‚. เดธเต€เดฐเต€เดธเดฟเดฒเต† เดชเต‚เดœเตเดฏเด‚ เดŽเดจเตเดจ เดˆ เดฒเต‡เด–เดจเด‚ เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดšเดฐเดฟเดคเตเดฐเดตเตเด‚ เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเตเด‚ เดชเดฑเดฏเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด…เดคเดฟเตปเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดคเตเดตเด™เตเด™เดณเตเดŸเต† เดฐเดนเดธเตเดฏเด™เตเด™เดณเตเด‚ เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. tcpdump, seccomp, strace, เด…เดคเต‡เดพเดŸเต†เดพเดชเตเดชเด‚ เดคเดจเตเดจเต† เด•เตเดŸเตเดคเดฒเต.

BPF เตปเตเดฑเต† เดตเดฟเด•เดธเดจเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต Linux เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟเดฏเดพเดฃเต, BPF-เตปเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด…เดจเตเดฎเดคเดฟเดฏเต‹เดŸเต† @เดฏเต‚เด•เตเด•เดพเดฐเดฟเดฏเดฑเตเดฑเต, เดฎเดนเดคเตเดคเดพเดฏ เดชเดฐเดฎเตเดชเดฐเดฏเตเดŸเต† เดฌเดนเตเดฎเดพเดจเดพเตผเดคเตเดฅเด‚ เดžเดพเตป เดชเดฐเดฎเตเดชเดฐเดฏเต† "เด•เตŠเดšเตเดšเตเด•เตเดŸเตเดŸเดฟเด•เตพเด•เตเด•เตเดณเตเดณ BPF" เดŽเดจเตเดจเต เดตเดฟเดณเดฟเดšเตเดšเต "เดšเต†เดฑเดฟเดฏ เด•เตเดŸเตเดŸเดฟเด•เตพเด•เตเด•เตเดณเตเดณ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เตพ".

เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดšเดฐเดฟเดคเตเดฐเดคเตเดคเดฟเดฒเต† เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด•เต‹เดดเตเดธเต(c)

เด†เดงเตเดจเดฟเด• เดฌเดฟเดชเดฟเดŽเดซเต เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดชเดดเดฏ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดŸเต† เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดคเตเด‚ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเดšเตเดšเดคเตเดฎเดพเดฏ เด…เดคเต‡ เดชเต‡เดฐเดฟเดฒเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเดพเดฃเต, เด†เดถเดฏเด•เตเด•เตเดดเดชเตเดชเด‚ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เด‡เดชเตเดชเต‹เตพ เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฒเดพเดธเดฟเด•เต BPF เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด’เดฐเต เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต tcpdump, เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ seccomp, เด…เดคเตเดชเต‹เดฒเต† เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเดพเดคเตเดค เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ xt_bpf เดตเต‡เดฃเตเดŸเดฟ iptables เด•เตเดฒเดพเดธเดฟเดซเดฏเดฑเตเด‚ cls_bpf. เด†เดงเตเดจเดฟเด• เดฒเดฟเดจเด•เตเดธเดฟเตฝ, เด•เตเดฒเดพเดธเดฟเด•เต BPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดธเตเดตเดฏเดฎเต‡เดต เดชเตเดคเดฟเดฏ เดฐเต‚เดชเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด•เดพเดดเตเดšเดชเตเดชเดพเดŸเดฟเตฝ, API เดจเดฟเดฒเดจเดฟเดจเตเดจเดฟเดฐเตเดจเตเดจเต, เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดจเดฎเตเดฎเตพ เด•เดพเดฃเตเดจเตเดจเดคเต เดชเต‹เดฒเต†, เด•เตเดฒเดพเดธเดฟเด•เต BPF-เดจเตเดณเตเดณ เดชเตเดคเดฟเดฏ เด‰เดชเดฏเต‹เด—เด™เตเด™เตพ เด‡เดชเตเดชเต‹เดดเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เด‡เด•เตเด•เดพเดฐเดฃเดคเตเดคเดพเตฝ, เด•เต‚เดŸเดพเดคเต† เดฒเดฟเดจเด•เตเดธเดฟเดฒเต† เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเตปเตเดฑเต† เดšเดฐเดฟเดคเตเดฐเด‚ เดชเดฟเดจเตเดคเตเดŸเตผเดจเตเดจเต, เด…เดคเต เดŽเด™เตเด™เดจเต†, เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด…เดคเดฟเตปเตเดฑเต† เด†เดงเตเดจเดฟเด• เดฐเต‚เดชเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดฃเดฎเดฟเดšเตเดšเตเดตเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด‚, เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เด•เดดเดฟเดžเตเดž เดจเต‚เดฑเตเดฑเดพเดฃเตเดŸเดฟเตปเตเดฑเต† เดŽเตบเดชเดคเตเด•เดณเตเดŸเต† เด…เดตเดธเดพเดจเดคเตเดคเดฟเตฝ, เดชเตเดฐเดถเดธเตเดค เดฒเต‹เดฑเตปเดธเต เดฌเต†เตผเด•เตเด•เตเดฒเดฟ เดฒเดฌเต‹เดฑเดŸเตเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเดžเตเดšเดฟเดจเต€เดฏเตผเดฎเดพเตผ เด•เดดเดฟเดžเตเดž เดจเต‚เดฑเตเดฑเดพเดฃเตเดŸเดฟเตปเตเดฑเต† เดŽเตบเดชเดคเตเด•เดณเตเดŸเต† เด…เดตเดธเดพเดจเดคเตเดคเดฟเตฝ เด†เดงเตเดจเดฟเด•เดฎเดพเดฏ เดนเดพเตผเดกเตโ€Œเดตเต†เดฏเดฑเดฟเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดถเดฐเดฟเดฏเดพเดฏเดฟ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเดพเด‚ เดŽเดจเตเดจ เดšเต‹เดฆเตเดฏเดคเตเดคเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเด‚ เดชเตเดฐเด•เดŸเดฟเดชเตเดชเดฟเดšเตเดšเต. CSPF (CMU/Stanford Packet Filter) เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเดฟเตฝ เด†เดฆเตเดฏเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เดฟเตปเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เด†เดถเดฏเด‚, เด…เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดคเตเดฐเดฏเตเด‚ เดตเต‡เด—เด‚ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต. เด•เต‡เตผเดฃเตฝ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ, เด‡เดคเต เด…เดจเดพเดตเดถเตเดฏ เดกเดพเดฑเตเดฑ เดฏเต‚เดธเตผ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเตเดจเตเดจเดคเต เด’เดดเดฟเดตเดพเด•เตเด•เตเดจเตเดจเต. เด•เต‡เตผเดฃเตฝ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ เดฏเต‚เดธเตผ เด•เต‹เดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฑเตบเดŸเตˆเด‚ เดธเตเดฐเด•เตเดท เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต, เด’เดฐเต เดธเดพเตปเดกเตโ€Œเดฌเต‹เด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เตพ เดธเตเดฑเตเดฑเดพเด•เตเด•เต เด…เดงเดฟเดทเตโ€Œเด เดฟเดค เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดชเตเดคเดฟเดฏ RISC เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดฌเต†เตผเด•เตเด•เตโ€Œเดฒเดฟ เดฒเดพเดฌเตโ€Œเดธเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเดžเตเดšเดฟเดจเต€เดฏเตผเดฎเดพเดฐเตเดŸเต† เดชเดฐเดฟเดถเตเดฐเดฎเดคเตเดคเดฟเดฒเต‚เดŸเต†, เด’เดฐเต เดชเตเดคเดฟเดฏ เดฌเดฟเดชเดฟเดŽเดซเต (เดฌเต†เตผเด•เตเด•เตโ€Œเดฒเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ) เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเต, เด‡เดคเดฟเตปเตเดฑเต† เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ เดฎเต‹เดŸเตเดŸเดฑเต‹เดณ 6502 เดชเตเดฐเต‹เดธเดธเดฑเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตโ€Œเดคเดคเดพเดฃเต - เด…เดคเตเดคเดฐเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เดณเตเดŸเต† เดตเตผเด•เตเด•เตโ€Œเดนเต‹เดดเตโ€Œเดธเต เด†เดชเตเดชเดฟเตพ II เด…เดฅเดตเดพ NES. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเด•เดณเต† เด…เดชเต‡เด•เตเดทเดฟเดšเตเดšเต เดชเตเดคเดฟเดฏ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เดซเดฟเตฝเดŸเตเดŸเตผ เดชเตเดฐเด•เดŸเดจเด‚ เดชเดคเตเดคเดฟเดฐเดŸเตเดŸเดฟ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเต.

เดฌเดฟเดชเดฟเดŽเดซเต เดฎเต†เดทเต€เตป เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ

เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเตเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฎเต†เดทเต€เดจเดฟเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เดฐเดฃเตเดŸเต 32-เดฌเดฟเดฑเตเดฑเต เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด•เตพ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚, เด’เดฐเต เด…เด•เตเดฏเตเดฎเตเดฒเต‡เดฑเตเดฑเตผ A เดธเต‚เดšเดฟเด• เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด‚ X, 64 เดฌเตˆเดฑเตเดฑเตเด•เตพ เดฎเต†เดฎเตเดฎเดฑเดฟ (16 เดตเดพเด•เตเด•เตเด•เตพ), เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดตเดพเดฏเดจเดฏเตเด•เตเด•เตเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เดˆ เดตเดธเตเดคเตเด•เตเด•เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด•เดฎเดพเตปเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚. เดธเต‹เดชเดพเดงเดฟเด•เดฎเดพเดฏ เดชเดฆเดชเตเดฐเดฏเต‹เด—เด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดœเดฎเตเดชเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเดฎเดฏเดฌเดจเตเดงเดฟเดคเดฎเดพเดฏเดฟ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดœเดฎเตเดชเตเด•เตพ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดพเตป เดฎเดพเดคเตเดฐเดฎเต‡ เด•เดดเดฟเดฏเต‚, เด…เดคเดพเดฏเดคเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เดฒเต‚เดชเตเดชเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเดฐเต‹เดงเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเต†เดทเต€เตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตŠเดคเต เดธเตเด•เต€เด‚ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดฌเดฟเดชเดฟเดŽเดซเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต เดšเดฟเดฒเดคเต เด•เต‡เตผเดฃเตฝ เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ (เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดชเต‹เดฒเตเดณเตเดณเดต), เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดšเดฟเดฒเตผเด•เตเด•เต เด•เต‡เตผเดฃเดฒเดฟเดฒเต† เด‡เดตเตปเตเดฑเต เดœเดจเดฑเต‡เดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด•เดพเตผเดกเดฟเดฒเต† เด…เดŸเตเดคเตเดค เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† เดตเดฐเดตเดพเดฃเต เด‡เดตเตปเตเดฑเต). เด’เดฐเต เด‡เดตเตปเตเดฑเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด•เต‡เตผเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด‡เตปเตเดฑเตผเดชเตเดฐเต†เดฑเตเดฑเดฑเดฟเตฝ), เด•เต‚เดŸเดพเดคเต† เดฎเต†เดทเต€เตป เดฎเต†เดฎเตเดฎเดฑเดฟ เดธเดฎเดพเดจเดฎเดพเดฃเต เดšเดฟเดฒเตผเด•เตเด•เต เด•เต‡เตผเดฃเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฎเต‡เด–เดฒ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด‡เตปเด•เดฎเดฟเด‚เด—เต เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† เดกเดพเดฑเตเดฑ).

เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเต เดฎเตเด•เดณเดฟเตฝ เดชเดฑเดžเตเดžเดต เดฎเดคเดฟเดฏเดพเด•เตเด‚: เด†เดตเดถเตเดฏเดพเดจเตเดธเดฐเดฃเด‚ เดธเดฟเดธเตเดฑเตเดฑเดตเตเด‚ เด•เดฎเดพเตปเดกเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด‚ เดžเด™เตเด™เตพ เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเตเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตปเตเดฑเต† เด•เดฎเดพเตปเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด‰เดŸเดจเดŸเดฟ เดชเด เดฟเด•เตเด•เดพเดจเตเด‚ เด…เดคเดฟเตปเตเดฑเต† เดŽเดฒเตเดฒเดพ เด•เดดเดฟเดตเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดฑเดฟเดฏเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฏเดฅเดพเตผเดคเตเดฅ เดฒเต‡เด–เดจเด‚ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ BSD เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ เด•เต‚เดŸเดพเดคเต†/เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดซเดฏเดฒเดฟเตปเตเดฑเต† เด†เดฆเตเดฏ เดชเด•เตเดคเดฟ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป/เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต/filter.txt เด•เต‡เตผเดฃเตฝ เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต. เด•เต‚เดŸเดพเดคเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดตเดคเดฐเดฃเด‚ เดชเด เดฟเด•เตเด•เดพเด‚ libpcap: เดชเดพเด•เตเด•เดฑเตเดฑเต เด•เตเดฏเดพเดชเตเดšเดฑเดฟเดจเตเดณเตเดณ เด’เดฐเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดฐเต€เดคเดฟเดฏเตเด‚, เด…เดคเดฟเตฝ เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดฐเดšเดฏเดฟเดคเดพเด•เตเด•เดณเดฟเตฝ เด’เดฐเดพเดณเดพเดฏ เดฎเด•เตเด•เดพเตป เดธเตƒเดทเตเดŸเดฟเดฏเตเดŸเต† เดšเดฐเดฟเดคเตเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเต libpcap.

เดฒเดฟเดจเด•เตเดธเดฟเตฝ เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เดŽเดฒเตเดฒเดพ เดชเตเดฐเดงเดพเดจ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เด•เตเดจเตเดจเต: tcpdump (libpcap), seccomp, xt_bpf, cls_bpf.

tcpdump

เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเดพเดฏ เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เดฟเดจเตเดณเตเดณ เดฎเตเตปเดญเดพเด—เดคเตเดคเดฟเตปเตเดฑเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเต เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดพเดฃเต เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดตเดฟเด•เดธเดจเด‚ เดจเดŸเดคเตเดคเดฟเดฏเดคเต. tcpdump. เด•เต‚เดŸเดพเดคเต†, เดชเดฒ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเตเด‚ เดฒเดญเตเดฏเดฎเดพเดฏ เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดชเดดเดฏเดคเตเด‚ เดชเตเดฐเดถเดธเตเดคเดตเตเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดžเด™เตเด™เดณเตเดŸเต† เดชเด เดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚.

(เดฒเดฟเดจเด•เตเดธเดฟเดฒเต† เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ เดžเดพเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเต 5.6.0-rc6. เดฎเดฟเด•เดšเตเดš เดตเดพเดฏเดจเดพเด•เตเดทเดฎเดคเดฏเตเด•เตเด•เดพเดฏเดฟ เดšเดฟเดฒ เด•เดฎเดพเตปเดกเตเด•เดณเตเดŸเต† เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต.)

เด‰เดฆเดพเดนเดฐเดฃเด‚: IPv6 เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตฝ

เด’เดฐเต เด‡เตปเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดŽเดฒเตเดฒเดพ IPv6 เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเด‚ เดจเต‹เด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เดพเด‚ eth0. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚ tcpdump เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดซเดฟเตฝเดŸเตเดŸเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต ip6:

$ sudo tcpdump -i eth0 ip6

เด‡เดชเตเดฐเด•เดพเดฐเด‚ tcpdump เดซเดฟเตฝเดŸเตเดŸเตผ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเต ip6 เดฌเดฟเดชเดฟเดŽเดซเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเดฟเดฒเต‡เด•เตเด•เต เด•เต‡เตผเดฃเดฒเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด• (เดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเต† เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด•เดพเดฃเตเด• Tcpdump: เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต). เด‡เตปเตเดฑเตผเดซเต‡เดธเดฟเดฒเต‚เดŸเต† เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจ เด“เดฐเต‹ เดชเดพเด•เตเด•เดฑเตเดฑเดฟเดจเตเด‚ เดฒเต‹เดกเต เดšเต†เดฏเตเดค เดซเดฟเตฝเดŸเตเดŸเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚ 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, เด‡เดคเตเด‚ เด…เตผเดคเตเดฅเด‚เดชเดพเด•เตเด•เดฑเตเดฑเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต (เดฒเดพเดณเดฟเดคเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตฝ VLAN เดŸเดพเด—เตเด•เตพ เด‡เดฒเตเดฒเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต):

       6              6          2
|Destination MAC|Source MAC|Ether Type|...|

เด…เดคเดฟเดจเดพเตฝ เด•เดฎเดพเตปเดกเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดค เดถเต‡เดทเด‚ ldh [12] เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตฝ A เด’เดฐเต เดตเดฏเตฝ เด‰เดฃเตเดŸเดพเด•เตเด‚ Ether Type โ€” เดˆ เด‡เดฅเตผเดจเต†เดฑเตเดฑเต เดซเตเดฐเต†เดฏเดฟเดฎเดฟเตฝ เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดค เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† เดคเดฐเด‚. 1 เดตเดฐเดฟเดฏเดฟเตฝ เดžเด™เตเด™เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตปเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต A (เดชเดพเด•เตเด•เต‡เดœเต เดคเดฐเด‚) เดธเดฟ 0x86dd, เด‡เดคเตเด‚ เด‰เดฃเตเดŸเต เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณ เดคเดฐเด‚ IPv6 เด†เดฃเต. เดฒเตˆเตป 1-เตฝ, เดคเดพเดฐเดคเดฎเตเดฏ เด•เดฎเดพเตปเดกเดฟเดจเต เดชเตเดฑเดฎเต‡, เดฐเดฃเตเดŸเต เดจเดฟเดฐเด•เตพ เด•เต‚เดŸเดฟ เด‰เดฃเตเดŸเต - jt 2 ะธ jf 3 โ€” เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เตพ เดชเต‹เด•เต‡เดฃเตเดŸ เดฎเดพเตผเด•เตเด•เตเด•เตพ (A == 0x86dd) เดตเดฟเดœเดฏเดฟเดšเตเดšเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เด’เดฐเต เด•เต‡เดธเดฟเตฝ (IPv6) เดžเด™เตเด™เตพ เดตเดฐเดฟ 2 เดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเดจเตเดจเต, เดตเดฟเดœเดฏเดฟเด•เตเด•เดพเดคเตเดค เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ - เดตเดฐเดฟ 3 เดฒเต‡เด•เตเด•เต. เดฒเตˆเตป 3 เตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเต 0 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต (เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเด•เตผเดคเตเดคเดฐเตเดคเต), เดตเดฐเดฟ 2 เตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต. 262144 (เดŽเดจเดฟเด•เตเด•เต เดชเดฐเดฎเดพเดตเดงเดฟ 256 เด•เดฟเดฒเต‹เดฌเตˆเดฑเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเต เดชเด•เตผเดคเตเดคเตเด•).

เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚: เดžเด™เตเด™เตพ เดฒเด•เตเดทเตเดฏเดธเตเดฅเดพเดจ เดชเต‹เตผเดŸเตเดŸเต เดตเดดเดฟ TCP เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดจเต‹เด•เตเด•เตเดจเตเดจเต

เดกเต†เดธเตเดฑเตเดฑเดฟเดจเต‡เดทเตป เดชเต‹เตผเดŸเตเดŸเต 666 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเดฒเตเดฒเดพ TCP เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเด‚ เดชเด•เตผเดคเตเดคเตเดจเตเดจ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดŽเด™เตเด™เดจเต†เดฏเตเดฃเตเดŸเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚. IPv4 เด•เต‡เดธเต เดฒเดณเดฟเดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ IPv6 เด•เต‡เดธเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚. เดˆ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเด เดฟเดšเตเดš เดถเต‡เดทเด‚, เดจเดฟเด™เตเด™เตพเด•เตเด•เต IPv6 เดซเดฟเตฝเดŸเตเดŸเตผ เดธเตเดตเดฏเด‚ เด’เดฐเต เดตเตเดฏเดพเดฏเดพเดฎเดฎเดพเดฏเดฟ เดชเดฐเตเดฏเดตเต‡เด•เตเดทเดฃเด‚ เดšเต†เดฏเตเดฏเดพเด‚ (ip6 and tcp dst port 666) เด•เต‚เดŸเดพเดคเต† เดชเตŠเดคเตเดตเดพเดฏ เด•เต‡เดธเดฟเดจเดพเดฏเตเดณเตเดณ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด‚ (tcp dst port 666). เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณ เดซเดฟเตฝเดŸเตเดŸเตผ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

$ sudo tcpdump -i eth0 -d ip and tcp dst port 666
(000) ldh      [12]
(001) jeq      #0x800           jt 2    jf 10
(002) ldb      [23]
(003) jeq      #0x6             jt 4    jf 10
(004) ldh      [20]
(005) jset     #0x1fff          jt 10   jf 6
(006) ldxb     4*([14]&0xf)
(007) ldh      [x + 16]
(008) jeq      #0x29a           jt 9    jf 10
(009) ret      #262144
(010) ret      #0

0-เด‰เด‚ 1-เด‰เด‚ เดตเดฐเดฟเด•เตพ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚. เดฒเตˆเตป 2-เตฝ เด‡เดคเตŠเดฐเต IPv4 เดชเดพเด•เตเด•เดฑเตเดฑเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต (เดˆเดคเตผ เดคเดฐเด‚ = 0x800) เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด• A เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† 24-เดพเดฎเดคเตเดคเต† เดฌเตˆเดฑเตเดฑเต. เดžเด™เตเด™เดณเตเดŸเต† เดชเดพเด•เตเด•เต‡เดœเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต

       14            8      1     1
|ethernet header|ip fields|ttl|protocol|...|

เด…เดคเดพเดฏเดคเต เดžเด™เตเด™เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต A เดเดชเดฟ เดนเต†เดกเดฑเดฟเตปเตเดฑเต† เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดซเต€เตฝเดกเต, เด‡เดคเต เดฒเต‹เดœเดฟเด•เตเด•เตฝ เด†เดฃเต, เด•เดพเดฐเดฃเด‚ เดžเด™เตเด™เตพ TCP เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเด‚ เดชเด•เตผเดคเตเดคเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต 0x6 (IPPROTO_TCP) เดฒเตˆเตป 3 เตฝ.

4, 5 เดตเดฐเดฟเด•เดณเดฟเตฝ เดžเด™เตเด™เตพ เดตเดฟเดฒเดพเดธเด‚ 20 เตฝ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเดจเตเดจ เดนเดพเดซเต เดตเต‡เดกเตเด•เตพ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต jset เดฎเต‚เดจเตเดจเดฟเตฝ เด’เดจเตเดจเต เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹เดฏเต†เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด• เดชเดคเดพเด•เด•เตพ - เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เดฟเดฏ เดฎเดพเดธเตเด•เต เดงเดฐเดฟเดšเตเดšเต jset เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดฎเต‚เดจเตเดจเต เดฌเดฟเดฑเตเดฑเตเด•เตพ เดฎเดพเดฏเตเดšเตเดšเต. เดฎเต‚เดจเตเดจเต เดฌเดฟเดฑเตเดฑเตเด•เดณเดฟเตฝ เดฐเดฃเตเดŸเต†เดฃเตเดฃเด‚ เดชเดพเด•เตเด•เดฑเตเดฑเต เด’เดฐเต เดตเดฟเด˜เดŸเดฟเดšเตเดš เดเดชเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† เดญเดพเด—เดฎเดพเดฃเต‹ เดŽเดจเตเดจเตเด‚ เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด…เดตเดธเดพเดจ เดถเด•เดฒเดฎเดพเดฃเต‹ เดŽเดจเตเดจเตเด‚ เดจเดฎเตเดฎเต‹เดŸเต เดชเดฑเดฏเตเดจเตเดจเต. เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดฌเดฟเดฑเตเดฑเต เดฑเดฟเดธเตผเดตเต เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดชเต‚เดœเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด…เดชเต‚เตผเดฃเตเดฃเดฎเต‹ เดคเด•เตผเดจเตเดจเดคเต‹ เด†เดฏ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดฎเต‚เดจเตเดจเต เดฌเดฟเดฑเตเดฑเตเด•เดณเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เดฒเดฟเดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏเดคเต เดตเดฐเดฟ 6 เด†เดฃเต. เดŽเด•เตเดธเตเดชเตเดฐเดทเตป ldxb 4*([14]&0xf) เดžเด™เตเด™เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดพเดฃเต X เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตปเตเดฑเต† เดชเดคเดฟเดจเดžเตเดšเดพเดฎเดคเตเดคเต† เดฌเตˆเดฑเตเดฑเดฟเตปเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตเดณเตเดณ เดจเดพเดฒเต เดฌเดฟเดฑเตเดฑเตเด•เตพ 4 เด•เตŠเดฃเตเดŸเต เด—เตเดฃเดฟเดšเตเดšเดพเตฝ. เดชเดคเดฟเดจเดžเตเดšเดพเดฎเดคเตเดคเต† เดฌเตˆเดฑเตเดฑเดฟเตปเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดจเดพเดฒเต เดฌเดฟเดฑเตเดฑเตเด•เตพ เดซเต€เตฝเดกเดพเดฃเต เด‡เตปเตเดฑเตผเดจเต†เดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเตปเตเดฑเต† เดฆเตˆเตผเด˜เตเดฏเด‚ IPv4 เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต, เด…เดคเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเตปเตเดฑเต† เดฆเตˆเตผเด˜เตเดฏเด‚ เดตเดพเด•เตเด•เตเด•เดณเดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ 4 เด•เตŠเดฃเตเดŸเต เด—เตเดฃเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดฐเดธเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดŽเด•เตเดธเตเดชเตเดฐเดทเตป 4*([14]&0xf) เดˆ เดซเต‹เดฎเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด…เดกเตเดฐเดธเตเดธเดฟเด‚เด—เต เดธเตเด•เต€เดฎเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเดฆเดตเดฟเดฏเดพเดฃเต เด’เดฐเต เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเดจเต เดฎเดพเดคเตเดฐเด‚ X, เด…เดคเดพเดฏเดคเต. เดจเดฎเตเด•เตเด•เตเด‚ เดชเดฑเดฏเดพเดจเดพเดตเดฟเดฒเตเดฒ ldb 4*([14]&0xf) เด‡เดฒเตเดฒ ldxb 5*([14]&0xf) (เดžเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต เด“เดซเตโ€Œเดธเต†เดฑเตเดฑเต เดฎเดพเดคเตเดฐเดฎเต‡ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเต‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, ldxb 4*([16]&0xf)). เดˆ เด…เดกเตเดฐเดธเตเดธเดฟเด‚เด—เต เดธเตเด•เต€เด‚ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดตเต‡เดฃเตเดŸเดฟเดฏเดพเดฃเต เดฌเดฟเดชเดฟเดŽเดซเดฟเตฝ เดšเต‡เตผเดคเตเดคเดคเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเดฃเต 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 เดจเดพเดฒเต เดฌเดฟเดชเดฟเดŽเดซเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต, เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดตเดฐเดฟเดฏเดฟเตฝ เดˆ เด“เดชเตเดทเตป เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเด‚ SO_ATTACH_FILTER เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ setsockopt 4 เดจเต€เดณเดฎเตเดณเตเดณ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดžเด™เตเด™เตพ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด‡เดคเดพเดฃเต เดžเด™เตเด™เดณเตเดŸเต† เดซเดฟเตฝเดŸเตเดŸเตผ.

เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเตฝ, เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด’เดฐเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เด“เดชเตเดชเดฑเต‡เดทเดจเดพเดฏเดฟเดŸเตเดŸเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเด‚ เด‡เดตเตปเตเดฑเต เดœเดจเดฑเต‡เดฑเตเดฑเดฑเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เด•เตƒเดคเตเดฏเดธเดฎเดฏเดคเตเดคเต เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.

เดฎเดฑเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดคเตเดฏเด‚

เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเดฟเตปเตเดฑเต† เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

$ 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 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Linux-เตฝ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด˜เดŸเดจเดฏเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เด†เดตเดถเตเดฏเดฎเดพเดฃเต struct sock_fprog เด’เดฐเต เดคเตเดฑเดจเตเดจ เดธเต‹เด•เตเด•เดฑเตเดฑเตเด‚, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต‹เด•เตเด•เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดซเดฟเตฝเดŸเตเดŸเตผ เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚ setsockopt.

เดฐเดธเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดซเดฟเตฝเดŸเตเดŸเตผ เด…เดธเด‚เดธเตเด•เตƒเดคเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดเดคเต เดธเต‹เด•เตเด•เดฑเตเดฑเดฟเดฒเตเด‚ เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚. เด‡เดตเดฟเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เดŽเดฒเตเดฒเดพ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดฏเตเดกเดฟเดชเดฟ เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เด†เดฆเตเดฏเดคเตเดคเต† เดฐเดฃเตเดŸเต เดฌเตˆเดฑเตเดฑเตเด•เตพ เด’เดดเดฟเด•เต† เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพเด‚ เดตเต†เดŸเตเดŸเดฟเดฎเดพเดฑเตเดฑเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚. (เดฒเต‡เด–เดจเด‚ เด…เดฒเด™เตเด•เต‹เดฒเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เด•เต‹เดกเดฟเตฝ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดšเต‡เตผเดคเตเดคเต.)

เด‰เดชเดฏเต‹เด—เดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ setsockopt เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด•เดพเดฃเตเด• เดธเต‹เด•เตเด•เดฑเตเดฑเต(7), เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต struct sock_fprog เดธเดนเดพเดฏเดฎเดฟเดฒเตเดฒเดพเดคเต† tcpdump เดžเด™เตเด™เตพ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚ เดจเดฎเตเดฎเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เตˆเด•เตŠเดฃเตเดŸเต BPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต.

เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเตเด‚ 21-เดพเด‚ เดจเต‚เดฑเตเดฑเดพเดฃเตเดŸเตเด‚

1997-เตฝ BPF เดฒเดฟเดจเด•เตเดธเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ, เดฆเต€เตผเด˜เด•เดพเดฒเดฎเดพเดฏเดฟ เด’เดฐเต เดœเต‹เดฒเดฟเด•เตเด•เดพเดฐเดจเดพเดฏเดฟ เดคเตเดŸเตผเดจเตเดจเต libpcap เดชเตเดฐเดคเตเดฏเต‡เด• เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด•เต‚เดŸเดพเดคเต† (เดฒเดฟเดจเด•เตเดธเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด…เดคเต เด†เดฏเดฟเดฐเตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด…เดตเตผ เด†เด—เต‹เดณ เดšเดฟเดคเตเดฐเด‚ เดฎเดพเดฑเตเดฑเดฟเดฏเดฟเดฒเตเดฒ). 2011-เตฝ เดŽเดฑเดฟเด•เต เดกเตเดฎเดธเต†เดฑเตเดฑเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเดชเตเดชเต‹เดดเดพเดฃเต เดฌเดฟเดชเดฟเดŽเดซเต เดตเดฟเด•เดธเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเดคเดฟเตปเตเดฑเต† เด†เดฆเตเดฏ เด—เตเดฐเตเดคเดฐเดฎเดพเดฏ เดธเต‚เดšเดจเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดคเต. เดชเดพเดšเตเดšเต, เด‡เดคเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต‡เด•เตเด•เต เดœเดธเตเดฑเตเดฑเต เด‡เตป เดŸเตˆเด‚ เด•เด‚เดชเตˆเดฒเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต - เดฌเดฟเดชเดฟเดŽเดซเต เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เดจเต‡เดฑเตเดฑเต€เดตเต เด†เดฏเดฟ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดตเดฟเดตเตผเดคเตเดคเด•เตป x86_64 เด•เต‡เดพเดกเต.

เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดถเตƒเด‚เด–เดฒเดฏเดฟเดฒเต† เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต JIT เด•เด‚เดชเตˆเดฒเตผ เด†เดฏเดฟเดฐเตเดจเตเดจเต: 2012 เตฝ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเดดเตเดคเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดธเต†เด•เตเด•เดจเตเดฑเต, BPF เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, 2013 เดœเดจเตเดตเดฐเดฟเดฏเดฟเตฝ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเดคเตเดคเต เดฎเตŠเดกเตเดฏเต‚เตพ xt_bpf, เด‡เดคเต เดจเดฟเดฏเดฎเด™เตเด™เตพ เดŽเดดเตเดคเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต iptables เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†, 2013 เด’เด•เตเดŸเต‹เดฌเดฑเดฟเตฝ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเดคเตเดคเต เด’เดฐเต เดฎเตŠเดกเตเดฏเต‚เดณเตเด‚ cls_bpf, BPF เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดซเดฟเด•เต เด•เตเดฒเดพเดธเดฟเดซเดฏเดฑเตเด•เตพ เดŽเดดเตเดคเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเต†เดฒเตเดฒเดพเด‚ เดžเด™เตเด™เตพ เด‰เดŸเตป เดคเดจเตเดจเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดฒเตˆเดฌเตเดฐเดฑเดฟ เดจเตฝเด•เตเดจเตเดจ เด•เดดเดฟเดตเตเด•เตพ เด•เดพเดฐเดฃเด‚, เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเดพเดฏเดฟ เด…เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเตเด‚ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเต เด†เดฆเตเดฏเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเด‚. libpcap เดชเดฐเดฟเดฎเดฟเดคเด‚ (เดฒเดณเดฟเดคเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚: เดซเดฟเตฝเดŸเตเดŸเตผ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดคเต libpcap เดฐเดฃเตเดŸเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดจเตฝเด•เดพเดจเดพเด•เต‚ - 0 เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 0x40000) เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเตŠเดคเตเดตเต†, seccomp-เตปเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเดฒเต†เดจเตเดจเดชเต‹เดฒเต†, เดฌเดพเดงเด•เดฎเดฒเตเดฒ.

เดจเดฎเตเดฎเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เตˆเด•เตŠเดฃเตเดŸเต BPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต

BPF เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเดŸเต† เดฌเตˆเดจเดฑเดฟ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเดพเด‚, เด‡เดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต:

   16    8    8     32
| code | jt | jf |  k  |

เด“เดฐเต‹ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดตเตเด‚ 64 เดฌเดฟเดฑเตเดฑเตเด•เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต, เด…เดคเดฟเตฝ เด†เดฆเตเดฏเดคเตเดคเต† 16 เดฌเดฟเดฑเตเดฑเตเด•เตพ เดจเดฟเตผเดฆเตเดฆเต‡เดถ เด•เต‹เดกเดพเดฃเต, เดคเตเดŸเตผเดจเตเดจเต เดฐเดฃเตเดŸเต เดŽเดŸเตเดŸเต-เดฌเดฟเดฑเตเดฑเต เด‡เตปเดกเตปเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเต, jt ะธ jf, เดตเดพเดฆเดคเตเดคเดฟเดจเดพเดฏเดฟ 32 เดฌเดฟเดฑเตเดฑเตเด•เตพ K, เด‡เดคเดฟเตปเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด‚ เด•เดฎเดพเตปเดกเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เดฎเดพเตปเดกเต เดตเดฐเต† เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด•เดฎเดพเตปเดกเต ret, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดกเต เด‰เดฃเตเดŸเต 6, เด•เต‚เดŸเดพเดคเต† เดฑเดฟเดŸเตเดŸเต‡เตบ เดฎเต‚เดฒเตเดฏเด‚ เดธเตเดฅเดฟเดฐเดพเด™เตเด•เดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต K. เดธเดฟเดฏเดฟเตฝ, เด’เดฐเตŠเดฑเตเดฑ เดฌเดฟเดชเดฟเดŽเดซเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เด’เดฐเต เด˜เดŸเดจเดฏเดพเดฏเดฟ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

struct sock_filter {
        __u16   code;
        __u8    jt;
        __u8    jf;
        __u32   k;
}

เด•เต‚เดŸเดพเดคเต† เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด‚ เด’เดฐเต เด˜เดŸเดจเดฏเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเดฒเดพเดฃเต

struct sock_fprog {
        unsigned short len;
        struct sock_filter *filter;
}

เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดŽเดดเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต เดจเดฟเตผเดฆเตเดฆเต‡เดถ เด•เต‹เดกเตเด•เตพ เด…เดฑเดฟเดฏเดพเด‚ [1]). เดซเดฟเตฝเดŸเตเดŸเตผ เด‡เด™เตเด™เดจเต†เดฏเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ 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),
}

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดˆ เด“เดชเตเดทเตป เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดฒเตเดฒ. เด‡เดคเดพเดฃเต เดฒเดฟเดจเด•เตเดธเต เด•เต‡เตผเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเดฎเดพเตผ เดจเตเดฏเดพเดฏเต€เด•เดฐเดฟเดšเตเดšเดคเต, เด…เดคเดฟเดจเดพเตฝ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ tools/bpf เด•เตเดฒเดพเดธเดฟเด•เต 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 เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด™เตเด™เตพ

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต เดชเตเดฑเดฎเต‡, เดฒเดฟเดจเด•เตเดธเตเด‚ tools/bpf/bpf_asm เดชเดฟเดจเตเดคเตเดฃ เด’เดชเตเดชเด‚ เดจเดฟเดฒเดตเดพเดฐเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดธเต†เดฑเตเดฑเต. เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เด’เดฐเต เด˜เดŸเดจเดฏเตเดŸเต† เดซเต€เตฝเดกเตเด•เตพ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต struct sk_buff, เด‡เดคเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต† เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเดฟเดจเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดฎเดฑเตเดฑเต เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเดนเดพเดฏ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เด‰เดฃเตเดŸเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต ldw cpu เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด‚ A เด’เดฐเต เด•เต‡เตผเดฃเตฝ เดซเด‚เด—เตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เดซเดฒเด‚ raw_smp_processor_id(). (BPF-เตปเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ, เดฎเต†เดฎเตเดฎเดฑเดฟ, เด˜เดŸเดจเด•เตพ, เด‡เดตเตปเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เด•เต‡เตผเดฃเตฝ เดธเดนเดพเดฏเดฟเด•เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดˆ เดจเดฟเดฒเดตเดพเดฐเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด™เตเด™เตพ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.) เดžเด™เตเด™เตพ เดชเด•เตผเดคเตเดคเตเดจเตเดจ เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเตปเตเดฑเต† เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‡เดคเดพ. เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต‡เด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ poff, เดชเต‡เดฒเต‹เดกเต เด“เดซเตโ€Œเดธเต†เดฑเตเดฑเต:

ld poff
ret a

เดฌเดฟเดชเดฟเดŽเดซเต เดŽเด•เตเดธเตเดฑเตเดฑเตปเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ tcpdump, เดŽเดจเตเดจเดพเตฝ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดชเดพเด•เตเด•เต‡เดœเต เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเดพเตป เด‡เดคเต เด’เดฐเต เดจเดฒเตเดฒ เด•เดพเดฐเดฃเดฎเดพเดฃเต netsniff-ng, เดฎเดฑเตเดฑเต เด•เดพเดฐเตเดฏเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚, เด’เดฐเต เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต netsniff-ng, เด‡เดคเดฟเตฝ, BPF เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดชเตเดฑเดฎเต‡, เดซเดฒเดชเตเดฐเดฆเดฎเดพเดฏ เดŸเตเดฐเดพเดซเดฟเด•เต เดœเดจเดฑเต‡เดฑเตเดฑเดฑเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดชเตเดฒเดฎเดพเดฏ tools/bpf/bpf_asm, เด’เดฐเต เดฌเดฟเดชเดฟเดŽเดซเต เด…เดธเด‚เดฌเตเดฒเตผ เดตเดฟเดณเดฟเดšเตเดšเต bpfc. เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเตป เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฒเต‡เด–เดจเดคเตเดคเดฟเตปเตเดฑเต† เด…เดตเดธเดพเดจเดคเตเดคเต† เดฒเดฟเด™เตเด•เตเด•เดณเตเด‚ เด•เดพเดฃเตเด•.

เดธเต†เด•เตเด•เดจเตเดฑเต

เด…เดคเดฟเดจเดพเตฝ, เด…เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเตเดŸเต† BPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚, เด•เต‚เดŸเดพเดคเต† เดชเตเดคเดฟเดฏ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเตป เดคเดฏเตเดฏเดพเดฑเดพเดฃเต, เด…เดคเดฟเตฝ เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต seccomp เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเดพเดฃเต, เด‡เดคเต BPF เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดฒเดญเตเดฏเดฎเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เด†เตผเด—เตเดฏเตเดฎเต†เตปเตเดฑเตเด•เดณเตเดŸเต† เดธเต†เดฑเตเดฑเตเด‚ เดธเต†เดฑเตเดฑเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเด‚ เด…เดคเดฟเตปเตเดฑเต† เดชเดฟเตปเด—เดพเดฎเดฟเด•เดณเตเด‚.

2005-เตฝ seccomp-เตปเตเดฑเต† เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเดคเตเดคเต, เด…เดคเต เดตเดณเดฐเต† เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เด’เดฐเตŠเดฑเตเดฑ เด“เดชเตเดทเตป เดฎเดพเดคเตเดฐเดฎเต‡ เดจเตฝเด•เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณเต‚ - เด’เดฐเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเดฒเต‡เด•เตเด•เต เดฒเดญเตเดฏเดฎเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เดณเตเดŸเต† เดธเต†เดฑเตเดฑเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดตเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป: read, write, exit ะธ sigreturn, เด•เต‚เดŸเดพเดคเต† เดจเดฟเดฏเดฎเด™เตเด™เตพ เดฒเด‚เด˜เดฟเดšเตเดš เดชเตเดฐเด•เตเดฐเดฟเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เตŠเดจเตเดจเต SIGKILL. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, 2012-เตฝ, BPF เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต seccomp เดšเต‡เตผเดคเตเดคเต, เด‡เดคเต เด…เดจเตเดตเดฆเดจเต€เดฏเดฎเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดตเดฏเตเดŸเต† เด†เตผเด—เตเดฏเตเดฎเต†เตปเตเดฑเตเด•เดณเดฟเตฝ เดชเดฐเดฟเดถเต‹เดงเดจ เดจเดŸเดคเตเดคเดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. (เดฐเดธเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตปเตเดฑเต† เด†เดฆเตเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเดฟเตฝ เด’เดฐเดพเดณเดพเดฏเดฟเดฐเตเดจเตเดจเต Chrome, เด•เต‚เดŸเดพเดคเต† Chrome เด†เดณเตเด•เตพ เดจเดฟเดฒเดตเดฟเตฝ BPF-เตปเตเดฑเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด’เดฐเต KRSI เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ Linux เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเตเดŸเต† เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดคเดฎเดพเด•เตเด•เตฝ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.) เด…เดงเดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เตเด•เตพ เด…เดตเดธเดพเดจเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚. เดฒเต‡เด–เดจเดคเตเดคเดฟเตปเตเดฑเต†.

seccomp เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดนเดฌเตเดฌเดฟเตฝ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดฒเต‡เด–เดจเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจ เด•เดพเดฐเตเดฏเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด‰เดชเดตเดฟเดญเดพเด—เด™เตเด™เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเด•เดฐเด‚) เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเต‡เด•เตเด•เดพเด‚. เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เดณเตเด‚ เดธเตเดฐเด•เตเดทเดฏเตเด‚: seccomp 2007-เดฒเต† เดชเดคเดฟเดชเตเดชเตเด‚ BPF เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเตเด‚ seccomp เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเต (เดฒเดฟเดฌเตเดธเต†เด•เตเด•เต‹เดฎเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต), เดกเต‹เด•เตเด•เดฑเตเดฎเดพเดฏเตเดณเตเดณ เดธเต†เด•เตเด•เต‹เดฎเตเดชเดฟเตปเตเดฑเต† เด•เดฃเด•เตเดทเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดงเดพเดฐเดพเดณเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เดฒเดฟเด™เตเด•เตเด•เดณเตเด‚ เดจเตฝเด•เตเดจเตเดจเต. เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ systemd เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเต†เดฎเดฃเตเด•เดณเต† เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ "เด‡เดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต‹เด•เตเด•เตผ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ!" เดธเดฟเดธเตเดฑเตเดฑเด‚เดกเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดกเต†เดฎเดฃเตเด•เตพเด•เตเด•เตเดณเตเดณ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เดณเตเดŸเต† เดฌเตเดฒเดพเด•เตเด•เตโ€Œเดฒเดฟเดธเตเดฑเตเดฑเตเด•เดณเต‹ เดตเตˆเดฑเตเดฑเตโ€Œเดฒเดฟเดธเตเดฑเตเดฑเตเด•เดณเต‹ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเต เด‡เดคเต เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเตเด‚ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เดจเต‹เด•เตเด•เดพเด‚ seccomp เดจเด—เตเดจเดฎเดพเดฏ C เดฏเดฟเดฒเตเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต libseccomp เด“เดฐเต‹ เด“เดชเตเดทเตปเตเดฑเต†เดฏเตเด‚ เด—เตเดฃเดฆเต‹เดทเด™เตเด™เตพ เดŽเดจเตเดคเตŠเด•เตเด•เต†เดฏเดพเดฃเต, เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดŽเด™เตเด™เดจเต† seccomp เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚ strace.

seccomp-เดจเดพเดฏเดฟ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

BPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดฃเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด†เดฆเตเดฏเด‚ seccomp เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เด‡เตปเตเดฑเตผเดซเต‡เดธเต เดจเต‹เด•เตเด•เดพเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเต‹เดธเดธเตเดธเต เดคเดฒเดคเตเดคเดฟเตฝ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด•เต‚เดŸเดพเดคเต† เดŽเดฒเตเดฒเดพ เดšเตˆเตฝเดกเต เดชเตเดฐเต‹เดธเดธเตเด•เดณเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพ เด…เดตเด•เดพเดถเดฎเดพเด•เตเด•เตเด‚. เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต seccomp(2):

seccomp(SECCOMP_SET_MODE_FILTER, flags, &filter)

เดŽเดตเดฟเดŸเต† &filter - เด‡เดคเต เดจเดฎเตเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏ เด’เดฐเต เด˜เดŸเดจเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดธเต‚เดšเดจเดฏเดพเดฃเต struct sock_fprog, เด…เดคเดพเดฏเดคเต. เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚.

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() เด•เต‡เตผเดฃเดฒเตเด•เตพ. (เดคเดฎเดพเดถเดฏเตเดณเตเดณ เด•เดพเดฐเตเดฏเด‚, seccomp เดซเด‚เด—เตโ€Œเดทเดฃเดพเดฒเดฟเดฑเตเดฑเดฟ เดšเต‡เตผเดคเตเดค เดฏเดฅเดพเตผเดคเตเดฅ เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟเตฝ, เดˆ เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด…เดจเตเดฎเดคเดฟ เดšเต‡เตผเด•เตเด•เดพเตป เด…เดตเตผ เดฎเดฑเดจเตเดจเต. mod (เดกเดฟเดตเดฟเดทเตป เดฌเดพเด•เตเด•เดฟ) เด•เต‚เดŸเดพเดคเต† เด‡เดชเตเดชเต‹เตพ เดธเต†เด•เตเด•เต‹เด‚เดชเต เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพเด•เตเด•เต เด‡เดคเต เดฒเดญเตเดฏเดฎเดฒเตเดฒ, เด…เดคเต เดšเต‡เตผเดคเตเดคเดคเดฟเดจเต เดถเต‡เดทเด‚ เดคเด•เตผเด•เตเด•เตเด‚ เดŽเดฌเดฟเด.)

เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, 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

เดจเต‡เดฑเตเดฑเต€เดตเต เด•เต‹เดกเดฟเดฒเต‹ เดฌเดฟเดชเดฟเดŽเดซเต เด…เดธเด‚เดฌเตเดฒเดฟเดฏเดฟเดฒเต‹ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดซเดฒเดคเตเดคเดฟเตฝ เดชเต‚เตผเดฃเตเดฃ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ เดจเต‡เดŸเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดธเดฎเดฏเด‚, เดชเต‹เตผเดŸเตเดŸเดฌเดฟเตพ เด•เต‚เดŸเดพเดคเต†/เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฑเต€เดกเดฌเดฟเตพ เด•เต‹เดกเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เด‡เดคเดฟเดจเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เดจเดฎเตเดฎเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚ libseccomp, เด‡เดคเต เด•เดฑเตเดชเตเดชเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต†เดณเตเดชเตเดชเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เด‡เตปเตเดฑเตผเดซเต‡เดธเต เดจเตฝเด•เตเดจเตเดจเต.

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฌเตˆเดจเดฑเดฟ เดซเดฏเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดŽเดดเตเดคเดพเด‚, เดฎเตเดฎเตเดชเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เดณเตเดŸเต† เด’เดฐเต เดฌเตเดฒเดพเด•เตเด•เต เดฒเดฟเดธเตเดฑเตเดฑเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต เดฎเตเด•เดณเดฟเดฒเต† เดฒเต‡เด–เดจเด‚ (เด•เต‚เดŸเตเดคเตฝ เดตเดพเดฏเดจเดพเด•เตเดทเดฎเดคเดฏเตเด•เตเด•เดพเดฏเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดชเต‚เตผเดฃเตเดฃ เดชเดคเดฟเดชเตเดชเต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เด‡เดตเดฟเดŸเต†):

#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 เด†เดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเดจเต† เด’เดฐเต เดฌเตˆเดจเดฑเดฟ เดคเดฟเดฐเดฏเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเด‚.

เดฌเตˆเดจเดฑเดฟ เดคเดฟเดฐเดฏเตฝ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด•เดพเดฃเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเต‹เด•เตเด•เตเด• เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต, เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดจเดฎเตเดชเดฑเตเด•เตพ เดกเดฏเตฝ เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต BPF เด…เดธเด‚เดฌเตเดฒเดฑเดฟเตฝ เด‡เดคเตเดคเดฐเด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

$ 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, เด‡เดคเตเดฏเดพเดฆเดฟ.

เดšเต†เดฑเดฟเดฏ เด•เตเดŸเตเดŸเดฟเด•เตพเด•เตเด•เตเดณเตเดณ เดฌเดฟเดชเดฟเดŽเดซเต, เดญเดพเด—เด‚ เดชเต‚เดœเตเดฏเด‚: เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, 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 เดจเดฟเดจเตเดจเต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เดธเดฎเต€เดชเด•เดพเดฒ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต. เดžเด™เตเด™เดณเต† เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเดฟเดŸเดคเตเดคเต‹เดณเด‚, เดเดฑเตเดฑเดตเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏ เดตเดธเตเดคเตเดค, seccomp เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เตเดฒเดพเดธเดฟเด•เต BPF เด‡เดจเตเดจเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต.

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 bytecode 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 เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเต‡เด•เตเด•เดพเตพ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. Cloudfare-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฏเดฅเดพเตผเดคเตเดฅ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚. เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดตเดฐเต† เด…เดตเตผ เดฎเตŠเดกเตเดฏเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดฐเตเดจเตเดจเต xt_bpf DDoS เด†เด•เตเดฐเดฎเดฃเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเดฐเดฟเดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต. เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ BPF เดŸเต‚เดณเตเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เด…เดตเตผ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต (เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต) BPF เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเตเด‚ เด…เดคเตเดคเดฐเด‚ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เตเด•เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เด…เดตเตผ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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" เด…เดคเตเดชเต‹เดฒเต†.

เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต, Cloudfare p0f -> BPF เด•เดฎเตเดชเตˆเดฒเตผ เด•เต‹เดกเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเต. เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ p0f BPF เด•เดฎเตเดชเตˆเดฒเตผ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต p0f เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ 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-เตปเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด“เดชเตเดทเดจเตเด•เดณเดฟเดฒเตŠเดจเตเดจเต, เด•เดพเดฃเตเด•. L4Drop: XDP DDoS เดฎเดฟเดฑเตเดฑเดฟเด—เต‡เดทเตปเดธเต.

cls_bpf

เด•เต†เตผเดฃเดฒเดฟเตฝ เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เด…เดตเดธเดพเดจ เด‰เดฆเดพเดนเดฐเดฃเด‚ เด•เตเดฒเดพเดธเดฟเดซเดฏเตผ เด†เดฃเต cls_bpf เดฒเดฟเดจเด•เตเดธเดฟเดฒเต† เดŸเตเดฐเดพเดซเดฟเด•เต เด•เตบเดŸเตเดฐเต‹เตพ เดธเดฌเตเดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเดพเดฏเดฟ, 2013 เด…เดตเดธเดพเดจเดคเตเดคเต‹เดŸเต† เดฒเดฟเดจเด•เตเดธเดฟเดฒเต‡เด•เตเด•เต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเดพเดคเดจเดฎเดพเดฏเดคเดฟเดจเต† เด†เดถเดฏเดชเดฐเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. cls_u32.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดœเต‹เดฒเดฟเดฏเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ cls_bpf, เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดฑเดฟเดตเดฟเตปเตเดฑเต† เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เด’เดจเตเดจเตเด‚ เดจเตฝเด•เดฟเดฒเตเดฒ - เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏเดฟเด•เตเด•เดดเดฟเดžเตเดžเต. เด•เต‚เดŸเดพเดคเต†, เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ, เดžเด™เตเด™เตพ เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดคเดตเดฃ เดˆ เด•เตเดฒเดพเดธเดฟเดซเดฏเตผ เด•เดพเดฃเตเด‚.

เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เดธเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดฎเดฑเตเดฑเตŠเดฐเต เด•เดพเดฐเดฃเด‚ cls_bpf เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เดฌเดฟเดชเดฟเดŽเดซเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ, เดˆ เด•เต‡เดธเดฟเตฝ เดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเตปเตเดฑเต† เดตเตเดฏเดพเดชเตเดคเดฟ เดธเดฎเต‚เดฒเดฎเดพเดฏเดฟ เดšเตเดฐเตเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดถเตเดจเด‚: เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพเด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เด•เต‹เดณเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดจเดฟเดฒ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เด…เดคเตเด•เตŠเดฃเตเดŸเต เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต‹เดŸเต เดตเดฟเดŸเดชเดฑเดฏเดพเดจเตเด‚ เดญเดพเดตเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเต‹เด•เตเด•เดพเดจเตเดฎเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต.

เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต เดตเดฟเดŸ

เดคเตŠเดฃเตเดฃเต‚เดฑเตเด•เดณเตเดŸเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดš เดฌเดฟเดชเดฟเดŽเดซเต เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดŽเด™เตเด™เดจเต† เด•เดพเตฝเดจเต‚เดฑเตเดฑเดพเดฃเตเดŸเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดœเต€เดตเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเดธเดพเดจเด‚ เดตเดฐเต† เดชเตเดคเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเตเดตเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดธเตเดฑเตเดฑเดพเด•เตเด•เต เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต RISC-เดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ, เด‡เดคเต เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเต เดชเตเดฐเต‡เดฐเดฃเดฏเดพเดฏเดฟ, 32-เด•เดณเดฟเตฝ 64-เดฌเดฟเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต XNUMX-เดฌเดฟเดฑเตเดฑเต เดฎเต†เดทเต€เดจเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดฎเดพเดฑเตเดฑเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟ, เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเต เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเดพเตป เดคเตเดŸเด™เตเด™เดฟ. เด•เต‚เดŸเดพเดคเต†, เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเตปเตเดฑเต† เด•เดดเดฟเดตเตเด•เตพ เดตเดณเดฐเต† เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฃเต, เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเต เดชเตเดฑเดฎเต‡ - เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด•เต‹เดณเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดจเดฟเดฒ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดฒเตเดฒ, เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดŸเดชเต†เดŸเดฒเดฟเดจเต เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒ, เดธเด‚เดตเดฆเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒ. เด•เต‡เตผเดฃเดฒเดฟเดจเตŠเดชเตเดชเด‚, เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดธเตเดŸเตเดฐเด•เตเดšเตผ เดซเต€เตฝเดกเตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดดเดฟเด•เต† sk_buff เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเดนเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดจเดฟเดฒเดตเดฟเตฝ เดฒเดฟเดจเด•เตเดธเดฟเดฒเต† เด•เตเดฒเดพเดธเดฟเด•เต เดฌเดฟเดชเดฟเดŽเดซเดฟเตฝ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดชเดฟเด เด‡เตปเตเดฑเตผเดซเต‡เดธเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เด•เต‡เตผเดฃเดฒเดฟเดจเตเดณเตเดณเดฟเตฝ เดŽเดฒเตเดฒเดพ เด•เตเดฒเดพเดธเดฟเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเตเด‚ เดธเต‹เด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเต‹ เดธเต†เด•เตเด•เต‹เดฎเตเดชเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเต‹ เด†เด•เดŸเตเดŸเต†, เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเดšเตเดš เดฌเดฟเดชเดฟเดŽเดซเต เดŽเดจเตเดจ เดชเตเดคเดฟเดฏ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดธเตเดตเดฏเดฎเต‡เดต เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต. (เด‡เดคเต เดŽเด™เตเด™เดจเต† เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดจเดฎเตเดฎเตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.)

เด’เดฐเต เดชเตเดคเดฟเดฏ เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฎเดพเดฑเตเดฑเด‚ 2013-เตฝ เด†เดฐเด‚เดญเดฟเดšเตเดšเต, เด…เดฒเด•เตเดธเดฟ เดธเตเดฑเตเดฑเดพเดฐเต‹เดตเต‹เดฏเดฟเดฑเตเดฑเต‹เดตเต เด’เดฐเต เดฌเดฟเดชเดฟเดŽเดซเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดธเตเด•เต€เด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเดคเต‹เดŸเต†เดฏเดพเดฃเต. 2014-เตฝ เด…เดจเตเดฌเดจเตเดง เดชเดพเดšเตเดšเตเด•เตพ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเดพเตป เดคเตเดŸเด™เตเด™เดฟ เด•เดพเดฎเตเดชเดฟเตฝ. เดžเดพเตป เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเดคเตเดคเต‹เดณเด‚, 64-เดฌเดฟเดฑเตเดฑเต เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเตเด‚ JIT เด•เด‚เดชเตˆเดฒเดฑเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต เดšเต†เดฏเตเดฏเตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต เดชเตเดฐเดพเดฐเด‚เดญ เดชเดฆเตเดงเดคเดฟ, เดชเด•เดฐเด‚ เดˆ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเด•เตพ เดฒเดฟเดจเด•เตเดธเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเตฝ เด’เดฐเต เดชเตเดคเดฟเดฏ เด…เดงเตเดฏเดพเดฏเดคเตเดคเดฟเดจเต เดคเตเดŸเด•เตเด•เด‚ เด•เตเดฑเดฟเดšเตเดšเต.

เดˆ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เด•เต‚เดŸเตเดคเตฝ เดฒเต‡เด–เดจเด™เตเด™เตพ เดชเตเดคเดฟเดฏ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดŸเต† เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเตเด‚ เดชเตเดฐเดฏเต‹เด—เด™เตเด™เดณเตเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต, เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด‡เตปเตเดฑเต‡เดฃเตฝ เดฌเดฟเดชเดฟเดŽเดซเต เดŽเดจเตเดจเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เดฌเดฟเดชเดฟเดŽเดซเต เดŽเดจเตเดจเตเด‚ เด‡เดชเตเดชเต‹เตพ เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดฌเดฟเดชเดฟเดŽเดซเต เดŽเดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเตเดจเตเดจเต.

เดฑเต†เดซเดฑเตปเดธเตเด•เตพ

  1. เดธเตเดฑเตเดฑเต€เดตเตป เดฎเด•เตเด•เดพเดจเต†เดฏเตเด‚ เดตเดพเตป เดœเต‡เด•เตเด•เดฌเตโ€Œเดธเดฃเตเด‚, "เดฆเดฟ เดฌเดฟเดŽเดธเตโ€Œเดกเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ: เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเดพเด•เตเด•เดฑเตเดฑเต เด•เตเดฏเดพเดชเตโ€Œเดšเดฑเดฟเดจเตเดณเตเดณ เดชเตเดคเดฟเดฏ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ", https://www.tcpdump.org/papers/bpf-usenix93.pdf
  2. เดธเตเดฑเตเดฑเต€เดตเตป เดฎเด•เตเด•เดพเตป, "libpcap: เดชเดพเด•เตเด•เดฑเตเดฑเต เด•เตเดฏเดพเดชเตโ€Œเดšเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เด’เดฐเต เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดฐเต€เดคเดฟเดฏเตเด‚", https://sharkfestus.wireshark.org/sharkfest.11/presentations/McCanne-Sharkfest'11_Keynote_Address.pdf
  3. tcpdump, libpcap: https://www.tcpdump.org/
  4. IPtable U32 เดฎเดพเดšเตเดšเต เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเตฝ.
  5. BPF - เดฎเดฑเดจเตเดจเตเดชเต‹เดฏ เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต: https://blog.cloudflare.com/bpf-the-forgotten-bytecode/
  6. BPF เดŸเต‚เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต: https://blog.cloudflare.com/introducing-the-bpf-tools/
  7. bpf_cls: http://man7.org/linux/man-pages/man8/tc-bpf.8.html
  8. เด’เดฐเต เดธเต†เด•เตเด•เตปเตเดฑเต เด…เดตเดฒเต‹เด•เดจเด‚: https://lwn.net/Articles/656307/
  9. https://github.com/torvalds/linux/blob/master/Documentation/userspace-api/seccomp_filter.rst
  10. habr: เดชเดพเดคเตเดฐเด™เตเด™เดณเตเด‚ เดธเตเดฐเด•เตเดทเดฏเตเด‚: seccomp
  11. habr: systemd เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเต†เดฎเดฃเตเด•เดณเต† เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ "เด‡เดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต‹เด•เตเด•เตผ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ!"
  12. เดชเต‹เตพ เดšเตˆเด—เตเดจเตบ, "เดธเตเดŸเตเดฐเต‡เดธเต --เดธเต†เด•เตเด•เต‹เด‚เดชเต-เดฌเดฟเดชเดฟเดŽเดซเต: เดŽ เดฒเตเด•เตเด•เต เด…เดฃเตเดŸเตผ เดฆเดฟ เดนเต‚เดกเต", https://fosdem.org/2020/schedule/event/debugging_strace_bpf/
  13. netsniff-ng: http://netsniff-ng.org/

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•