
Rusty Hypervisor - Rust로 작성된 Windows 커널 Blue Pill Type-2 하이퍼바이저 (코드명: Matrix)
블로그: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Intel VT-x용 후크를 갖춘, 가상화의 핵심 개념을 연구하는 데 초점을 맞춘 가볍고 메모리 안전하며 매우 빠른 Rust 기반 Type-2 연구용 하이퍼바이저입니다.
참고: Illusion 하이퍼바이저(Rust로 작성된 Windows UEFI Blue Pill Type-1 하이퍼바이저)는 더 안정적이고 더 많은 기능을 지원하며 전반적으로 더 나은 설계를 갖추고 있습니다. Matrix 하이퍼바이저(Rust로 작성된 Windows 커널 Blue Pill Type-2 하이퍼바이저)는 더 오래된 실험적 버전이며 프로덕션 사용을 위한 것이 아닙니다. 두 프로젝트 모두 Rust로 하이퍼바이저 개발을 시작하려는 사람들을 위한 템플릿 역할을 합니다.
그림 0: EPT(Extended Page Tables) 후크 (Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD), Cpuid, Getsec, Vmcall, Vmclear, Vmlaunch, Vmptrld, Vmptrst, Vmresume, Vmxon, Vmxoff Rdmsr, Wrmsr, Invd, Rdtsc, EptViolation, , , , 처리.int3) 후크.rustup toolchain install nightly 및 rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot 환경 변수를 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
설정: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe를 엽니다.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager로 이동합니다.DEFAULT DWORD = 8인 Debug Print Filter를 생성합니다.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Service Controller(sc.exe)를 사용하여 하이퍼바이저 서비스를 생성 및 관리합니다:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
VMware Workstation용 설정
프로젝트 빌드: 이전 섹션에서 제공된 빌드 지침에 따라 프로젝트를 컴파일합니다.
VMware Workstation 구성
디버깅을 위해 VMware 직렬 포트를 구성합니다.
그림 1: VMware 직렬 포트 설정
"Virtualize Intel VT-x/EPT or AMD-V/RVI" 및 "Virtualize IOMMU (IO memory management unit)"이 활성화되어 있는지 확인합니다.
그림 2: VMware 프로세서 설정
드라이버 복사
matrix.sys 드라이버를 C:\Windows\System32\drivers 디렉터리에 복사합니다.
VMware 직렬 포트 디버깅
직렬 포트 디버깅 섹션의 PowerShell 스크립트를 실행하여 직렬 포트를 엽니다.
하이퍼바이저 로드
서비스 관리 섹션에 표시된 load.ps1 PowerShell 스크립트를 사용하여 하이퍼바이저 서비스를 생성하고 시작합니다.
그림 3: 하이퍼바이저 로드
그림 4: 로그 및 Windbg PoC 설정
그림 5: 로그 및 Windbg PoC 실행
이 프로젝트를 만드는 데 영향을 준 훌륭한 사람들과 자료에 큰 감사를 드립니다. 아래에 나열된 모든 분들께 특별히 감사드립니다. 제 작업에 이 모든 자료를 사용하지는 않았지만, 하이퍼바이저 개발에 뛰어들고자 하는 모든 사람(저 포함)에게 매우 유용한 정보의 보고입니다.
Daax (@daaximus): 하이퍼바이저 개발에 대한 뛰어난 무료 시리즈를 제공해 주셨습니다. 이는 가장 좋은 자료 중 하나이며, 철저한 연구와 명확한 설명으로 제 작업에 큰 영향을 주었습니다. 하이퍼바이저 개발을 시작하는 데 있어 그분의 지원과 질문에 대한 답변은 매우 귀중했습니다:
Satoshi Tanda (@tandasat): Satoshi Tanda의 지도, 프로젝트 및 체계적인 교육 프로그램은 매우 도움이 되었습니다. GitHub에서의 상세한 설명과 기여는 제 이해를 크게 향상시켰으며, 제 여정 내내 훌륭한 멘토가 되어 주었습니다:
Jess (@jessiep_): 이 프로젝트의 여러 영역에서 귀중한 지원과 협력을 아끼지 않았고, 필수적인 통찰력과 전문 지식을 제공했으며 질문에 신속히 응답해 주셨습니다.
Drew (@drew): 하이퍼바이저 개발의 다양한 측면에서 도움, 지도 및 질문에 대한 빠른 응답을 제공해 주셨습니다.
Sina Karvandi (@Intel80x86): 상세한 무료 Hypervisor From Scratch 시리즈를 제공해 주셨습니다:
Matthias (@not-matthias): amd_hypervisor 프로젝트에 대한 영향력 있는 작업으로 이 연구에 큰 영감을 주고 영향을 미쳤습니다.
Secret Club: 이 프로젝트에 영감을 준 안티치트 시스템 및 하이퍼바이저 탐지에 대한 통찰력:
기타 필수 자료:
특별히 감사드립니다:
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 MIT 라이선스 세부정보를 참조하세요.
EptMisconfigurationInveptInvvpidXsetbvNick Peterson (@everdox) 및 Aidan Khoury (@ajkhoury): 하이퍼바이저 인트로스펙션(introspection)과 시스템 콜 후킹에 대한 통찰력 있는 탐구를 제공해 주셨습니다: