BitLocker 복구 가이드
IT 전문가를 위한 이 항목에서는 AD DS에서 BitLocker 키를 복구하는 방법에 대해 설명합니다.
조직은 AD DS(Active Directory 도메인 서비스)에 저장된 BitLocker 복구 정보를 사용하여 BitLocker로 보호되는 데이터에 액세스할 수 있습니다. BitLocker 배포를 계획하는 동안 BitLocker에 대한 복구 모델을 만드는 것이 좋습니다.
이 문서에서는 BitLocker 복구 정보를 자동으로 백업하기 위해 AD DS를 설정하는 방법과 어떤 종류의 복구 정보가 AD DS에 저장되는지 알고 있음을 전제로 합니다.
이 문서에서는 BitLocker 복구 정보를 저장하기 위해 AD DS를 구성하는 방법은 자세하게 설명하지 않습니다.
이 문서에는 다음과 같은 항목이 포함되어 있습니다.
BitLocker 복구란?
복구 테스트
복구 프로세스 계획
추가 복구 정보 사용
복구 암호 재설정
BitLocker 키 패키지 검색
BitLocker 복구란?
BitLocker 복구는 정상적으로 드라이브의 잠금을 해제할 수 없는 이벤트에서 BitLocker로 보호되는 드라이브에 대한 액세스를 복원할 수 있는 프로세스입니다. 복구 시나리오에서는 드라이브에 대한 액세스를 복원하기 위해 다음 옵션이 있습니다.
사용자가 복구 암호를 제공할 수 있습니다. 조직이 사용자에게 복구 암호를 인쇄하거나 저장하는 것을 허용하는 경우 사용자는 인쇄하거나 USB 드라이브 또는 온라인 Microsoft 계정에 저장한 48자리 복구 암호를 입력할 수 있습니다. (온라인 Microsoft 계정에 복구 암호를 저장하는 것은 도메인의 구성원이 아닌 PC에서 BitLocker를 사용하는 경우에만 허용됩니다).
데이터 복구 에이전트는 해당 자격 증명을 사용하여 드라이브의 잠금을 해제할 수 있습니다. 드라이브가 운영 체제 드라이브인 경우 드라이브를 다른 컴퓨터의 데이터 드라이브로 탑재해야 데이터 복구 에이전트가 해당 드라이브의 잠금을 해제할 수 있습니다.
도메인 관리자가 AD DS에서 복구 암호를 얻어서 사용하여 드라이브의 잠금을 해제할 수 있습니다. 필요한 경우 IT 전문가가 해당 조직의 드라이브에 대한 복구 암호를 얻을 수 있는 방법을 제공하기 위해 AD DS에 복구 암호를 저장하는 것이 좋습니다. 이 방법을 사용하려면 로컬 그룹 정책 편집기의 컴퓨터 구성\관리 템플릿\Windows 구성 요소\BitLocker 드라이브 암호화\운영 체제 드라이브에 있는 BitLocker 그룹 정책 설정 BitLocker로 보호되는 운영 체제 드라이브를 복구할 수 있는 방법 선택에서 이 복구 방법을 사용하도록 설정했어야 합니다. 자세한 내용은 BitLocker 그룹 정책 설정을 참조하세요.
BitLocker 복구가 발생하는 이유
아래 목록에는 운영 체제 드라이브를 시작할 때 BitLocker에서 복구 모드를 시작하도록 하는 특정 이벤트의 예가 나와 있습니다.
BitLocker 또는 장치 암호화를 사용하는 PC에서 공격이 탐지되면 장치가 즉시 다시 부팅되고 BitLocker 복구 모드로 전환됩니다. 이 기능을 활용하기 위해 관리자는 로컬 그룹 정책 편집기의 \Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options에 있는 대화형 로그온: 컴퓨터 계정 잠금 임계값 그룹 정책 설정을 설정하거나 Exchange ActiveSync의 MaxFailedPasswordAttempts 정책을 사용하여(또한 Windows Intune을 통해서도 구성 가능) 장치가 장치 잠금으로 전환되기 전의 실패한 암호 시도 수를 제한할 수 있습니다.
하드 드라이브보다 먼저 다른 드라이브를 부팅하도록 부팅 순서를 변경하는 경우
BIOS 부팅 순서에서 CD 또는 DVD 드라이브를 하드 드라이브 앞으로 설정한 다음 CD 또는 DVD를 삽입하거나 제거하는 경우
하드 드라이브에서 부팅하기 전에 네트워크 드라이브에서 부팅이 실패하는 경우
휴대용 컴퓨터를 도킹하거나 도킹을 해제하는 경우 컴퓨터 제조업체와 BIOS에 따라서는 휴대용 컴퓨터의 도킹 상황이 시스템 측정의 일부분인 경우가 있으며, 시스템 상태를 확인하고 BitLocker 잠금을 해제하려면 해당 상황이 일치해야 합니다. 즉, BitLocker를 설정할 때 휴대용 컴퓨터가 도킹 스테이션에 연결되어 있었다면 BitLocker 잠금을 해제할 때도 휴대용 컴퓨터가 도킹 스테이션에 연결되어 있어야 합니다. 반대로 BitLocker를 설정할 때 휴대용 컴퓨터가 도킹 스테이션에 연결되어 있지 않았다면 BitLocker 잠금을 해제할 때도 도킹 스테이션에서 휴대용 컴퓨터 연결을 해제해야 합니다.
디스크의 NTFS 파티션 테이블 변경(주 파티션 작성, 삭제, 크기 변경 포함)
PIN(개인 식별 번호)을 너무 많이 잘못 입력해서 TPM의 Anti-Hammering 논리가 활성화되는 경우. Anti-Hammering 논리는 일정 시간이 경과할 때까지 PIN 입력을 허용하지 않음으로써 PIN에 대한 무차별 암호 대입 공격(brute force attack)의 난이도와 비용을 높이는 소프트웨어 및 하드웨어 방법입니다.
TPM 대신 USB 기반 키를 사용하는 경우 BIOS 또는 UEFI 펌웨어에서 사전 부팅 환경의 USB 장치 읽기 지원을 해제하는 경우
TPM을 끄거나 사용하지 않도록 설정하거나 비활성화하거나 제거한 경우
BIOS 또는 UEFI 펌웨어 업그레이드 등의 중요한 초기 시작 구성 요소를 업그레이드하여 관련 부팅 측정값이 변경되는 경우
PIN 인증을 사용하도록 설정한 상태에서 PIN을 잊어 버린 경우
옵션 ROM 펌웨어를 업데이트하는 경우
TPM 펌웨어를 업그레이드하는 경우
하드웨어를 추가하거나 제거하는 경우(예를 들면 일부 PCMIA 무선 카드를 비롯한 새 카드를 컴퓨터에 삽입하는 등의 경우)
휴대용 컴퓨터의 스마트 배터리를 제거 또는 삽입하거나 배터리가 완전 방전되는 경우
디스크의 마스터 부트 레코드가 변경되는 경우
디스크의 부팅 관리자가 변경되는 경우
운영 체제에서 TPM을 숨기는 경우 일부 BIOS 또는 UEFI 설정을 사용하여 운영 체제에 TPM이 열거되지 않도록 할 수 있습니다. 이 옵션을 구현하면 TPM을 운영 체제에서 숨길 수 있습니다. TPM이 숨겨지면 BIOS 및 UEFI 보안 시작이 사용할 수 없도록 설정되어 TPM이 소프트웨어의 명령에 응답하지 않습니다.
다른 키보드를 사용해 PIN이 올바르게 입력되지 않았거나 키보드 맵이 사전 부팅 환경에서 가정하는 키보드 맵과 일치하지 않는 경우 이 경우 향상된 PIN을 입력하지 못할 수 있습니다.
TPM 유효성 검사 프로필에서 사용되는 PCR(플랫폼 구성 레지스터)을 수정하는 경우 예를 들어 **PCR[1]**을 포함하면 BitLocker가 BIOS 설정에서 대부분의 변경 내용을 측정하므로 부팅이 필요하지 않은 BIOS 설정 변경을 수행할 때도 BitLocker가 복구 모드로 설정됩니다.
참고
일부 컴퓨터에는 PCR[2] 등 특정 PCR에 대한 측정을 건너뛰는 BIOS 설정이 있습니다. BIOS에서 이 설정을 변경하면 PCR 측정이 달라지므로 BitLocker가 복구 모드로 설정됩니다.
BitLocker로 보호되는 드라이브를 새 컴퓨터로 이동하는 경우
마더보드를 새 TPM이 있는 새 마더보드로 업그레이드하는 경우
시작 키 인증을 사용하도록 설정했는데 시작 키가 들어 있는 USB 플래시 드라이브를 분실한 경우
TPM 자체 테스트에 실패한 경우
클라이언트 컴퓨터의 관련 TCG(신뢰할 수 있는 컴퓨팅 그룹) 표준 규격이 아닌 BIOS, UEFI 펌웨어 또는 옵션 ROM 구성 요소를 사용하는 경우 예를 들어 비규격 구현은 TPM 측정에서 시간 등의 휘발성 데이터가 기록되어 각 시작 시 측정값이 달라져 BitLocker가 복구 모드로 시작될 수 있습니다.
TPM의 저장소 루트 키에 대한 사용 권한 부여를 0이 아닌 값으로 변경하는 경우
참고
BitLocker TPM 초기화 프로세스에서는 사용 권한 부여 값을 0으로 설정하므로, 다른 사용자나 프로세스에서 이 값을 명시적으로 변경한 경우에 해당합니다.
Windows 부팅 관리자(Bootmgr)에서 테스트 서명을 사용하도록 설정하거나 코드 무결성 검사를 사용하지 않도록 설정하는 경우
부팅 프로세스 중에 F8 또는 F10 키를 누르는 경우
비디오 또는 네트워크 카드와 같은 추가 기능 카드를 추가/제거하거나 추가 기능 카드에서 펌웨어를 업그레이드하는 경우
부팅 프로세스 중에 BIOS 바로 가기 키를 사용하여 부팅 순서를 하드 드라이브 이외의 항목으로 변경하는 경우
참고
복구를 시작하기 전에 복구를 발생한 원인을 확인하는 것이 좋습니다. 그러면 나중에 문제가 다시 발생하는 것을 방지할 수 있습니다. 예를 들어 공격자가 실제 액세스 권한을 얻어 컴퓨터를 수정한 것을 확인한 경우 새 보안 정책을 만들어 누가 실제 존재했었는지 추적할 수 있습니다. 복구 암호를 PC에 대한 액세스를 복구하는 데 사용한 후에, BitLocker는 암호화 키를 측정된 구성 요소의 현재 값으로 다시 봉인합니다.
알려진 하드웨어 또는 펌웨어 업그레이드 등 계획된 시나리오의 경우 BitLocker 보호를 임시로 일시 중단하여 복구를 시작하는 것을 방지할 수 있습니다. 일시 중단된 BitLocker가 드라이브를 완전히 암호화한 상태로 유지하기 때문에 계획된 작업이 완료된 후 관리자는 BitLocker 보호를 빠르게 다시 시작할 수 있습니다. 또한 일시 중단 및 다시 시작 기능을 사용하면 복구 키 입력을 요구하지 않고 암호화 키를 다시 봉인합니다.
참고
Manage-bde 명령줄 도구를 사용하여 다시 부팅 수를 지정하지 않으면 PC를 다시 부팅할 때 일시 중단된 BitLocker가 자동으로 보호를 다시 시작합니다.
소프트웨어 유지 관리를 위해 컴퓨터를 다시 시작해야 하고 2단계 인증을 사용하고 있는 경우 컴퓨터에 추가 인증 방법을 제공하는 온 프레미스 사용자가 없을 때 BitLocker 네트워크 잠금 해제를 사용하도록 설정하여 보조 인증 요소를 제공할 수 있습니다.
계획하지 않았거나 원치 않는 동작의 컨텍스트에서 복구를 설명했지만 액세스 제어를 관리하기 위해 의도한 프로덕션 시나리오로 복구를 발생시킬 수도 있습니다. 예를 들어 기업에서 데스크톱 또는 노트북 컴퓨터를 다른 부서 또는 직원에게 재배포하는 경우 컴퓨터를 새 사용자에게 제공하기 전에 강제로 BitLocker를 복구할 수 있습니다.
복구 테스트
철저한 BitLocker 복구 프로세스를 만들려면 복구 프로세스가 어떻게 작동하는지 최종 사용자(복구 암호를 위해 기술 지원팀을 호출하는 사람)와 관리자(최종 사용자가 복구 암호를 받을 수 있도록 돕는 사람) 양쪽에 대해 테스트하는 것이 좋습니다. Manage-bde의 –forcerecovery 명령을 사용하면 사용자가 복구 상황에 처하기 전에 먼저 쉽게 복구 프로세스를 단계별로 실행할 수 있습니다.
로컬 컴퓨터에 대한 복구를 강제 실행하려면
시작 단추를 클릭하고 검색 시작 상자에서 cmd을 입력하고 cmd.exe를 마우스 오른쪽 단추로 클릭한 다음 관리자 권한으로 실행을 클릭합니다.
명령 프롬프트에서 다음 명령을 입력한 다음 Enter 키를 누릅니다.
manage-bde -forcerecovery <Volume>
원격 컴퓨터에 대한 복구를 강제 실행하려면
시작 화면에서 cmd.exe를 입력하고 관리자 권한으로 실행을 클릭합니다.
명령 프롬프트에서 다음 명령을 입력한 다음 Enter 키를 누릅니다.
manage-bde. -ComputerName <ComputerName>-forcerecovery <Volume>
참고
*<ComputerName>*은 원격 컴퓨터의 이름을 나타냅니다. *<Volume>*은 BitLocker로 보호되는 원격 컴퓨터의 볼륨을 나타냅니다.
복구 프로세스 계획
BitLocker 복구 프로세스를 계획하는 경우 먼저 중요한 정보를 복구하기 위한 조직의 현재 모범 사례를 참조합니다. 예: 기업은 분실한 Windows 암호를 어떻게 처리하나요? 조직에서 스마트 카드 PIN 초기화를 어떻게 수행하나요? 이러한 모범 사례 및 관련 리소스(사람 및 도구)를 사용하여 BitLocker 복구 모델을 구성할 수 있습니다.
Windows 10, Windows 8 또는 Windows 7 운영 체제 및 Windows to Go를 실행하는 많은 컴퓨터 및 이동식 장치에서 데이터를 보호하기 위해 BitLocker 드라이브 암호화와 BitLocker To Go를 사용할 수 밖에 없는 조직은 Microsoft Software Assurance용 MDOP(Microsoft Desktop Optimization Pack)에 포함되어 있는 MBAM(Microsoft BitLocker Administration and Monitoring) 도구 버전 2.0의 사용을 고려해야 합니다. MBAM을 사용하면 BitLocker 구현의 배포 및 관리가 더 쉬워지고 관리자가 운영 체제 및 고정 드라이브에 대한 암호화를 프로비전하고 모니터링할 수 있습니다. MBAM은 고정 드라이브를 암호화하기 전에 사용자에게 메시지를 표시합니다. 또한 MBAM은 고정 및 이동식 드라이브의 복구 키를 관리하기 때문에 복구 관리가 더 쉽습니다. MBAM은 Microsoft System Center 배포의 일부 또는 독립 실행형 솔루션으로 사용할 수 있습니다. 자세한 내용은 Microsoft BitLocker 관리 및 모니터링을 참조하세요.
BitLocker 복구가 시작되면 사용자가 복구 암호를 사용하여 암호화된 데이터에 대한 액세스를 잠금 해제할 수 있습니다. 조직에 대한 자체 복구 및 복구 암호 검색 방법 모두를 고려해야 합니다.
복구 프로세스를 결정할 때 다음을 수행해야 합니다.
복구 암호를 검색하는 방법을 익숙하게 숙지합니다. 참고 항목:
자체 복구
복구 암호 검색
복구 발생 사유 분석 및 복구 암호 재설정을 비롯한 일련의 사후 복구 단계를 확인합니다. 참고 항목:
- 사후 복구 분석
자체 복구
경우에 따라 사용자는 인쇄물 또는 USB 플래시 드라이브에 복구 암호를 가지고 있을 수 있으므로 자체 복구를 수행할 수 있습니다. 조직은 자체 복구에 대한 정책을 만드는 것이 좋습니다. 자체 복구에 USB 플래시 드라이브에 저장된 암호 또는 복구 키를 사용하는 것이 포함된 경우 사용자는 PC와 동일한 위치에 USB 플래시 드라이브를 보관(특히 여행 중에)하지 말라는 경고를 받게 됩니다. 예를 들어 PC와 복구 항목이 같은 가방 안에 있는 경우에는 무단 사용자가 매우 쉽게 PC에 대한 액세스 권한을 얻을 수 있습니다. 고려할 만한 다른 정책은 사용자가 자체 복구를 수행하기 전이나 후에 근본 원인을 식별할 수 있도록 기술 지원팀에 연락하게 하는 것입니다.
복구 암호 검색
사용자가 인쇄물로 또는 USB 플래시 드라이브에 복구 암호를 가지고 있지 않은 경우에는 온라인 소스에서 복구 암호를 검색할 수 있어야 합니다. PC가 도메인의 구성원이면 복구 암호를 AD DS에 백업할 수 있습니다. 그러나 이는 기본적으로 수행되는 작업이 아니기 때문에 PC에서 BitLocker를 사용하도록 설정하기 전에 적절한 그룹 정책 설정을 구성해야 합니다. BitLocker 그룹 정책 설정은 컴퓨터 구성\관리 템플릿\Windows 구성 요소\BitLocker 드라이브 암호화의 로컬 그룹 정책 편집기 또는 GPMC(그룹 정책 관리 콘솔)에 있습니다. 다음 정책 설정은 인증 방법이 실패하거나 사용될 수 없는 경우 BitLocker로 보호되는 드라이브에 대한 액세스 권한을 복원하는 데 사용할 수 있는 복구 방법을 정의합니다.
BitLocker로 보호되는 운영 체제 드라이브를 복구하는 방법 선택
BitLocker로 보호되는 고정 드라이브를 복구하는 방법 선택
BitLocker로 보호되는 이동식 드라이브를 복구하는 방법 선택
이러한 각 정책에서 Active Directory 도메인 서비스에 BitLocker 복구 정보 저장을 선택한 다음 AD DS(Active Directory 도메인 서비스)에 저장할 BitLocker 복구 정보를 선택합니다. 컴퓨터가 도메인에 연결되고 드라이브의 BitLocker 복구 정보가 AD DS에 성공적으로 백업될 때까지 사용자가 BitLocker를 사용하지 못하도록 하려면 복구 정보가 AD DS에 저장될 때까지 BitLocker 사용 안 함 확인란을 선택합니다.
참고
PC가 작업 그룹에 속해 있는 경우 사용자는 해당 온라인 Microsoft 계정으로 해당 BitLocker 복구 암호를 저장하는 것이 좋습니다. 복구가 필요한 이벤트에서 데이터에 대한 액세스를 잃지 않도록 BitLocker 복구 암호를 온라인으로 복사해 두는 것이 좋습니다.
Active Directory 사용자 및 컴퓨터 도구용 BitLocker 복구 암호 뷰어를 사용하면 도메인 관리자가 Active Directory에 있는 특정 컴퓨터 개체의 BitLocker 복구 암호를 볼 수 있습니다.
다음 목록은 복구 암호 검색을 위해 고유한 복구 프로세스를 만들기 위한 템플릿으로 사용할 수 있습니다. 이 샘플 프로세스는 Active Directory 사용자 및 컴퓨터 도구용 BitLocker 복구 암호 뷰어를 사용합니다.
사용자의 컴퓨터 이름 기록
사용자의 ID 확인
AD DS에서 복구 암호 찾기
복구가 발생한 이유를 확인하기 위한 정보 수집
사용자에게 복구 암호 제공
사용자의 컴퓨터 이름 기록
사용자의 컴퓨터 이름을 사용하여 AD DS에서 복구 암호를 찾을 수 있습니다. 사용자가 컴퓨터의 이름을 모르는 경우 사용자에게 BitLocker 드라이브 암호화 암호 항목 사용자 인터페이스에 있는 드라이브 레이블의 첫 번째 단어 읽기를 요청합니다. 이는 BitLocker를 사용하도록 설정했을 때의 컴퓨터 이름이며 아마도 컴퓨터의 현재 이름입니다.
사용자의 ID 확인
복구 암호를 요청하는 사람이 해당 컴퓨터의 실제 권한 있는 사용자인지 확인해야 합니다. 또한 사용자가 제공한 이름을 사용하는 컴퓨터가 사용자에게 속한 것인지 확인하려고 할 수도 있습니다.
AD DS에서 복구 암호 찾기
AD DS에서 일치하는 이름을 가진 컴퓨터 개체를 찾습니다. 컴퓨터 개체 이름이 AD DS 글로벌 카탈로그에 나열되어 있으므로 다중 도메인 포리스트가 있는 경우에도 개체를 찾을 수 있어야 합니다.
여러 개의 복구 암호
여러 개의 복구 암호가 AD DS의 컴퓨터 개체에 저장된 경우 BitLocker 복구 정보 개체의 이름에는 해당 암호가 만들어진 날짜가 포함되어 있습니다.
언제라도 제공할 암호를 잘 모르고 있거나, 잘못된 암호를 제공할 수 있다고 생각되는 경우에는 사용자에게 복구 콘솔에 표시된 8자 암호 ID 읽기를 요청합니다.
암호 ID가 AD DS에 저장된 각 복구 암호와 연결된 고유한 값이므로, 이 ID를 사용하는 쿼리를 실행하면 암호화된 볼륨의 잠금을 해제하기 위한 올바른 암호를 찾을 수 있습니다.
복구가 발생한 이유를 확인하기 위한 정보 수집
사용자에게 복구 암호를 제공하기 전에 사후 복구 분석 중 근본 원인을 분석하기 위해, 복구가 필요했던 이유 확인에 도움이 되는 모든 정보를 수집해야 합니다. 사후 복구 분석에 대한 자세한 내용은 사후 복구 분석을 참조하세요.
사용자에게 복구 암호 제공
복구 암호의 길이는 48자리이기 때문에 사용자는 이 암호를 적어 두거나 다른 컴퓨터에 입력해서 암호를 기록해야 할 수 있습니다. MBAM을 사용하는 경우 제어되지 않는 암호와 관련된 보안 위험을 방지하기 위해 MBAM 데이터베이스에서 복구된 후 복구 암호가 다시 생성됩니다.
참고
48자리 복구 암호는 길고 숫자 조합을 포함하고 있으므로 사용자가 암호를 잘못 듣거나 잘못 입력할 수 있습니다. 부팅 시간 복구 콘솔은 기본 제공 체크섬 번호를 사용하여 48자리 복구 암호의 각 6자리 블록에서 입력 오류를 검색하고 사용자에게 이러한 오류를 수정할 수 있는 기회를 제공합니다.
사후 복구 분석
복구 암호를 사용하여 볼륨의 잠금이 해제된 경우 이벤트가 이벤트 로그에 기록되고 현재 구성에 맞게 TPM에서 플랫폼 유효성 검사 측정이 재설정됩니다. 볼륨의 잠금을 해제한다는 것은 암호화 키가 릴리스되어 데이터가 볼륨에 기록될 때 즉석에서 암호화할 준비가 되어 있고 데이터를 볼륨에서 읽을 때 즉석에서 암호를 해독할 준비가 되어 있다는 것입니다. 볼륨의 잠금이 해제된 후에는 액세스 권한이 부여된 방식에 관계 없이 BitLocker가 동일한 방식으로 동작합니다.
컴퓨터가 복구 암호 잠금 해제를 반복하고 있는 경우 관리자가 사후 복구 분석을 수행하여 복구의 근본 원인을 확인하고 BitLocker 플랫폼 유효성 검사를 새로 고칠 수 있게 하려고 할 수 있습니다. 그러면 컴퓨터가 시작할 때마다 사용자는 더 이상 복구 암호를 입력할 필요가 없습니다. 참고 항목:
복구의 근본 원인 확인
BitLocker 보호 새로 고침
복구의 근본 원인 확인
사용자가 드라이브를 복구해야 하는 경우 복구를 시작한 근본 원인을 가능한 한 빨리 확인하는 것이 중요합니다. 제대로 컴퓨터의 상태를 분석하고 변조를 감지하면 기업 보안에 광범위한 영향을 미치는 위협을 발견할 수 있습니다.
경우에 따라 관리자가 복구의 원인을 원격으로 조사하는 동안 최종 사용자는 근본 원인을 추가로 분석하기 위해 복구한 드라이브가 있는 컴퓨터를 현장에 가져와야 할 수도 있습니다.
조직에 대해 다음 질문을 검토하고 대답합니다.
어느 BitLocker 보호 모드(TPM, TPM+PIN, TPM+시작 키, 시작 키만 사용)를 적용하고 있나요? PC에서 어느 PCR 프로필을 사용 중인가요?
사용자가 단순히 PIN을 잊었거나 시작 키를 분실했나요? 토큰을 분실한 경우 토큰이 어디에 있을 수 있나요?
TPM 모드를 적용한 경우 부팅 파일 변경으로 인해 복구가 발생했나요?
부팅 파일 변경으로 복구가 발생한 경우 이는 의도한 사용자 작업(예: BIOS 업그레이드) 때문인가요? 아니면, 악성 소프트웨어 때문인가요?
사용자가 언제 마지막으로 컴퓨터를 성공적으로 시작할 수 있었고 그 이후 컴퓨터에 무슨 일이 생긴 것 같나요?
마지막으로 시작한 이후 사용자가 악성 소프트웨어를 만나거나 컴퓨터를 무인 상태로 둔 적이 있나요?
이러한 질문의 대답을 참고하려면 BitLocker 명령줄 도구를 사용하여 현재 구성 및 보호 모드를 확인합니다(예: manage-bde -status). 이벤트 로그를 검색하여 복구가 시작된 이유를 나타낼 수 있는 이벤트를 찾습니다(예: 부팅 파일 변경이 발생한 경우). 이러한 기능은 모두 원격으로 수행할 수 있습니다.
근본 원인 해결
복구 발생의 원인을 식별한 후 BitLocker 보호를 초기화하여 시작할 때마다 복구하는 것을 방지할 수 있습니다.
이 초기화에 대한 세부 정보는 복구의 근본 원인에 따라 다를 수 있습니다. 근본 원인을 확인할 수 없는 경우이거나 악성 소프트웨어 또는 루트킷이 컴퓨터를 감염시킨 경우에는 기술 지원팀에서 모범 사례 바이러스 정책을 적용하여 적절하게 대응해야 합니다.
참고
BitLocker를 일시 중단하고 다시 시작하여 BitLocker 유효성 검사 프로필 초기화를 수행할 수 있습니다.
알 수 없는 PIN
시작 키 분실
부팅 파일 변경
알 수 없는 PIN
사용자가 PIN을 잊은 경우 컴퓨터가 다시 시작할 때마다 BitLocker가 복구를 초기화하지 않도록 컴퓨터에 로그온한 상태에서 PIN을 초기화해야 합니다.
알 수 없는 PIN으로 인해 계속되는 복구를 방지하려면
복구 암호를 사용하여 컴퓨터의 잠금을 해제합니다.
PIN을 다시 설정합니다.
드라이브를 마우스 오른쪽 단추로 클릭한 다음 PIN 변경을 클릭합니다.
BitLocker 드라이브 암호화 대화 상자에서 잊어버린 PIN 원래대로 설정을 클릭합니다. 관리자 계정으로 로그인하지 않은 경우 이때 관리자 자격 증명을 제공해야 합니다.
PIN 초기화 대화 상자에서 사용할 새 PIN을 제공하고 확인한 다음 마침을 클릭합니다.
드라이브 잠금을 해제한 다음에 새 PIN을 사용합니다.
시작 키 분실
시작 키가 있는 USB 플래시 드라이브를 분실한 경우 복구 키를 사용하여 드라이브의 잠금을 해제한 다음 새 시작 키를 만들어야 합니다.
분실한 시작 키로 인해 계속되는 복구를 방지하려면
분실한 시작 키가 있는 컴퓨터에 관리자로 로그온합니다.
BitLocker 관리를 엽니다.
시작 키 복제를 클릭하고 키를 기록할 클린 USB 드라이브를 삽입한 다음 저장을 클릭합니다.
부팅 파일 변경
펌웨어를 업데이트한 경우 이 오류가 발생할 수 있습니다. 모범 사례로, 펌웨어를 변경하기 전에 BitLocker를 일시 중단한 다음 업데이트가 완료된 후 보호를 다시 시작해야 합니다. 그러면 컴퓨터가 복구 모드로 전환되지 않습니다. 그러나 BitLocker 보호가 설정된 상태에서 변경이 이루어진 경우 복구 암호를 사용하여 컴퓨터에 로그온하기만 하면 복구가 다음에 발생하지 않도록 플랫폼 유효성 검사 프로필이 업데이트됩니다.
Windows RE 및 BitLocker
Windows RE(복구 환경)를 사용하여 BitLocker 또는 장치 암호화로 보호된 드라이브에 대한 액세스를 복구할 수 있습니다. 두 가지가 실패한 후 PC를 부팅할 수 없는 경우에는 시동 복구가 자동으로 시작됩니다. 부팅 실패로 인해 시동 복구가 자동으로 실행되는 경우 부팅 로그 또는 사용 가능한 크래시 덤프가 손상된 특정 파일을 가리키면서 운영 체제 및 드라이버 파일 복구만 실행합니다. PCR[7]에 특정 TPM 측정을 지원하는 펌웨어가 포함된 Windows 8.1 이상의 장치에서는 TPM이 Windows RE가 신뢰할 수 있는 운영 환경인지 확인할 수 있으며 Windows RE가 수정되지 않은 경우 BitLocker로 보호되는 드라이브의 잠금을 해제합니다. Windows RE 환경이 수정된 경우에는(예:TPM을 사용하지 않도록 설정) BitLocker 복구 키가 제공될 때까지 드라이브는 잠긴 상태로 유지됩니다. 시동 복구가 PC에서 자동으로 실행될 수 없고 대신 복구 디스크에서 Windows RE가 수동으로 시작된 경우에는, BitLocker로 보호되는 드라이브를 잠금 해제하기 위해 BitLocker 복구 키를 제공해야 합니다.
추가 복구 정보 사용
48자리 BitLocker 복구 암호 외에도 다른 종류의 복구 정보가 Active Directory에 저장됩니다. 이 섹션에서는 이러한 추가 정보를 사용할 수 있는 방법을 설명합니다.
BitLocker 키 패키지
이 문서의 앞 부분에서 설명한 복구 방법이 볼륨을 잠금 해제하지 않는 경우 BitLocker 복구 도구를 사용하여 블록 수준에서 볼륨의 암호를 해독할 수 있습니다. 이 도구는 BitLocker 키 패키지를 사용하여 심각하게 손상된 드라이브의 암호화된 데이터를 복구할 수 있습니다. 그러면 올바른 복구 암호가 손상된 볼륨의 잠금을 해제하지 못한 경우에도 이 복구된 데이터를 사용하여 암호화된 데이터를 지킬 수 있습니다. 그래도 복구 암호는 저장하는 것이 좋습니다. 해당 복구 암호가 없으면 키 패키지를 사용할 수 없습니다.
참고
BitLocker 키 패키지를 사용하려면 BitLocker 복구 도구 repair-bde를 사용해야 합니다.
BitLocker 키 패키지는 기본적으로 저장되지 않습니다. AD DS에서 복구 암호와 함께 패키지를 저장하려면 복구 방법을 제어하는 그룹 정책 설정의 복구 암호 및 키 패키지 백업 옵션을 선택해야 합니다. 또한 작업 중인 볼륨에서 키 패키지를 내보낼 수도 있습니다. 키 패키지를 내보내는 방법에 대한 자세한 내용은 BitLocker 키 패키지 검색을 참조하세요.
복구 암호 재설정
복구 암호를 제공하고 사용한 후에는 이를 무효화해야 합니다. 또한 어떤 이유로 기존 복구 암호를 의도적으로 무효화하려는 경우에도 그렇게 해야 합니다.
다음 두 가지 방법으로 복구 암호를 재설정할 수 있습니다.
Manage-bde 사용 manage-bde를 사용하여 이전 복구 암호를 제거하고 새 복구 암호를 추가할 수 있습니다. 절차를 통해 이 방법에 대한 명령 및 구문을 식별합니다.
스크립트 실행 스크립트를 실행하여 볼륨의 암호를 해독하지 않고 암호를 재설정할 수 있습니다. 해당 절차의 샘플 스크립트로 이 기능을 보여 줍니다. 샘플 스크립트는 새 복구 암호를 만들고 다른 모든 암호를 무효화합니다.
Manage-bde를 사용하여 복구 암호를 재설정하려면
이전 복구 암호를 제거합니다.
Manage-bde –protectors –delete C: –type RecoveryPassword
새 복구 암호를 추가합니다.
Manage-bde –protectors –add C: -RecoveryPassword
새 복구 암호의 ID를 가져옵니다. 화면에서 복구 암호의 ID를 복사합니다.
Manage-bde –protectors –get C: -Type RecoveryPassword
새 복구 암호를 AD DS에 백업합니다.
Manage-bde –protectors –adbackup C: -id {EXAMPLE6-5507-4924-AA9E-AFB2EB003692}
경고
ID 문자열에 중괄호를 포함해야 합니다.
샘플 복구 암호 스크립트를 실행하려면
다음 샘플 스크립트를 VBScript 파일에 저장합니다. 예: ResetPassword.vbs
명령 프롬프트에서 다음과 유사한 명령을 입력합니다.
cscript ResetPassword.vbs
중요
이 샘플 스크립트는 C 볼륨에 대해서만 작동하도록 구성됩니다. 암호 재설정을 테스트하려는 볼륨에 맞도록 스크립트를 사용자 지정해야 합니다.
참고
원격 컴퓨터를 관리하기 위해 로컬 컴퓨터 이름 대신 원격 컴퓨터 이름을 지정할 수 있습니다.
다음 샘플 스크립트를 사용하여 복구 암호를 재설정하는 VBScript 파일을 만들 수 있습니다.
' Target drive letter
strDriveLetter = "c:"
' Target computer name
' Use "." to connect to the local computer
strComputerName = "."
' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------
strConnectionStr = "winmgmts:" _
& "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
& strComputerName _
& "\root\cimv2\Security\MicrosoftVolumeEncryption"
On Error Resume Next 'handle permission errors
Set objWMIService = GetObject(strConnectionStr)
If Err.Number <> 0 Then
WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
Wscript.Echo "Ensure that you are running with administrative privileges."
WScript.Quit -1
End If
On Error GoTo 0
strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)
If colTargetVolumes.Count = 0 Then
WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " & strDriveLetter & " on computer " & strComputerName & "."
WScript.Quit -1
End If
' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
set objVolume = objFoundVolume
Next
' objVolume is now our found BitLocker-capable disk volume
' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------
' Add a new recovery password, keeping the ID around so it doesn't get deleted later
' ----------------------------------------------------------------------------------
nRC = objVolume.ProtectKeyWithNumericalPassword("Recovery Password Refreshed By Script", , sNewKeyProtectorID)
If nRC <> 0 Then
WScript.Echo "FAILURE: ProtectKeyWithNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Removes the other, "stale", recovery passwords
' ----------------------------------------------------------------------------------
nKeyProtectorTypeIn = 3 ' type associated with "Numerical Password" protector
nRC = objVolume.GetKeyProtectors(nKeyProtectorTypeIn, aKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Delete those key protectors other than the one we just added.
For Each sKeyProtectorID In aKeyProtectorIDs
If sKeyProtectorID <> sNewKeyProtectorID Then
nRC = objVolume.DeleteKeyProtector(sKeyProtectorID)
If nRC <> 0 Then
WScript.Echo "FAILURE: DeleteKeyProtector on ID " & sKeyProtectorID & " failed with return code 0x" & Hex(nRC)
WScript.Quit -1
Else
' no output
'WScript.Echo "SUCCESS: Key protector with ID " & sKeyProtectorID & " deleted"
End If
End If
Next
WScript.Echo "A new recovery password has been added. Old passwords have been removed."
' - some advanced output (hidden)
'WScript.Echo ""
'WScript.Echo "Type ""manage-bde -protectors -get " & strDriveLetter & " -type recoverypassword"" to view existing passwords."
BitLocker 키 패키지 검색
추가 복구 정보 사용에서 설명한 대로 두 가지 방법을 사용하여 키 패키지를 검색할 수 있습니다.
이전에 저장한 키 패키지를 AD DS에서 내보냅니다. AD DS에 저장된 BitLocker 복구 암호에 대한 읽기 권한이 있어야 합니다.
새 키 패키지를 잠금 해제되고 BitLocker로 보호되는 볼륨에서 내보냅니다. 손상이 발생하기 전에 작업 볼륨에 대해 로컬 관리자 액세스 권한이 있어야 합니다.
다음 샘플 스크립트는 이전에 저장된 모든 키 패키지를 AD DS에서 내보냅니다.
샘플 키 패키지 검색 스크립트를 실행하려면
다음 샘플 스크립트를 VBScript 파일에 저장합니다. 예: GetBitLockerKeyPackageADDS.vbs
명령 프롬프트에서 다음과 유사한 명령을 입력합니다.
cscript GetBitLockerKeyPackageADDS.vbs -?
다음 샘플 스크립트를 사용하여 AD DS에서 BitLocker 키 패키지를 검색하는 VBScript 파일을 만들 수 있습니다.
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
Wscript.Echo "USAGE: GetBitLockerKeyPackageAD [Path To Saved Key Package] [Optional Computer Name]"
Wscript.Echo "If no computer name is specified, the local computer is assumed."
Wscript.Echo
Wscript.Echo "Example: GetBitLockerKeyPackageAD E:\bitlocker-ad-key-package mycomputer"
WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
Case 1
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strFilePath = args(0)
' Get the name of the local computer
Set objNetwork = CreateObject("WScript.Network")
strComputerName = objNetwork.ComputerName
End If
Case 2
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strFilePath = args(0)
strComputerName = args(1)
End If
Case Else
ShowUsage
End Select
' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the computer name
' --------------------------------------------------------------------------------
Function GetStrPathToComputer(strComputerName)
' Uses the global catalog to find the computer in the forest
' Search also includes deleted computers in the tombstone
Set objRootLDAP = GetObject("LDAP://rootDSE")
namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com
strBase = "<GC://" & namingContext & ">"
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
strFilter = "(&(objectCategory=Computer)(cn=" & strComputerName & "))"
strQuery = strBase & ";" & strFilter & ";distinguishedName;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 100
objCommand.Properties("Cache Results") = False
' Enumerate all objects found.
Set objRecordSet = objCommand.Execute
If objRecordSet.EOF Then
WScript.echo "The computer name '" & strComputerName & "' cannot be found."
WScript.Quit 1
End If
' Found object matching name
Do Until objRecordSet.EOF
dnFound = objRecordSet.Fields("distinguishedName")
GetStrPathToComputer = "LDAP://" & dnFound
objRecordSet.MoveNext
Loop
' Clean up.
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
End Function
' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------
Set objDSO = GetObject("LDAP:")
strPathToComputer = GetStrPathToComputer(strComputerName)
WScript.Echo "Accessing object: " + strPathToComputer
Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80
' --------------------------------------------------------------------------------
' Get all BitLocker recovery information from the Active Directory computer object
' --------------------------------------------------------------------------------
' Get all the recovery information child objects of the computer object
Set objFveInfos = objDSO.OpenDSObject(strPathToComputer, vbNullString, vbNullString, _
ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)
objFveInfos.Filter = Array("msFVE-RecoveryInformation")
' Iterate through each recovery information object and saves any existing key packages
nCount = 1
strFilePathCurrent = strFilePath & nCount
For Each objFveInfo in objFveInfos
strName = objFveInfo.Get("name")
strRecoveryPassword = objFveInfo.Get("msFVE-RecoveryPassword")
strKeyPackage = objFveInfo.Get("msFVE-KeyPackage")
WScript.echo
WScript.echo "Recovery Object Name: " + strName
WScript.echo "Recovery Password: " + strRecoveryPassword
' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strFilePathCurrent)) Then
WScript.Echo "The file " & strFilePathCurrent & " already exists. Please use a different path."
WScript.Quit -1
End If
' Save binary data to the file
SaveBinaryDataText strFilePathCurrent, strKeyPackage
WScript.echo "Related key package successfully saved to " + strFilePathCurrent
' Update next file path using base name
nCount = nCount + 1
strFilePathCurrent = strFilePath & nCount
Next
'----------------------------------------------------------------------------------------
' Utility functions to save binary data
'----------------------------------------------------------------------------------------
Function SaveBinaryDataText(FileName, ByteArray)
'Create FileSystemObject object
Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
'Create text stream object
Dim TextStream
Set TextStream = FS.CreateTextFile(FileName)
'Convert binary data To text And write them To the file
TextStream.Write BinaryToString(ByteArray)
End Function
Function BinaryToString(Binary)
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
BinaryToString = S
End Function
WScript.Quit
The following sample script exports a new key package from an unlocked, encrypted volume.
To run this script, start by saving the code into a VBS file (for example, GetBitLockerKeyPackage.vbs). Then, open an administrator command prompt and use “cscript” to run the saved file (for example, type "cscript GetBitLockerKeyPackage.vbs -?").
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
Wscript.Echo "USAGE: GetBitLockerKeyPackage [VolumeLetter/DriveLetter:] [Path To Saved Key Package]"
Wscript.Echo
Wscript.Echo "Example: GetBitLockerKeyPackage C: E:\bitlocker-backup-key-package"
WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
Case 2
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strDriveLetter = args(0)
strFilePath = args(1)
End If
Case Else
ShowUsage
End Select
' --------------------------------------------------------------------------------
' Other Inputs
' --------------------------------------------------------------------------------
' Target computer name
' Use "." to connect to the local computer
strComputerName = "."
' Default key protector ID to use. Specify "" to let the script choose.
strDefaultKeyProtectorID = ""
' strDefaultKeyProtectorID = "{001298E0-870E-4BA0-A2FF-FC74758D5720}" ' sample
' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------
strConnectionStr = "winmgmts:" _
& "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
& strComputerName _
& "\root\cimv2\Security\MicrosoftVolumeEncryption"
On Error Resume Next 'handle permission errors
Set objWMIService = GetObject(strConnectionStr)
If Err.Number <> 0 Then
WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
Wscript.Echo "Ensure that you are running with administrative privileges."
WScript.Quit -1
End If
On Error GoTo 0
strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)
If colTargetVolumes.Count = 0 Then
WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " & strDriveLetter & " on computer " & strComputerName & "."
WScript.Quit -1
End If
' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
set objVolume = objFoundVolume
Next
' objVolume is now our found BitLocker-capable disk volume
' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------
' Collect all possible valid key protector ID's that can be used to get the package
' ----------------------------------------------------------------------------------
nNumericalKeyProtectorType = 3 ' type associated with "Numerical Password" protector
nRC = objVolume.GetKeyProtectors(nNumericalKeyProtectorType, aNumericalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
nExternalKeyProtectorType = 2 ' type associated with "External Key" protector
nRC = objVolume.GetKeyProtectors(nExternalKeyProtectorType, aExternalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Get first key protector of the type "Numerical Password" or "External Key", if any
' ----------------------------------------------------------------------------------
if strDefaultKeyProtectorID = "" Then
' Save first numerical password, if exists
If UBound(aNumericalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aNumericalKeyProtectorIDs(0)
End If
' No numerical passwords exist, save the first external key
If strDefaultKeyProtectorID = "" and UBound(aExternalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aExternalKeyProtectorIDs(0)
End If
' Fail case: no recovery key protectors exist.
If strDefaultKeyProtectorID = "" Then
WScript.Echo "FAILURE: Cannot create backup key package because no recovery passwords or recovery keys exist. Check that BitLocker protection is on for this drive."
WScript.Echo "For help adding recovery passwords or recovery keys, type ""manage-bde -protectors -add -?""."
WScript.Quit -1
End If
End If
' Get some information about the chosen key protector ID
' ----------------------------------------------------------------------------------
' is the type valid?
nRC = objVolume.GetKeyProtectorType(strDefaultKeyProtectorID, nDefaultKeyProtectorType)
If Hex(nRC) = "80070057" Then
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " is not valid."
WScript.Echo "This ID value may have been provided by the script writer."
ElseIf nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorType failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' what's a string that can be used to describe it?
strDefaultKeyProtectorType = ""
Select Case nDefaultKeyProtectorType
Case nNumericalKeyProtectorType
strDefaultKeyProtectorType = "recovery password"
Case nExternalKeyProtectorType
strDefaultKeyProtectorType = "recovery key"
Case Else
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " does not refer to a valid recovery password or recovery key."
WScript.Echo "This ID value may have been provided by the script writer."
End Select
' Save the backup key package using the chosen key protector ID
' ----------------------------------------------------------------------------------
nRC = objVolume.GetKeyPackage(strDefaultKeyProtectorID, oKeyPackage)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyPackage failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strFilePath)) Then
WScript.Echo "The file " & strFilePath & " already exists. Please use a different path."
WScript.Quit -1
End If
Dim oKeyPackageByte, bKeyPackage
For Each oKeyPackageByte in oKeyPackage
'WScript.echo "key package byte: " & oKeyPackageByte
bKeyPackage = bKeyPackage & ChrB(oKeyPackageByte)
Next
' Save binary data to the file
SaveBinaryDataText strFilePath, bKeyPackage
' Display helpful information
' ----------------------------------------------------------------------------------
WScript.Echo "The backup key package has been saved to " & strFilePath & "."
WScript.Echo "IMPORTANT: To use this key package, the " & strDefaultKeyProtectorType & " must also be saved."
' Display the recovery password or a note about saving the recovery key file
If nDefaultKeyProtectorType = nNumericalKeyProtectorType Then
nRC = objVolume.GetKeyProtectorNumericalPassword(strDefaultKeyProtectorID, sNumericalPassword)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
WScript.Echo "Save this recovery password: " & sNumericalPassword
ElseIf nDefaultKeyProtectorType = nExternalKeyProtectorType Then
WScript.Echo "The saved key file is named " & strDefaultKeyProtectorID & ".BEK"
WScript.Echo "For help re-saving this external key file, type ""manage-bde -protectors -get -?"""
End If
'----------------------------------------------------------------------------------------
' Utility functions to save binary data
'----------------------------------------------------------------------------------------
Function SaveBinaryDataText(FileName, ByteArray)
'Create FileSystemObject object
Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
'Create text stream object
Dim TextStream
Set TextStream = FS.CreateTextFile(FileName)
'Convert binary data To text And write them To the file
TextStream.Write BinaryToString(ByteArray)
End Function
Function BinaryToString(Binary)
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
BinaryToString = S
End Function