coverman
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Автор https://habrahabr.ru/users/Sergey-S-Kovalev/ Код: # Powershell # Скрипт проверки на подверженность атаки Wana decrypt0r 2.0 (WannaCry) # Не проверяет заражена ли система (мне пока не чем проверить) # При запуске с клиентского ПК требует установленной RSAT и возможно WMF5 # habrahabr / @sergey-s-kovalev / 15.05.2017 / free for use cls Import-Module ActiveDirectory $domainname = "domain.local" # Задаем имя домена которое хотим проверить $ResultPath = "D:\WannaCry\" # Указываем путь до папки, куда складывать отчеты # Задаем списки для сохранения списков ПК $SafeHosts = @() $VulnerabilityHosts = @() $OfflineHosts = @() $NotManagedHosts = @() $SafeDate = Get-Date -Date 11-2-2017 -Hour 0 -Minute 0 -Second 1 # Определяем безопасную дату файла # Получаем список ПК из домена $DomainComputers = Get-ADComputer -Server $domainname -Filter * -Properties * #| Where-Object {$_.OperatingSystem -like '*Server*'} | Sort Name # Используем маски в случае необходимости # Общий список ПК Write-Host "Всего хостов обнаружено:" $DomainComputers.count foreach ($ComputerName in $DomainComputers.DNSHostName) # Для каждого ПК из списка { Write-host "Проверяем",$ComputerName $PingResult = Get-WmiObject Win32_PingStatus -Filter "Address = '$ComputerName'" # Проверяем доступность ПК в сети If (($PingResult.ResponseTime -ne $null) -and ($PingResult.IPV4Address -ne $null)) # Если нет пингов до хоста или у него нет ip адреса { $Command = {(Get-Item c:\WINDOWS\system32\drivers\srv.sys).LastWriteTime} # Команда которая получает дату файла $Result = "Empty" # Задаем значение по умолчанию # Пробуем запустить команду на удаленном ПК Try {$Result = Invoke-Command -ComputerName $ComputerName -ScriptBlock $Command -ErrorAction Stop} Catch {write-host -foreground yellow $ComputerName, "включен, но управление через WinRM недоступно";$NotManagedHosts = $NotManagedHosts + $ComputerName} if ($Result -ne "Empty") { # Если результат не пустой # Сравнить дату файла с контрольной датой if ($Result -lt $SafeDate) {write-host -foreground red $ComputerName,"уязвим! Дата файла",$Result;$VulnerabilityHosts = $VulnerabilityHosts + $ComputerName} else {write-host -foreground green $ComputerName, "имеет необходимое обновление. Дата файла",$Result;$SafeHosts = $SafeHosts + $ComputerName} } # Если результат пинга пустой } else {write-host -foreground DarkRed $ComputerName, "не в сети, не имеет IP-адреса или фаерволлом запрещен PING";$OfflineHosts = $OfflineHosts + $ComputerName} } $LogTime = get-date -format yyyy-MM-dd_HH-mm-ss # Получить текущее время # Выгрузить списки компьютеров в той или иной категории $SafeHosts | Out-file -FilePath $ResultPath$LogTime"_"$domainname"-SafeHosts.log" -Encoding utf8 -Force $VulnerabilityHosts | Out-file -FilePath $ResultPath$LogTime"_"$domainname"-VulnerabilityHosts.log" -Encoding utf8 -Force $OfflineHosts | Out-file -FilePath $ResultPath$LogTime"_"$domainname"-OfflineHosts.log" -Encoding utf8 -Force $NotManagedHosts | Out-file -FilePath $ResultPath$LogTime"_"$domainname"-NotManagedHosts.log" -Encoding utf8 -Force |
| Всего записей: 30 | Зарегистр. 14-01-2005 | Отправлено: 11:46 15-05-2017 | Исправлено: coverman, 11:47 15-05-2017 |
|