Active Directory 도메인에서 사용자 계정의 높은 보안 수준을 유지하려면 관리자가 반드시 도메인 암호 정책을 구성하고 적용해야 합니다. 암호 정책은 충분한 암호 복잡도, 암호 길이, 그리고 사용자 및 서비스 계정의 암호 변경 주기를 규정해야 합니다. 이를 통해 공격자가 무차별 대입(brute-force) 공격으로 암호를 추측하거나 네트워크 전송 중에 암호를 탈취하기 어렵게 만들 수 있습니다.
Default Domain Policy에서 암호 정책 설정
기본적으로 AD 도메인 내 모든 사용자 계정에 공통된 암호 요구 사항을 적용할 때는 그룹 정책(GPO) 설정을 사용합니다. 도메인 사용자 계정의 암호 정책은 Default Domain Policy에서 구성하며, 이 정책은 도메인 루트에 연결되어 PDC 에뮬레이터 역할을 담당하는 도메인 컨트롤러에 적용되어야 합니다.
- AD 계정 암호 정책을 구성하려면 그룹 정책 관리(Group Policy Management) 콘솔(
gpmc.msc)을 실행합니다. - 도메인을 확장한 후 Default Domain Policy라는 이름의 GPO를 찾아 마우스 오른쪽 버튼으로 클릭하고 편집(Edit)을 선택합니다.
- 암호 정책은 GPO의 다음 경로에 위치합니다: 컴퓨터 구성 -> 정책 -> Windows 설정 -> 보안 설정 -> 계정 정책 -> 암호 정책
- 수정하려는 정책 설정을 더블클릭합니다. 특정 정책을 활성화하려면 이 정책 설정 정의를 체크하고 필요한 값을 입력합니다(예: 최소 암호 길이를 8자로 설정). 변경 사항을 저장합니다.
- 새로운 암호 정책 설정은 백그라운드에서 일정 시간(약 90분) 후 또는 컴퓨터 부팅 시 모든 도메인 컴퓨터에 자동 적용됩니다. 즉시 적용하려면
gpupdate /force명령어를 실행하세요.
GPO 관리 콘솔 외에도 PowerShell cmdlet인 Set-ADDefaultDomainPasswordPolicy를 사용해 암호 정책을 변경할 수 있습니다:
Set-ADDefaultDomainPasswordPolicy -Identity woshub.com -MinPasswordLength 10 -LockoutThreshold 3
Windows의 기본 암호 정책 설정 항목
GPO에서 사용할 수 있는 여섯 가지 암호 설정 항목을 살펴보겠습니다.
- 암호 기록 적용(Enforce password history) – AD에 저장되는 이전 암호의 개수를 결정하여 사용자가 예전에 사용했던 암호를 다시 쓰지 못하게 합니다. 단, 도메인 관리자나 AD에서 암호 재설정 권한을 위임받은 사용자는 수동으로 이전 암호를 지정할 수 있습니다.
- 최대 암호 사용 기간(Maximum password age) – 암호 만료일을 일 단위로 설정합니다. 암호가 만료되면 Windows가 사용자에게 암호 변경을 요청합니다. 특정 사용자의 암호 만료일은 다음 PowerShell 명령으로 확인할 수 있습니다:
Get-ADUser -Identity j.werder -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }} - 최소 암호 길이(Minimum password length) – 최소 8자 이상의 암호 사용이 권장됩니다(0으로 설정하면 암호 입력이 필수가 아님).
- 최소 암호 사용 기간(Minimum password age) – 사용자가 암호를 변경할 수 있는 최소 주기를 설정합니다. 이 설정이 없으면 사용자가 암호를 연속해서 여러 번 변경하여 암호 기록에서 사라질 때까지 반복한 뒤 선호하는 예전 암호로 되돌아갈 수 있습니다. 일반적으로 1일로 설정하여, 암호가 유출된 경우 사용자가 직접 즉시 변경할 수 있도록 하는 것이 좋습니다(그렇지 않으면 관리자가 변경해야 함).
- 복잡성 요구 사항(Password must meet complexity requirements) – 이 정책이 활성화되면 사용자는 계정 이름을 암호에 사용할 수 없으며(
username또는Firstname의 연속 2자까지만 허용), 암호에 숫자(0~9), 대문자, 소문자, 특수 문자($, #, % 등) 중 3가지 이상의 문자 유형을 포함해야 합니다. 또한 사전에 등록된 취약한 암호 사용을 막으려면 AD 도메인의 사용자 암호를 정기적으로 감사하는 것이 좋습니다. - 해독 가능한 암호화를 사용하여 암호 저장(Store passwords using reversible encryption) – 사용자 암호는 원래 AD 데이터베이스에 암호화되어 저장되지만, 일부 애플리케이션이 암호에 접근해야 하는 경우 이 옵션을 사용합니다. 이 정책을 활성화하면 암호가 거의 평문 형태로 저장되므로 매우 위험합니다(DC가 침해되면 공격자가 암호 데이터베이스에 접근할 수 있음). 읽기 전용 도메인 컨트롤러(RODC)를 활용하는 것이 방어 대책 중 하나입니다.
사용자가 도메인 암호 정책에 맞지 않는 암호로 변경을 시도하면 다음과 같은 오류 메시지가 표시됩니다:
Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain.
추가로, GPO의 계정 잠금(Account Lockout) 섹션에서도 다음 암호 관련 설정을 구성해야 합니다:
- 계정 잠금 임계값(Account Lockout Threshold) – 잘못된 암호로 로그인을 실패할 수 있는 횟수로, 이 횟수를 초과하면 계정이 잠깁니다.
- 계정 잠금 기간(Account Lockout Duration) – 잘못된 암호를 여러 번 입력한 경우 계정이 잠겨 있는 시간입니다.
- 다음 시간 후 계정 잠금 수 초기화(Reset account lockout counter after) – 로그인 실패 카운터가 초기화되기까지의 시간(분)입니다.
특정 도메인 계정이 자주 잠긴다면, 계정 잠금의 원인이 되는 소스를 추적하는 방법을 활용해 문제를 파악할 수 있습니다.
AD 도메인의 기본 암호 정책 값
| 정책 | 기본값 |
| 암호 기록 적용 | 24개 암호 |
| 최대 암호 사용 기간 | 42일 |
| 최소 암호 사용 기간 | 1일 |
| 최소 암호 길이 | 7자 |
| 복잡성 요구 사항 | 사용 |
| 해독 가능한 암호화로 저장 | 사용 안 함 |
| 계정 잠금 기간 | 설정 안 됨 |
| 계정 잠금 임계값 | 0 |
| 계정 잠금 카운터 초기화 | 설정 안 됨 |
Microsoft의 Security Compliance Toolkit에서는 다음과 같은 암호 정책 설정을 권장합니다:
- 암호 기록 적용: 24
- 최대 암호 사용 기간: 설정 안 함
- 최소 암호 사용 기간: 설정 안 함
- 최소 암호 길이: 14자
- 복잡성 요구 사항: 사용
- 해독 가능한 암호화 저장: 사용 안 함
특히 Security Baseline 1903 권고안에서 Microsoft는 사용자 암호 만료 정책을 굳이 활성화할 필요가 없다고 명시했습니다. 암호 만료는 보안을 강화하지 못하고 불필요한 문제만 발생시킬 수 있다는 것입니다.
AD 도메인의 현재 암호 정책 확인 방법
gpmc.msc 콘솔의 Default Domain Policy에서 설정(Settings) 탭을 통해 현재 암호 정책 설정을 확인할 수 있습니다.
또한 PowerShell(AD PowerShell 모듈 필요)로도 암호 정책 정보를 조회할 수 있습니다:
Get-ADDefaultDomainPasswordPolicy
ComplexityEnabled : True
DistinguishedName : DC=woshub,DC=com
LockoutDuration : 00:20:00
LockoutObservationWindow : 00:30:00
LockoutThreshold : 0
MaxPasswordAge : 60.00:00:00
MinPasswordAge : 1.00:00:00
MinPasswordLength : 8
PasswordHistoryCount : 24
ReversibleEncryptionEnabled : False
이 외에도 도메인에 가입된 아무 컴퓨터에서나 gpresult 명령어를 사용해 현재 적용 중인 AD 암호 정책 설정을 확인할 수 있습니다.
Active Directory 도메인의 다중 암호 정책
도메인 암호 정책은 PDC 에뮬레이터 FSMO 역할을 보유한 도메인 컨트롤러가 관리합니다. Default Domain Policy 설정을 편집하려면 도메인 관리자 권한이 필요합니다.
원래 도메인에는 하나의 암호 정책만 존재하며, 도메인 루트에 적용되어 예외 없이 모든 사용자에게 영향을 미칩니다. 새로운 GPO를 생성해 서로 다른 암호 설정을 담고 특정 OU에 Enforced와 Block Inheritance 옵션을 켠 상태로 적용하더라도, 해당 정책은 사용자에게 적용되지 않습니다.
참고로 도메인 암호 정책은 사용자 AD 개체에만 영향을 미칩니다. 도메인 신뢰 관계를 형성하는 컴퓨터 암호는 별도의 GPO 설정을 따릅니다.
Windows Server 2008 이전의 Active Directory에서는 도메인당 하나의 암호 정책만 구성할 수 있었습니다. 그러나 최신 버전의 AD에서는 FGPP(Fine-Grained Password Policies, 세분화된 암호 정책)를 사용해 서로 다른 사용자나 그룹에 대해 여러 암호 정책을 만들 수 있습니다. FGPP를 이용하면 PSO(Password Settings Object, 암호 설정 개체)를 생성하고 적용할 수 있습니다. 예를 들어 도메인 관리자 계정에 더 긴 암호 길이와 높은 복잡도를 요구하는 PSO를 만들거나(관련 글: AD 도메인 관리자 계정 보호), 반대로 특정 계정의 암호를 간단하게 하거나 아예 비활성화할 수도 있습니다.
워크그룹 환경에서는 각 컴퓨터마다 로컬 GPO 편집기(gpedit.msc)로 암호 정책을 개별 구성해야 하며, 이 방법을 이용해 컴퓨터 간에 로컬 GPO 설정을 복사·배포할 수 있습니다.