Örneğin sisteminizin birileri tarafından ele geçirildiğinden şüpheleniyorsunuz ve hızlı bir şekilde olaya müdahale etmek istiyorsunuz. Yalnız ne büyüklükte bir saldırı olduğunu bilmiyorsunuz. Bu durumda ilk yapılması gerekenlerden biri saldırıya uğrayan bölümünüzün veya belirli bir kullanıcı grubunun veya da tüm kullanıcılarınızın şifrelerini çok hızlı bir şekilde değiştirerek işleme başlayabilirsiniz.
Aktif dizinde kullanabileceğimiz bu scriptler aynı zamanda Remote Server Administration Tools (RSAT) kurulu makinelerde de kullanılabilir.
Şifre resetleme işlemi için "SIBERBLOG\Administrator" kullanıcısını kullandığımız varsayılarak bu kullanıcının şifre değişimi pas geçilmiştir.
Şifre resetleme için 6 farklı Powershell script örneği yapacağız.
1- Tüm aktif dizin kullanıcılarının şifrelerini belirlenen bir şifreye eşitleme.
2- Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının şifrelerini belirlenen bir şifreye eşitleme.
3- Tüm aktif dizin kullanıcılarının şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
4- Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
5- Belirlenen (klavyeden girilen) kullanıcı grubuna ait tüm kullanıcıların şifrelerini belirlenen (klavyeden girilen) bir şifreye eşitleme.
6- Belirlenen (klavyeden girilen) kullanıcı grubu üyelerinin şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
Farklı çözümler için değişik scriptler hazırlanmıştır. Şimdi sıra ile scripleri inceleyelim.
DİKKAT: Aktif dizin şifre politikasına uygun şifre belirlenmelidir. Aksi taktirde şifreler değişmez ve hata mesajı alırsınız.

1.Script UserPassResetV1.ps1: Tüm aktif dizin kullanıcılarının şifrelerini belirlenen (klavyeden girilen) bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV1.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Tüm aktif dizin kullanıcılarının şifrelerini belirlenen bir şifreye eşitleme. # VERSION: 1 # =========================================================== # Import-Module ActiveDirectory #$NewPassword = "P@ssw0rd1" $NewPassword = (Read-Host -Prompt "New Password" -AsSecureString) Get-ADUser -Filter {SamAccountName -ne "Administrator" -and Enabled -eq $True} | Set-ADAccountPassword -NewPassword $NewPassword -Reset |
Script1 download: UserPassResetV1.ps1
Script ekran çıktısı:

2.Script UserPassResetV2.ps1: Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının şifrelerini belirlenen (klavyeden girilen) bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV2.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının # şifrelerini belirlenen bir şifreye eşitleme. # VERSION: 2 # =========================================================== # Import-Module ActiveDirectory $NewPassword = (Read-Host -Prompt "New Password" -AsSecureString) #$NewPassword = "P@ssw0rd1" #Kullanıcıların bulundugu OU'yu belirtin $OrganizationUnit = "OU=Users,OU=TEST,DC=SIBERBLOG,DC=ORG" Get-ADUser -Filter {SamAccountName -ne "Administrator" -and Enabled -eq $True} -SearchBase $OrganizationUnit | Set-ADAccountPassword -NewPassword $NewPassword -Reset |
Script2 download: UserPassResetV2.ps1
Script ekran çıktısı:

3.Script UserPassResetV3.ps1: Tüm aktif dizin kullanıcılarının şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV3.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Tüm aktif dizin kullanıcılarının şifrelerini belirlenen şifre # politikasına göre otomatik üretilen bir şifreye eşitleme. # VERSION: 3 # =========================================================== # Import-ModuleActiveDirectory Function SifreUretim { $Sifre = New-Object System.Random #Şifre kaç karakter uzunlukta olacak? [int]$SifreUzunlugu= 8 #En az kaç büyük harf içerecek [int]$Min_Buyuk = 1 #En az kaç küçük harf içerecek [int]$Min_Kucuk = 1 #En az kaç rakam içerecek [int]$Min_Rakam = 1 #En az kaç sembol içerecek [int]$Min_Sembol = 1 #Geri kalan karakter sayısı [int]$Kalan = ($SifreUzunlugu - ($Min_Buyuk+$Min_Kucuk+$Min_Rakam+$Min_Sembol)) #Karakter listeleri $Buyuk= @("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") $Kucuk= @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") $Rakam= @(1,2,3,4,5,6,7,8,9,0) $Sembol= @("!","@","#","%","&","(",")","`"",".","<",">","+","=","-","_") $Tamami=$Buyuk + $Kucuk + $Rakam + $Sembol$Sifre= @() $Tamami= @() #$Buyuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Buyuk-gt 0) { 1..$Min_Buyuk | % {$Sifre+=Get-Random$Buyuk} $Tamami+=$Buyuk } #$Kucuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Kucuk-gt 0) { 1..$Min_Kucuk | % {$Sifre+=Get-Random$Kucuk} $Tamami+=$Kucuk } #$Rakam dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Rakam-gt 0) { 1..$Min_Rakam | % {$Sifre+=Get-Random$Rakam} $Tamami+=$Rakam } #$Sembol dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Sembol -ne 0){ 1..$Min_Sembol | % {$Sifre+=Get-Random$Sembol} $Tamami+=$Sembol } #İstenilen şifre uzunluğuna tamamlamak için geri kalanları tamamından seçerek şifreye ekle 1..$Kalan | % {$Sifre+=Get-Random$Tamami} #İstenilen uzunlukta elde edilen şifreyi kendi içinde karıştır $YeniSifre = @() Get-Random$Sifre-count$SifreUzunlugu | % {[string]$YeniSifre+=$_} Return $YeniSifre } $UserList=Get-ADUser -Filter {SamAccountName -ne “Administrator” -and Enabled -eq $True} #İşlem tarihini dosyaya ekliyoruz. Get-Date | Out-File “Users.txt” -Append Foreach($User in $UserList) { $YeniSifre=SifreUretim Set-ADAccountPassword $User -NewPassword (ConvertTo-SecureString $YeniSifre -AsPlainText -force) -Reset Write-Host “$($User.SamAccountName),$YeniSifre” #Kullanıcı ve yeni şifreleri dosyaya aktarıyoruz “$($User.SamAccountName),$($YeniSifre)” | Out-File “Users.txt” -Append } |
Script3 download: UserPassResetV3.ps1
Script ekran çıktısı ve "Users.txt" dosya içeriği:

