เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปƒเบ™ eBPF เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต Spectre 4 เบœเปˆเบฒเบ™เป„เบ”เป‰

เบชเบญเบ‡เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ Linux kernel เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบเปˆเบญเบ eBPF เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ‚เป‰เบฒเบกเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต Spectre v4 (SSB, Speculative Store Bypass). เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™ BPF เบ—เบตเปˆเบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”, เบœเบนเป‰เป‚เบˆเบกเบ•เบตเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบฑเบเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เปเบเปˆเบ™. เบœเบนเป‰เบฎเบฑเบเบชเบฒเบฅเบฐเบšเบปเบšเบเปˆเบญเบ eBPF เปƒเบ™ kernel เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบ‚เบธเบ”เบ„เบปเป‰เบ™เปเบšเบšเบ•เบปเป‰เบ™เปเบšเบšเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบตเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ patches (1, 2), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ Linux kernel เบ•เปเปˆเป„เบ›. เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบ™เบŠเบธเบ”เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

เบงเบดเบ—เบตเบเบฒเบ™เป‚เบˆเบกเบ•เบต Spectre 4 เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบซเบผเบฑเบ‡เบˆเบฒเบเบเบปเบเป€เบฅเบตเบเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบญเปˆเบฒเบ™เบเบฒเบ™เบชเบฐเบฅเบฑเบšเบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ—เบตเปˆเบขเบนเปˆเบ—เบฒเบ‡เบญเป‰เบญเบก. เป€เบกเบทเปˆเบญเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เบ‚เบฝเบ™ (เป€เบŠเบฑเปˆเบ™: mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), เบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเบ‚เบญเบ‡เบ—เบตเปˆเบขเบนเปˆเบญเปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบฎเบนเป‰เปเบฅเป‰เบงเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ (เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เปเบกเปˆเบ™. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบฅเบทเป‰เบญเบเป†เป€เบฅเบทเป‰เบญเบเป†เปเบฅเบฐเบเบฒเบ™เบญเปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เบˆเบฒเบ cache) เปเบฅเบฐเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบ„เบฐเป€เบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบฒเบ‡เบญเป‰เบญเบกเบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™.

เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบ, เบˆเบธเบ”เบ•เบฑเบ”เบเบฑเบ™เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบเบฒเบ™เบญเปˆเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบเบงเบ”เบžเบปเบš, เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบเบปเบเป€เบฅเบตเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบ„เบฒเบ”เบ„เบฐเป€เบ™เปเบฅเป‰เบงเปเบฅเบฐเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบญเบตเบ. เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบญเปˆเบฒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เปˆเบฒเป€เบเบปเปˆเบฒเบขเบนเปˆเปƒเบ™เบšเบฒเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบฎเป‰เบฒเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ—เบตเปˆเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบฎเปˆเบญเบ‡เบฎเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเปƒเบ™เปเบ„เบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบ™เบทเป‰เบญเบซเบฒเบ‚เบญเบ‡ cache เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เบถเบ‡เบกเบฑเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบงเบฅเบฒเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™ cache เปเบฅเบฐ uncached.

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ—เปเบฒเบญเบดเบ” (CVE-2021-35477) เปเบกเปˆเบ™เป€เบเบตเบ”เบกเบฒเบˆเบฒเบเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป‚เบ›เบฃเปเบเบฃเบก BPF. เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต Spectre 4, เบ•เบปเบงเบเบงเบ”เบชเบญเบšเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบซเบผเบฑเบ‡เบˆเบฒเบเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบญเบฒเบ”เบกเบตเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป€เบเบฑเบšเบ„เปˆเบฒ null เป€เบžเบทเปˆเบญเบเป‰เบฒเบเบฎเปˆเบญเบ‡เบฎเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™ null เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเป„เบงเบซเบผเบฒเบเปเบฅเบฐเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบเบญเบš BPF stack. เปเบ•เปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบง, เบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเป‰เบฒเบ™ preemptive.

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ—เบตเบชเบญเบ‡ (CVE-2021-3455) เปเบกเปˆเบ™เป€เบ™เบทเปˆเบญเบ‡เบกเบฒเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเป€เบกเบทเปˆเบญเบ•เบปเบงเบเบงเบ”เบชเบญเบš BPF เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆ uninitialized เบ‚เบญเบ‡ stack BPF, เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡. เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒ, เบ‚เบถเป‰เบ™เบเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบฎเป‰เบฒเบ™. เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบš stack BPF เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบˆเบฑเบ”เบชเบฑเบ™, เปเบฅเบฐเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™ BPF เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบžเบทเปˆเบญ manipulate เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบžเบฒเบเบžเบทเป‰เบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบชเปเบฒเบฅเบฑเบš stack BPF.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™