도메인 사용자가 Windows에 로그온하면 기본적으로 해당 사용자의 자격 증명(사용자 이름과 암호 해시)이 로컬 컴퓨터에 저장됩니다. 이렇게 저장된 정보를 캐시된 자격 증명(Cached Credentials)이라고 부릅니다. 덕분에 AD(Active Directory) 도메인 컨트롤러가 다운되었거나, 전원이 꺼져 있거나, 네트워크 케이블이 분리된 상황에서도 사용자는 컴퓨터에 로그온할 수 있습니다.
특히 회사 네트워크에 접속할 수 없는 환경에서도 노트북에 저장된 로컬 데이터에 접근해야 하는 모바일 사용자에게 자격 증명 캐싱은 매우 유용한 기능입니다.
Windows에서 도메인 사용자 자격 증명 캐싱의 동작 원리
캐시된 자격 증명은 해당 컴퓨터에서 최소 한 번 이상 인증을 거친 사용자에게만 적용되며, 이후 도메인 암호가 변경되지 않았다면 오프라인 상태에서도 로그온이 가능합니다. 주목할 점은 캐시에 저장된 암호에는 만료 개념이 없다는 것입니다.
예를 들어 도메인 암호 정책에 따라 사용자가 암호를 강제로 변경했더라도, 새 암호로 해당 컴퓨터에 로그온하기 전까지는 로컬 캐시에 이전 암호가 그대로 남아 있습니다. 따라서 마지막 로그온 이후 AD에서 암호가 변경되었고 컴퓨터가 도메인 네트워크에 연결되지 않은 상태라면, 사용자는 변경 전 구 암호로 로그인할 수 있습니다.
AD 도메인을 사용할 수 없는 경우, Windows는 입력된 사용자 이름과 암호가 로컬 캐시와 일치하는지 확인한 뒤 일치하면 로컬 로그온을 허용합니다.
캐시된 자격 증명의 저장 위치
캐시된 자격 증명은 레지스트리 키 HKEY_LOCAL_MACHINE\Security\Cache(%systemroot%\System32\config\SECURITY)에 저장됩니다. 각 암호 해시는 NL$x 값(x는 캐시 데이터의 인덱스)으로 저장되며, 해시는 사용자 이름을 기반으로 한 salt로 변형된 후 레지스트리에 기록됩니다.
기본적으로 관리자 계정이라도 이 레지스트리 키의 내용을 직접 볼 수 없지만, 필요하다면 별도의 방법으로 접근 권한을 얻을 수 있습니다. NL$x 값을 삭제하면 해당 사용자의 캐시된 자격 증명도 함께 제거됩니다.
캐시된 자격 증명이 없을 때 나타나는 오류
로컬 캐시에 자격 증명이 전혀 없는 상태에서 오프라인 컴퓨터에 로그온을 시도하면 다음과 같은 오류 메시지가 표시됩니다.
There are currently no logon servers available to service the logon request.
(현재 로그온 요청을 처리할 수 있는 로그온 서버가 없습니다.)
그룹 정책(GPO)으로 캐시된 자격 증명 구성하기
도메인 컴퓨터의 로컬 캐시에 저장할 고유 사용자 수는 그룹 정책으로 조정할 수 있습니다. 단, 자격 증명이 캐시되려면 해당 사용자가 그 컴퓨터에 최소 한 번은 로그온한 적이 있어야 합니다.
Windows 10과 Windows Server 2016은 기본적으로 최근 로그온한 10명의 사용자 자격 증명을 저장합니다. 이 값을 변경하려면 다음 GPO 옵션을 사용합니다.
- 정책 이름: 대화형 로그온: 캐시할 이전 로그온 수(도메인 컨트롤러를 사용할 수 없는 경우) (Interactive logon: Number of previous logons to cache)
- 경로: 컴퓨터 구성 → 정책 → Windows 설정 → 보안 설정 → 로컬 정책 → 보안 옵션
- 설정 범위: 0 ~ 50
값을 0으로 설정하면 Windows가 사용자 자격 증명을 캐싱하지 않습니다. 이 경우 도메인을 사용할 수 없는 환경에서 로그온을 시도하면 앞서 언급한 '로그온 서버를 사용할 수 없음' 오류가 발생합니다.
같은 설정은 레지스트리를 통해서도 가능합니다. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon 경로의 CachedLogonsCount(REG_SZ) 값을 수정하면 됩니다.
캐시된 자격 증명으로 로그온했을 때 알림 표시하기
저장된 자격 증명으로 로그온하면 사용자는 도메인 컨트롤러에 연결되지 않았다는 사실을 인지하지 못합니다. GPO를 통해 이를 알려주는 알림을 표시할 수 있습니다.
- 정책 이름: 사용자 로그온 중 로그온 서버를 사용할 수 없을 때 보고 (Report when logon server was not available during user logon)
- 경로: 컴퓨터 구성 → 정책 → 관리 템플릿 → Windows 구성 요소 → Windows 로그온 옵션
이 정책을 활성화하면 로그온 후 작업 표시줄 트레이에 다음과 같은 알림이 나타납니다.
A domain controller for your domain could not be contacted. You have been logged on using cached account information. Changes to your profile since you last logged on might not be available.
(도메인 컨트롤러에 연결할 수 없어 캐시된 계정 정보로 로그온되었습니다. 마지막 로그온 이후 프로필 변경 사항은 반영되지 않았을 수 있습니다.)
이 기능은 레지스트리로도 활성화할 수 있습니다.
- 경로:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon - 값 이름: ReportControllerMissing
- 데이터 형식: REG_SZ
- 값: 1
캐시된 Windows 자격 증명의 보안 위험과 대응 방안
로컬 자격 증명 캐싱에는 몇 가지 보안 위험이 존재합니다. 공격자가 캐시 데이터가 담긴 컴퓨터나 노트북에 물리적으로 접근하면 무차별 대입(brute-force) 공격으로 암호 해시를 해독하려 시도할 수 있습니다. 성공 여부는 암호의 길이와 복잡도에 좌우되지만, 암호가 단순하다면 위험이 크게 증가합니다.
따라서 로컬 관리자 권한을 가진 사용자, 특히 도메인 관리자 계정에는 자격 증명 캐싱을 사용하지 않는 것이 좋습니다.
권장 보안 설정
- 사무실 데스크톱 및 관리자용 컴퓨터: 자격 증명 캐싱 비활성화 (CachedLogonsCount = 0)
- 모바일 장치(노트북): 캐시 계정 수를 1로 제한 (CachedLogonsCount = 1)
모바일 장치의 캐시 수를 1로 줄이면, 설령 관리자가 해당 컴퓨터에 로그온해 자격 증명이 캐시되더라도 실제 소유자가 로그온하는 순간 관리자의 암호 해시가 덮어써집니다.
Protected Users 그룹 활용
도메인 기능 수준이 Windows Server 2012 R2 이상인 AD 환경이라면 도메인 관리자 계정을 Protected Users 보안 그룹에 추가할 수 있습니다. 이 그룹에 속한 계정은 로컬 자격 증명 캐싱이 금지됩니다.
GPO 필터링으로 세밀하게 제어하기
도메인 내에서 장치 유형과 사용자 카테고리별로 캐시된 자격 증명 사용을 통제하는 별도의 GPO를 만들 수도 있습니다. 예를 들어 GPO 보안 필터, WMI 필터, 또는 GPP(그룹 정책 기본 설정)의 항목 수준 대상 지정(Item Level Targeting)을 활용해 CachedLogonsCount 레지스트리 값을 배포하는 방식입니다.
- 모바일(노트북) 사용자:
CachedLogonsCount = 1 - 사무실 데스크톱:
CachedLogonsCount = 0
이러한 정책 조합을 적용하면 도메인 가입 장치에서 권한 있는 사용자의 암호 해시가 유출될 가능성을 크게 낮출 수 있습니다.