
Barflank Hypervisor es un Kit de herramientas de desarrollo de software Hypervisor de código abierto (SDK) para Rust y C ++, dirigido por Assured Information Security, Inc. (AIS), que proporciona las herramientas necesarias para prototipar rápidamente y crear su propio hipervisor en versiones de 64 bits de Intel y AMD (ARMV8 CPUS, RISC-V y PowerPC también planificados). El SDK descalte está destinado a fines de instrucción/investigación, ya que solo proporciona suficiente soporte de virtualización para iniciar/detener un hipervisor. Barflank también se puede utilizar como base para crear su propio hipervisor totalmente funcional, ya que utiliza la licencia MIT, incluye cobertura de prueba unitaria al 100% y cumplimiento de AutoSar. Si está buscando un hipervisor completo (y no un SDK), consulte Microv. Si está buscando un SDK mínimo para la educación o para realizar investigaciones, este es el proyecto para usted. Si simplemente está buscando un hipervisor de referencia, consulte SimpleVisor.
Barflank utiliza un enfoque modular en capas, que le permite elegir cuánta complejidad necesita en su proyecto al crear su propio hipervisor personalizado:
Obtenga la última versión del SDK de Hypervisor Barflank de GitHub:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
makeDisfrutar:
make driver_quick
make start
make dump
make stop
Echa un vistazo a nuestro desafío. ® ¡Desafío y prueba tus habilidades! Envíe su puntaje para mostrarnos lo que tiene. Tenemos oficinas en todo el país y ofrecemos salarios competitivos y beneficios sobresalientes. Únase a un equipo que no solo está comprometido con el futuro del ciberespacio, sino también con el éxito de nuestros empleados.

