如何確認是否已安裝 MS17-010

通知

這篇知識庫文章是依現狀提供,並且不會取代透過正常更新管道提供的取代資料。 您可以在安全性更新導覽和其他附屬工具找到在下列資料之後提供的取代資訊。

摘要

查看本文適用的產品

安全性更新 MS17-010 可解決 Windows Server Message Block (SMB) v1 中數個弱點。 WannaCrypt 勒索軟體利用了其中一個屬於 MS17-010 更新的弱點。 未安裝 MS17-010 的電腦因數種惡意程式碼而提高風險。 本文提供數個可快速偵測電腦是否已進行過更新的方法。

方法一:依據已安裝的知識庫編號檢查

請使用下表查看是否安裝任何列出的更新 (標示為「未包含 MS17-010 修補程式」的更新除外)。 如果已安裝任一更新,表示已安裝 MS17-010。

表1,共2張: Windows 7 SP1 及以後版本。 下列彙總套件 KB 包含修正程式 (「4 月僅限安全性 4B」欄中的更新除外)。 下面每個 KB 編號都是已更新的 Srv.sys 版本號碼。

Windows 版本 僅限 3 月安全性更新 (3/14/17) 3 月每月彙總套件
(2017/3/14)
3 月每月彙總套件預覽
(2017/3/21)
4 月僅限
安全性更新
(2017/11/4)
4 月每月彙總套件
(2017/11/4)
4 月每月彙總套件預覽
(2017/4/18)
5 月僅限安全性更新
(2017年5月9日)
5 月每月彙總套件
(2017年5月9日)
下載連結
Windows 7 SP1 和 Windows Server 2008 R2 SP1 4012212
6.1.7601.23689
4012215
6.1.7601.23689
4012218
6.1.7601.23689
4015546
未包含 MS17-010 修補程式
4015549
6.1.7601.23689
4015552
6.1.7601.23689
4019263
6.1.7601.23762
4019264
6.1.7601.23762
Windows 7 SP1 和 Windows Server 2008 R2 SP1 更新記錄
Windows 2012 4012214
6.2.9200.22099
4012217
6.2.9200.22099
4012220
6.2.9200.22099
4015548
未包含 MS17-010 修補程式
4015551
6.2.9200.22099
4015554
6.2.9200.22099
4019214
6.2.9200.22137
4019216
6.2.9200.22137
Windows Server 2012 更新記錄
Windows 8.1 and Windows Server 2012 R2 4012213
6.3.9600.18604
4012216
6.3.9600.18604
4012219
6.3.9600.18604
4015547 未包含 MS17-010 修補程式 4015550
6.3.9600.18604
4015553
6.3.9600.18619
4019213
6.3.9600.18655
4019215
6.3.9600.18655
Windows 8.1 和 Windows Server 2012 R2 更新記錄
Windows 10 1507 版 4012606
10.0.10240.17319
4016637
10.0.10240.17319
- - 4015221
10.0.10240.17319
- - 4019474 10.0.10240.17394 Windows 10 更新記錄
Windows 10 版本 1511 4013198
10.0.10586.839
4016636
10.0.10586.839
- - 4015219
10.0.10586.839
- - 4019473
10.0.10586.916
Windows 10 更新記錄
Windows 10 和 Windows Server 2016 4013429
10.0.14393.953
4016635
10.0.14393.953
- - 4015217
10.0.14393.953
- - 4019472
10.0.14393.1198
Windows 10 和 Windows Server 2016 更新記錄

 

表2(共2): 續於2017年5月及6月更新。

Windows 版本 5 月每月彙總套件預覽
(2017年5月16日)
6 月僅限安全性更新
(2017/6/13)
6 月每月彙總套件
(2017/6/13)
下載連結
Windows 7 和 Server 2008 R2 4019265
6.1.7601.23762
4022722 4022168
6.1.7601.23762
Windows 7 SP1 和 Windows Server 2008 R2 SP1 更新記錄
Windows Server 2012 4019218
6.2.9200.22137
4022718 4022724
6.2.9200.22137
Windows Server 2012 更新記錄
Windows 8.1 and Windows Server 2012 R2 4019217
6.3.9600.18655
4022717 4022720
6.3.9600.18688
Windows 8.1 和 Windows Server 2012 R2 更新記錄
Windows 10 1507 版 - - 4032695 Windows 10 更新記錄
Windows 10 版本 1511 - - 4032693 Windows 10 更新記錄
Windows 10 版本 1607 和 Windows Server 2016 - - 4022723
10.0.14393.1198
Windows 10 和 Windows Server 2016 更新記錄

 

