8 Kasım 2012 Perşembe

Active Directory: Reset Multiple User Password

Bilgisayar Olaylarına Müdahalede İlk Adım:

Ö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