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
 
 


      
Copyright © MURA                                                                
All rights reserved.