
L'hyperviseur BareFlank est une boîte à outils de développement de logiciels d'Open Source Hyperviseur (SDK) pour Rust et C ++, dirigé par Assured Information Security, Inc. (AIS), qui fournit les outils nécessaires pour prototyper rapidement et créer votre propre hyperviseur sur 64 bits des versions d'Intel et AMD (ARMV8 CPUS, RISC-V et PowerPC également planifiés). Le SDK BareFlank est destiné à des fins pédagogiques / de recherche car il fournit seulement un support de virtualisation suffisant pour démarrer / arrêter un hyperviseur. BareFlank peut également être utilisé comme fondation pour créer votre propre hyperviseur entièrement fonctionnel car il utilise la licence MIT, comprend une couverture de test unitaire à 100% pour Autosar. Si vous recherchez un hyperviseur complet (et non un SDK), veuillez consulter Microv. Si vous recherchez un SDK minimal pour l'éducation ou pour effectuer des recherches, c'est le projet pour vous. Si vous recherchez simplement un hyperviseur de référence, veuillez consulter SimpleVisor.
BareFlank utilise une approche modulaire en couches, qui vous permet de choisir la complexité dont vous avez besoin dans votre projet lors de la création de votre propre hyperviseur personnalisé:
Obtenez la dernière version du SDK hyperviseur Bareflank de GitHub:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
makeApprécier:
make driver_quick
make start
make dump
make stop
Consultez notre défi pouvez-vous pirater? ® et tester vos compétences! Soumettez votre score pour nous montrer ce que vous avez. Nous avons des bureaux à travers le pays et offrons des salaires compétitifs et des avantages sociaux en suspens. Rejoignez une équipe qui n'est pas seulement engagée dans l'avenir du cyberespace, mais aussi pour le succès de notre employé.

