Files
MiniVisorPkg/README.md

68 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2020-02-22 19:54:32 -08:00
MiniVisor
==========
2020-02-22 13:54:50 -08:00
2020-02-25 16:06:31 -08:00
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5781c969419c47059f1aba259443fe79)](https://www.codacy.com?utm_source=github.com&utm_medium=referral&utm_content=tandasat/MiniVisorPkg&utm_campaign=Badge_Grade)
2020-02-22 13:54:50 -08:00
This is a research hypervisor written as a UEFI and Windows driver for the educational purpose for Intel processors.
This MiniVisor, as a UEFI driver, provides the ability to inspect system activities even before the operating system boots, while as a Windows driver, allows developers to debug it with familiar tools like WinDbg.
Showcase
---------
2020-02-22 19:54:32 -08:00
* Loading the hypervisor from the UEFI shell.
2020-02-25 16:48:01 -08:00
![Readme_Showcase1.jpg](Docs/Resources/Readme_Showcase1.jpg)
2020-02-22 19:54:32 -08:00
* Logging boot activities and interacting with the guest.
2020-02-25 16:48:01 -08:00
![Readme_Showcase2.jpg](Docs/Resources/Readme_Showcase2.jpg)
2020-02-22 13:54:50 -08:00
2020-02-23 13:12:43 -08:00
* Booting Ubuntu on a bare-metal.
2020-02-25 16:48:01 -08:00
![Readme_Showcase3.jpg](Docs/Resources/Readme_Showcase3.jpg)
2020-02-22 13:54:50 -08:00
Motivation
-----------
The goal of this project is to share an additional learning resource for writing UEFI hypervisors with the community and researchers.
2020-02-22 19:54:32 -08:00
There are numerous open source hypervisors with small and easy-to-study implementations, but those that support booting operating systems as UEFI drivers are still not many.
2020-02-22 13:54:50 -08:00
2020-02-23 13:12:43 -08:00
Given the universality of UEFI systems on the AMD64 ecosystem and the unique ability to monitor, attack and protect the system throughout operating system startup on bare-metal systems, the authors believe that having the understanding and being able to develop this type of hypervisors are valuable for research.
2020-02-22 13:54:50 -08:00
System Requirements
--------------------
Common Requirements:
2020-02-25 16:48:01 -08:00
* Intel VT-x and EPT supported processors
2020-02-22 13:54:50 -08:00
Requirements for the UEFI driver:
2020-02-25 16:48:01 -08:00
* UEFI-based system
* 64bit Windows 10, IoT Core, or Ubuntu to boot
2020-02-22 13:54:50 -08:00
Requirements for the Windows driver:
2020-02-25 16:48:01 -08:00
* 64bit Windows 7 and 10
2020-02-22 13:54:50 -08:00
See [Building and Debugging](Docs/Building_and_Debugging.md) for testing.
2020-02-22 19:54:32 -08:00
Advantages and Use Cases
2020-02-25 16:06:31 -08:00
-------------------------
2020-02-22 19:54:32 -08:00
2020-02-25 16:48:01 -08:00
While this project does not implement or designed for any immediately useful features, UEFI-based hypervisors have multiple advantages over Windows driver-based ones and can implement unique features.
2020-02-22 19:54:32 -08:00
* No need of disabling Hyper-V (Virtualization Based Security) to run the custom hypervisor
* No need of enabling the test-signing mode
2020-02-23 13:12:43 -08:00
* Zero direct indicator of existence of the hypervisor from operating system perspective
2020-02-22 19:54:32 -08:00
* Detecting bootkit and early system modification
2020-02-23 13:12:43 -08:00
* Implementing operating system agnostic solutions
2020-03-08 20:54:45 -07:00
* Installing hooks during the early boot phase and letting PatchGuard to protect them
![Readme_Showcase4.jpg](Docs/Resources/Readme_Showcase4.jpg)
2020-02-22 19:54:32 -08:00
2020-02-22 13:54:50 -08:00
Acknowledgments
----------------
The authors thank for creators and maintainers of the following projects:
2020-03-10 09:03:47 -07:00
* [Bareflank](https://github.com/Bareflank/hypervisor) and [STM](https://github.com/jyao1/STM) -- for publishing UEFI-base hypervisors with the relatively small codebase.
2020-02-25 16:48:01 -08:00
* [zpp_hypervisor](https://github.com/eyalz800/zpp_hypervisor) -- for making me realize that writing UEFI-based hypervisors is viable.
* [EfiGuard](https://github.com/Mattiwatti/EfiGuard) -- for clean codebase and rich documentation for UEFI development newbies.
* [hvpp](https://github.com/wbenny/hvpp) -- for few techniques required for the UEFI environment.
* [ia32-doc](https://github.com/wbenny/ia32-doc) -- for saving me from defining thousands of constants and structures by hand.