
Wdigest 메모리 패치를 통한 Credential Guard 우회
Adam Chester (@_xpn_)가 UseLogonCredential을 활성화하고 Wdigest가 평문 자격 증명을 캐시하도록 만드는 메모리 패치에 관한 글 "Exploring Mimikatz - Part 1 - WDigest"을 작성했는데, 저는 이 글에 흥미를 느꼈습니다.
LSASS 프로세스에 로드된 wdigest.dll 모듈에는 g_fParameter_useLogonCredential과 g_IsCredGuardEnabled라는 두 가지 흥미로운 전역 변수가 있습니다. 그 역할은 이름만으로도 자명합니다. 전자는 평문 비밀번호를 메모리에 저장할지 여부를 결정하는 데 사용되고, 후자는 모듈 내 Windows Defender Credential Guard의 상태를 보유합니다. Wdigest 평문 비밀번호 캐싱은 메모리에서 이 두 전역 변수의 값을 패치하여 Credential Guard가 활성화된 시스템에서 활성화할 수 있습니다.
더 자세한 분석은 제 블로그 "Revisiting a Credential Guard Bypass From Wdigest"를 읽어주세요.
Credential Guard 보호가 활성화된 시스템에서 우리가 작성한 POC를 실행합니다. 사용자가 로그인을 위해 사용자 이름과 비밀번호를 다시 입력하면 아래 그림과 같이 평문 비밀번호를 다시 얻을 수 있습니다.
BypassCredGuard.exe

실제로 2020년 8월에 Team Hydra (@N4k3dTurtl3)가 블로그에 "Bypassing Credential Guard"라는 제목의 글을 게시하여 이 매우 영리하고 간단한 트릭에 대해 논의하고 개념 증명용 CredGuard_PoC를 간단히 공개했지만, 모든 Windows 시스템에서 작동하지는 않습니다.
Team Hydra는 이 문제에 대해 Microsoft에 보고서를 제출했고 다음과 같은 응답을 받았습니다:
"이 문제를 조사한 결과, 이것이 Credential Guard 우회라고 생각하지 않습니다. Credential Guard는 기능이 활성화된 동안 캐시된 자격 증명을 보호하기 위한 것입니다. 권한 있는 사용자가 Credential Guard를 비활성화하면 해당 기능은 이후의 로그온을 보호할 수 없습니다. 이 동작을 명확히 하기 위해 공개 문서를 업데이트하겠습니다"
이 응답을 고려할 때, 가까운 미래에는 Credential Guard가 활성화된 시스템에서 평문 자격 증명을 얻는 신뢰할 수 있는 방법이 될 것이라고 생각합니다.