HV2: boot-time hypervisor výzkumná platforma pod operačním systémem.
HV2 je privátní výzkumná platforma pro práci pod OS: VM-exity, nested translation, per-core mapování a malý command surface pro memory introspection a bezpečnostní výzkum.
HV2 řeší problém, který běžné user-mode nástroje nevyřeší čistě: jak pozorovat a ověřovat stav systému z vrstvy pod operačním systémem, aniž by se výzkum opíral o nestabilní hooky, křehké signatury nebo důvěru v to, co právě říká OS. Tohle není náhrada debuggeru. Je to laboratorní platforma pro otázky, které debugger často vidí pozdě.
Co bylo těžké.
Hypervisorový výzkum se láme na detailech: špatně zpracovaný VM-exit zastaví systém, špatná translace vrátí nesmysl, špatná per-core inicializace vytvoří nekonzistentní mapy a příliš široký command interface je bezpečnostní problém sám o sobě. HV2 proto stojí na konzervativním návrhu: malé rámce, explicitní operace, bounded payload a žádné hádání.
Command frame: malý, nudný, správný.
Každá operace je reprezentovaná kompaktním rámcem s typovanými poli. Payload nepřijímá libovolné procedury z guestu. Přijímá známou operaci, ověřené délky, adresy, flagy a návratový slot. Kdo někdy ladil kernel-level věci, ví, že "nudné a explicitní" je kompliment.
// konceptuální rámec, ne produkční definice
struct Hv2Command {
uint32_t op;
uint32_t flags;
uint64_t guest_src;
uint64_t guest_dst;
uint32_t size;
uint32_t status;
};
validate(command);
dispatch_known_operation(command);
VM-exit dispatch musí být konzervativní.
HV2 není univerzální replacement platform handleru. Interposer bere jen exity, které odpovídají HV2 kontraktu. Všechno ostatní se vrací původní cestou. To je důležité: dobrá výzkumná vrstva nesmí rozšířit blast radius jen proto, že chce být chytrá.
Guest virtual translation není lookup.
Správná translace virtuální adresy guestu vyžaduje page-table walk: ověřit přítomnost každé úrovně, velké stránky, offset a přístupová práva. Demo, které funguje jen na jednoduchých adresách, není platforma. HV2 staví překlad jako explicitní mechanismus, protože memory introspection stojí a padá na tom, že čteme přesně to, co si myslíme.
// konceptuální page-table walk
translation_result translate(gva) {
pml4e = read_entry(cr3, index_pml4(gva));
require_present(pml4e);
pdpte = read_entry(pml4e, index_pdpt(gva));
if (is_large_page(pdpte)) return map_large_page(pdpte, gva);
pde = read_entry(pdpte, index_pd(gva));
pte = read_entry(pde, index_pt(gva));
require_present(pte);
return physical_address(pte, page_offset(gva));
}
Per-core inicializace.
Jedna úspěšná inicializace nestačí. Každé logické jádro musí mít konzistentní mapovací stav a schopnost obsloužit relevantní exity. HV2 proto myslí per-core: připravit stav, přepnout affinity tam, kde je to potřeba, ověřit výsledek a nechat systém ve stavu, který se dá znovu vysvětlit.
Proč je to užitečné pro cybersecurity výzkum.
- Memory introspection pod úrovní OS, kde user-mode tooling nemá poslední slovo.
- Validace obranných mechanismů proti nízkoúrovňovým změnám stavu.
- Forenzní a laboratorní kontrola paměťových struktur bez spoléhání na hooky v OS.
- Výzkum stealth, integrity a anti-tamper scénářů v autorizovaném prostředí.
- Testování vlastních bezpečnostních nástrojů proti realističtější platformové vrstvě.
Co záměrně nepublikujeme.
Článek neobsahuje zdrojový kód, přesné instrukční sekvence, signatury, offsety, interní identifikátory ani backend-specific konstanty. Popisuje metodiku a engineering principy. Výzkum má být čitelný, ne kopírovatelný kliknutím pravým tlačítkem.
Pointa.
HV2 je zajímavé tím, že kombinuje nízkoúrovňovou přesnost s poměrně malým veřejným kontraktem. To je dobrý kompromis pro bezpečnostní výzkum: co nejvíc měřit a ověřovat, co nejméně zvětšovat rozhraní, které může selhat.