Active Directory'de Zayıf Parolaları Denetleme
Active Directory etki alanındaki bir kullanıcı parolasının karmaşıklığı, hem kullanıcı verileri hem de tüm etki alanı altyapısı için temel güvenlik unsurlarından biridir. Parola olarak kişisel bilgilerin, sözlük sözcüklerinin ve basit kombinasyonların kullanılmaması tavsiyesine rağmen, birçok kullanıcı basit ve hatırlaması kolay parolalar kullanmayı tercih etmektedir. Bu yazımızda PowerShell kullanarak Active Directory kullanıcı şifrelerini nasıl denetleyeceğinizi, zayıf ve basit şifreleri nasıl bulacağınızı göstereceğiz.
Karmaşık bir etki alanı parola politikasıyla bile, bir kullanıcı teknik olarak zayıf veya varsayılan bir parola ayarlayabilir.
Pa$$w0rdveya
P@ssw0rdDSInternals (Directory Services Internals) PowerShell Modülü Nasıl Kurulur?
Active Directory veritabanında (ntds.dit dosyası) depolanan kullanıcı parolalarının karma değerlerini basit ve yaygın parolalardan oluşan bir sözlükle karşılaştırmak için üçüncü taraf bir PowerShell modülü kullanabilirsiniz - DSInternals. Bu modül AD veritabanıyla çevrimiçi veya çevrimdışı modda (doğrudan ntds.dit ile) farklı eylemler gerçekleştirmeye izin veren bir dizi cmdlet içerir. Özellikle, zayıf, benzer, standart, boş parolalara sahip (Parola Gerekli Değil) veya parolalarının süresi asla dolmayan kullanıcıların tespit edilmesini sağlayan Test-PasswordQuality cmdlet ile ilgileniyoruz.
Not. Doğal olarak kullanıcı şifreleri AD veri tabanından düz metin olarak alınamaz. Active Directory'de depolanan parolalar hashlenir. Ancak, AD kullanıcılarının parola karmalarını bir sözlük dosyasındaki sözcüklerin karmalarıyla karşılaştırabilir ve zayıf parolalar bulabilirsiniz.
PowerShell sürüm 5'te (ve daha yeni), DSInternals modülünü resmi PowerShell betik galerisinden çevrimiçi olarak aşağıdaki şekilde kurabilirsiniz:
Install-Module DSInternalsÖnceki PowerShell sürümlerinde veya bağlantısı kesilmiş ortamda, GitHub'dan (https://github.com/MichaelGrafnetter/DSInternals/releases) en son modül sürümüyle .zip arşivini indirmeniz gerekir. Bu makale yazıldığında, en son sürüm DSInternals v4.4.1 idi. Bu arşivi PowerShell modüllerini içeren dizinlerden birine çıkarın:
C:\Windows\system32\WindowsPowerShell 1.0\Modules\DSInternals
C:\Users\%username%\Documents\WindowsPowerShell\Modules\DSInternals
Veya şu komutu kullanarak DSInternals modülünü mevcut PowerShell oturumunuza aktarın:
Import-Module C:\distr\PS\DSInternals\DSInternals.psd1Eğer hata “
cannot be loaded because running scripts is disabled on this system” bir modülü içe aktarırken görünürse, geçerli PowerShell yürütme ilkesini değiştirmeniz ve harici PS betiklerinin en azından geçerli oturumda çalışmasına izin vermeniz gerekir:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -ForceKullanılabilir modül cmdlet'lerinin listesi aşağıdaki gibi elde edilebilir:
Get-Command -Module DSInternalsTest-PasswordQuality Cmdlet ile Zayıf Aktif Dizin Parolalarını Bulun
Ardından, bir parola sözlüğü oluşturmanız gerekir. Yaygın olarak kullanılan, zayıf ve diğer kötü parolaların listesini içeren basit bir metin dosyası olacaktır. İnternetten bir şifre sözlük dosyası indirebilir veya kendiniz oluşturabilirsiniz. DSInternal modülü, kullanıcılarınızın Active Directory'deki parolalarının karmalarını bu dosyadaki sözcüklerin karmalarıyla karşılaştırmanıza olanak tanır. Şifreleri bir PasswordDict.txt metin dosyasına kaydedin.
Şimdi küçük bir PowerShell betiği oluşturun. Aşağıdaki değişkenlerde parola dosyasının yolunu, etki alanı adını ve etki alanı denetleyici adını belirtin:
$DictFile = "C:\distr\PS\DSInternals\PasswordDict.txt"
$DC = "lon-dc01"
$Domain = "DC=a-d,DC=loc"Ardından, Get-ADReplAccount cmdlet'ini kullanarak AD'deki kullanıcıların bir listesini alın (Get-ADUser gibi). Ek olarak, bu cmdlet NT ve LM karmalarının yanı sıra karma geçmişini de döndürür. Ardından, her kullanıcı için, parolanın sağlamasını sözlük dosyasındaki sağlamalarla karşılaştırın (kontrol, devre dışı bırakılmış kullanıcı hesapları için de yapılır):
Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile $DictFile -IncludeDisabledAccountsKomut dosyasını çalıştırmanın sonucu şöyle görünebilir:
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:
DSInternal modülünün önceki sürümlerinde,
ShowPlainTextparametresi, hash'i sözlükte bulunursa kullanıcının şifresini düz metin olarak görüntülemek için kullanılabilirdi. Test-PasswordQuality'nin mevcut sürümünde eksik. DSInternals modülünün daha eski bir sürümünü kullanmak istiyorsanız şu komutla kurun:
Install-Module -Name DSInternals -RequiredVersion 2.23AD'de saklanan kullanıcı şifresi geçmişi dahil olmak üzere karma aramalar gerçekleştirilir. Gördüğünüz gibi, basit parolalara sahip AD kullanıcıları başarıyla bulundu (parolalar sözlükle eşleşiyor). Aynı şifrelere sahip birkaç kullanıcı da bulundu. Bu komut dosyası, özel İnce Tanecikli Parola İlkelerine tabi olan basit parolalara sahip hesapları bulmanıza yardımcı olacaktır.
Parolaları zayıf olan kullanıcılar için güçlü rasgele parolalar oluşturabilir ve bunları PowerShell aracılığıyla AD'de değiştirmeye zorlayabilirsiniz.
Active Directory veritabanı dosyasının (ntds.dit) çevrimdışı taramasını da gerçekleştirebilirsiniz. Ntds.dit dosyasının bir kopyasını bir gölge kopyadan veya bir etki alanı denetleyicisi yedeğinden alabilirsiniz.
Ntds.dit dosyasındaki kullanıcı karmalarını çevrimdışı kontrol etmek için aşağıdaki komutları kullanın:
$keyboot= Get-BootKey -SystemHiveFilePath 'C:\ADBackup\registry\SYSTEM'
Get-ADDBAccount -All -DatabasePath 'C:\ADBackup\ntds.dit -BootKey $keyboot | Test-PasswordQuality -WeakPasswordsFile $DictFileTüm karmaların listesini bir metin dosyasına da aktarabilirsiniz:
Get-ADDBAccount -All -DBPath 'C:\ADBackup\ntds.dit' -Bootkey $keyboot | Format-Custom -View HashcatNT | Out-File c:\ps\ad_hashes.txt -Encoding ASCIIActive Directory Etki Alanı Hizmetleri için hatalı parola listesini ayarlamak için yerleşik araçlar yoktur. Ancak Azure AD parola koruması ile şirket içi Active Directory'nizde bile belirli parolaları (kara liste) engelleyebilirsiniz.
Dolayısıyla, bu senaryoyu kullanarak AD kullanıcı parolalarının kalitesini, kaba kuvvet saldırılarına karşı dirençlerini, mevcut etki alanı parola politikası karmaşıklığını kolayca analiz edebilir ve gerekli sonuçları çıkarabilirsiniz. Active Directory yöneticileri bu denetimi düzenli olarak gerçekleştirebilir (ve yapmalıdır).


