Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-21894 — baton drop (CVE-2022-21894): Secure Boot Security Feature Bypass Vulnerability | Kitploit
도구/GitHubGitHub/wack0/cve-2022-21894
Privilege EscalationEncryption/Decryption ToolsVulnerability AnalysisExploitationData ExfiltrationHardware SecurityFirmware AnalysisBinary Exploitation
GitHubwack0/cve-2022-21894

CVE-2022-21894

baton drop (CVE-2022-21894): Secure Boot Security Feature Bypass Vulnerability

저장소 보기
352643년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

baton drop (CVE-2022-21894): 보안 부팅 보안 기능 우회 취약점

Windows 부트 애플리케이션은 truncatememory 설정을 사용하여 메모리 맵에서 직렬화된 데이터의 "영구" 범위를 포함하는 메모리 블록을 제거하여 보안 부팅 우회를 초래합니다.

  • truncatememory BCD 요소는 지정된 물리적 주소 위의 모든 메모리를 메모리 맵에서 제거합니다.
  • 이는 각 부트 애플리케이션 초기화 중, 메모리에서 직렬화된 보안 부팅 정책을 읽기 전에 수행됩니다.
  • 따라서 이러한 요소를 사용하여 직렬화된 보안 부팅 정책을 메모리 맵에서 제거할 수 있습니다.
  • 이로 인해 부트 애플리케이션에서 위험한 설정(bootdebug, testsigning, nointegritychecks)을 사용할 수 있게 되어 보안 부팅이 무력화됩니다.

이 문제는 두 가지 변경 사항으로 수정되었습니다:

  • 직렬화된 보안 부팅 정책 로드를 시도한 후, 정책이 로드되지 않았고, 보안 부팅이 활성화되어 있으며, 부트 애플리케이션이 UEFI 펌웨어에 의해 직접 로드되지 않았고, 부트 애플리케이션이 bootmgr이 아닌 경우 부트 애플리케이션 초기화가 실패합니다.
  • 부트 애플리케이션을 로드할 때, OriginalFilename을 포함하는 VERSIONINFO 리소스가 있고, 해당 파일 이름이 차단 목록(bootmgr.exe 및 hvloader.exe 포함; Nickel에서는 hvloader.efi가 추가되었지만 백포트되지 않음)에 포함된 경우 로드가 실패합니다.
    • Windows 8 및 Windows 8.1에서는 hvloader.exe가 winload의 차단 목록에 포함되지 않습니다. 원래는 포함되어 있어 Hyper-V 로딩이 중단되었습니다!
    • Windows 10 버전 1809부터 특정 플래그 비트가 설정된 경우(디스크에서 bootmgr을 로드하기 위해 flightedbootmgr 요소와 함께 사용됨), OriginalFilename은 필수적으로 bootmgr.exe여야 합니다.

악용

공격자는 직렬화된 보안 부팅 정책이 알려진 물리적 주소 위에 할당되도록 해야 합니다.

  • 기본적으로 가능한 가장 낮은 주소에 할당됩니다.
  • 원래 직렬화된 보안 부팅 정책은 로드된 후, BCD에서 로드된 구성을 사용하기 전에 할당됩니다.
    • RS1부터 직렬화된 보안 부팅 정책은 부트 애플리케이션을 로드할 때 할당됩니다.
    • RS2부터 보안 부팅 정책을 직렬화할 때 기존 직렬화된 보안 부팅 정책이 해제됩니다.
  • 부트 애플리케이션을 로드할 때 BCD 항목의 osdevice가 TPM을 사용하여 VMK가 도출된 BitLocker 암호화 파티션인 경우 직렬화된 보안 부팅 정책이 다시 할당됩니다.
    • 이는 TPM 언실링 성공 후 키 플래그의 비트 0을 설정하여 위조할 수 있습니다. 이 비트는 BitLocker 메타데이터에서 수동으로 설정할 수 있으며, 무결성 검증에 보안 부팅이 사용됨을 지정하는 추가 메타데이터를 추가할 수 있습니다.

avoidlowmemory 요소를 사용하여 모든 물리적 메모리 할당이 지정된 물리적 주소 위에 있도록 할 수 있습니다:

  • Windows 10부터 VBS가 활성화된 경우 이 요소는 허용되지 않지만, 부트 애플리케이션 초기화 중 메모리에서 직렬화된 보안 부팅 정책을 읽기 전에 사용되므로 bootmgr을 로드하고 사용자 지정 BCD 경로를 지정하면(bcdfilepath 요소, 일명 custom:22000023 사용) 이를 우회할 수 있습니다.
  • OS 볼륨에 BitLocker가 있거나 대상 시스템이 TH1 또는 TH2를 실행 중인 경우 이 방법은 실패합니다. 따라서 Windows 8.x bootmgr을 사용하여 공격을 한 번 실행하여 VBS를 비활성화한 후 원래 부트로더로 다시 전환하는 것도 가능합니다.
    • Windows 10은 모든 TPM PCR을 한 번에 캡하도록 부트 애플리케이션 초기화를 변경했으므로 Windows 8.x bootmgr은 Windows 10+ 시스템에서 VMK를 언실링하는 데 실패합니다.

