Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Kiểm tra mật khẩu yếu trong Active Directory

Độ phức tạp của mật khẩu người dùng trong miền Active Directory là một trong những yếu tố bảo mật then chốt, bảo vệ cả dữ liệu người dùng lẫn toàn bộ cơ sở hạ tầng miền. Nhiều người dùng vẫn ưu tiên sử dụng mật khẩu đơn giản, dễ nhớ dù khuyến cáo không nên dùng thông tin cá nhân, từ điển hay tổ hợp đơn giản. Bài viết này sẽ hướng dẫn cách kiểm tra mật khẩu người dùng Active Directory, tìm mật khẩu yếu và đơn giản bằng PowerShell.

Ngay cả với chính sách mật khẩu miền phức tạp, người dùng vẫn có thể thiết lập mật khẩu yếu hoặc mặc định như Pa$$w0rd hay P@ssw0rd.

Cách cài đặt mô-đun PowerShell DSInternals (Directory Services Internals)?

Để so sánh hash mật khẩu người dùng lưu trữ trong cơ sở dữ liệu Active Directory (tệp ntds.dit) với từ điển các mật khẩu phổ biến và yếu, bạn có thể sử dụng mô-đun PowerShell của bên thứ ba – DSInternals. Mô-đun này chứa nhiều cmdlet cho phép thực hiện các hành động với cơ sở dữ liệu AD ở chế độ trực tuyến hoặc ngoại tuyến (trực tiếp với ntds.dit). Đặc biệt, chúng ta quan tâm đến cmdlet Test-PasswordQuality giúp phát hiện người dùng có mật khẩu yếu, tương tự, mặc định, trống (Password Not Required) hoặc mật khẩu không bao giờ hết hạn.

Lưu ý. Tự nhiên, mật khẩu người dùng không thể lấy được từ cơ sở dữ liệu AD dưới dạng văn bản thuần túy. Mật khẩu trong Active Directory được lưu dưới dạng hash. Tuy nhiên, bạn có thể so sánh hash mật khẩu của người dùng AD với hash của các từ trong tệp từ điển để tìm mật khẩu yếu.

Trong PowerShell phiên bản 5 (và mới hơn), bạn có thể cài đặt mô-đun DSInternals trực tuyến từ kho thư viện kịch bản PowerShell chính thức như sau:

Install-Module DSInternals

Đối với các phiên bản PowerShell cũ hơn hoặc môi trường không kết nối mạng, bạn phải tải xuống tệp nén .zip phiên bản mới nhất từ GitHub (https://github.com/MichaelGrafnetter/DSInternals/releases). Tại thời điểm bài viết này, bản phát hành mới nhất là DSInternals v4.4.1. Giải nén tệp này vào một trong các thư mục chứa mô-đun PowerShell:

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

Hoặc nhập mô-đun DSInternals vào phiên PowerShell hiện tại bằng lệnh:

Import-Module C:\distr\PS\DSInternals\DSInternals.psd1

Nếu xuất hiện lỗi “cannot be loaded because running scripts is disabled on this system” khi nhập mô-đun, bạn cần thay đổi chính sách thực thi PowerShell và cho phép chạy kịch bản bên ngoài ít nhất trong phiên hiện tại:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Danh sách các cmdlet có sẵn trong mô-đun có thể lấy như sau:

Get-Command -Module DSInternals

Tìm mật khẩu yếu Active Directory với cmdlet Test-PasswordQuality

Tiếp theo, bạn cần tạo một từ điển mật khẩu – một tệp văn bản đơn giản chứa danh sách mật khẩu thường dùng, yếu và kém an toàn. Bạn có thể tải từ điển mật khẩu từ Internet hoặc tự tạo. Mô-đun DSInternals cho phép so sánh hash mật khẩu người dùng AD với hash từ tệp này. Lưu mật khẩu vào tệp văn bản PasswordDict.txt.

Bây giờ tạo một kịch bản PowerShell nhỏ. Trong các biến sau, chỉ định đường dẫn đến tệp mật khẩu, tên miền và tên bộ điều khiển miền:

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

Sau đó, sử dụng cmdlet Get-ADReplAccount để lấy danh sách người dùng trong AD (tương tự Get-ADUser). Cmdlet này cũng trả về hash NT và LM của họ, cũng như lịch sử hash. Sau đó, đối với mỗi người dùng, so sánh hash mật khẩu với hash từ tệp từ điển (kiểm tra cũng thực hiện cho tài khoản bị vô hiệu hóa):

Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile $DictFile -IncludeDisabledAccounts

Kết quả chạy kịch bản có thể trông như sau:

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:

Trong các phiên bản trước của mô-đun DSInternals, tham số ShowPlainText có sẵn để hiển thị mật khẩu người dùng dưới dạng văn bản thuần túy nếu hash của nó được tìm thấy trong từ điển. Tham số này không có trong bản phát hành hiện tại của Test-PasswordQuality. Nếu bạn muốn sử dụng phiên bản cũ hơn của mô-đun DSInternals, hãy cài đặt nó bằng lệnh:

Install-Module -Name DSInternals -RequiredVersion 2.23

Tìm kiếm hash được thực hiện bao gồm cả lịch sử mật khẩu người dùng lưu trữ trong AD. Như bạn thấy, người dùng AD có mật khẩu đơn giản đã được tìm thấy thành công (mật khẩu khớp với từ điển). Một số người dùng có cùng mật khẩu cũng được phát hiện. Kịch bản này sẽ giúp bạn tìm thấy các tài khoản có mật khẩu đơn giản tuân theo Chính sách mật khẩu hạt mịn tùy chỉnh (Fine-Grained Password Policies).

Đối với người dùng có mật khẩu yếu, bạn có thể tạo mật khẩu ngẫu nhiên mạnh và buộc thay đổi chúng trong AD qua PowerShell.

Bạn cũng có thể thực hiện quét ngoại tuyến tệp cơ sở dữ liệu Active Directory (ntds.dit). Bạn có thể lấy bản sao của tệp ntds.dit từ bản sao bóng (shadow copy) hoặc từ bản sao lưu bộ điều khiển miền.

Để kiểm tra ngoại tuyến hash người dùng trong tệp ntds.dit, hãy sử dụng các lệnh sau:

$keyboot= Get-BootKey -SystemHiveFilePath 'C:\ADBackup\registry\SYSTEM'
Get-ADDBAccount -All -DatabasePath 'C:\ADBackup\ntds.dit -BootKey $keyboot | Test-PasswordQuality -WeakPasswordsFile $DictFile

Bạn cũng có thể xuất danh sách tất cả hash ra tệp văn bản:

Get-ADDBAccount -All -DBPath 'C:\ADBackup\ntds.dit' -Bootkey $keyboot | Format-Custom -View HashcatNT | Out-File c:\ps\ad_hashes.txt -Encoding ASCII

Không có công cụ tích hợp để đặt danh sách mật khẩu xấu cho Dịch vụ miền Active Directory. Tuy nhiên, với Bảo vệ mật khẩu Azure AD, bạn có thể chặn các mật khẩu nhất định (danh sách đen) ngay cả trong Active Directory tại chỗ.

Vì vậy, sử dụng kịch bản này bạn có thể dễ dàng phân tích chất lượng mật khẩu người dùng AD, khả năng chống lại tấn công brute force, đánh giá độ phức tạp của chính sách mật khẩu miền hiện tại và đưa ra kết luận cần thiết. Quản trị viên Active Directory có thể (và nên) thực hiện kiểm tra này định kỳ.