Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

การตรวจสอบรหัสผ่านที่อ่อนแอใน Active Directory

ความซับซ้อนของรหัสผ่านผู้ใช้ในโดเมน Active Directory เป็นหนึ่งในองค์ประกอบความปลอดภัยที่สำคัญทั้งสำหรับข้อมูลผู้ใช้และโครงสร้างพื้นฐานของโดเมนทั้งหมด ผู้ใช้หลายคนชอบใช้รหัสผ่านที่เรียบง่ายและจำง่าย แม้ว่าจะมีคำแนะนำว่าอย่าใช้ข้อมูลส่วนบุคคล คำในพจนานุกรม และการใช้รหัสผ่านร่วมกันอย่างง่ายๆ ในบทความนี้ เราจะแสดงวิธีตรวจสอบรหัสผ่านผู้ใช้ Active Directory ค้นหารหัสผ่านที่ไม่รัดกุมและเรียบง่ายโดยใช้ PowerShell

แม้จะมีนโยบายรหัสผ่านโดเมนที่ซับซ้อน ผู้ใช้สามารถตั้งค่ารหัสผ่านที่ไม่รัดกุมหรือรหัสผ่านเริ่มต้นในทางเทคนิคได้ เช่น Pa$$w0rd หรือ P@ssw0rd .

จะติดตั้งโมดูล PowerShell DSInternals (Directory Services Internals) ได้อย่างไร

ในการเปรียบเทียบแฮชของรหัสผ่านผู้ใช้ที่จัดเก็บไว้ในฐานข้อมูล Active Directory (ไฟล์ ntds.dit) กับพจนานุกรมของรหัสผ่านแบบธรรมดาและแบบทั่วไป คุณสามารถใช้โมดูล PowerShell ของบริษัทอื่น – DSInternals โมดูลนี้มี cmdlet จำนวนหนึ่งที่อนุญาตให้ดำเนินการต่างๆ กับฐานข้อมูล AD ในโหมดออนไลน์หรือออฟไลน์ (โดยตรงกับ ntds.dit) โดยเฉพาะอย่างยิ่ง เราสนใจ ทดสอบคุณภาพรหัสผ่าน cmdlet ที่อนุญาตให้ตรวจพบผู้ใช้ที่มีรหัสผ่านที่อ่อนแอ คล้ายคลึง มาตรฐาน ว่างเปล่า (ไม่จำเป็นต้องใช้รหัสผ่าน) หรือรหัสผ่านไม่มีวันหมดอายุ

หมายเหตุ โดยปกติ รหัสผ่านของผู้ใช้ไม่สามารถรับจากฐานข้อมูล AD เป็นข้อความธรรมดาได้ รหัสผ่านที่เก็บไว้ใน Active Directory จะถูกแฮช อย่างไรก็ตาม คุณสามารถเปรียบเทียบแฮชรหัสผ่านของผู้ใช้ AD กับแฮชของคำจากไฟล์พจนานุกรมและค้นหารหัสผ่านที่ไม่รัดกุม

ใน PowerShell เวอร์ชัน 5 (และใหม่กว่า) คุณสามารถติดตั้งโมดูล DSInternals ทางออนไลน์จากแกลเลอรีสคริปต์ PowerShell อย่างเป็นทางการได้ดังนี้:

ติดตั้งโมดูล DSInternals