hvloader.efi는 nointegritychecks 요소와 함께 로드되어 자체 서명된 mcupdate.dll을 로드할 수 있으며, 해당 진입점은 ExitBootServices 전에 호출됩니다.

또는 AMD64 이외의 시스템에서는 TH2 이전의 winload.efi를 testsigning 요소와 함께 사용할 수 있습니다. 이는 인증서에 szOID_NT5_CRYPTO EKU가 있는 자체 서명된 바이너리를 허용합니다.

ARMv7 시스템에서는 mcupdate.dll에 대한 임포트가 포함된 패치된 자체 서명 hal.dll을 로드해야 코드 실행이 가능합니다.

x86 및 AMD64 시스템에서는 mcupdate.dll로 로드되는 파일의 이름이 mcupdate_*.dll이어야 하며, 여기서 *는 CPUID 제조업체 문자열(GenuineIntel, AuthenticAMD 등)입니다.

ARM64 시스템에서는 가장 이른 사용 가능한 프로덕션 서명 빌드가 RS2의 WinPE이므로 이 기술을 사용할 수 없습니다. 따라서 현재는 bootdebug를 사용하여 연결된 코드 실행만 가능합니다.

포함 파일

이 저장소에는 다음 파일이 포함되어 있습니다:

  • 간단한 페이로드의 소스 코드가 제공됩니다. 이 페이로드는 호출 부트 애플리케이션에서 흥미로운 함수와 변수를 찾지 못하면 다른 작업을 수행할 수 없으므로 무한히 인터럽트를 기다립니다.
    • mcupdate.dll이 페이징이 활성화된 가상 주소에서 실행되므로 EFI 함수를 직접 호출할 수 없습니다(EFI 함수를 호출하려면 페이징을 비활성화해야 하며, 페이징이 꺼진 상태에서 가상 주소로 돌아가면 좋지 않은 결과가 발생합니다).
    • EFI 함수를 호출하려면 페이로드가 플래그의 비트 0을 설정하여 BlImgLoadPEImageEx 또는 BlImgLoadPEImageFromSourceBuffer를 호출하여 1:1 물리적 주소-가상 주소 매핑에서 추가 페이로드를 로드해야 합니다.
      • 또는 동일한 비트를 설정하여 BlImgAllocateImageBuffer를 호출하여 1:1 물리적 주소-가상 주소 매핑에서 메모리를 할당한 다음 페이로드 자체를 로드하거나(또는 거기에 자체를 다시 매핑) 할 수 있습니다.
  • Windows 8 RTM의 bootmgfw와 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.
    • 여기서 사용된 페이로드는 오프셋으로 얻은 hvloader의 함수를 사용하여 화면에 메시지를 출력한 다음 무한 루프를 돕니다.
  • RS1의 bootmgr과 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.
  • 버전 19041.1081의 bootmgr과 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.

추신

이 문제는 BitLocker 키를 덤프하는 데 사용될 수 있습니다(보안 부팅이 무결성 검증에 사용되는 경우).

  • 가능하지만, 메모리에서 임의의 볼륨에 대한 도출된 BitLocker 키로 코드 실행을 얻는 정확한 방법은 공개되지 않습니다.

이 문제에 대한 수정은 CVE가 없는 다른 문제도 수정했습니다.

  • bootmgr은 이미 메모리에 있는 BitLocker 키테이블을 무시하고 기존 키테이블을 지우지 않고 새 키테이블을 할당합니다.
    • 따라서 공격자는 bootmgr에서 RS2+ bootmgr을 로드하고(보안 부팅이 무결성 검증에 사용되는 임의의 osdevice 지정), WinPE로 부팅하고, 알려진 취약한 드라이버를 로드한 후 이를 사용하여 물리적 메모리에서 기존 BitLocker 키테이블을 검색하고 덤프할 수 있습니다.

알려진 취약한 부트 애플리케이션은 아직 해지되지 않았습니다.

  • 해지가 발생할 때까지 공격자는 자신의 취약한 부트로더를 가져올 수 있습니다.
  • 해지는 모든 기존 Windows 설치/복구 미디어와 이전 백업이 부팅에 실패하게 만듭니다.
    • 보안 부팅이 비활성화된 경우에도 bootmgr이 자체 서명을 확인하기 때문에 부팅 실패가 발생합니다.

업데이트 (2023-05-10)

불완전한 해지가 발생했으며, 또 다른 CVE(CVE-2023-24932)가 있습니다. 여전히 해지되지 않은 취약한 bootmgfw 파일과 bootmgr이 bootmgr을 로드하는 경우만 수정하는 추가 패치가 있습니다. MS가 행동을 취하게 한 것은 붙여넣기 부트킷뿐이었습니다 ;)
충분히 창의적이라면 2000개 이상의 bootmgfw 파일 해지를 우회할 방법을 찾을 수 있을 것입니다 ;)

도구 다운로드