Bu yazımda, ShadowBrokers’ın NSA’dan sızdırdığı açıkları kullanarak global çapta saldırılara hedef olan sistemler için gerekli güvenlik güncelleştirmelerinin nasıl yapılacağı ve kontrolü üzerinde duracağız.
Daha önce wannacry makalesinde değindiğimiz gibi ( makaleyi okumak için Tıklayınız ) 2017 yılı başında ShadowBrokers ismindeki bir siber suç grubunun NSA’dan sızdırdığı bazı açıklıklar ilk olarak global bir wannacry saldırısına dönüşmüş ve tüm dünyayı kaotik bir ortama sürüklemişti.
Bu seferde aynı açıklıkları ve aynı yöntemi kullanan Petya zararlısı ile karşı karşıyayız. Henüz Ukrayna, UK gibi ülkeleri yoğun şekilde etkileyen zararlı wannacry etkisine doğru hızla yaklaşmakta ve yine sistem/network mühendislerini korkuya sevketmektedir.
Bu yazımızda en azından üzerimize düşen görevleri yapmak adına, gerekli kritik güncellemelerin sistemlerde yapılıp yapılmadığını kontrol etmek için bir PS scripti hazırlıyoruz.
SMB için mevcut durumu aşağıdaki komut ile görebiliriz;
SMB Server için;
(Windows 8 ve 2012 sonrası için)
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
SMBv1 i kapatmak için
Set-SmbServerConfiguration -EnableSMB1Protocol $false
SMBv2 kapatmak için
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Windows 7 ve 2008 sistemler için
SMBv1 kapatmak
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB1 -Type DWORD -Value 0 -Force
SMBv2 kapatmak için
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB2 -Type DWORD -Value 0 -Force
SMBv1 açmak için
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB1 -Type DWORD -Value 1 -Force
SMBv2 yi açmak için
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB2 -Type DWORD -Value 1 -Force
Güncelleme kontrolleri :
Tek bir sistem üzerinde kontrol ( PS ) :
#########
$Hostname = hostname
$hotfixes = “KB4012212”, “KB4012217”, “KB4015551”, “KB4019216”, “KB4012216”, “KB4015550”, “KB4019215”, “KB4013429”, “KB4019472”, “KB4015217”, “KB4015438”, “KB4016635”, “KB4012213”, “KB4012212″
$hotfix = Get-HotFix -ComputerName $Hostname | Where-Object {$hotfixes -contains $_.HotfixID} | Select-Object -property “HotFixID”
if (Get-HotFix | Where-Object {$hotfixes -contains $_.HotfixID} )
{
“Found HotFix: ” + $hotfix.HotFixID
} else {
“Update yüklü değil.”
}
#########
Güncelleme içeriği ( her sistem için her güncelleme bilgisini yazamanıza gerek yok )
( KB4012212 – Windows Server 2008
KB4012212 – Windows Server 2008 R2
KB4012217 KB4015551 KB4019216 – Windows Server 2012
KB4012216 KB4015550 KB4019215 KB4012213 – Windows Server 2012 R2
KB4013429 KB4019472 KB4015217 KB4015438 KB4016635 – Windows Server 2016)
AD veya diğer ortamlarınız için kontroller :
eğer kontrol edeceğiniz hostları bir txt dosyasına yazmışsanız ve bu txt dosyasından okuyarak tarama yapmak istiyorsanız :
( c:\temp\hostname.txt dizini hostları yazdığınız dosyanın dizini olmalı ve txt içeriği şu şekilde olmalıdır :
pc1
pc2
pc3
srv01 )
cls
$Installed=@()
$NotInstalled=@()
$Serverlist=Get-Content c:\temp\hostname.txt
$hotfixes = “KB4012212”,“KB4012217”,“KB4015551”,“KB4019216”,“KB4012216”,“KB4015550”,“KB4019215”,“KB4013429”,“KB4019472”,“KB4015217”,“KB4015438”,“KB4016635”,”KB4012213″,”KB4012214″
foreach ($server in $Serverlist) {
$Hostname = $server
$hotfix = Get-HotFix -ComputerName $Hostname | Where-Object {$hotfixes -contains $_.HotfixID} | Select-Object -property “HotFixID”
if (Get-HotFix -ComputerName $Hostname | Where-Object {$hotfixes -contains $_.HotfixID} )
{
$Installed+=$Hostname
Write-Host “Bulunan Hotfix: $($hotfix.HotFixID) $Hostname Sunucusu için bir problem yok” -BackgroundColor Green
} else {
$NotInstalled+=$Hostname
Write-host “$hostname sunucusunda WannaCry için Update yüklü değil.” -BackgroundColor red
}
}
Write-host”Yuklu olanlar—————-”
$Installed
Write-host “—————————-”
Write-host “Yuklu olmayanlar————”
$NotInstalled
Write-host “—————————–”
Host’larınızı AD ortamından çekiyorsanız;###########
cls
$Installed=@()
$NotInstalled=@()
$Serverlist= Get-ADComputer -filter {OperatingSystem -like “Windows Server*”}
$hotfixes = “KB4012212”,“KB4012217”,“KB4015551”,“KB4019216”,“KB4012216”,“KB4015550”,“KB4019215”,“KB4013429”,“KB4019472”,“KB4015217”,“KB4015438”,“KB4016635”,”KB4012213″,”KB4012214″
foreach ($server in $Serverlist) { $Hostname = $server $hotfix = Get-HotFix -ComputerName $Hostname.DNSHostName | Where-Object {$hotfixes -contains $_.HotfixID} | Select-Object -property “HotFixID”
if (Get-HotFix -ComputerName $Hostname.dnshostname | Where-Object {$hotfixes -contains $_.HotfixID} ) {
$Installed+=$Hostname.DNSHostName
Write-Host “Bulunan Hotfix: $($hotfix.HotFixID) $($Hostname.dnshostname) Sunucusu için bir problem yok” -BackgroundColor Green }
else {
$NotInstalled+=$Hostname.DNSHostName
Write-host “$($hostname.dnshostname) sunucusunda WannaCry için Update yüklü değil.” -BackgroundColor red }}
Write-host”Yuklu olanlar—————-”
$Installed
Write-host “—————————-”
Write-host “Yuklu olmayanlar————”
$NotInstalled
Write-host “—————————–”
#########################
Tıklayınız
Katkıları için Hakan Uzuner ve Kürşat ARI’ya teşekkür ederim.
Merak ettim denemek istedim kodlar pert. Sistemci olarak html içine kod bırakmanızı da ben anlamıyorum. PS kodları code tagının içine neden almazsınız çift tırnaklar başka hal almış. AD ortamdan çeken kodu denedim tırnakları temizledim halen hata verip duruyor. Bilgilendirme için ayrıca teşekkürler.