A Google Project Zero csapatának kutatói néhány napja egy blogbejegyzésükben tárták fel biztonsági rést (CVE-2021-29657) azonosítottak a KVM hipervizorában (nyílt forráskódú Linux-alapú hipervizor, amely támogatja a hardveres gyorsítású virtualizációt x86, ARM, PowerPC és S / 390 rendszereken), amely lehetővé teszi a vendégrendszer elszigetelésének elkerülését és futtassa a kódot a gazdagép környezet oldalán.
A bejegyzés megemlíti, hogy a probléma az 5.10-rc1 Linux kerneltől a v5.12-rc6 -ig terjed, azaz, csak az 5.10 és 5.11 magokat fedi le (Az eloszlások stabil ágainak többségét nem érintette a probléma.) A probléma a beágyazott_svm_vmrun mechanizmusban van, amelyet az AMD SVM (Secure Virtual Machine) kiterjesztéssel hajtottak végre, és lehetővé tette a vendég rendszerek beágyazott indítását.
Ebben a blogbejegyzésben leírom az AMD-specifikus KVM-kód sebezhetőségét, és megvitatom, hogyan válhat ez a hiba egy teljes virtuális gép-meneküléssé. Ha jól tudom, ez az első nyilvános írás egy KVM vendég-fogadó eloszlásról, amely nem támaszkodik a felhasználói tér összetevőinek hibáira, például a QEMU-ra.
A tárgyalt hibának a CVE-2021-29657 kódot rendelték. Mivel a hiba csak a v5.10 verzióban lett kihasználható, és körülbelül 1 hónappal később fedezték fel, a valós KVM-telepítések többségét ez nem érinti. Még mindig azt gondolom, hogy a probléma érdekes esettanulmány a KVM elleni stabil vendég-fogadó menekülés kiépítéséhez szükséges munkában, és remélem, hogy ez a cikk azt állíthatja, hogy a hipervizor-kompromisszumok nem csak elméleti problémák.
A kutatók megemlítik, hogy ennek a funkciónak a helyes megvalósításához a hipervizornak el kell fogadnia az összes SVM utasítást vendégrendszereken futni, utánozza viselkedését és szinkronizálja az állapotot a hardverrel, ami elég nehéz feladat.
A javasolt KVM megvalósítás elemzése után a kutatóks olyan logikai hibát észlelt, amely lehetővé teszi az MSR tartalmát (Modell-specifikus regisztráció) a gazdagép befolyásolja a vendégrendszer, amely segítségével kód futtatható a gazdagép szintjén.
Különösen egy VMRUN művelet végrehajtása egy második beágyazott szintű vendégtől (az L2 egy másik vendégtől indult) egy második híváshoz vezet a nested_svm_vmrun számára, és megrontja az svm-> nested.hsave struktúrát, amelyet az L2 vendégrendszer vmcb adatai fednek .
Ennek eredményeként kialakul egy olyan helyzet, amikor az L2 vendégszinten lehetőség van memória felszabadítására az svm-> nested.msrpm struktúrában, amely tárolja az MSR bitet, annak ellenére, hogy továbbra is használatos, és hozzáférhet a gazdagép MSR-jéhez. környezet.
Ez például azt jelenti, hogy a vendég memóriája megvizsgálható a felhasználó térfolyamatának lefoglalt memóriájának kidobásával, vagy hogy a CPU idejére és memóriájára vonatkozó erőforráskorlátok könnyen érvényesíthetők.
Ezenkívül a KVM az eszközemulációval kapcsolatos munka nagy részét a felhasználói térkomponensre töltheti le.
A probléma az AMD processzorokkal rendelkező rendszerekben használt kódban van (kvm-amd.ko modul), és nem jelenik meg az Intel processzorain.
Néhány, a megszakítás kezeléséhez kapcsolódó teljesítményérzékeny eszközön kívül a virtuális lemezhez, a hálózathoz vagy a GPU-hoz való hozzáférést biztosító összes összetett alacsony szintű kód telepíthető a felhasználói térben.
A kutatók a probléma leírása mellett Készítettek egy kipróbálás működő prototípusát is amely lehetővé teszi a gyökérhéj futtatását vendégkörnyezetből hosztkörnyezetben AMD Epyc 7351P processzorral és Linux 5.10 rendszermaggal rendelkező rendszeren.
Megfigyelhető, hogy ez az első olyan vendég, aki sebezhetőséget tárol a KVM hipervizorában önmagában nem kapcsolódik a felhasználói tér összetevőinek hibáihoz, például a QEMU-hoz. A javítást a kernel március végén fogadta el.
Végül ha érdekel, hogy többet tudjon meg róla a jegyzetről ellenőrizheti a részleteket A következő linken.