Home > Windows にまつわる e.t.c.

[WannaCrypt対策] SMB1 を無効化する


2017年5月20日現在 SMB1 の脆弱性を悪用して感染が広がる WannaCrypt が猛威を振るっています。

WannaCrypt の横渡り感染を防ぐには、Windows Update で脆弱性対策する必要があります。
(Windows Update は SMB1 の脆弱性を修正して横渡りを食い止めるだけです。メールに添付されているファイル等から WannaCrypt の感染を防ぐものではありません)

Windows Update をしていれば安心かというとそうでもありません。
そもそも SMB1 はレガシィプロトコルで、プロトコル自体が弱いため Microsoft では SMB1 の使用停止を提言しています。

Stop using SMB1 | Storage at Microsoft
https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/

 

Windows OS のデフォルトは、後方互換性維持のため SMB1 が有効になっているので、SMB1 を使用停止するには明示的に SMB 1 を停止する必要があります。

停止方法は色々ありますが、Windows 7 / Windows Server 2008 R2 以降の環境で SMB 1 を停止するスクリプトを書いたので、必要に応じて使って下さい。

 

使い方は、PowerShell を管理者権限で起動し、以下スクリプトをコピペします。
スクリプトは、日本語と英語環境に対応しています。

Windows 8 / Windows Server 2012 以降であれば、再起動要求が来ますので Y で再起動してください。
Windows 7 / Windows Server 2008 R2 であれば、自動再起動します。

Windows Vista / Windows Server 2008 以前の環境でテストしていないので、このスクリプトが有効か否かは不明です。

#####################################################
# SMB v1 を停止する
# Windows 7 / Windows Server 2008 R2 ~ 
#   Windows 10 RS2 / Windows Server 2016 対応
#
# 管理権限で PowerShell を開き、コピペする
# 再起動要求が来たら Y で再起動する
#####################################################
function DisableSMBv1(){
    $WindowsPrincipal = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
    $AdminRole = $WindowsPrincipal.IsInRole("Administrators")
    if( $AdminRole -ne $true ){
        echo "Administrative authority required."
        return
    }

    $OSData = Get-WmiObject Win32_OperatingSystem
    $BuildNumber = $OSData.BuildNumber
    $strVersion = $OSData.Version
    $strVersion = $strVersion.Replace( ".$BuildNumber", "" )
    $WinVer = [decimal]$strVersion

    if( $WinVer -ge 6.2 ){
        # Windows 8 / WS12 以降
        # 役割の収集
        $Features = dism /Online /Get-Features

        # SMB v1 状態
        $SMBv1EnableFlag = $false

        $HitFlag = $false
        $SMBv1State = ""

        foreach( $Line in $Features ){
            if( $HitFlag -eq $true ){
                # SMBv1 の状態取得
                if( ($Line -match "状態 : (?<SMBv1State>.*?)$") -or ($Line -match "State : (?<SMBv1State>.*?)$") ){
                    $SMBv1State = ($Matches.SMBv1State).Trim()
                    if( ($SMBv1State -eq "有効") -or ($SMBv1State -eq "Enabled" ) ){
                        $SMBv1EnableFlag = $true
                    }
                    $HitFlag = $false
                }
            }

            # SMBv1 の役割発見
            if( $Line -match "SMB1Protocol" ){
                $HitFlag = $true
            }
        }

        # SMBv1 が有効になっていたら無効にする
        if( $SMBv1EnableFlag -eq $true ){
            dism /Online /Disable-Feature:SMB1Protocol
        }
        else {
            echo "SMB1 is disabled."
        }
    }
    else {
        # Windows 7 / WS08R2 以前

        $RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
        $RegKey = "SMB1"
        $Result = Get-ItemProperty $RegPath -name $RegKey -ErrorAction SilentlyContinue
        if( $Result -ne $null ){
            # レジストリがあった
            if( $Result.$RegKey -eq 0 ){
                echo "SMB1 is disabled."
                return
            }
        }

        # SMBv1 が有効になっている
        Set-ItemProperty -Path $RegPath -name $RegKey -Type DWORD -Value 0 -Force
        echo "Restart now."
        sleep 3
        Restart-Computer
    }
}
DisableSMBv1


 

参考情報

Invoke-Command で KB をインストールする
http://www.vwnet.jp/Windows/PowerShell/Invoke_wusa.htm

[WannaCrypt] MS17-010 の適用状況の確認方法について (WSUS) – Japan WSUS Support Team Blog
https://blogs.technet.microsoft.com/jpwsus/2017/05/15/wannacrypt-ms17-010-wsus/

Windows と Windows Server で SMBv1、SMBv2、SMBv3 を有効または無効にする方法
https://support.microsoft.com/ja-jp/help/2696547/how-to-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and-windows-server

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.