Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
illusion-rs — Rusty Hypervisor - Rust로 구현된 Windows UEFI 블루 필 Type-1 하이퍼바이저 (코드명: Illusion) | Kitploit
도구/GitHubGitHub/memn0ps/illusion-rs
Defensive ToolsMemory ForensicsPersistence MechanismsReverse EngineeringSecurity VirtualizationMalware AnalysisHardware SecurityBinary AnalysisPapers & ResearchRed TeamingArchived
413604개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
memn0ps/illusion-rs

illusion-rs

Rusty Hypervisor - Rust로 구현된 Windows UEFI 블루 필 Type-1 하이퍼바이저 (코드명: Illusion)

저장소 보기웹사이트

Rust로 구현된 Windows UEFI Blue Pill Type-1 하이퍼바이저 (코드명: Illusion)

License Issues Forks Stars

블로그: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/

Intel VT-x용 훅을 갖춘 경량의 메모리 안전하고 매우 빠른 Rust 기반 type-1 연구용 하이퍼바이저로, 가상화의 핵심 개념을 연구하는 데 초점을 맞추고 있습니다.

참고: Illusion 하이퍼바이저(Rust로 구현된 Windows UEFI Blue Pill Type-1 하이퍼바이저)가 더 안정적이고, 더 많은 기능을 지원하며, 전반적으로 더 나은 설계를 갖추고 있습니다. Matrix 하이퍼바이저(Rust로 구현된 Windows Kernel Blue Pill Type-2 하이퍼바이저)는 더 오래된 실험적 버전이며 프로덕션 용도로 사용하기 위한 것이 아닙니다. 두 프로젝트 모두 사람들이 Rust로 하이퍼바이저 개발을 시작할 수 있도록 돕기 위한 템플릿 역할을 합니다.

설명

페이징: x64 가상 주소를 물리 주소로 변환하기

이 다이어그램은 전통적인 페이징 시스템에서 x64 가상 주소를 물리 주소로 변환하는 메커니즘을 보여줍니다. x64 아키텍처에서 이 변환은 PML4, PDPT, PDT, PT(Page Map Level 4, Page Directory Pointer Table, Page Directory Table, Page Table)의 네 단계 페이지 테이블을 포함합니다. 각 단계는 가상 주소의 9비트를 사용하여 다음 단계를 인덱싱하며, 궁극적으로 RAM의 특정 물리 주소를 가리킵니다. 이 과정은 운영체제와 MMU(Memory Management Unit)에 의해 관리되며, MMU는 소프트웨어가 사용하는 가상 주소를 하드웨어가 사용하는 물리 주소로 변환합니다.

x64 Virtual Address Translation
그림 1: x64 가상 주소 변환 (전체 크레딧: Guided Hacking)

확장 페이지 테이블(EPT): 2단계 주소 변환(SLAT)

확장 페이지 테이블(EPT)은 Intel VT-x 및 AMD-V의 Nested Page Tables(NPT)와 같은 하드웨어 지원 가상화 기술의 기능입니다. EPT는 가상화 환경을 위해 특별히 설계된 2단계 주소 변환(SLAT)을 구현합니다. 전통적인 페이징이 게스트 OS 내에서 가상 주소를 물리 주소로 변환하는 반면, EPT는 게스트 물리 주소(게스트 OS가 사용)를 호스트 물리 주소(하이퍼바이저가 사용)로 변환하는 추가 계층을 더합니다. 이 두 번째 변환 계층은 하이퍼바이저에 의해 관리되며, 게스트 운영체제가 자체 페이지 테이블을 독립적으로 관리할 수 있도록 합니다. SLAT는 메모리 작업 중 VM 종료의 필요성을 최소화하여 성능을 향상시키며, 이는 오버헤드를 줄이고 가상화 효율성을 높입니다.

아래 다이어그램은 Rust로 작성된 Windows UEFI Blue Pill Type-1 하이퍼바이저(코드명: Illusion)에서 숨겨진 EPT 훅을 구현하는 방법을 보여줍니다.

EPT Hooks
그림 2: 확장 페이지 테이블(EPT) 훅 (Illusion)

기능

PatchGuard 호환 기능

  • ✅ SSDT(System Service Descriptor Table)를 통한 숨겨진 시스템 호출(Syscall) 훅.
  • ✅ 숨겨진 커널 인라인 훅.
  • ✅ 숨겨진 MSR(Model Specific Registers) 훅.

