Как проверить установку патча от шифровальщика WannaCry

Все об администрировании рабочих станций Windows 95/98/NT/2000/XP/7/8. То, чего не найдешь в бескрайних просторах Интернета. Решения тех проблем, которые не решаются типовыми ответами, которые можно получить в техподдержке Майкрософта - а именно: переустановить продукт или купить какой-ть другой лицензионный диск.


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1505
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

Как проверить установку патча от шифровальщика WannaCry

Сообщение UncleFather »

Как проверить установку патча от шифровальщика WannaCry

Точнее, этот способ проверяет установку в системе патча защиты от уязвимости MS17-010, которой пользуется шифровальщик WannaCry для своего распространения.

Подробно задача описана в статье How to verify that MS17-010 is installed.

Здесь приведу лишь один из методов, имхо, самый быстрый и автоматизированный:

  1. Создаем PowerShell скрипт - файл check.ps1:

    Спойлер

    Код: Выделить всё

    [reflection.assembly]::LoadWithPartialName("System.Version")
    $os = Get-WmiObject -class Win32_OperatingSystem
    $osName = $os.Caption
    $s = "%systemroot%\system32\drivers\srv.sys"
    $v = [System.Environment]::ExpandEnvironmentVariables($s)
    If (Test-Path "$v")
        {
        Try
            {
            $versionInfo = (Get-Item $v).VersionInfo
            $versionString = "$($versionInfo.FileMajorPart).$($versionInfo.FileMinorPart).$($versionInfo.FileBuildPart).$($versionInfo.FilePrivatePart)"
            $fileVersion = New-Object System.Version($versionString)
            }
        Catch
            {
            Write-Host "Unable to retrieve file version info, please verify vulnerability state manually." -ForegroundColor Yellow
            Return
            }
        }
    Else
        {
        Write-Host "Srv.sys does not exist, please verify vulnerability state manually." -ForegroundColor Yellow
        Return
        }
    if ($osName.Contains("Vista") -or ($osName.Contains("2008") -and -not $osName.Contains("R2")))
        {
        if ($versionString.Split('.')[3][0] -eq "1")
            {
            $currentOS = "$osName GDR"
            $expectedVersion = New-Object System.Version("6.0.6002.19743")
            } 
        elseif ($versionString.Split('.')[3][0] -eq "2")
            {
            $currentOS = "$osName LDR"
            $expectedVersion = New-Object System.Version("6.0.6002.24067")
            }
        else
            {
            $currentOS = "$osName"
            $expectedVersion = New-Object System.Version("9.9.9999.99999")
            }
        }
    elseif ($osName.Contains("Windows 7") -or ($osName.Contains("2008 R2")))
        {
        $currentOS = "$osName LDR"
        $expectedVersion = New-Object System.Version("6.1.7601.23689")
        }
    elseif ($osName.Contains("Windows 8.1") -or $osName.Contains("2012 R2"))
        {
        $currentOS = "$osName LDR"
        $expectedVersion = New-Object System.Version("6.3.9600.18604")
        }
    elseif ($osName.Contains("Windows 8") -or $osName.Contains("2012"))
        {
        $currentOS = "$osName LDR"
        $expectedVersion = New-Object System.Version("6.2.9200.22099")
        }
    elseif ($osName.Contains("Windows 10"))
        {
        if ($os.BuildNumber -eq "10240")
            {
            $currentOS = "$osName TH1"
            $expectedVersion = New-Object System.Version("10.0.10240.17319")
            }
        elseif ($os.BuildNumber -eq "10586")
            {
            $currentOS = "$osName TH2"
            $expectedVersion = New-Object System.Version("10.0.10586.839")
            }
        elseif ($os.BuildNumber -eq "14393")
            {
            $currentOS = "$($osName) RS1"
            $expectedVersion = New-Object System.Version("10.0.14393.953")
            }
        elseif ($os.BuildNumber -eq "15063")
            {
            $currentOS = "$osName RS2"
            "No need to Patch. RS2 is released as patched. "
            return
            }
        }
    elseif ($osName.Contains("2016"))
        {
        $currentOS = "$osName"
        $expectedVersion = New-Object System.Version("10.0.14393.953")
        }
    elseif ($osName.Contains("Windows XP"))
        {
        $currentOS = "$osName"
        $expectedVersion = New-Object System.Version("5.1.2600.7208")
        }
    elseif ($osName.Contains("Server 2003"))
        {
        $currentOS = "$osName"
        $expectedVersion = New-Object System.Version("5.2.3790.6021")
        }
    else
        {
        Write-Host "Unable to determine OS applicability, please verify vulnerability state manually." -ForegroundColor Yellow
        $currentOS = "$osName"
        $expectedVersion = New-Object System.Version("9.9.9999.99999")
        }
    Write-Host "`n`nCurrent OS: $currentOS (Build Number $($os.BuildNumber))" -ForegroundColor Cyan
    Write-Host "`nExpected Version of srv.sys: $($expectedVersion.ToString())" -ForegroundColor Cyan
    Write-Host "`nActual Version of srv.sys: $($fileVersion.ToString())" -ForegroundColor Cyan
    If ($($fileVersion.CompareTo($expectedVersion)) -lt 0)
        {
        Write-Host "`n`n"
        Write-Host "System is NOT Patched" -ForegroundColor Red
        }
    Else
        {
        Write-Host "`n`n"
        Write-Host "System is Patched" -ForegroundColor Green
        }
    #

    или просто скачиваем архив с готовым скриптом:

    check.rar
    (2.13 КБ) 475 скачиваний
  2. Запускаем скрипт из оболочки PowerShell, либо командой

    Код: Выделить всё

    PowerShell.exe check.ps1

    Примечание: В системе должно быть разрешено выполнение скриптов PowerShell.

  3. В результатах выполнения видно - установлен ли патч MS17-010 в проверяемой системе:

    01.jpg

Дополнение: Как защититься от вирусов-шифровальщиков.


Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение