
Rusty Hypervisor - Hipervisor Tipo 2 Blue Pill de kernel do Windows em Rust (Codinome: Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Um hipervisor de pesquisa tipo-2 baseado em Rust, leve, seguro em relação à memória e extremamente rápido, com hooks para Intel VT-x, focado no estudo dos conceitos centrais de virtualização.
Nota: O hipervisor Illusion (Hipervisor Windows UEFI Blue Pill Tipo-1 em Rust) é mais estável, suporta mais recursos e é, no geral, melhor projetado. O hipervisor Matrix (Hipervisor Windows Kernel Blue Pill Tipo-2 em Rust) é uma versão mais antiga e experimental, não sendo destinado ao uso em produção. Ambos os projetos servem como modelos para ajudar as pessoas a começarem no desenvolvimento de hipervisores em Rust.
Figura 0: Extended Page Tables (EPT) Hooks (Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD), Cpuid, Getsec, Vmcall, Vmclear, Vmlaunch, Vmptrld, Vmptrst, Vmresume, Vmxon, Vmxoff Rdmsr, Wrmsr, Invd, Rdtsc, , , , , .rustup toolchain install nightly e rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot para apontar para o caminho da sua instalação do WDK, caso não tenha sido definida automaticamente durante a instalação do WDK:[System.Environment]::SetEnvironmentVariable("WDKContentRoot", "C:\Program Files (x86)\Windows Kits\10", [System.EnvironmentVariableTarget]::User)
cargo make --profile development.cargo make --profile release.bcdedit.exe /set testsigning on.bcdedit.exe /bootdebug {bootmgr} on
bcdedit.exe /bootdebug on
bcdedit.exe /debug on
Configuração: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter com o DWORD DEFAULT = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Use o Service Controller (sc.exe) para criar e gerenciar o serviço do hipervisor:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Configuração para VMware Workstation
Compile o Projeto: Siga as instruções de compilação fornecidas nas seções anteriores para compilar o projeto.
Configurar o VMware Workstation
Configure a porta serial do VMware para depuração.
Figura 1: Configurações da Porta Serial no VMware
Certifique-se de que "Virtualize Intel VT-x/EPT or AMD-V/RVI" esteja habilitado e que "Virtualize IOMMU (IO memory management unit)" esteja habilitado.
Figura 2: Configurações de Processadores no VMware
Copiar o Driver
Copie o driver matrix.sys para o diretório C:\Windows\System32\drivers.
Depuração da Porta Serial no VMware
Execute o script PowerShell na seção Depuração da Porta Serial para abrir a porta serial.
Carregar o Hipervisor
Use o script PowerShell load.ps1 mostrado na seção Gerenciamento do Serviço para criar e iniciar o serviço do hipervisor.
Figura 3: Carregar Hipervisor
Figura 4: Configuração do PoC com Logs e Windbg
Figura 5: Execução do PoC com Logs e Windbg
Muito obrigado às pessoas e recursos incríveis que moldaram este projeto. Um agradecimento especial a todos listados abaixo. Embora eu não tenha utilizado todos esses recursos no meu trabalho, eles têm sido minas de ouro de informação, super úteis para qualquer pessoa que esteja mergulhando no desenvolvimento de hipervisores, inclusive eu.
Daax (@daaximus): Pela sua excelente série gratuita sobre desenvolvimento de hipervisores, que é um dos melhores recursos disponíveis e influenciou muito meu trabalho com sua pesquisa aprofundada e explicações claras. Seu apoio e respostas às minhas perguntas foram inestimáveis para me ajudar a começar no desenvolvimento de hipervisores:
Satoshi Tanda (@tandasat): A orientação, os projetos e os programas de treinamento estruturados de Satoshi Tanda foram incrivelmente úteis. Suas explicações detalhadas e contribuições no GitHub aprimoraram significativamente meu entendimento, tornando-o um grande mentor ao longo da minha jornada:
Jess (@jessiep_): Pelo seu apoio e colaboração inestimáveis em várias áreas deste projeto, fornecendo percepções e conhecimentos essenciais, e pelas suas respostas rápidas às minhas perguntas.
Drew (@drew): Pela sua ajuda, orientação e respostas rápidas às minhas perguntas em vários aspectos do desenvolvimento de hipervisores.
Sina Karvandi (@Intel80x86): Pela sua detalhada série gratuita Hypervisor From Scratch:
Secret Club: Percepções sobre sistemas anti-cheat e detecção de hipervisores, que também inspiraram este projeto:
Outros Recursos Essenciais:
Agradecimentos especiais a:
Este projeto está licenciado sob a Licença MIT. Para mais informações, consulte os detalhes da Licença MIT.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3) compatíveis com PatchGuard.Matthias (@not-matthias): Pelo seu trabalho impactante no projeto amd_hypervisor, que inspirou e influenciou muito esta pesquisa.
Nick Peterson (@everdox) e Aidan Khoury (@ajkhoury): Pelas suas explorações perspicazes sobre introspecção de hipervisores e hooking de syscalls: