Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² спСцифичном для CPU AMD ΠΊΠΎΠ΄Π΅ KVM, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Π½Π΅ гостСвой систСмы

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Google Project Zero выявили ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2021-29657) Π² поставляСмом Π² составС ядра Linux Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π΅ KVM, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ гостСвой систСмы ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ Π½Π° сторонС хост-окруТСния. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° присутствуСт Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ Π½Π° систСмах с процСссорами AMD (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ kvm-amd.ko) ΠΈ Π½Π΅ проявляСтся для процСссоров Intel.

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ эксплоита, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ· гостСвого окруТСния Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ root shell Π² хост-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π½Π° систСмС с процСссором AMD Epyc 7351P ΠΈ ядром Linux 5.10. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это пСрвая Π±Ρ€Π΅ΡˆΡŒ класса «guest-to-host» Π² самом Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π΅ KVM, Π½Π΅ связанная с ошибками Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, выполняСмых Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ QEMU. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ принято Π² ядро Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ°Ρ€Ρ‚Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с ядра Linux 5.10-rc1 ΠΈ заканчивая v5.12-rc6, Ρ‚.Π΅. ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ядра 5.10 ΠΈ 5.11 (Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ дистрибутивов ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ ΠΊΠΎΡΠ½ΡƒΠ»Π°ΡΡŒ).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° присутствуСт Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ nested_svm_vmrun, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ с использованиСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ AMD SVM (Secure Virtual Machine) ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запуск гостСвых систСм. Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС инструкции SVM, выполняСмыС Π² гостСвых систСмах, ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ являСтся достаточно слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² KVM Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ исслСдоватСли нашли Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° содСрТимоС MSR-рСгистров (Model-Specific Register) хоста ΠΈΠ· гостСвой систСмы, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для запуска ΠΊΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ хоста.

Π’ частности, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ VMRUN ΠΈΠ· гостСвой систСмы Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня влоТСнности (L2, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ гостСвой систСмы) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ nested_svm_vmrun ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ структуры svm->nested.hsave, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· vmcb гостСвой систСмы L2. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ гостСвой систСмы L2 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² структурС svm->nested.msrpm, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится Π±ΠΈΡ‚ MSR, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ MSR хост-окруТСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru