PowerShell ile zayıf Active Directory user şifrelerini bulun – DSInternals


Active Directory etki alanındaki bir kullanıcı şifresinin karmaşıklığı, hem kullanıcı verileri hem de tüm etki alanı için temel güvenlik öğelerinden biridir. Kural olarak, kullanıcılar zayıf, hatırlanması kolay şifreler kullanmayı tercih eder. Böylece, kullanıcı hesaplarını bilgisayar korsanlarına karşı koruma seviyesini önemli seviyede azaltırlar. Bu yazıda, PowerShell kullanarak Active Directory’de kullanıcıların parola gücünün nasıl denetleneceğini göstereceğiz.

Saldırılara karşı kullanıcı şifresi direncini test etmek için DSInternals PowerShell modülünü kullanacağız. Bu modül, AD veritabanıyla çevrimiçi veya çevrimdışı modda (doğrudan ntds.dit ile) farklı işlemler gerçekleştirmenize izin veren birkaç cmdlet içerir. Özellikle zayıf, benzer, standart veya boş şifreleri olan kullanıcıları tespit etmeyi sağlayan Test-PasswordQuality cmdlet’i ile bahsettiğimiz şifreleri tespit edeceğiz.

PowerShell 5’te, DSInternals’ı resmi PowerShell script galerisinden aşağıdaki şekilde çevrimiçi olarak yükleyebilirsiniz.

Install-Module DSInternals

Daha önceki PowerShell sürümlerinde, .zip arşivini GitHub’dan indirebilirsiniz.

https://github.com/MichaelGrafnetter/DSInternals/releases

Bu zip dosyasını PowerShell modüllerini içeren aşağıdaki dizinlerden birinde açabilirsiniz.

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

Ya da aşağıdaki komutu kullanarak modülü içe aktarabilirsiniz. Dosya yolunu kendinize göre değiştirmeyi unutmayın.

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

Mevcut cmdlet’lerin listesi aşağıdaki şekilde görüntüleyebilirsiniz.

Get-Command -Module DSInternals

Sık kullanılan ya da bad password diye adlandırdığımız şifreleri içeren bir .txt dosyaya ihtiyacımız olacak. İnternetten indirebilir veya kendiniz oluşturabilirsiniz. Aşağıda, bahsettiğimiz bad password listesine ulaşabilieceğiniz bir bağlantı paylaştım.

https://github.com/danielmiessler/SecLists/tree/master/Passwords

Active Directory’deki kullanıcı hesapları bu şifrelere göre kontrol edilecektir. Şifreleri passwordlist.txt metin dosyasına kaydedelim.

Aşağıdaki değişkenlerde, parola içeren dosyanın yolunu, etki alanı adını ve etki alanı denetleyicisi adını belirtin.

Import-Module DSInternals

$DictFile = “C:\pass\passwordlist.txt”
$DC = “DomainController”
$Domain = “DC=domain,DC=local”
$Dict = Get-Content $DictFile | ConvertTo-NTHashDictionary

Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordHashes $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts

Komut dosyasını çalıştırdıktan sonra şöyle görünecektir.

Zayıf şifreleri test etmek için diğer örnekler

Güçlü bir parola politikanız varsa, Test-PasswordQuality komutunu kullanmak yerine parolaları mevcut bir listeden birkaç farklı yolla test edebiliriz.

Örneğin, bir şifrenin minimum şifre uzunluğunu karşıladığından emin olmak için aşağıdaki komut dizimini kullanabilirsiniz.

$password = ‘1234’
$pwPolicy = Get-ADDefaultDomainPasswordPolicy
if ($password.Length -lt $pwPolicy.MinPasswordLength) {
Write-Warning “Password under minimum password length: $($pwPolicy.MinPasswordLength)”
}

Parolanın samAccountName ile aynı olmadığından da emin olabiliriz.

$password = ‘1234’
$adUser = Get-AdUser -Identity ‘abertram’
if (($aduser.SamAccountName) -And ($password -match $aduser.SamAccountName)) {
Write-Warning “Password matches SamAccountName”
}

Son örnekte, bir parolanın parola politikası tarafından belirlenen karmaşıklık standartlarını karşıladığından emin olabiliriz. Aşağıda, çeşitli regex modelleriyle eşleştiğinden emin olmak için bir parolayı kontrol ediyorum.

$password = ‘AdamTheAutomatorIsMyHero!’
$pwPolicy = Get-ADDefaultDomainPasswordPolicy
if ($pwPolicy.ComplexityEnabled) {
$patternsToMatch = “[A-Z\p{Lu}\s]”, “[a-z\p{Ll}\s]”,”[\d]”, “[^\w]”
foreach ($pattern in $patternsToMatch) {
if ($password -notmatch $pattern) {
Write-Warning -Message “The password [$password] does not match regex pattern [$pattern]!”
}
}
}

Bu senaryoları kullanarak, AD kullanıcı şifrelerinin kalitesini, brute force ataklarına karşı dayanıklılıklarını kolayca analiz edebilir, mevcut şifre karmaşıklığı politikasını tahmin edebilir ve gerekli önlemleri alabilirsiniz. Active Directory yöneticilerinin bu denetimi düzenli olarak yapmalarını öneririm.

KAYNAKPOWERSHELL