ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel ΡΠ°ΡΠΊΡΡΠ»Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΡΠ΅ΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ MMIO (Memory Mapped Input Output) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ΄ΡΠ°Ρ CPU. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π°Π½ΠΊΠ»Π°Π²ΠΎΠ² Intel SGX ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ CPU ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Intel, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ CPU Intel, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ Haswell, Skylake, IceLake, Broadwell, Lakefield, Kabylake, Cometlake ΠΈ Rocketlake, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Xeon EP/EX, Scalable ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Atom. ΠΠ»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠ°ΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ MMIO, ΠΊΠΎΡΠΎΡΡΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ MMIO Π΄Π»Ρ Π³ΠΎΡΡΠ΅Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΠΏΠΎΠ΄ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ Π°ΡΠ°ΠΊΡΡΡΠ΅ΠΌΡ. ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π°Π½ΠΊΠ»Π°Π²Ρ Intel SGX (Software Guard Extensions).
ΠΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ΄Π°, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π·Π°ΡΠΈΡΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ VERW Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ΄ΡΠ° Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π·Π°ΡΠΈΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π½Π΅Π΅ Π²ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π°ΡΠ°ΠΊ ΠΊΠ»Π°ΡΡΠ° MDS (Microarchitectural Data Sampling), SRBDS (Special Register Buffer Data Sampling) ΠΈ TAA (Transactional Asynchronous Abort).
ΠΠ° ΡΡΠΎΡΠΎΠ½Π΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π² ΠΌΠ°ΠΉΡΠΊΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ΄Π° Π΄Π»Ρ CPU Intel (IPU 2022.1). Π ΡΠ΄ΡΠ΅ Linux Π·Π°ΡΠΈΡΠ° ΠΎΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π°ΡΠ°ΠΊ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠΎΡΡΠ°Π² Π²ΡΠΏΡΡΠΊΠΎΠ² 5.18.5, 5.15.48, 5.10.123, 5.4.199, 4.19.248, 4.14.284 ΠΈ 4.9.319. ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠΌ Π² MMIO ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π·Π°ΡΠΈΡΡ Π² ΡΠ΄ΡΠΎ Linux Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ°ΠΉΠ» «/sys/devices/system/cpu/vulnerabilities/mmio_stale_data». ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°ΡΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ΄ΡΠ° «mmio_stale_data», ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ «full» (Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΡΠΊΠΈ Π±ΡΡΠ΅ΡΠΎΠ² ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π² VM), «full,nosmt» (ΠΊΠ°ΠΊ «full» + Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ SMT/Hyper-Threads) ΠΈ «off» (Π·Π°ΡΠΈΡΠ° ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°). ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π΄Π»Ρ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠ° Xen ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Qubes.
Π‘ΡΡΡ Π²ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ΄ΡΠ°Ρ CPU, ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² MMIO ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΡΠΈ ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² Π² Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΈΠ»ΠΈ Π±ΡΡΠ΅ΡΡ CPU. ΠΡΡΠ²Π»Π΅Π½ΠΎ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· MMIO:
- DRPW (Device Register Partial Write, CVE-2022-21166) — ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ MMIO. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°, ΡΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΎΡΡΠ°ΡΠΎΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π±ΡΡΠ΅ΡΠΎΠ² Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (fill buffer). Π ΠΈΡΠΎΠ³Π΅, ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π²ΡΠΈΠΉ Π½Π΅ΠΏΠΎΠ»Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡ MMIO, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ Π±ΡΡΠ΅ΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ΄ΡΠ°Ρ CPU.
- SBDS (Shared Buffers Data Sampling, CVE-2022-21125) — ΡΡΠ΅ΡΠΊΠ° ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ ΡΠ΄ΡΡ Π±ΡΡΠ΅ΡΠ° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΠΏΠ°Π²ΡΠΈΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠ±ΡΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ².
- SBDR (Shared Buffers Data Read, CVE-2022-21123) — ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡ ΠΎΠ΄ΠΈΡ Π½Π° SBDS, Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΡΡΡΠΊΡΡΡΡ CPU. ΠΡΠΎΠ±Π»Π΅ΠΌΡ SBDS ΠΈ SBDR ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π΅ Intel Xeon E3.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru