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.