ืคื’ื™ืขื•ืช ื‘ืชืช ื”ืžืขืจื›ืช eBPF ื”ืžืืคืฉืจืช ื‘ื™ืฆื•ืข ืงื•ื“ ื‘ืจืžืช ืœื™ื‘ืช ืœื™ื ื•ืงืก

ื–ื•ื”ืชื” ืคื’ื™ืขื•ืช (CVE-2021-4204) ื‘ืชืช-ื”ืžืขืจื›ืช eBPF, ื”ืžืืคืฉืจืช ืœืš ืœื”ืคืขื™ืœ ืžื˜ืคืœื™ื ื‘ืชื•ืš ืœื™ื‘ืช ืœื™ื ื•ืงืก ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื™ื•ื—ื“ืช ืขื JIT, ืžื” ืฉืžืืคืฉืจ ืœืžืฉืชืžืฉ ืžืงื•ืžื™ ืœืœื ื”ืจืฉืื•ืช ืœื”ืฉื™ื’ ื”ืกืœืžื” ืฉืœ ื”ืจืฉืื•ืช ื•ืœื”ืคืขื™ืœ ืืช ื”ืงื•ื“ ืฉืœื• ื‘- ืจืžืช ืœื™ื‘ืช ืœื™ื ื•ืงืก. ื”ื‘ืขื™ื” ืžื•ืคื™ืขื” ืžืื– ืœื™ื‘ืช ืœื™ื ื•ืงืก 5.8 ื•ื ืฉืืจื” ืœื ืžืชื•ืงื ืช (ื›ื•ืœืœ ืžื”ื“ื•ืจื” 5.16). ื ื™ืชืŸ ืœืขืงื•ื‘ ืื—ืจ ืžืฆื‘ ื”ืขื“ื›ื•ื ื™ื ืฉื ื•ืฆืจื™ื ื›ื“ื™ ืœืชืงืŸ ืืช ื”ื‘ืขื™ื” ื‘ื”ืคืฆื•ืช ื‘ื“ืคื™ื ื”ื‘ืื™ื: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. ืคื•ืจืกื ื›ื™ ื ื•ืฆืจ ื ื™ืฆื•ืœ ืขื•ื‘ื“, ืืฉืจ ืžืชื•ื›ื ืŸ ืœื”ืชืคืจืกื ื‘-18 ื‘ื™ื ื•ืืจ (ืœืžืฉืชืžืฉื™ื ื•ืœืžืคืชื—ื™ื ื ื™ืชืŸ ืฉื‘ื•ืข ืœืชืงืŸ ืืช ื”ืคื’ื™ืขื•ืช).

ื”ืคื’ื™ืขื•ืช ื ื’ืจืžืช ืขืœ ื™ื“ื™ ืื™ืžื•ืช ืฉื’ื•ื™ ืฉืœ ืชื•ื›ื ื™ื•ืช eBPF ื”ืžื•ืขื‘ืจื•ืช ืœื‘ื™ืฆื•ืข. ืชืช-ื”ืžืขืจื›ืช eBPF ืžืกืคืงืช ืคื•ื ืงืฆื™ื•ืช ืขื–ืจ, ืฉื”ืฉื™ืžื•ืฉ ื”ื ื›ื•ืŸ ื‘ื”ืŸ ืžืื•ืžืช ืขืœ ื™ื“ื™ ืžืืžืช ืžื™ื•ื—ื“. ืคื•ื ืงืฆื™ื•ืช ืžืกื•ื™ืžื•ืช ื“ื•ืจืฉื•ืช ื”ืขื‘ืจืช ืขืจืš PTR_TO_MEM ื›ืืจื’ื•ืžื ื˜, ื•ื›ื“ื™ ืœืžื ื•ืข ื”ืฆืคืช ืžืื’ืจ ืืคืฉืจื™ืช, ืขืœ ื”ืžืืžืช ืœื“ืขืช ืืช ื’ื•ื“ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืžืฉื•ื™ืš ืœืืจื’ื•ืžื ื˜. ืขื‘ื•ืจ ื”ืคื•ื ืงืฆื™ื•ืช bpf_ringbuf_submit ื•-bpf_ringbuf_discard, ื ืชื•ื ื™ื ืขืœ ื’ื•ื“ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืžื•ืขื‘ืจ ืœื ื“ื•ื•ื—ื• ืœืžืืžืช, ืืฉืจ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœื“ืจื•ืก ืื–ื•ืจื™ ื–ื™ื›ืจื•ืŸ ืžืขื‘ืจ ืœื’ื‘ื•ืœ ื”ืžืื’ืจ ื‘ืขืช ื‘ื™ืฆื•ืข ืงื•ื“ eBPF ืฉืชื•ื›ื ืŸ ื‘ืžื™ื•ื—ื“.

ื›ื“ื™ ืœื‘ืฆืข ืชืงื™ืคื”, ื”ืžืฉืชืžืฉ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื˜ืขื•ืŸ ืืช ืชื•ื›ื ื™ืช ื”-BPF ืฉืœื•, ื•ื”ืคืฆื•ืช ืจื‘ื•ืช ืฉืœ ืœื™ื ื•ืงืก ืื—ืจื•ื ื•ืช ื—ื•ืกืžื•ืช ืืช ื”ื™ื›ื•ืœืช ื”ื–ื• ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (ื›ื•ืœืœ ื’ื™ืฉื” ืœืœื ื”ืจืฉืื•ืช ืœ-eBPF ืืกื•ืจื” ื›ืขืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืงืจื ืœ ืขืฆืžื•, ื”ื—ืœ ืžื’ืจืกื” 5.16). ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื ืฆืœ ืืช ื”ืคื’ื™ืขื•ืช ื‘ืชืฆื•ืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘ืื•ื‘ื•ื ื˜ื• 20.04 LTS, ืืš ื‘ืกื‘ื™ื‘ื•ืช Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 ื•-Fedora 33 ื”ื™ื ืžื•ืคื™ืขื” ืจืง ืื ื”ืžื ื”ืœ ื”ื’ื“ื™ืจ ื”ืคืจืžื˜ืจ kernel.unprivileged_bpf_disabled ืœ-0. ื›ื“ืจืš ืขื•ืงืคืช ืœื—ืกื™ืžืช ื”ืคื’ื™ืขื•ืช, ืืชื” ื™ื›ื•ืœ ืœืžื ื•ืข ื”ืคืขืœื” ืฉืœ ืชื•ื›ื ื™ื•ืช BPF ืขืœ ื™ื“ื™ ืžืฉืชืžืฉื™ื ื—ืกืจื™ ื”ืจืฉืื•ืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” "sysctl -w kernel.unprivileged_bpf_disabled=1".

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”