
Hyperviseur Intel VT-x minimal pour Windows et UEFI qui virtualise un hôte actif à des fins d'introspection, prenant en charge l'hyperjacking dynamique, l'unhyperjacking, l'EPT et le VPID.
SimpleVisor est un hyperviseur simple et portable, spécifique à Intel x64/EM64T VT-x, avec deux objectifs précis : utiliser le moins de code assembleur possible (10 lignes) et disposer de la plus petite quantité de code lié à VMX pour prendre en charge le hyperjacking et le unhyperjacking dynamiques (c'est-à-dire virtualiser l'état de l'hôte depuis l'intérieur de l'hôte) tout en prenant également en charge des fonctionnalités avancées telles que EPT et VPID. Il fonctionne actuellement à la fois sous Windows et dans des environnements UEFI.
Avez-vous toujours été curieux de savoir comment construire un hyperviseur ? La documentation d'Intel (les nombreuses centaines de pages) vous a-t-elle découragé ? Les exemples que vous avez trouvés en ligne n'ont-ils fait que rendre les choses plus confuses, ou ont-ils nécessité des semaines de lecture à travers des dizaines de milliers de lignes de code ? Si oui, SimpleVisor pourrait être le projet qu'il vous faut.
Sans compter les commentaires exhaustifs qui expliquent chaque ligne de code, ainsi que les idiosyncrasies spécifiques à Windows ou à Intel, SimpleVisor totalise environ 500 lignes de code C et 10 lignes de code assembleur x64, tout en étant capable de fonctionner sur toutes les versions récentes de Windows 64 bits, et en prenant en charge le chargement/déchargement dynamique à l'exécution.
De plus, SimpleVisor utilise une bibliothèque OS légère pour les fonctionnalités spécifiques à Windows, séparant les parties de l'hyperviseur des parties spécifiques à Windows. Tirant parti de cette conception portable, une version UEFI de SimpleVisor est également désormais disponible. Notez toutefois qu'elle ne dispose pas d'un support robuste pour les environnements MP en raison de problèmes avec UEFI, et que le chargement d'un système d'exploitation finira par provoquer un crash, car l'OS atteindra des chemins de code non implémentés en raison de sa reconfiguration des ressources du processeur. Virtualiser l'intégralité du démarrage du système d'exploitation depuis UEFI dépasse le cadre du projet.
SimpleVisor peut être compilé avec Visual Studio 2015 Update 3, et bien que les compilateurs plus anciens/récents n'aient pas été testés et ne soient pas pris en charge, il est probable qu'ils puissent également compiler le projet. Il est toutefois important de conserver les différents paramètres du compilateur et de l'éditeur de liens tels que vous les voyez.
SimpleVisor a actuellement été testé avec succès sur les plateformes suivantes :
À l'heure actuelle, il n'a pas été testé sur Bochs, mais il n'y a aucune raison pour que SimpleVisor ne puisse pas fonctionner dans un tel environnement également. Cependant, si votre machine fonctionne déjà sous un hyperviseur tel que Hyper-V ou Xen, SimpleVisor ne se chargera pas.
Gardez à l'esprit que les versions x86 de Windows ne sont expressément pas prises en charge, tout comme les processeurs antérieurs à la microarchitecture Nehalem, ni Windows 7. La prise en charge de ces deux derniers est facile à ajouter et existe dans certaines forks.
Trop de projets d'hyperviseurs sont soit extrêmement compliqués ([Xen][1], KVM, VirtualBox) et/ou à code source fermé (VMware, Hyper-V), ainsi que fortement orientés vers le développement ou les systèmes basés sur Linux. De plus, la plupart (à l'exception de Hyper-V) sont expressément conçus dans le but de permettre l'exécution de machines virtuelles, et non la virtualisation d'un système en cours d'exécution, afin d'effectuer de l'introspection ou d'autres tâches liées à la sécurité sur celui-ci.
Quelques projets se démarquent cependant, comme le [Blue Pill][2] original de Joanna, ou des projets tels que [VirtDbg][3] et [HyperDbg][4]. Malheureusement, la plupart de ceux-ci sont devenus assez anciens maintenant, et certains ne fonctionnent que sur des processeurs x86, et ne prennent pas en charge les systèmes d'exploitation plus récents tels que Windows 10. Un autre exemple assez simple, similaire à Blue Pill à certains égards, mais offrant en réalité un bon exemple d'utilisation d'EPT pour le « Split-TLB » est [MoRE][7] de Jacob Torrey/AIS.
Le projet le plus proche qui offre réellement un hyperviseur centré sur Windows, moderne et pris en charge est [HyperPlatform][5], et nous recommandons fortement son utilisation comme point de départ pour un développement d'hyperviseur de type recherche plus largement utilisable. Cependant, en tentant de créer une « plateforme » générique plus largement robuste, HyperPlatform souffre également d'un peu de gonflement, ce qui rend plus difficile de comprendre quels sont véritablement les besoins de base d'un hyperviseur, et comment en initialiser un. Dans une veine similaire, et montrant un amour égal pour STL/C++, mais incluant également un chargeur ELF et un support UEFI/Linux en plus de tests unitaires et d'une robustesse encore plus grande, on trouve [Bareflank][8], également d'AIS. Au-delà de cela, vous entrez probablement dans la complexité de niveau Xen.
L'objectif exprès de ce projet, comme indiqué ci-dessus, était de minimiser le code de toutes les manières possibles, sans causer d'effets secondaires négatifs, et en se concentrant sur les besoins « bare-metal ». Cela inclut :