Découvrez la dernière démo pour compiler et utiliser l'hyperviseur BareFlank sur Ubuntu 20.04:
Consultez notre chaîne YouTube pour plus de contenu plus excellent ainsi que les vidéos suivantes au CPPCON ci-dessous:
Avant d'essayer d'utiliser Bareflank, veuillez consulter les conseils suivants car ils peuvent faire une énorme différence dans votre expérience initiale:
bcdedit /set hypervisorlaunchtype off comme HyperV continuera à fonctionner même si vous n'utilisez plus le WSL2.Actuellement, l'hyperviseur BareFlank ne prend en charge que le compilateur Clang / LLVM 10+. Cela, cependant, garantit que l'hyperviseur peut être compilé nativement sur des fenêtres, y compris la prise en charge de la compilation croisée. La prise en charge d'autres compilateurs C ++ 20 peut être ajoutée si nécessaire, faites-nous savoir si c'est quelque chose dont vous avez besoin.
Pour compiler le BSL sous Windows, vous devez d'abord désactiver l'UEFI SecureBoot et activer le mode de signature de test. Notez que cela pourrait vous obliger à réinstaller Windows ( vous avez été averti ). Cela peut être fait à partir d'une invite de commande avec les privilèges d'administration:
bcdedit.exe /set testsigning ON
<reboot>
Ensuite, installez ce qui suit:
Visual Studio est nécessaire car il contient des bibliothèques spécifiques à Windows qui sont nécessaires pendant la compilation. Au lieu d'utiliser le projet Clang / LLVM qui expédie nativement avec Visual Studio, nous utilisons les binaires Clang / LLVM standard fournis par le projet LLVM qui garantit que nous obtenons tous les outils comprenant le format LLD, Clang Tidy et Clang. Notez également que vous devez mettre Ninja quelque part sur votre chemin (nous tombons généralement dans le dossier de bac de CMake). Enfin, assurez-vous de suivre toutes les instructions lors de l'installation du WDK . Ces instructions changent fréquemment et chaque étape doit être installée correctement et dans l'ordre fourni par les instructions. Sauter une étape ou installer un package dans le mauvais ordre entraînera une installation WDK qui ne fonctionne pas.
Pour compiler le BSL, nous allons utiliser Bash. Il existe de nombreuses façons de commencer le bash, notamment l'ouverture d'une invite CMD et le "bash". Une fois en cours d'exécution Bash, assurez-vous d'ajouter ce qui suit à votre chemin:
Par exemple, dans votre .Bashrc, vous pouvez ajouter ce qui suit (selon l'endroit où Visual Studio met ces fichiers):
export PATH= " /c/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin:/c/Program Files (x86)/Windows Kits/10/Tools/x64:/c/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x64: $PATH "Enfin, exécutez ce qui suit de Bash:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
ninja info
ninjaPour compiler le BSL sur Ubuntu (20,04 ou plus), vous devez d'abord installer les dépendances suivantes:
sudo apt-get install -y clang cmake lldPour compiler le BSL, utilisez ce qui suit:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
make info
makePour compiler pour l'UEFI, suivez simplement les étapes de votre système d'exploitation ci-dessus, mais ajoutez ce qui suit au CMake:
-DHYPERVISOR_BUILD_EFI= ONVous pouvez ensuite construire l'hyperviseur comme d'habitude et le chargeur UEFI sera compilé pour vous automatiquement. Une fois le noyau, les extensions et le chargeur UEFI compilé, vous pouvez les copier dans votre partition UEFI FS0. Notez que tous les binaires doivent être copiés dans votre partition FS0, et sur certains systèmes, cela pourrait être un bâton USB . Pour aider à ce processus de copie, le système de construction comprend la commande suivante:
make copy_to_efi_partitionPar défaut, cela utilise la partition EFI, mais il peut être déplacé en utilisant:
-DHYPERVISOR_EFI_FS0=< path to FS0>Certains systèmes vous obligent à fournir la coque UEFI, et donc BareFlank contient une copie de cette coquille qui sera copiée avec le noyau, les extensions et le chargeur UEFI. Une fois que vous avez redémarré dans le shell UEFI, vous pouvez démarrer l'hyperviseur en utilisant
start_bareflank.efi
Notez que par défaut, l'hyperviseur n'est pas en mesure de démarrer un système d'exploitation. Vous devez soit utiliser un exemple non défaut qui fournit une prise en charge UEFI plus complète, soit fournir votre propre extension capable de démarrer avec succès un système d'exploitation. Enfin, nous ne fournissons actuellement aucune des autres fonctions VMMCTL comme Stop ou Dump.
Le SDK d'hyperviseur BareFlank se compose des composantes principales suivantes:
L'extension est l'endroit où vous mettez votre code. Il s'agit d'une application Ring 3 qui s'exécute sur notre microkernel dans la soi-disant "Race -1" ou VMX. Le "noyau" est le micro-littoral suscité et il est responsable de l'exécution de toutes les applications d'hyperviseur qui implémentent réellement l'hyperviseur. En d'autres termes, toute la logique de l'hyperviseur est implémentée dans une extension que vous fournissez, et notre microkernel est juste là pour exécuter votre extension dans VMX Root. Le "chargeur" place notre micro-noyau et votre extension dans la racine VMX. Il est responsable du démarrage et de l'arrêt de l'hyperviseur et de la décharge du contenu de son anneau de débogage. L'application "VMMCTL" est utilisée pour contrôler le chargeur. Il fournit un moyen simple pour dire au chargeur quoi faire.
Pour démarrer BareFlank, compilez le "chargeur" et exécutez-le dans le noyau de votre système d'exploitation. Pour ce faire, exécutez ce qui suit (Remplacez Make par Ninja sous Windows):
make driver_build
make driver_load
Cela construit le "chargeur" et l'exécute dans le noyau du système d'exploitation. Si vous avez suivi les instructions Buld ci-dessus à l'aide de CMake, vous devriez déjà avoir compilé le micro-littoral, VMMCTL et votre extension (qui par défaut est notre exemple par défaut). Une fois ces composants compilés, vous pouvez exécuter l'hyperviseur à l'aide de la commande suivante (Remplacez Make par ninja sous Windows):
make start
Pour obtenir des informations de débogage, utilisez ce qui suit (Remplacez Make par Ninja sous Windows):
make dump
Pour arrêter l'hyperviseur, utilisez ce qui suit (Remplacez Make par ninja sous Windows):
make stop
Enfin, pour décharger le "chargeur" et nettoyer son système de construction, vous pouvez exécuter ce qui suit (Remplacez Make par Ninja sous Windows):
make driver_unload
make driver_clean
Et c'est tout. Pour plus d'informations sur la façon de créer et d'utiliser BareFlank, vous pouvez exécuter le Core suivant une liste complète des commandes à votre disposition ainsi que la configuration complète de la construction (Remplacez Make par Ninja sous Windows):
make info
L'hyperviseur BareFlank est livré avec une série d'exprès d'extensions que vous pouvez utiliser pour créer votre propre hyperviseur personnalisé. Pour commencer, nous allons créer un répertoire de travail et cloner certains dépositions pour accélérer le processus de construction:
mkdir ~ /working
mkdir ~ /working/build
git clone https://github.com/bareflank/bsl ~ /working/bsl
git clone https://github.com/bareflank/hypervisor ~ /working/hypervisorEnsuite, nous copierons un exemple existant dans notre répertoire de travail (choisissez l'exemple qui fournit le meilleur point de départ pour votre projet):
cp -R ~ /working/hypervisor/example/default ~ /working/extensionEnfin, nous allons configurer le projet, expliquant au système de construction comment trouver notre extension personnalisée.
cd ~ /working/build
cmake
../hypervisor
-DHYPERVISOR_EXTENSIONS_DIR= $PWD /../extension
-DFETCHCONTENT_SOURCE_DIR_BSL= $PWD /../bsl HYPERVISOR_EXTENSIONS_DIR définit l'emplacement de votre extension. Notez que le chemin doit être un chemin absolu, c'est pourquoi nous avons utilisé le chemin absolu du dossier de construction comme point de départ, puis élaboré l'emplacement du dossier d'extension à partir de là.
FETCHCONTENT_SOURCE_DIR_BSL est facultatif. Cela indique au système de construction où trouver le BSL. Étant donné que nous avons déjà cloné le BSL dans notre répertoire de travail, nous pouvons l'utiliser au lieu de demander au système de construction de récupérer automatiquement le BSL pour nous. C'est idéal pour les constructions hors ligne ou les builds où vous réduisez beaucoup CMake et ne voulez pas attendre le téléchargement du BSL à chaque fois.
Le reste des instructions d'utilisation ci-dessus peut être utilisé pour démarrer / arrêter votre hyperviseur personnalisé. Pour plus d'informations sur ce qu'Abis le microkernel fournit votre extension, veuillez consulter la spécification Syscall de Microkernel dans le dossier DOCS. Nous fournissons également un exemple de mise en œuvre de cet ABI comme un ensemble d'API C ++ que vous pouvez utiliser si vous le souhaitez. Cet exemple d'ensemble d'API peut être vu dans le fichier syscall / include / mk_interface.hpp.
Pour utiliser l'exemple de rouille, vous devrez installer la rouille et passer au canal nocturne.
L'hyperviseur BareFlank fournit une tonne de ressources utiles pour apprendre à utiliser la bibliothèque, notamment:
Si vous avez des questions, des bugs ou des demandes de fonctionnalités, n'hésitez pas à poser sur l'un des éléments suivants:
Si vous souhaitez aider:
L'hyperviseur BareFlank exploite les outils suivants pour garantir la qualité du code la plus élevée possible. Chaque demande de traction subit les tests et revues rigoureux suivants:
Sur Windows, la sortie série peut ne pas fonctionner et sur certains systèmes (par exemple Intel NUC), le périphérique série de Windows par défaut peut empêcher le démarrage de Bareflank. Si tel est le cas, désactivez le périphérique série par défaut à l'aide des éléments suivants:
reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetServicesSerial" /f /v "start" /t REG_DWORD /d "4"
Voir "Conseils importants" ci-dessus pour plus de détails sur la façon d'utiliser des dispositifs série.
L'hyperviseur Bareflank est autorisé en vertu de la licence du MIT.
Si vous êtes intéressé par Bareflank, vous pourriez également être intéressé par les projets suivants:
Plus:
https://github.com/ainfosec/more
SimpleVisor:
https://github.com/ionescu007/simplevisor
Hyperplatform:
https://github.com/tandasat/hyperplatform