보호 중단된 BitLocker에서 Clear Key 확보하기
BitLocker는 윈도우의 디스크 암호화 기능으로 누군가가 오프라인으로 디스크에 접근하여 데이터를 읽을 수 없도록 한다. 따라서 기기를 도난당하거나 분실했을 때 유용하게 사용될 수 있다.
1. BitLocker 암호화 여부 확인
보통 NTFS BR 영역은 헤더에 OEM ID로 NTFS 글자가 있다.
하지만 BitLocker로 암호화 된 경우 FVE-FS(Full Volume Encryption File System)라는 문자열이 식별된다.
# 2. Keys
FVEK (Full Volume Encryption Key)
실제 디스크를 암호화할 때 사용되는 256비트 크기의 키로 VMK로 암호화 되어 디스크에 저장된다.
BitLocker 메타데이터에 암호화된 상태로 저장된다.
VMK (Volume Master Key)
FVEK를 암호화할때 사용되는 키 FVEK와 동일하게 BitLocker 메타데이터에 암호화된 상태로 저장된다.
Protector (보호기)에 의해 보호되고 있다.
사용된 암호화 방식에 따라 키 길이가 달라진다.
- AES 128-bit: 128 비트
- AES 256-bit: 256 비트
Recovery key (복구키)
암호화된 데이터를 해제하기 위한 48자리 숫자로, 모든 숫자는 11로 나누어 떨어지고 나머지는 0이다.
숫자를 11로 나누면 16비트 값이 나오고, 이 16비트 값이 모여 128비트 키를 구성한다.
BitLocker 보호가 일시 중단된 상태일 때 Clear Key와 함께 값을 확보할 수 있다.
Clear Key
BitLocker 보호가 일시 중단된 상태일 때 암호화 되어 있는 디스크를 복호화할 수 있는 256비트 키로 BitLocker 메타데이터 영역에 저장된다.
보호 일시 중단 상태에서 다시 보호가 재개되면 Clear Key는 제거된다.
최신 윈도우의 경우 설치만 해도 디스크가 BitLocker 암호화가 되어 있는데 보호 일시 중단 상태로 암호화는 되었지만 Clear Key 확보가 가능하다.
Startup Key
USB에 저장된 키로 컴퓨터를 킬 때마다 USB를 삽입해야 된다.
".BEK" 확장자를 가진 파일이다.
3. Protector(보호기)의 종류
- TPM (Trusted Platform Module chip)
- TPM이 있는 메인보드에 연결되어 있고 시스템 부팅 무결성이 유지되는 한 암호화된 드라이브에 액세스 가능
- TPM+PIN
- Startup key (on a USB drive)
- TPM+PIN+Startup key
- TPM+Startup key
- Password
- Recovery key (numerical password; on a USB drive)
- Recovery password (on a USB drive)
- Active Directory Domain Services (AD DS) account
- Clear Key
4. BitLocker 암호화 구조
사용자 데이터
↑ FVEK로 암호화
FVEK
↑ VMK로 암호화
VMK
↑ TPM, PIN, 복구 암호, Clear Key 등 Protector(보호기)로 보호
5. BitLocker 복호화 과정
-
암호화 된 VMK가 Protector에 의해 복호화
-
복호화 된 VMK를 이용해 FVEK 복호화
-
복호화 된 FVEK를 이용해 암호화 된 디스크 복호화
protector가 VMK 를 복호화 하는 과정은 Protector의 종류마다 다르며 TPM을 이용할 수도 있고, 사용자의 입력, 키 등을 통해 복호화 될 수도 있다.
# 6. Clear Key 확보 실습
BitLocker 보호 중단 상태이거나, 윈도우 설치 이후 한번도 BitLocker를 활성화 하지 않았다면 디스크는 암호화 되어 있지만 Clear Key를 확보해서 디스크를 복호화할 수 있다. Clear Key는 FVE metadata block의 VMK entry에서 entry type=2, value type=8인 값들 중 Key protection types가 0인 경우를 찾아내면 된다. FVE metadata block은 총 3개가 있으며, 모두 동일한 정보(동일한 바이트 X)를 담고 있다. 3개가 있는 이유는 디스크 손상 시에도 암호화 자료에 접근할 수 있도록 보장하는 것으로 추정된다.
아래는 BitLocker Volume과 FVE Metadata의 구조를 표현한 내용이다.
FVE Metadata block 내에는 여러개의 entry가 존재하고, entry 안에는 또 다른 entry가 들어갈 수 있다.
실습에서 활용할 BitLocker의 구조들은 아래 링크를 참고하거나 LLM을 통해 학습할 수 있었다.
https://github.com/libyal/libbde/blob/main/documentation/BitLocker Drive Encryption (BDE) format.asciidoc
실습
BitLocker로 암호화 된 볼륨으로 접근하면 FVE metadata block 1, 2, 3 offset을 확보할 수 있다.
metadata block 1로 이동해보면 FVE metadata block header, metadata header, metadata entry를 확인할 수 있다.
clear key는 VMK 엔트리 내부에서 확인할 수 있다. 따라서 VMK 엔트리를 찾아내야 된다.
VMK 엔트리는 entry type=2, value type=8을 가지고 있다.
찾던 중 0x1040C408 주소에서 VMK 엔트리에 해당하는 값을 찾았다.
하지만 Protection Type이 0x100으로 TPM 보호기 관련 데이터이다.
이렇게 엔트리 크기만큼 앞으로 전진하면서 Clear Key 조건을 만족하는 엔트리를 찾아내야 한다.
계속 찾다보니 Protection Type이 0인 엔트리를 발견했다.
해당 엔트리의 하위 엔트리까지 나눠보면 아래와 같다.
하위 엔트리의 구조를 분석해보면 아래와 같다.
Key algorithm은 0x2000으로 AES-CCM 256 bit encryption 방식이다.
그리고 그 아래 32 바이트 값은 Clear key이며, 해당 값으로 이 엔트리의 하위 엔트리 50 bytes 값을 복호화 할 수 있다.
Clear key는 다른 암호화 복구 프로그램에서 출력된 결과값과 동일했다.
하위 엔트리 50 bytes는 VMK 가 포함된 엔트리로 위에서 확보한 ClearKey를 이용해 복호화할 수 있다.
