Độ 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 quan trọng đối với cả dữ liệu người dùng và toàn bộ cơ sở hạ tầng miền. Nhiều người dùng thích sử dụng mật khẩu đơn giản và dễ nhớ mặc dù khuyến cáo không sử dụng thông tin cá nhân, từ điển và các kết hợp đơn giản làm mật khẩu. Trong bài viết này, chúng tôi sẽ hướng dẫn bạ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, về mặt kỹ thuật, người dùng có thể đặt mật khẩu yếu hoặc mật khẩu mặc định, chẳng hạn như
Pa $$ w0rd
hoặc P @ ssw0rd
.
Cách cài đặt mô-đun PowerShell DSInternals (Directory Services Internals)?
Để so sánh hàm băm của mật khẩu người dùng được 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 đơn giản và phổ biến, bạn có thể sử dụng mô-đun PowerShell của bên thứ ba - DSInternals. Mô-đun này chứa một số lệnh ghép ngắn cho phép thực hiện các hành động khác nhau 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 tôi quan tâm đến Test-PasswordQuality lệnh ghép ngắn cho phép phát hiện người dùng có mật khẩu trống, tương tự, tiêu chuẩn, yếu (Không yêu cầu mật khẩu) hoặc mật khẩu không bao giờ hết hạn.
Lưu ý. Đương 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 được lưu trữ trong Active Directory được băm. Tuy nhiên, bạn có thể so sánh hàm băm mật khẩu của người dùng AD với hàm băm của từ từ tệp từ điển và 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 trực tuyến mô-đun DSInternals từ thư viện tập lệnh PowerShell chính thức như sau:
DSInternals mô-đun cài đặt
Trong các phiên bản PowerShell trước đó hoặc trong môi trường bị ngắt kết nối, bạn phải tải xuống tệp lưu trữ .zip với phiên bản mô-đun mới nhất từ GitHub (https://github.com/MichaelGrafnetter/DSInternals/releases). Vào thời điểm bài viết này được viết, bản phát hành mới nhất là DSInternals v4.4.1. Giải nén kho lưu trữ 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 của bạn bằng lệnh sau:
Mô-đun nhập C:\ distr \ PS \ DSInternals \ DSInternals.psd1
không thể tải vì tập lệnh đang chạy bị tắt trên hệ thống này
”Xuất hiện khi nhập mô-đun, bạn cần thay đổi chính sách thực thi PowerShell hiện tại và cho phép các tập lệnh PS bên ngoài chạy ít nhất trong phiên hiện tại:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
Danh sách các lệnh ghép ngắn mô-đun có sẵn như sau:
Get-Command -Module DSInternals
Tìm mật khẩu Active Directory Yếu bằng Test-PasswordQuality Cmdlet
Tiếp theo, bạn cần tạo một từ điển mật khẩu. Nó sẽ là một tệp văn bản đơn giản với danh sách các mật khẩu thường được sử dụng, yếu và các mật khẩu xấu khác. Bạn có thể tải xuống tệp từ điển mật khẩu từ Internet hoặc tự tạo. Mô-đun DSInternal cho phép bạn so sánh các băm mật khẩu của người dùng trong Active Directory với các băm của các từ từ tệp này. Lưu mật khẩu vào tệp văn bản PasswordDict.txt .
Bây giờ, hãy tạo một tập lệnh 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 Get-ADReplAccount cmdlet, lấy danh sách người dùng trong AD (như Get-ADUser). Ngoài ra, lệnh ghép ngắn này trả về các hàm băm NT và LM, cũng như lịch sử băm. Sau đó, đối với mỗi người dùng, hãy so sánh băm của mật khẩu với băm từ tệp từ điển (việc kiểm tra cũng được thực hiện đối với tài khoản người dùng bị vô hiệu hóa):
Get-ADReplAccount -All -Server $ DC -NamingContext $ Domain | Test-PasswordQuality -WeakPasswordsFile $ DictFile -IncludeDisabledAccounts
Kết quả của việc chạy tập lệnh có thể trông giố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 DSInternal,
ShowPlainText
tham số có sẵn để hiển thị mật khẩu của người dùng ở dạng văn bản rõ ràng nếu mã băm của nó được tìm thấy trong từ điển. Nó bị thiếu 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 -Tên DSInternals -RequiredVersion 2.23
Tìm kiếm băm được thực hiện bao gồm lịch sử mật khẩu người dùng được lưu trữ trong AD. Như bạn có thể thấy, người dùng AD với 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 tìm thấy. Tập lệnh này sẽ giúp bạn tìm 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 chi tiết tùy chỉnh.
Đố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 thông 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 ẩn hoặc từ bản sao lưu bộ điều khiển miền.
Để kiểm tra ngoại tuyến các hàm băm của 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ả các hàm băm sang tệp văn bản:
Get-ADDBAccount -All -DBPath 'C:\ ADBackup \ ntds.dit' -Bootkey $ keyboot | Định dạng-Tùy chỉnh -Xem HashcatNT | Out-File c:\ ps \ ad_hashes.txt -Encoding ASCII
Vì vậy, bằng cách sử dụng kịch bản này, bạn có thể dễ dàng phân tích chất lượng của mật khẩu người dùng AD, khả năng chống lại các cuộc tấn công vũ phu, kết luận về độ phức tạp của chính sách mật khẩu miền hiện tại và đưa ra các 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 thường xuyên.