表2: 其他 Windows 版本。 將 KB 4012598 當做安全性更新使用。

Windows 版本 KB 編號和
更新的 Srv.sys 版本
下載連結
Windows Server 2003 SP2 4012598
5.2.3790.6021
Windows Server 2003 SP2 x64

Windows Server 2003 SP2 x86
Windows XP 4012598
5.1.2600.7208
Windows XP SP2 x64

Windows XP SP3 x86

Windows XP Embedded SP3 x86
Windows Vista SP2 4012598
GDR:6.0.6002.19743
LDR:6.0.6002.24067
Windows Vista Service Pack 2

Windows Vista x64 Edition Service Pack 2
Windows Server 2008 SP2 4012598
GDR:6.0.6002.19743
LDR:6.0.6002.24067
適用於 32 位元系統的 Windows Server 2008 Service Pack 2

適用於 x64 型系統的 Windows Server 2008 Service Pack 2

Windows Server 2008 for Itanium 基礎系統服務包 2
Windows 8 4012598
6.2.9200.22099
Windows 8 x86Windows 8 x64

 

表3: 包含修正後的額外更新。

Windows 8.1 and Windows Server 2012 R2

發行日期 KB 編號 支援頁面
2017 年 3 月 21 日 4012219 2017 年 3 月 21 日 - KB4012218(每月彙總套件預覽)
2017 年 4 月 18 日 4015553 2017 年 4 月 18 日 - KB4015553(每月彙總套件預覽)
2017 年 5 月 16 日 4019217 2017 年 5 月 16 日 - KB4019217(每月彙總套件預覽)
2017 年 6 月 27 日 4022720 2017 年 6 月 27 日 — KB4022720 (每月彙總套件預覽)

Windows Server 2012

發行日期 KB 編號 支援頁面
2017 年 3 月 21 日 4012220 2017 年 3 月 21 日 - KB4012220(每月彙總套件預覽)
2017 年 4 月 18 日 4015554 2017 年 4 月 18 日 - KB4015554(每月彙總套件預覽)
2017 年 5 月 16 日 4019218 2017 年 5 月 16 日 - KB4019218(每月彙總套件預覽)
2017 年 6 月 27 日 4022721 2017 年 6 月 27 日 — KB4022721 (每月彙總套件預覽)

Windows 7 SP1 和 Windows Server 2008 R2 SP1

發行日期 KB 編號 支援頁面
2017 年 3 月 21 日 4012218 2017 年 3 月 21 日 - KB4012218(每月彙總套件預覽)
2017 年 4 月 18 日 4015552 2017 年 4 月 18 日 - KB4015552(每月彙總套件預覽)
2017 年 5 月 16 日 4019265 2017 年 5 月 16 日 - KB4019265(每月彙總套件預覽)
2017 年 6 月 27 日 4022168 2017 年 6 月 27 日 — KB4022168 (每月彙總套件預覽)

方法二:以 %systemroot%\system32\drivers\srv.sys 檔案版本檢查

請使用下表查看 %systemroot%\system32\drivers\srv.sys 的檔案版本。 如果檔案版本等於或大於所列的版本,表示 MS17-010 已安裝。

Windows 版本 已更新的最小 Srv.sys 版本
Windows XP 5.1.2600.7208
Windows Server 2003 SP2 5.2.3790.6021
Windows Vista
Windows Server 2008 SP2
GDR:6.0.6002.19743、LDR:6.0.6002.24067
Windows 7
Windows Server 2008 R2
6.1.7601.23689
Windows 8
Windows Server 2012
6.2.9200.22099
Windows 8.1
Windows Server 2012 R2
6.3.9600.18604
Windows 10 TH1 v1507 10.0.10240.17319
Windows 10 TH2 v1511 10.0.10586.839
Windows 10 RS1 v1607
Windows Server 2016
10.0.14393.953