프로세서별 기능

  • ✅ 확장 페이지 테이블(EPT).
  • ✅ MTRR(Memory Type Range Registers).
  • ❌ Intel Processor Trace (PT).

Microsoft Hyper-V 호환 기능

  • ❌ VBS(Virtualization Based Security)가 활성화된 Microsoft Hyper-V(Type-2) 아래에서 중첩 하이퍼바이저로 실행 지원.
  • ❌ VBS(Virtualization Based Security)가 활성화된 Microsoft Hyper-V(Type-1) 위에서 기본 하이퍼바이저로 실행 지원.

VM 종료 처리

  • ✅ VM 종료 처리: ExceptionOrNmi (#GP, #PF, #BP, #UD) (0), InitSignal (3), StartupIpi (4), Cpuid (10), Getsec (11), Hlt (12), Invd (13), Vmcall (18), Vmclear (19), Vmlaunch (20), Vmptrld (21), Vmptrst (22), Vmresume (24), Vmxon (27), Vmxoff (26), ControlRegisterAccesses (28), Rdmsr (31), Wrmsr (32), MonitorTrapFlag (37), Rdtsc (49), EptViolation (48), EptMisconfiguration (50), Invept (53), Invvpid (55), Xsetbv (55).

하이퍼바이저 탐지

  • ✅ EPT를 사용하여 게스트로부터 하이퍼바이저 메모리 숨기기(호스트 메모리를 가리키는 게스트 메모리를 0xFF로 채워진 더미 페이지로 리디렉션).
  • ✅ 사용자 정의 페이지 테이블 기반 하이퍼바이저 탐지 우회(CR3 파괴를 포함하여 게스트로부터 격리 및 보안 제공).
  • ✅ 사용자 정의 GDT 및 IDT 기반 하이퍼바이저 탐지 우회(게스트로부터 격리 및 보안 보장).
  • ✅ CPUID 기반 하이퍼바이저 탐지 우회(HypervisorPresent를 해제하고 Feature Information 및 Hypervisor Vendor에 대한 벤더 ID 서명 제거).
  • ✅ MSR 기반 하이퍼바이저 탐지 우회(유효하지 않거나, 지원되지 않거나, 예약된 Hyper-V MSR vmexit에 대해 #GP 주입).
  • ✅ CR 기반 하이퍼바이저 탐지 우회(하이퍼바이저 특정 비트를 숨기기 위해 CR0 및 CR4를 섀도잉).
  • ✅ XSETBV 기반 하이퍼바이저 탐지 우회(유효하지 않거나 지원되지 않는 XSETBV vmexit에 대해 #GP 주입).
  • ✅ VMCALL 기반 하이퍼바이저 탐지 우회(유효하지 않거나 지원되지 않는 VMCALL vmexit에 대해 #GP 주입).
  • ✅ ExceptionOrNMI 기반 하이퍼바이저 탐지 우회(특정 예외 vmexit에 대해 #GP, #PF, #BP, #UD 주입).
  • ✅ 무조건적 vmexit(무조건적 vmexit에 대해 #UD를 주입하지만, Vmxon의 경우 VMXE를 포함하지 않으면 #UD를 주입하고, 그렇지 않으면 VMXE를 포함하면 #GP를 주입).
  • ❌ EPT 기반 하이퍼바이저 탐지 우회(쓰기 검사, 타이밍 검사, 스레드 검사).
  • ❌ RDTSC 기반 하이퍼바이저 탐지 우회.
  • ✅ UEFI 메모리 맵/테이블에서 하이퍼바이저 메모리 제거(하이퍼바이저가 점유한 메모리 영역을 식별하고 해당 영역을 UNUSABLE로 표시하도록 UEFI 메모리 맵을 수정).

격리 및 보안

  • ✅ 하이퍼바이저의 보안과 격리를 강화하기 위한 GDT(Global Descriptor Table), IDT(Interrupt Descriptor Table), 페이지 테이블의 사용자 정의 구현.

지원 하드웨어

  • ✅ VT-x 및 확장 페이지 테이블(EPT)을 지원하는 Intel 프로세서.
  • ❌ AMD-V(SVM) 및 Nested Page Tables(NPT)를 지원하는 AMD 프로세서.

지원 플랫폼

  • ✅ Windows 10 - Windows 11, x64 전용.

설치

  • 여기에서 Rust를 설치합니다.
  • cargo-make 설치: cargo install cargo-make.

프로젝트 빌드

  • 디버그: cargo make build-debug.
  • 릴리스: cargo make build-release.

프로젝트 실행

  • 디버그: cargo make run-debug.
  • 릴리스: cargo make run-release.

디버깅

  • 시리얼 포트 로깅: 시리얼 포트 로거를 사용하여 하이퍼바이저의 로그를 캡처합니다.

디버그 모드 활성화

  • 테스트 모드: bcdedit.exe /set testsigning on으로 테스트 서명을 활성화합니다.
  • Windows 디버깅: 이 Microsoft 가이드의 단계를 따릅니다.
bcdedit.exe /bootdebug {bootmgr} on
bcdedit.exe /bootdebug on
bcdedit.exe /debug on

Windbg를 사용한 네트워크 디버깅

  • 설정: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.

사용법

UEFI 블루필 하이퍼바이저는 다음 조건에서 작동합니다:

  • Secure Boot가 비활성화됨: 취약점 필요 없음 (이 프로젝트에서 지원됨).
  • Virtualization-Based Security (VBS)가 비활성화됨: 호환성을 보장합니다.
  • 알려진 UEFI 결함 악용: 오래되었거나 지원되지 않는 펌웨어를 사용하거나, Bring Your Own Vulnerable Binary (BYOVB) 기법을 통해 Secure Boot를 우회합니다.
  • 지정되지 않은 UEFI 결함 악용: 제로데이 취약점을 사용하여 Secure Boot를 비활성화합니다.

구성 참고 사항

이 UEFI 하이퍼바이저를 설정할 때, 시스템의 논리 프로세서/코어/스레드 수에 따라 파일을 구성하는 것이 중요합니다. global_const.rs의 관련 코드를 편집하세요.

전역 힙 할당자는 모든 프로세서/코어/스레드 간에 공유되며, 미리 할당된 메모리 풀입니다. 스택 크기는 프로세서/코어/스레드별로 할당됩니다. 이 설계는 특히 미리 할당된 버퍼가 필요한 후크 설정과 같은 작업에서 메모리 할당을 더 쉽게 추적할 수 있게 해줍니다. 이 파일의 설정을 조정함으로써 모든 프로세서를 수용할 수 있을 만큼 충분한 메모리가 할당되도록 하면서 최적의 성능과 리소스 관리를 유지할 수 있습니다.

사용법 1: VMware Workstation에서 UEFI Shell을 통해 UEFI 블루필 하이퍼바이저 실행 (지원됨)

  1. 부팅용 가상 USB 드라이브 생성

    관리자 권한으로 다음 PowerShell 스크립트를 실행하여 USB 드라이브에 새 파티션을 생성하고 FAT32로 포맷합니다. 이 스크립트는 기존 파티션을 512 MB만큼 축소하고 USB 드라이브에 "Hypervisor" 레이블이 있는 새 파티션을 생성합니다. 환경에 맞게 드라이브 문자를 수정하세요. 또는 물리적 USB 드라이브를 사용할 수도 있습니다.

    # Define the size to shrink in MB
    $sizeToShrinkMB = 512
    
    # Define the drive letter of the existing partition to shrink
    $existingDriveLetter = "C"
    
    # Define the drive letter and label for the new partition
    $newDriveLetter = "D"
    $newFileSystemLabel = "Hypervisor"
    
    # Shrink the existing partition
    $volume = Get-Volume -DriveLetter $existingDriveLetter
    $partition = $volume | Get-Partition
    Resize-Partition -DriveLetter $partition.DriveLetter -Size ($partition.Size - ($sizeToShrinkMB * 1MB))
    
    # Create a new partition in the unallocated space
    $disk = Get-Disk -Number $partition.DiskNumber
    $newPartition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -DriveLetter $newDriveLetter
    
    # Format the new partition
    Format-Volume -DriveLetter $newDriveLetter -FileSystem FAT32 -NewFileSystemLabel $newFileSystemLabel
    
    Write-Output "Partition created and formatted successfully."
    
  2. VMware Workstation 설정

    • 프로젝트 빌드: 이전 섹션에서 제공된 빌드 지침에 따라 프로젝트를 컴파일합니다.
도구 다운로드