Echa un vistazo a la última demostración de cómo compilar y usar el hipervisor descalte en Ubuntu 20.04:
Consulte nuestro canal de YouTube para obtener más contenido excelente, así como los siguientes videos en CPPCON a continuación:
Antes de intentar usar Barflank, revise los siguientes consejos, ya que pueden marcar una gran diferencia en su experiencia inicial:
bcdedit /set hypervisorlaunchtype off ya que Hyperv continuará ejecutándose incluso si ya no está usando el WSL2.Actualmente, el hipervisor descalzo solo admite el compilador Clang/LLVM 10+. Sin embargo, esto garantiza que el hipervisor se pueda compilar de forma nativa en Windows, incluida la compatibilidad con la compilación cruzada. El soporte para otros compiladores C ++ 20 se puede agregar si es necesario, solo háganos saber si eso es algo que necesita.
Para compilar el BSL en Windows, primero debe deshabilitar UEFI SecureBoot y habilitar el modo de firma de prueba. Tenga en cuenta que esto podría requerir que reinstale Windows ( se le ha advertido ). Esto se puede hacer desde un símbolo del sistema con privilegios de administración:
bcdedit.exe /set testsigning ON
<reboot>
A continuación, instale lo siguiente:
Se necesita Visual Studio, ya que contiene bibliotecas específicas de Windows que se necesitan durante la compilación. En lugar de utilizar el proyecto Clang/LLVM que se envía de forma nativa con Visual Studio, utilizamos los binarios estándar de Clang/LLVM proporcionados por el proyecto LLVM que garantiza que obtengamos todas las herramientas, incluidos el formato LLD, Clang Tidy y Clang. También tenga en cuenta que debe poner ninja en algún lugar en su camino (generalmente caemos en la carpeta de contenedores de Cmake). Finalmente, asegúrese de seguir todas las instrucciones al instalar el WDK . Estas instrucciones cambian con frecuencia, y cada paso debe instalarse correctamente y en el orden proporcionado por las instrucciones. Saltar un paso o instalar un paquete en el orden incorrecto dará como resultado una instalación de WDK que no funciona.
Para compilar el BSL, vamos a usar Bash. Hay muchas maneras de comenzar a Bash, incluida la apertura de un mensaje CMD y escribir "Bash". Una vez ejecutando bash, asegúrese de agregar lo siguiente a su camino:
Por ejemplo, en su .BASHRC, puede agregar lo siguiente (dependiendo de dónde Visual Studio coloque estos archivos):
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 "Finalmente, ejecute lo siguiente de Bash:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
ninja info
ninjaPara compilar el BSL en Ubuntu (20.04 o superior) primero debe instalar las siguientes dependencias:
sudo apt-get install -y clang cmake lldPara compilar el BSL, use lo siguiente:
git clone https://github.com/bareflank/hypervisor
mkdir hypervisor/build && cd hypervisor/build
cmake ..
make info
makePara compilar para UEFI, simplemente siga los pasos para su sistema operativo anterior, pero agregue lo siguiente al cmake:
-DHYPERVISOR_BUILD_EFI= ONLuego puede construir el hipervisor como de costumbre y el cargador UEFI se compilará automáticamente. Una vez que se compilan el núcleo, las extensiones y el cargador UEFI, puede copiarlos en su partición UEFI FS0. Tenga en cuenta que todos los binarios deben copiarse en su partición FS0, y en algunos sistemas, este podría ser un palo USB . Para ayudar en este proceso de copia, el sistema de compilación incluye el siguiente comando:
make copy_to_efi_partitionPor defecto, esto usa la partición EFI, pero se puede reubicar usando:
-DHYPERVISOR_EFI_FS0=< path to FS0>Algunos sistemas requieren que proporcione la carcasa de la UEFI, por lo que el flanco descalzo contiene una copia de este caparazón que se copiará junto con el núcleo, las extensiones y el cargador UEFI. Una vez que se haya reiniciado en el shell UEFI, puede iniciar el hipervisor usando
start_bareflank.efi
Tenga en cuenta que, de forma predeterminada, el Hypervisor no puede iniciar un sistema operativo. Debe usar un ejemplo no defectuoso que proporcione un soporte UEFI más completo, o proporcione su propia extensión que sea capaz de iniciar con éxito un sistema operativo. Finalmente, actualmente no proporcionamos ninguna de las otras funciones VMMCTL como Stop o Dump.
El SDK de hipervisor descalzo consta de los siguientes componentes principales:
La "extensión" es donde pones tu código. Es una aplicación del anillo 3 que se ejecuta encima de nuestro microkernel en la llamada raíz "anillo -1" o VMX. El "kernel" es el microkernel mencionado anteriormente, y es responsable de ejecutar todas las aplicaciones de hipervisores que realmente implementan el hipervisor. En otras palabras, toda la lógica de Hypervisor se implementa en una extensión que usted proporciona, y nuestro microkernel está allí para ejecutar su extensión en la raíz VMX. El "cargador" coloca nuestro microkernel y su extensión en la raíz VMX. Es responsable de comenzar y detener al hipervisor, y deshacerse del contenido de su anillo de depuración. La aplicación "VMMCTL" se utiliza para controlar el cargador. Proporciona un medio simple para decirle al cargador qué hacer.
Para comenzar descalzo, compile el "cargador" y ejecútelo en el núcleo de su sistema operativo. Para hacer eso, ejecute lo siguiente (reemplace la marca con ninja en las ventanas):
make driver_build
make driver_load
Esto construye el "cargador" y lo ejecuta en el núcleo del sistema operativo. Si siguió las instrucciones de Buld anteriormente usando CMake, ya debería haber compilado el microkernel, VMMCTL y su extensión (que por defecto es nuestro ejemplo predeterminado). Una vez que se compilan estos componentes, puede ejecutar el Hypervisor usando el siguiente comando (reemplace la marca con ninja en Windows):
make start
Para obtener información de depuración, use lo siguiente (reemplace la marca con ninja en Windows):
make dump
Para detener el hipervisor, use lo siguiente (reemplace la marca con ninja en las ventanas):
make stop
Finalmente, para descargar el "cargador" y limpiar su sistema de compilación, puede ejecutar lo siguiente (reemplace la marca con ninja en las ventanas):
make driver_unload
make driver_clean
Y eso es todo. Para obtener más información sobre cómo construir y usar Barflank, puede ejecutar el siguiente núcleo, una lista completa de comandos disponibles para usted, así como la configuración de compilación completa (reemplace la marca con Ninja en Windows):
make info
El hipervisor Barflank se completa con una serie de extensiones de ejemplo que puede usar para crear su propio hipervisor personalizado. Para comenzar, crearemos un directorio de trabajo y clonaremos algunos repositorios para acelerar el proceso de compilación:
mkdir ~ /working
mkdir ~ /working/build
git clone https://github.com/bareflank/bsl ~ /working/bsl
git clone https://github.com/bareflank/hypervisor ~ /working/hypervisorA continuación, copiaremos un ejemplo existente en nuestro directorio de trabajo (elija el ejemplo que proporcione el mejor punto de partida para su proyecto):
cp -R ~ /working/hypervisor/example/default ~ /working/extensionFinalmente, configuraremos el proyecto, diciéndole al sistema de compilación cómo encontrar nuestra extensión personalizada.
cd ~ /working/build
cmake
../hypervisor
-DHYPERVISOR_EXTENSIONS_DIR= $PWD /../extension
-DFETCHCONTENT_SOURCE_DIR_BSL= $PWD /../bsl HYPERVISOR_EXTENSIONS_DIR define la ubicación de su extensión. Tenga en cuenta que la ruta debe ser una ruta absoluta, por lo que utilizamos la ruta absoluta de la carpeta de compilación como punto de partida y luego elaboró la ubicación de la carpeta de extensión desde allí.
FETCHCONTENT_SOURCE_DIR_BSL es opcional. Esto le dice al sistema de compilación dónde encontrar el BSL. Dado que ya clonamos el BSL en nuestro directorio de trabajo, podemos usarlo en lugar de pedirle al sistema de compilación que nos busque automáticamente el BSL para nosotros. Esto es ideal para las compilaciones fuera de línea, o las construcciones donde se está volviendo a centrar mucho en CMake y no quiere esperar a que el BSL descargue cada vez.
El resto de las instrucciones de uso anteriores se pueden usar para iniciar/detener su hipervisor personalizado. Para obtener más información sobre con qué proporciona el ABIS el microkernel, consulte la especificación de Syscall de microkernel en la carpeta Docs. También proporcionamos una implementación de ejemplo de este ABI como un conjunto de API C ++ que puede usar si lo desea. Este conjunto de ejemplo de API se puede ver en el archivo syscall/include/mk_interface.hpp.
Para usar el ejemplo de Rust, deberá instalar Rust y cambiar al canal nocturno.
El hipervisor Barflank proporciona una tonelada de recursos útiles para aprender a usar la biblioteca, incluida:
Si tiene alguna pregunta, errores o solicitudes de funciones, no dude en preguntar en cualquiera de los siguientes:
Si desea ayudar:
El hipervisor descalzo aprovecha las siguientes herramientas para garantizar la calidad del código más alta posible. Cada solicitud de extracción se somete a las siguientes pruebas y revisión rigurosas:
En Windows, la salida en serie puede no funcionar, y en algunos sistemas (por ejemplo, Intel NUC), el dispositivo serial de Windows predeterminado puede evitar que el flanco descalzo comience en absoluto. Si este es el caso, deshabilite el dispositivo serie predeterminado utilizando el siguiente:
reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetServicesSerial" /f /v "start" /t REG_DWORD /d "4"
Consulte "Consejos importantes" anteriormente para obtener detalles adicionales sobre cómo usar dispositivos seriales.
El hipervisor descalte tiene licencia bajo la licencia MIT.
Si está interesado en Barflank, también puede estar interesado en los siguientes proyectos:
Más:
https://github.com/ainfosec/more
SimpleVisor:
https://github.com/ionescu007/simplevisor
Hyperplatform:
https://github.com/tandasat/hyperplatform