BHI เป€เบ›เบฑเบ™เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบฅเบฐเบ”เบฑเบš Spectre เปƒเปเปˆเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบต Intel เปเบฅเบฐ ARM

เบเบธเปˆเบกเบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบˆเบฒเบ Vrije Universiteit Amsterdam เป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปƒเบซเบกเปˆเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ microarchitectural เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต Intel เปเบฅเบฐ ARM, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบฐเบšเบฑเบšเบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ Spectre-v2, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเบœเปˆเบฒเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ eIBRS เปเบฅเบฐ CSV2 เบ—เบตเปˆเป€เบžเบตเปˆเบกเปƒเบชเปˆเป‚เบ›เป€เบŠเบ”เป€เบŠเบต. . เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเบกเบญเบšเปƒเบซเป‰เบซเบผเบฒเบเบŠเบทเปˆ: BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) เปเบฅเบฐ Spectre-BHB (CVE-2022-23960), เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™ (BHI - เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบฅเบฐเบ”เบฑเบšเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเปเบเปˆเบ™, BHB - เบเบฒเบ™เป‚เบˆเบกเบ•เบตเปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบ”เบฝเบงเบเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, eBPF JIT เปเบฅเบฐ kernel).

เบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ‚เบนเบ”เบฎเบตเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™ arbitrary เบชเบฐเบเบฑเบ”เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ kernel เบˆเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ‚เบนเบ”เบฎเบตเบ”เบ—เบตเปˆเบเบฐเบเบฝเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเบฐเบเบฑเบ”เบˆเบฒเบ kernel buffers string เบ—เบตเปˆเบกเบต hash เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบœเบนเป‰เปƒเบŠเป‰เบฎเบฒเบเบ—เบตเปˆเป‚เบซเบฅเบ”เบˆเบฒเบเป„เบŸเบฅเปŒ /etc/shadow. เบเบฒเบ™เบ‚เบนเบ”เบฎเบตเบ”เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบธเบ”เบ„เบปเป‰เบ™เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบžเบฒเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบซเบ™เบถเปˆเบ‡ (เบเบฒเบ™เป‚เบˆเบกเบ•เบต kernel-to-kernel) เป‚เบ”เบเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™ eBPF เบ—เบตเปˆเป‚เบซเบฅเบ”เป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰. เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปเบ—เบ™ eBPF Spectre gadgets เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปƒเบ™เบฅเบฐเบซเบฑเบ” kernel, เบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ.

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบต Intel เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆ, เบเบปเบเป€เบงเบฑเป‰เบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบˆเบฒเบเบ„เบญเบšเบ„เบปเบง Atom. เปƒเบ™เบšเบฑเบ™เบ”เบฒเป‚เบ›เป€เบŠเบ”เป€เบŠเบต ARM, Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 เปเบฅเบฐเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบšเบฒเบ‡เบŠเบดเบš Cortex-R เป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบเบฐเบ—เบปเบšเบˆเบฒเบเบšเบฑเบ™เบซเบฒ. เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒ, เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบšเปเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบต AMD. เป€เบžเบทเปˆเบญเบฅเบปเบšเบฅเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒ, เบงเบดเบ—เบตเบเบฒเบ™เบŠเบญเบšเปเบงเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเป€เบžเบทเปˆเบญเบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบฎเบฒเบ”เปเบงเปƒเบ™เบฎเบธเปˆเบ™ CPU เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เป€เบžเบทเปˆเบญเบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเบเปˆเบญเบ eBPF, เบกเบฑเบ™เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ›เบดเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบดเปƒเบ™เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เป‚เบ›เบผเปเบเบผเบก eBPF เป‚เบ”เบเบเบฒเบ™เบ‚เบฝเบ™ 1 เปƒเบชเปˆเป„เบŸเบฅเปŒ "/proc/sys/kernel/unprivileged_bpf_disabled" เบซเบผเบทเปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ "sysctl -w kernel. unprivileged_bpf_disabled=1โ€. เป€เบžเบทเปˆเบญเบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ‚เบญเบ‡เปเบเบ”เป€เบˆเบฑเบ”, เปเบ™เบฐเบ™เบณเปƒเบซเป‰เปƒเบŠเป‰เบ„เบณเบชเบฑเปˆเบ‡ LFENCE เปƒเบ™เบ‚เบปเบ‡เป€เบ‚เบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰. เป€เบ›เบฑเบ™เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบ Linux เบชเปˆเบงเบ™เปƒเบซเบเปˆเบกเบตเบกเบฒเบ”เบ•เบฐเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบžเบฝเบ‡เบžเปเป€เบžเบทเปˆเบญเบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต eBPF เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ”เบเบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒ. เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡ Intel เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ eBPF เบ—เบตเปˆเบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบเบฑเบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Linux kernel 5.16 เปเบฅเบฐเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบชเบฒเบ‚เบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒ.

Conceptually, BHI เปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป‚เบˆเบกเบ•เบต Spectre-v2, เปƒเบ™เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญ bypass เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก (Intel eIBRS เปเบฅเบฐ Arm CSV2) เปเบฅเบฐเบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบฅเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบกเบนเบ™เบ„เปˆเบฒเปเบกเปˆเบ™เปƒเบŠเป‰เปƒเบ™ Branch History Buffer, เปƒเบŠเป‰เปƒเบ™ CPU เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™. เบเบฒเบ™เปเบšเปˆเบ‡เปเบเบเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เป‚เบ”เบเบเบฒเบ™เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบˆเบกเบ•เบต, เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบเบฑเบšเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™, เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เปƒเบ™เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ.

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

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

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