ใน PowerShell เวอร์ชันก่อนหน้าหรือในสภาพแวดล้อมที่ไม่ได้เชื่อมต่อ คุณต้องดาวน์โหลดไฟล์ .zip ที่มีโมดูลเวอร์ชันล่าสุดจาก GitHub (https://github.com/MichaelGrafnetter/DSInternals/releases) ตอนที่เขียนบทความนี้ รุ่นล่าสุดคือ DSInternals v4.4.1 แตกไฟล์เก็บถาวรนี้ลงในไดเร็กทอรีที่มีโมดูล PowerShell:

  • C:\Windows\system32\WindowsPowerShell\v1.0\Modules\DSInternals
  • C:\Users\%username%\Documents\WindowsPowerShell\Modules\DSInternals

หรือนำเข้าโมดูล DSInternals ไปยังเซสชัน PowerShell ปัจจุบันของคุณโดยใช้คำสั่งนี้:

นำเข้า-โมดูล C:\distr\PS\DSInternals\DSInternals.psd1

หากข้อผิดพลาด “ไม่สามารถโหลดได้เนื่องจากสคริปต์การรันถูกปิดการใช้งานในระบบนี้ ” ปรากฏขึ้นเมื่อนำเข้าโมดูล คุณต้องเปลี่ยนนโยบายการดำเนินการ PowerShell ปัจจุบัน และอนุญาตให้สคริปต์ PS ภายนอกทำงานอย่างน้อยในเซสชันปัจจุบัน:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

รายการ cmdlet ของโมดูลที่พร้อมใช้งานสามารถรับได้ดังนี้:

รับคำสั่ง -Module DSInternals

การตรวจสอบรหัสผ่านที่อ่อนแอใน Active Directory

ค้นหารหัสผ่าน Active Directory ที่อ่อนแอด้วย Cmdlet ของ Test-PasswordQuality

ถัดไป คุณต้องสร้างพจนานุกรมรหัสผ่าน มันจะเป็นไฟล์ข้อความธรรมดาที่มีรายการรหัสผ่านที่ใช้กันทั่วไป ไม่รัดกุม และรหัสผ่านที่ไม่ดีอื่นๆ คุณสามารถดาวน์โหลดไฟล์พจนานุกรมรหัสผ่านจากอินเทอร์เน็ตหรือสร้างขึ้นเอง โมดูล DSInternal ช่วยให้คุณสามารถเปรียบเทียบแฮชของรหัสผ่านของผู้ใช้ใน Active Directory กับแฮชของคำจากไฟล์นี้ บันทึกรหัสผ่านลงในไฟล์ข้อความ PasswordDict.txt .

การตรวจสอบรหัสผ่านที่อ่อนแอใน Active Directory

ตอนนี้สร้างสคริปต์ PowerShell ขนาดเล็ก ในตัวแปรต่อไปนี้ ระบุพาธไปยังไฟล์รหัสผ่าน ชื่อโดเมน และชื่อตัวควบคุมโดเมน:

$DictFile ="C:\distr\PS\DSInternals\PasswordDict.txt"
$DC ="lon-dc01"
$Domain ="DC=woshub,DC=loc"

จากนั้นใช้ Get-ADReplAccount cmdlet รับรายชื่อผู้ใช้ใน AD (เช่น Get-ADUser) นอกจากนี้ cmdlet นี้ส่งคืนแฮช NT และ LM รวมถึงประวัติแฮช จากนั้น สำหรับผู้ใช้แต่ละราย ให้เปรียบเทียบแฮชของรหัสผ่านกับแฮชจากไฟล์พจนานุกรม (การตรวจสอบจะดำเนินการสำหรับบัญชีผู้ใช้ที่ถูกปิดใช้งานด้วย):

รับ-ADReplAccount -ทั้งหมด -เซิร์ฟเวอร์ $DC -NamingContext $Domain | ทดสอบ-คุณภาพรหัสผ่าน -WeakPasswordsFile $DictFile -IncludeDisabledAccounts

ผลลัพธ์ของการรันสคริปต์อาจมีลักษณะดังนี้:

Active Directory Password Quality Report
----------------------------------------
Passwords of these accounts are stored using reversible encryption:
LM hashes of passwords of these accounts are present:
These accounts have no password set:
TEST\DefaultAccount
TEST\Guest
Passwords of these accounts have been found in the dictionary:
TEST\a.adams
TEST\jbrion
TEST\jsanti
These groups of accounts have the same passwords:
Group 1:
TEST\a.novak
TEST\Administrator
TEST\amuller
TEST\k.brown
Group 2:
TEST\a.adams
TEST\jbrion
TEST\jsanti
These computer accounts have default passwords:
Kerberos AES keys are missing from these accounts:
Kerberos pre-authentication is not required for these accounts:
Only DES encryption is allowed to be used with these accounts:
These administrative accounts are allowed to be delegated to a service:
TEST\a.adams
TEST\a.novak
TEST\Administrator
TEST\jbrion
TEST\jsanti
TEST\k.brown
TEST\krbtgt
Passwords of these accounts will never expire:
TEST\a.adams
TEST\Administrator
TEST\DefaultAccount
TEST\Guest
TEST\k.brown
TEST\krbtgt
TEST\web
These accounts are not required to have a password:
TEST\ADFS1$
TEST\DefaultAccount
TEST\Guest
These accounts that require smart card authentication have a password:

การตรวจสอบรหัสผ่านที่อ่อนแอใน Active Directory

ในเวอร์ชันก่อนหน้าของโมดูล DSInternal ShowPlainText พารามิเตอร์พร้อมให้แสดงรหัสผ่านของผู้ใช้เป็นข้อความที่ชัดเจน หากพบแฮชในพจนานุกรม ไม่มีในเวอร์ชันปัจจุบันของ Test-PasswordQuality หากคุณต้องการใช้โมดูล DSInternals รุ่นเก่ากว่า ให้ติดตั้งโดยใช้คำสั่ง:

ติดตั้ง-โมดูล -ชื่อ DSInternals -RequiredVersion 2.23

ดำเนินการค้นหาแฮชรวมถึงประวัติรหัสผ่านของผู้ใช้ที่เก็บไว้ใน AD อย่างที่คุณเห็น พบผู้ใช้ AD ที่มีรหัสผ่านง่าย ๆ สำเร็จ (รหัสผ่านตรงกับพจนานุกรม) นอกจากนี้ยังพบผู้ใช้หลายคนที่มีรหัสผ่านเหมือนกัน สคริปต์นี้จะช่วยคุณค้นหาบัญชีที่มีรหัสผ่านอย่างง่ายซึ่งอยู่ภายใต้นโยบายรหัสผ่านแบบละเอียดที่กำหนดเอง

สำหรับผู้ใช้ที่มีรหัสผ่านที่ไม่รัดกุม คุณสามารถสร้างรหัสผ่านแบบสุ่มที่รัดกุมและบังคับให้เปลี่ยนใน AD ผ่าน PowerShell

คุณยังสามารถทำการสแกนไฟล์ฐานข้อมูล Active Directory (ntds.dit) แบบออฟไลน์ได้ คุณสามารถรับสำเนาของไฟล์ ntds.dit จากสำเนาเงาหรือจากข้อมูลสำรองของตัวควบคุมโดเมน

หากต้องการตรวจสอบแฮชของผู้ใช้แบบออฟไลน์ในไฟล์ ntds.dit ให้ใช้คำสั่งต่อไปนี้:

$keyboot=Get-BootKey -SystemHiveFilePath 'C:\ADBackup\registry\SYSTEM'
Get-ADDBAccount -All -DatabasePath 'C:\ADBackup\ntds.dit -BootKey $keyboot | ทดสอบ-คุณภาพรหัสผ่าน -WeakPasswordsFile $DictFile

คุณยังสามารถส่งออกรายการแฮชทั้งหมดไปยังไฟล์ข้อความ:

รับ-ADDBAccount -ทั้งหมด -DBPath 'C:\ADBackup\ntds.dit' -Bootkey $keyboot | รูปแบบ-กำหนดเอง -ดู HashcatNT | ออกไฟล์ c:\ps\ad_hashes.txt -Encoding ASCII

ไม่มีเครื่องมือในตัวสำหรับตั้งค่ารายการรหัสผ่านที่ไม่ถูกต้องสำหรับ Active Directory Domain Services อย่างไรก็ตาม ด้วย Azure การป้องกันรหัสผ่าน AD คุณสามารถบล็อกรหัสผ่านบางอย่าง (บัญชีดำ) ได้แม้ใน Active Directory ในองค์กรของคุณ

ดังนั้น เมื่อใช้สถานการณ์นี้ คุณจะสามารถวิเคราะห์คุณภาพของรหัสผ่านผู้ใช้ AD การต่อต้านการโจมตีด้วยกำลังดุร้าย สรุปความซับซ้อนของนโยบายรหัสผ่านของโดเมนในปัจจุบัน และทำการสรุปที่จำเป็น ผู้ดูแลระบบ Active Directory สามารถ (และควร) ดำเนินการตรวจสอบนี้เป็นประจำ