몇 주 전, 무료 시스템 이미징 소프트웨어인 Macrium Reflect를 테스트해 볼 기회가 있었습니다. Macrium Reflect는 Windows PE를 부팅 가능한 라이브 미디어로 사용하며, 이 환경 안에서 백업과 복원 작업을 모두 수행할 수 있습니다. 시스템 이미징 소프트웨어에서 가장 중요한 것은 바로 복원 테스트인데, 저는 물리적 하드웨어와 가상 머신 양쪽에서 모두 테스트를 진행하기로 했습니다.
바로 여기서 문제에 부딪혔습니다. VirtualBox에서 PE 이미지를 부팅하려고 하자 E_FAIL(0x80004005) 오류가 발생했고, 자세한 내용은 VBoxHardening.log 파일에서 확인할 수 있었습니다. 이 파일의 수많은 로그 줄 사이에서 'lacks WinVerifyTrust'라는 문구가 여러 번 발견되었고, 그중 하나가 아래와 같은 부팅 실패로 이어졌습니다. 이제 어떻게 해야 할까요?
문제 자세히 살펴보기
오류 코드와 오류 속성만으로는 원인을 파악하기 어렵습니다. 정확히 무슨 일이 일어났는지 이해하려면 생성된 로그 파일을 직접 살펴봐야 합니다. 특히 아래 로그들이 실패의 직접적인 원인이었습니다:
\Device\HarddiskVolume5\Windows\System32\bcrypt.dll [lacks WinVerifyTrust]
13b4.1f40: Error (rc=0):
13b4.1f40: supR3HardenedScreenImage/NtCreateSection: cached rc=Unknown Status -626 (0xfffffd8e) fImage=1 fProtect=0x10 fAccess=0xf cHits=4 \Device\HarddiskVolume5\Windows\System32\bcrypt.dll
여기서 확인할 수 있듯이 bcrypt.dll이라는 특정 라이브러리가 WinVerifyTrust 서명 검증에 실패했습니다. 참고로 이 검증에 실패하지만 치명적이지 않은 다른 개체들도 존재할 수 있습니다. 실제로 이 정보를 바탕으로 검색해 보면 해당 문제에 관한 공식 티켓과 긴 포럼 토론 스레드가 이미 존재하는 것을 알 수 있습니다.
본질적으로 이 문제는 PE 이미지에 포함된 Windows 인증서와 현재 빌드의 VirtualBox가 보유한 인증서 간의 불일치 때문에 발생하는 것으로 보입니다. 이 오류는 VirtualBox에 도입된 보안 강화(security hardening) 기능에 의해 촉발됩니다.
해결 방법
이 문제를 우회하는 방법은 여러 가지가 있습니다. 첫째, 가상 머신용 Windows 빌드를 이전 버전으로 되돌리는 방법입니다. 예를 들어 복구 미디어의 기반으로 더 오래된 Windows 10 PE 이미지를 사용하거나, 대부분의 경우 그냥 다른 버전의 운영체제를 사용하면 됩니다. 둘째, VirtualBox 버전을 변경(업그레이드)하는 방법입니다. 후자가 운영체제를 건드리는 것보다 대개 더 간단하고 빠른 해결책입니다. 가장 이상적인 방법은 하드닝 플래그를 비활성화하는 것이겠지만, 간단한 방법으로는 불가능해 보입니다.
그래서 '너무나 당연한 소리'처럼 들릴 수 있지만, 해결책은 가능하다면 VirtualBox를 최신 버전으로 업데이트하는 것입니다. 여러 호스트에서 테스트한 결과, 5.1.X 브랜치에서 5.2.X 브랜치로 업그레이드했더니 Windows 10 기반 가상 머신에서 이 문제가 해결되었습니다.
결론
기술 전문가라면 지원 담당자가 '소프트웨어를 최신 버전으로 업데이트하세요'라고 말할 때 짜증이 나는 경우가 많을 겁니다. 하지만 때로는, 이번 사례처럼, 그것이 문제를 해결하는 가장 빠르고 합리적인 방법이 됩니다. VirtualBox의 보안 강화 기능은 여러 가지 복잡한 문제를 야기하며, 앞으로도 Microsoft와 Oracle 간의 끝없는 고양이와 생쥐 게임이 계속될 것입니다. 가끔은 일부 라이브러리가 로드되지 않아 가상 머신이 작동을 멈추는 상황이 발생할 수도 있습니다.
하지만 여기서 기술적인 세부사항보다 더 중요한 것은 이런 문제에 체계적으로 접근하는 방법을 아는 것입니다. 먼저 오류 코드를 면밀히 살펴보고, 그다음 오류 로그를 읽어야 합니다. 원인을 찾아내면 올바른 질문을 던지고 올바른 해결책을 찾을 수 있습니다. 이번 사례에서는 프로그램 업데이트만으로 해결되었지만, 우리는 무엇이 잘못되었는지 완전히 이해한 상태에서 그렇게 한 것입니다. 이 작은 가이드가 현재와 미래의 VirtualBox 관련 문제를 해결하는 데 도움이 되기를 바랍니다.
그럼, 즐거운 컴퓨팅 되세요!