เพื่อให้บัญชีผู้ใช้ในโดเมน Active Directory มีระดับความปลอดภัยสูง ผู้ดูแลระบบต้องกำหนดค่าและนำไปใช้ Domain Password Policy นโยบายรหัสผ่านควรให้ความซับซ้อน ความยาว และความถี่ในการเปลี่ยนรหัสผ่านของบัญชีผู้ใช้และบัญชีบริการเพียงพอ ดังนั้นจึงทำให้ผู้โจมตียากที่จะ brute-force หรือจับรหัสผ่านผู้ใช้เมื่อส่งผ่านเครือข่าย
นโยบายรหัสผ่านใน Default Domain Policy
โดยค่าเริ่มต้น ใช้การตั้งค่า Group Policy (GPO) เพื่อกำหนดข้อกำหนดทั่วไปสำหรับรหัสผ่านผู้ใช้ในโดเมน AD นโยบายรหัสผ่านของบัญชีผู้ใช้โดเมนถูกกำหนดค่าใน Default Domain Policy นโยบายนี้ลิงก์กับรากของโดเมนและต้องนำไปใช้กับ Domain Controller ที่มีบทบาท PDC Emulator
- เพื่อกำหนดค่านโยบายรหัสผ่านบัญชี AD ให้เปิดคอนโซล Group Policy Management (
gpmc.msc) - ขยายโดเมนของคุณและหา GPO ชื่อ Default Domain Policy คลิกขวาและเลือก Edit
- นโยบายรหัสผ่านอยู่ในส่วน GPO ดังนี้: Computer configuration → Policies → Windows Settings → Security Settings → Account Policies → Password Policy
- ดับเบิลคลิกการตั้งค่านโยบายเพื่อแก้ไข เพื่อเปิดใช้งานการตั้งค่านโยบายเฉพาะ ให้ติ๊ก Define this policy settings และระบุค่าที่จำเป็น (ในภาพด้านล่าง ตั้งค่าความยาวรหัสผ่านขั้นต่ำเป็น 8 ตัวอักษร) บันทึกการเปลี่ยนแปลง
- การตั้งค่านโยบายรหัสผ่านใหม่จะถูกนำไปใช้กับคอมพิวเตอร์โดเมนทั้งหมดในพื้นหลังภายในเวลาบางช่วง (90 นาที) ระหว่างการบูตคอมพิวเตอร์ หรือสามารถนำไปใช้ทันทีโดยรันคำสั่ง
gpupdate /force
สามารถเปลี่ยนการตั้งค่านโยบายรหัสผ่านจากคอนโซล GPO Management หรือโดยใช้ PowerShell cmdlet Set-ADDefaultDomainPasswordPolicy:
Set-ADDefaultDomainPasswordPolicy -Identity woshub.com -MinPasswordLength 10 -LockoutThreshold 3
การตั้งค่านโยบายรหัสผ่านพื้นฐานบน Windows
มาพิจารณาการตั้งค่ารหัสผ่าน Windows ทั้งหมดที่มีอยู่ มีการตั้งค่ารหัสผ่าน 6 รายการใน GPO:
- Enforce password history – กำหนดจำนวนรหัสผ่านเก่าที่เก็บใน AD ป้องกันไม่ให้ผู้ใช้นำรหัสผ่านเก้ามาใช้ซ้ำ อย่างไรก็ตาม Domain Admin หรือผู้ใช้ที่ได้รับมอบสิทธิ์รีเซ็ตรหัสผ่านใน 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 – ตั้งค่าความถี่ที่ผู้ใช้สามารถเปลี่ยนรหัสผ่านได้ การตั้งค่านี้จะไม่ให้ผู้ใช้เปลี่ยนรหัสผ่านบ่อยเกินไปเพื่อกลับไปใช้รหัสผ่านเก่าที่ชอบโดยการลบออกจาก Password History หลังจากเปลี่ยนรหัสผ่านหลายครั้งติดกัน ปกติควรตั้งค่า 1 วัน เพื่อให้ผู้ใช้เปลี่ยนรหัสผ่านเองได้หากถูกโจมตี (มิฉะนั้นแอดมินจะต้องเปลี่ยนให้)
- Password must meet complexity requirements – หากนโยบายเปิดใช้งาน ผู้ใช้ไม่สามารถใช้ชื่อบัญชีในรหัสผ่านได้ (ไม่เกิน 2 สัญลักษณ์ของ
usernameหรือFirstnameติดต่อกัน) และต้องใช้สัญลักษณ์ 3 ประเภทในรหัสผ่าน: ตัวเลข (0-9), ตัวอักษรใหญ่, ตัวอักษรเล็ก และอักขระพิเศษ ($, #%, ฯลฯ) นอกจากนี้ เพื่อป้องกันการใช้รหัสผ่านอ่อนแอ (จากพจนานุกรมรหัสผ่าน) แนะนำให้ตรวจสอบรหัสผ่านผู้ใช้ในโดเมน AD เป็นประจำ - Store passwords using reversible encryption – รหัสผ่านผู้ใช้ถูกเก็บในรูปแบบเข้ารหัสในฐานข้อมูล AD แต่ในบางกรณีต้องให้แอปพลิเคชันบางตัวเข้าถึงรหัสผ่านผู้ใช้ได้ หากเปิดใช้งานการตั้งค่านโยบายนี้ รหัสผ่านจะมีการป้องกันน้อยลง (เกือบ plain text) ไม่ปลอดภัย (ผู้โจมตีอาจเข้าถึงฐานข้อมูลรหัสผ่านได้หาก DC ถูกเจาะ Read-only Domain Controllers (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 Password:
- Account Lockout Threshold – จำนวนครั้งที่ผู้ใช้สามารถพยายาม Sign-in ล้มเหลว (ด้วยรหัสผ่านผิด) ก่อนที่บัญชีจะถูกล็อก
- Account Lockout Duration – ระยะเวลาที่บัญชีจะถูกล็อก หากผู้ใช้ป้อนรหัสผ่านผิดหลายครั้ง
- Reset account lockout counter after – จำนวนนาทีที่นับถอยหลังก่อนที่ตัวนับ Account Lockout Threshold จะถูกรีเซ็ต
การตั้งค่าเริ่มต้นของนโยบายรหัสผ่านในโดเมน AD แสดงในตารางด้านล่าง:
| Policy | Default value |
|---|---|
| Enforce password history | 24 passwords |
| Maximum password age | 42 days |
| Minimum password age | 1 day |
| Minimum password length | 7 |
| Password must meet complexity requirements | Enabled |
| Store passwords using reversible encryption | Disabled |
| Account lockout duration | Not set |
| Account lockout threshold | 0 |
| Reset account lockout counter after | Not set |
ใน Security Compliance Toolkit Microsoft แนะนำการตั้งค่านโยบายรหัสผ่านดังนี้:
- Enforce Password History: 24
- Maximum password age: not set
- Minimum password age: not set
- Minimum password length: 14
- Password must meet complexity: Enabled
- Store passwords using reversible encryption: Disabled
ในคำแนะนำ Security Baseline 1903 ล่าสุด Microsoft ระบุว่าไม่จำเป็นต้องเปิดนโยบายหมดอายุรหัสผ่านสำหรับผู้ใช้ การหมดอายุรหัสผ่านไม่เพิ่มความปลอดภัย แต่สร้างปัญหาที่ไม่จำเป็น (link)
วิธีตรวจสอบนโยบายรหัสผ่านปัจจุบันในโดเมน AD
สามารถดูการตั้งค่านโยบายรหัสผ่านปัจจุบันใน Default Domain Policy ในคอนโซล gpmc.msc (บนแท็บ Settings)
ยังสามารถแสดงข้อมูลนโยบายรหัสผ่านด้วย PowerShell (ต้องติดตั้ง AD PowerShell module บนคอมพิวเตอร์):
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
objectClas : {domainDNS}
PasswordHistoryCount: 24
ReversibleEncryptionEnabled: False
ยังสามารถตรวจสอบการตั้งค่านโยบายรหัสผ่าน AD ปัจจุบันบนคอมพิวเตอร์โดเมนใดๆ ได้ด้วยคำสั่ง gpresult
นโยบายรหัสผ่านหลายรายการในโดเมน Active Directory
Domain Controller ที่เป็นเจ้าของบทบาท PDC Emulator FSMO Role รับผิดชอบการจัดการนโยบายรหัสผ่านของโดเมน ต้องมีสิทธิ์ Domain Administrator เพื่อแก้ไขการตั้งค่า Default Domain Policy
เริ่มต้นมีเพียงนโยบายรหัสผ่านเดียวในโดเมน ซึ่งนำไปใช้กับรากโดเมนและมีผลต่อผู้ใช้ทุกคนโดยไม่มีข้อยกเว้น (มีรายละเอียดบางอย่าง แต่เราจะพูดถึงภายหลัง) แม้จะสร้าง GPO ใหม่ด้วยการตั้งค่ารหัสผ่านที่แตกต่างและนำไปใช้กับ OU เฉพาะพร้อมพารามิเตอร์ Enforced และ Block Inheritance ก็จะไม่มีผลกับผู้ใช้
ก่อน Active Directory ใน Windows Server 2008 สามารถกำหนดค่านโยบายรหัสผ่านได้เพียงหนึ่งรายการต่อโดเมน ใน AD เวอร์ชันใหม่ สามารถสร้างนโยบายรหัสผ่านหลายรายการสำหรับผู้ใช้หรือกลุ่มต่างๆ ได้โดยใช้ Fine-Grained Password Policies (FGPP) FGPP ให้สร้างและบังคับใช้ Password Settings Objects (PSOs) ที่แตกต่างกันได้ ตัวอย่างเช่น สร้าง PSO ที่มีความยาวรหัสผ่านหรือความซับซ้อนเพิ่มขึ้นสำหรับบัญชี Domain Admin (ดูบทความ Securing administrator accounts in AD domain) หรือทำให้รหัสผ่านของบัญชีบางบัญชีง่ายขึ้นหรือปิดใช้งานได้ทั้งหมด
ในสภาพแวดล้อม Workgroup จะต้องกำหนดค่านโยบายรหัสผ่านบนแต่ละคอมพิวเตอร์โดยใช้ Local GPO editor – gpedit.msc หรือสามารถโอนการตั้งค่านโยบาย GPO ท้องถิ่นระหว่างคอมพิวเตอร์ได้ด้วยวิธีนี้