方法三:透過 WMI 和 Windows PowerShell 檢查

WMI 和 Windows PowerShell 可用來判斷是否已安裝 MS17-010 修正程式。

WMI 命令

若要尋找指定的 KB 編號,請開啟提升權限的命令提示字元視窗,然後執行下列命令:


wmic qfe get hotfixid | find "KB1234567"

附註

  • 在此指令中,將KB1234567>替換<成實際的 KB 編號。

  • 使用 & 符號字元可以搜尋多個更新。 例如,執行下列命令:

    wmic qfe get hotfixid | find "KB4012212" & wmic qfe get hotfixid | find "KB4012215" & wmic qfe get hotfixid | find "KB4015549"

PowerShell 命令

若要在本機系統中檢查,請執行下列系統管理 PowerShell Cmdlet:


 get-hotfix -id KB1234567

附註

  • 在此指令中,將KB1234567>替換<成實際的 KB 編號。

  • 使用逗號 ( , ) 可以搜尋多個更新。 例如,執行下列命令:

    get-hotfix -id KB4012212,KB4012215,KB4015549

若要檢查 Active Directory 網域或 OU 中的所有電腦,請在網域控制站執行下列系統管理 PowerShell Cmdlet:


foreach ( $n in (get-adcomputer -searchbase ‘OU=workstations,dc=contoso,dc=com’ -filter * -property * | select name )) {get-hotfix -computername $n.name -id KB1234567}

注意 您可以變更 "OU=workstations,dc=contoso,dc=com" 部分,以指向 Active Directory 網域目錄分割的根目錄,例如 "dc=contoso,dc=com" 可搜尋整個網域中的電腦。 在此指令中,將KB1234567>替換<成實際的 KB 編號。

如何解決「不適用」安裝錯誤

在 Windows 8.1 或 Windows Server 2012 R2 上安裝 MS17-010 時,如果電腦未安裝先決條件的修正程式,您可能會收到下列錯誤訊息:

注意

此更新不適用於您的電腦

若要解決這個錯誤,請依照下列步驟執行:

  1. 確認您在嘗試要安裝正確的更新。 若要執行這項操作,請在<方法 1>的「表 1」查看 KB 編號, 然後與您的系統版本、系統 Service Pack 層級和系統位元層級 (x64、IA64 或 x86) 相比較。
     

  2. 檢查是否有遺漏的相依性。 若是 Windows 8.1 和 Windows Server 2012 R2,請安裝下列文章列為必要的相依修正程式:

    • KB 2919355:Windows RT 8.1、Windows 8.1 及 Windows Server 2012 R2 更新:2014 年 4 月
    • KB 2919442:2014 年 3 月 Windows 8.1 與 Windows Server 2012 R2 的服務堆疊更新
    • KB 3173424:Windows 8.1 與 Windows Server 2012 R2 的服務堆疊更新:2016 年 7 月 12 日
  3. 如果您無法安裝彙總套件更新,請嘗試不同的彙總套件版本。 請參閱「表 1」取得可用的更新。
     

PowerShell 指令碼

下列 Windows PowerShell 指令碼會將本機電腦上的 Srv.sys 版本,與<方法 2>表格中所列的版本做比較。

請將這個指令碼儲存至 .ps1 檔案,然後從 PowerShell 執行指令碼。 這個指令碼適用於 Windows XP 及 Windows Server 2003 和更新版本。 它需要 Windows PowerShell 2.0 或更新版本。
 


[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
    }
#

參考資料

關於 WannaCrypt 攻擊的客戶指引 (英文)

Malware Protection Center

Microsoft 惡意程式碼防護中心部落格 (英文)

安全性更新 MS17-010

MS17-010 相關合規性報告的 Configuration Manager SQL Server 查詢

本文適用於:

 

  • Windows Server 2016
  • Windows 10 版本 1607
  • Windows 10 版本 1511
  • Windows 10 1507 版
  • Windows Server 2012 R2
  • Windows 8.1
  • Windows Server 2012
  • Windows 8
  • Windows Server 2008 R2
  • Windows 7
  • Windows Server 2008 Service Pack 2
  • Windows Vista
  • Windows Server 2003 服務包 2
  • Windows XP