
baton drop (CVE-2022-21894): Secure Boot Security Feature Bypass Vulnerability
Windows 부트 애플리케이션은 truncatememory 설정을 사용하여 메모리 맵에서 직렬화된 데이터의 "영구" 범위를 포함하는 메모리 블록을 제거하여 보안 부팅 우회를 초래합니다.
truncatememory BCD 요소는 지정된 물리적 주소 위의 모든 메모리를 메모리 맵에서 제거합니다.bootdebug, testsigning, nointegritychecks)을 사용할 수 있게 되어 보안 부팅이 무력화됩니다.이 문제는 두 가지 변경 사항으로 수정되었습니다:
bootmgr이 아닌 경우 부트 애플리케이션 초기화가 실패합니다.OriginalFilename을 포함하는 VERSIONINFO 리소스가 있고, 해당 파일 이름이 차단 목록(bootmgr.exe 및 hvloader.exe 포함; Nickel에서는 hvloader.efi가 추가되었지만 백포트되지 않음)에 포함된 경우 로드가 실패합니다.
hvloader.exe가 winload의 차단 목록에 포함되지 않습니다. 원래는 포함되어 있어 Hyper-V 로딩이 중단되었습니다!bootmgr을 로드하기 위해 flightedbootmgr 요소와 함께 사용됨), OriginalFilename은 필수적으로 bootmgr.exe여야 합니다.공격자는 직렬화된 보안 부팅 정책이 알려진 물리적 주소 위에 할당되도록 해야 합니다.
osdevice가 TPM을 사용하여 VMK가 도출된 BitLocker 암호화 파티션인 경우 직렬화된 보안 부팅 정책이 다시 할당됩니다.
avoidlowmemory 요소를 사용하여 모든 물리적 메모리 할당이 지정된 물리적 주소 위에 있도록 할 수 있습니다:
bootmgr을 로드하고 사용자 지정 BCD 경로를 지정하면(bcdfilepath 요소, 일명 custom:22000023 사용) 이를 우회할 수 있습니다.bootmgr을 사용하여 공격을 한 번 실행하여 VBS를 비활성화한 후 원래 부트로더로 다시 전환하는 것도 가능합니다.
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 함수를 호출하려면 페이징을 비활성화해야 하며, 페이징이 꺼진 상태에서 가상 주소로 돌아가면 좋지 않은 결과가 발생합니다).BlImgLoadPEImageEx 또는 BlImgLoadPEImageFromSourceBuffer를 호출하여 1:1 물리적 주소-가상 주소 매핑에서 추가 페이로드를 로드해야 합니다.
BlImgAllocateImageBuffer를 호출하여 1:1 물리적 주소-가상 주소 매핑에서 메모리를 할당한 다음 페이로드 자체를 로드하거나(또는 거기에 자체를 다시 매핑) 할 수 있습니다.bootmgfw와 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.
hvloader의 함수를 사용하여 화면에 메시지를 출력한 다음 무한 루프를 돕니다.bootmgr과 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.bootmgr과 TH1 RTM의 hvloader를 사용하여 AMD64에서 이 문제를 악용하는 ISO입니다.이 문제는 BitLocker 키를 덤프하는 데 사용될 수 있습니다(보안 부팅이 무결성 검증에 사용되는 경우).
이 문제에 대한 수정은 CVE가 없는 다른 문제도 수정했습니다.
bootmgr은 이미 메모리에 있는 BitLocker 키테이블을 무시하고 기존 키테이블을 지우지 않고 새 키테이블을 할당합니다.
bootmgr에서 RS2+ bootmgr을 로드하고(보안 부팅이 무결성 검증에 사용되는 임의의 osdevice 지정), WinPE로 부팅하고, 알려진 취약한 드라이버를 로드한 후 이를 사용하여 물리적 메모리에서 기존 BitLocker 키테이블을 검색하고 덤프할 수 있습니다.알려진 취약한 부트 애플리케이션은 아직 해지되지 않았습니다.
bootmgr이 자체 서명을 확인하기 때문에 부팅 실패가 발생합니다.불완전한 해지가 발생했으며, 또 다른 CVE(CVE-2023-24932)가 있습니다. 여전히 해지되지 않은 취약한 bootmgfw 파일과 bootmgr이 bootmgr을 로드하는 경우만 수정하는 추가 패치가 있습니다. MS가 행동을 취하게 한 것은 붙여넣기 부트킷뿐이었습니다 ;)
충분히 창의적이라면 2000개 이상의 bootmgfw 파일 해지를 우회할 방법을 찾을 수 있을 것입니다 ;)