4.Script UserPassResetV4.ps1: Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV4.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Belirlenen bir OU altındaki tüm aktif dizin kullanıcılarının şifrelerini # belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme. # VERSION: 4 # =========================================================== # Import-Module ActiveDirectory Function SifreUretim { $Sifre = New-Object System.Random #Şifre kaç karakter uzunlukta olacak? [int]$SifreUzunlugu = 8 #En az kaç büyük harf içerecek [int]$Min_Buyuk = 1 #En az kaç küçük harf içerecek [int]$Min_Kucuk = 1 #En az kaç rakam içerecek [int]$Min_Rakam = 1 #En az kaç sembol içerecek [int]$Min_Sembol = 1 #Geri kalan karakter sayısı [int]$Kalan = ($SifreUzunlugu - ($Min_Buyuk+$Min_Kucuk+$Min_Rakam+$Min_Sembol)) #Karakter listeleri $Buyuk= @("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") $Kucuk= @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") $Rakam= @(1,2,3,4,5,6,7,8,9,0) $Sembol= @("!","@","#","%","&","(",")","`"",".","<",">","+","=","-","_") $Tamami=$Buyuk + $Kucuk + $Rakam + $Sembol$Sifre= @() $Tamami= @() #$Buyuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Buyuk-gt 0) { 1..$Min_Buyuk | % {$Sifre+=Get-Random$Buyuk} $Tamami+=$Buyuk } #$Kucuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Kucuk-gt 0) { 1..$Min_Kucuk | % {$Sifre+=Get-Random$Kucuk} $Tamami+=$Kucuk } #$Rakam dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Rakam-gt 0) { 1..$Min_Rakam | % {$Sifre+=Get-Random$Rakam} $Tamami+=$Rakam } #$Sembol dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Sembol -ne 0){ 1..$Min_Sembol | % {$Sifre+=Get-Random$Sembol} $Tamami+=$Sembol } #İstenilen şifre uzunluğuna tamamlamak için geri kalanları tamamından seçerek şifreye ekle 1..$Kalan | % {$Sifre+=Get-Random$Tamami} #İstenilen uzunlukta elde edilen şifreyi kendi içinde karıştır $YeniSifre = @() Get-Random$Sifre-count$SifreUzunlugu | % {[string]$YeniSifre+=$_} Return $YeniSifre } #Kullanıcıların bulundugu OU'yu belirtin $OrganizationUnit="OU=Users,OU=TEST,DC=SIBERBLOG,DC=ORG" $UserList=Get-ADUser -Filter {SamAccountName-ne "Administrator" -and Enabled -eq$True} -SearchBase$OrganizationUnit #İşlem tarihini dosyaya ekliyoruz. Get-Date | Out-File"Users.txt" -Append Foreach($Userin$UserList) { $YeniSifre=SifreUretim Set-ADAccountPassword $User-NewPassword (ConvertTo-SecureString $YeniSifre -AsPlainText -force) -ResetWrite-Host "$($User.SamAccountName),$YeniSifre" #Kullanıcı ve yeni şifreleri dosyaya aktarıyoruz "$($User.SamAccountName),$($YeniSifre)" | Out-File"Users.txt"-Append } |
Script4 download: UserPassResetV4.ps1
Script ekran çıktısı ve "Users.txt" dosya içeriği:

5.Script UserPassResetV5.ps1: Belirlenen (klavyeden girilen) kullanıcı grubuna ait tüm kullanıcıların şifrelerini belirlenen (klavyeden girilen) bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV5.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Belirlenen bir gruba üye tüm aktif kullanıcıların şifrelerini # belirlenen şifreye eşitleme. # VERSION: 5 # =========================================================== # Import-Module ActiveDirectory #Kullanıcı grubu belirtin $KullaniciGrubu=(Read-Host -Prompt "Kullanıcı grubu giriniz (Domain Admins): ") #$KullaniciGrubu="Domain Admins" $YeniSifre= (Read-Host -Prompt "Yeni şifre: ") #$YeniSifre = "P@ssw0rd1" $UserList=Get-ADGroupMember -Identity $KullaniciGrubu #İşlem tarihini dosyaya ekliyoruz. Get-Date | Out-File "Users.txt" -Append Foreach($User in $UserList) { #Kullanıcı Administrator kullanıcısı mı ve aktif mi kontrol edelim $AktifKontrol=Get-ADUser $User.SamAccountName -Properties Enabled if ($AktifKontrol.Enabled -eq $True -and $AktifKontrol.SamAccountName -ne "Administrator" ) { Set-ADAccountPassword $User -NewPassword (ConvertTo-SecureString $YeniSifre -AsPlainText -force) -Reset Write-Host "$($User.SamAccountName),$YeniSifre" #Kullanıcı ve yeni şifreleri dosyaya aktarıyoruz "$($User.SamAccountName),$($YeniSifre)" | Out-File "Users.txt" -Append } } |
Script5 download UserPassResetV5.ps1
Script ekran çıktısı:

6.Script UserPassResetV6.ps1: Belirlenen (klavyeden girilen) kullanıcı grubu üyelerinin şifrelerini belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme.
# =========================================================== # NAME: UserPassResetV6.ps1 # AUTHOR: Bekir Yalçın # DATE: 08/11/2012 # COMMENT: Belirlenen bir gruba üye tüm aktif kullanıcıların şifrelerini # belirlenen şifre politikasına göre otomatik üretilen bir şifreye eşitleme. # VERSION: 6 # =========================================================== # Import-Module ActiveDirectory Function SifreUretim { $Sifre = New-Object System.Random #Şifre kaç karakter uzunlukta olacak? [int]$SifreUzunlugu = 8 #En az kaç büyük harf içerecek [int]$Min_Buyuk = 1 #En az kaç küçük harf içerecek [int]$Min_Kucuk = 1 #En az kaç rakam içerecek [int]$Min_Rakam = 1 #En az kaç sembol içerecek [int]$Min_Sembol = 1 #Geri kalan karakter sayısı [int]$Kalan = ($SifreUzunlugu - ($Min_Buyuk + $Min_Kucuk + $Min_Rakam + $Min_Sembol)) #Karakter listeleri $Buyuk = @("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") $Kucuk = @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") $Rakam = @(1,2,3,4,5,6,7,8,9,0) $Sembol = @("!","@","#","%","&","(",")","`"",".","<",">","+","=","-","_") $Tamami = $Buyuk + $Kucuk + $Rakam + $Sembol $Sifre = @() $Tamami = @() #$Buyuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Buyuk -gt 0) { 1..$Min_Buyuk | % {$Sifre += Get-Random $Buyuk} $Tamami += $Buyuk } #$Kucuk dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Kucuk -gt 0) { 1..$Min_Kucuk | % {$Sifre += Get-Random $Kucuk} $Tamami += $Kucuk } #$Rakam dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Rakam -gt 0) { 1..$Min_Rakam | % {$Sifre += Get-Random $Rakam} $Tamami += $Rakam } #$Sembol dizisinden istenilen kadar karakter al ve Sifre'ye ekle if ($Min_Sembol -gt 0){ 1..$Min_Sembol | % {$Sifre += Get-Random $Sembol} $Tamami += $Sembol } #İstenilen şifre uzunluğuna tamamlamak için geri kalanları tamamından seçerek şifreye ekle 1..$Kalan | % {$Sifre += Get-Random $Tamami} #İstenilen uzunlukta elde edilen şifreyi kendi içinde karıştır $YeniSifre = @() Get-Random $Sifre -count $SifreUzunlugu | % {[string]$YeniSifre+= $_} Return $YeniSifre } #Kullanıcı grubu belirtin $KullaniciGrubu=(Read-Host -Prompt "Kullanıcı grubu giriniz (Domain Admins): ") #$KullaniciGrubu="Domain Admins" $UserList=Get-ADGroupMember -Identity $KullaniciGrubu #$UserList=Get-ADUser -Filter {SamAccountName -ne "Administrator" -and Enabled -eq $True} -SearchBase $OrganizationUnit #İşlem tarihini dosyaya ekliyoruz. Get-Date | Out-File "Users.txt" -Append Foreach($User in $UserList) { #Kullanıcı Administrator kullanıcısı mı ve aktif mi kontrol edelim $AktifKontrol=Get-ADUser $User.SamAccountName -Properties Enabled if ($AktifKontrol.Enabled -eq $True -and $AktifKontrol.SamAccountName -ne "Administrator" ) { $YeniSifre=SifreUretim Set-ADAccountPassword $User -NewPassword (ConvertTo-SecureString $YeniSifre -AsPlainText -force) -Reset Write-Host "$($User.SamAccountName),$YeniSifre" #Kullanıcı ve yeni şifreleri dosyaya aktarıyoruz "$($User.SamAccountName),$($YeniSifre)" | Out-File "Users.txt" -Append } } |
Script6 download: UserPassResetV6.ps1
Script ekran çıktısı:

NOT: Yetkili kullanıcı hesaplarına ait şifreler saldırgan tarafından ele geçirilip değiştirildi ise hızlı kurtarmak için http://siberblog.org/index.php/active-directory-administrator-password-reset/ linkini kullanabilirsiniz.
Hiç yorum yok:
Yorum Gönder