検索
連載

緊急、Windowsの未パッチの脆弱性(ADV200006)回避策をバッチ化する山市良のうぃんどうず日記(175:緊急特別編)

2020年1月にWindows 7の延長サポートが終了してからまだ2カ月半ですが、既に全てのWindowsに影響する深刻度の高い脆弱性が2つ明らかになっています。そのうちの1つはセキュリティ更新プログラムが未提供(4月のセキュリティ更新に含める形で提供予定)です。影響を緩和する回避策はありますが、多数のPCを管理している人にとっては手間のかかる作業です。そこで、その回避策を簡単に実施する方法を考えました。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

山市良のうぃんどうず日記

深刻度が高い未パッチの脆弱性、その回避策が結構な手間

 2020年3月23日(米国時間)、Microsoftは以下のセキュリティアドバイザリを公開し、リモートでコードが実行される脆弱(ぜいじゃく)性を公表しました。ほとんど全てのWindowsに影響する脆弱性で、深刻度は「Windows 10」および「Windows Server 2016」以降が「重要(Important)」で、「Windows 8.1」および「Windows Server 2012 R2」以前は「緊急(Critical)」です。

 そして重大なのは、「Windows 7」に対する限定的な標的型攻撃が既に確認されていることです。この脆弱性を解消するセキュリティ更新プログラムは、2020年4月14日(米国時間)のセキュリティ更新に含まれる形で提供される予定です。

 脆弱性の詳細や深刻度、回避策、回避策実施の効果の範囲や副作用については、上記の「セキュリティアドバイザリ」で確認してください。

 なお、セキュリティアドバイザリの情報は日々更新されており、最新情報はオリジナルの英語の情報で確認することをお勧めします。これまでの他の日本語版セキュリティアドバイザリと同様、日本語のセキュリティアドバイザリでは「セキュリティ更新(Security Updates)」一覧の「影響度(Impact)」列と「深刻度(Severity)」列の情報が抜けているという問題もあります。

 これまでは、延長サポートが終了しライフサイクルが終了した製品については、原則として脆弱性の影響が公表されることはありませんでした。Windows 7、「Windows Server 2008」「Windows Server 2008 R2」については最大3年間(2023年1月まで)、セキュリティ更新プログラムを受け取ることができる「拡張セキュリティ更新プログラム(Extended Security Updates、ESU)」が提供されている関係で、これらのサポート終了OSについても脆弱性が公表され、ESUを通じてセキュリティ更新プログラムが提供されます。影響する製品一覧にはありませんが、Windows Server 2008にも影響するということは、同じバージョンである「Windows Vista」にも恐らく影響するはずです。

 この脆弱性についても、ESUの購入者およびESUの対象となるMicrosoft Azure上の仮想マシンには、4月にセキュリティ更新プログラムが提供される予定です。ESUを購入していない場合は、セキュリティ更新プログラムを受け取ることができません。もし、ESUなしで利用を継続しているのならセキュリティアドバイザリが示す脆弱性を緩和する回避策を実施すべきでしょう(注:サポートが終了した製品の利用を継続することは、決してお勧めしません)。

 「緊急(Critical)」レベルのWindowsを日常的に利用しているわけではないですし、外部から取得したファイルは常に慎重に扱うように心掛けているので、回避策は実施せず、4月のセキュリティ更新を待つつもりですが、回避策の手順を一通り確認してみたところ、結構な手間がかかることに気付きました。必要な回避策は次の通りです。

[1]Windowsエクスプローラーのプレビューウィンドウと詳細ウィンドウを無効にする(全てのバージョン)

[2]WebClientサービスを無効にする(全てのバージョン)

[3]ATMFD.DLLの名前を変更する(Windows 10 バージョン1703以前)

[3に追加で]ATMFDを無効にする(Windows 8.1およびWindows Server 2008 R2以前のオプションの構成)


 [1]は「エクスプローラー(Explorer.exe)」での表示オプションのマウス操作による設定(画面1)、[2]は「サービス(Services.msc)」管理ツールによるサービスのスタートアップの無効化、[3]は管理者権限でのコマンドライン操作、および「レジストリエディター(Regedit.exe)」での操作になります。

[注意]

レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリエディターの操作は慎重に行うとともに、あくまでご自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本編集部では責任を負いかねます。ご了承ください。


画面1
画面1 セキュリティアドバイザリで示されている回避策[1]のための操作。多数のPCに回避策を実施するにはこれだけでもかなりの手間

回避策の全てを1つのバッチファイルで実施する

 GUI(グラフィカルユーザーインタフェース)操作、慣れていない人にとっては複雑なコマンドライン、慎重に行わなければならないレジストリ操作、これらの回避策をIT部門の担当者が複数台のPCに実施するのは大変な作業になります。ユーザーに実施してもらうのも難しいでしょう。そこで、回避策の実施と解除をバッチ化してみました。

 回避策[1]は、ユーザーのレジストリ(HKEY_CURRENT_USER)のどこかに保存されるのではと考え探しましたがそれらしいものは見つかりませんでした。しかし、「ローカルグループポリシーエディター(Gpedit.msc)」を探してみると、以下の3つのポリシー設定で制御できることが分かりました(画面2)。

  • ユーザーの構成\管理用テンプレート\Windows コンポーネント\エクスプローラー\エクスプローラー フレーム ウィンドウ\プレビュー ペインを無効にする
  • ユーザーの構成\管理用テンプレート\Windows コンポーネント\エクスプローラー\エクスプローラー フレーム ウィンドウ\詳細ペインを無効にする
  • ユーザーの構成\管理用テンプレート\Windows コンポーネント\エクスプローラー\縮小表示を無効にしてアイコンのみを表示する

画面2
画面2 回避策[1]の「常にアイコンを表示し、縮小版は表示しない」に対応するポリシー設定

 対応するレジストリの場所と値、データは、「%Windir%\PolicyDefinitions\FramePanes.admxおよびThumbnails.admx」で見つけることができました。これで、ポリシーを構成しなくても、ポリシーに対応したレジストリを直接作成することで対策を実施できます。また、ポリシーに対応していないHomeエディションにもレジストリの効果があることを、Windows 10 Homeで確認しました。

 回避策[2]は、Windows標準の「SC」コマンドで実施できます。回避策[3]のファイル名の変更は、セキュリティアドバイザリにコマンドラインが示されていますし、回避策[3]の追加の構成であるレジストリの編集も「REG」コマンドで実施できます。

 後は、回避策[3]の32bit版と64bit版の区別(32bit OSか64bit OSかを識別しなくても、単にファイルの存在を確認すればよい)、および追加のオプション構成を必要とするかどうかのWindowsのバージョン識別を実装すれば、全てのWindowsに1つのバッチファイルで対応できるはずです。

 セキュリティアドバイザリでは、追加のオプション構成はWindows 8.1およびWindows Server 2012 R2以前に有効な構成のように記述されていますが、「atmfd.dll」のコンポーネントはこれまでも何度か脆弱性問題が報告され、Windows 8およびWindows Server 2012以降向けの回避策として追加のオプション構成が説明されてきたことがあります(マイクロソフトセキュリティ情報MS16-132、MS16-026、MS15-080、MS15-078、MS15-077など)。そのため、Windows 7やWindows Server 2008 R2以前に効果があるかどうかは定かではありません(*1)。

(*1) 本稿はセキュリティアドバイザリのバージョン1.3に基づいています。バージョン1.5までに、レジストリ値「disableATMFD」の回避策は、Windows 7〜Windows 8.1、Windows Server 2008〜Windows Server 2012 R2で有効だと情報が更新されました。今後のセキュリティアドバイザリの更新にもご注意ください。


 完成した回避策実施バッチは以下の「fixit_adv200006.cmd」、回避策解除バッチは「undofixit_adv200006.cmd」になります。

@ECHO OFF
REM https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/adv200006
ECHO Apply fit it for ADV200006. Type CTRL+C to cannel.
PAUSE
IF not EXIST %windir%\system32\wbem\wmic.exe goto WINDOWS_UNKOWN
REM Disable the Preview Pane and Details Pane in Windows Explorer
ECHO [1/3] Disable the Preview Pane and Details Pane in Windows Explorer
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v DisableThumbnails /t REG_DWORD /d 1 /f
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoPreviewPane /t REG_DWORD /d 1 /f
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoReadingPane /t REG_DWORD /d 1 /f
REM Disable the WebClient service
ECHO [2/3] Disable the WebClient service
NET STOP WebClient
SC CONFIG WebClient start= disabled
REM Rename ATMFD.DLL (if present ATMFD.DLL)
ECHO [3/3] Rename ATMFD.DLL
IF EXIST %windir%\system32\x-atmfd.dll goto SKIPRENAME
IF not EXIST %windir%\system32\atmfd.dll goto WINDOWS_10_1709ORNEWER
pushd "%windir%\system32"
takeown.exe /f atmfd.dll
icacls.exe atmfd.dll /save atmfd.dll.acl
icacls.exe atmfd.dll /grant Administrators:(F) 
rename atmfd.dll x-atmfd.dll
popd
IF not EXIST %windir%\syswow64\atmfd.dll goto SKIPRENAME
pushd "%windir%\syswow64"
takeown.exe /f atmfd.dll
icacls.exe atmfd.dll /save atmfd.dll.acl
icacls.exe atmfd.dll /grant Administrators:(F) 
rename atmfd.dll x-atmfd.dll
popd
:SKIPRENAME
WMIC OS GET VERSION | find "10." > nul
IF not errorlevel 1 GOTO WINDOWS_10
ECHO [3/3+] Optional procedure for Windows 8.1 operating systems and below (disable ATMFD)
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD /t REG_DWORD /d 1 /f
TIMEOUT /T 15 /NOBREAK > nul
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD /t REG_DWORD /d 1 /f
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD
GOTO WINDOWS_REBOOT
:WINDOWS_10_1709ORNEWER
ECHO There is not exist affected dll.
:WINDOWS_10
:WINDOWS_REBOOT
ECHO You need to restart computer!
REM ECHO Restart computer in 30 sec. Type CTRL+C to cancel.
TIMEOUT 30
REM SHUTDOWN /R /T 0
GOTO END
:WINDOWS_UNKOWN
ECHO Do nothing.
:END
▲「fixit_adv200006.cmd」

@ECHO OFF
REM https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/adv200006
ECHO Undo fixit for ADV200006. Type CTRL+C to cancel.
PAUSE
ECHO [1/3] Undo "Disable the Preview Pane and Details Pane in Windows Explorer"
REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v DisableThumbnails /f
REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoPreviewPane /f
REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoReadingPane /f
ECHO [2/3] Undo "Disable the WebClient service"
SC CONFIG WebClient start= demand
ECHO [3/3] Undo Rename ATMFD.DLL
IF EXIST %windir%\system32\atmfd.dll goto SKIPRENAME
IF not EXIST %windir%\system32\x-atmfd.dll goto WINDOWS_10_1709ORNEWER
pushd "%windir%\system32"
rename x-atmfd.dll atmfd.dll
icacls.exe atmfd.dll /setowner "NT SERVICE\TrustedInstaller"
icacls.exe . /restore atmfd.dll.acl
popd
IF not EXIST %windir%\syswow64\x-atmfd.dll goto SKIPRENAME
pushd "%windir%\syswow64"
rename x-atmfd.dll atmfd.dll
icacls.exe atmfd.dll /setowner "NT SERVICE\TrustedInstaller"
icacls.exe . /restore atmfd.dll.acl
popd
:SKIPRENAME
WMIC OS GET VERSION | find "10." > nul
IF not errorlevel 1 GOTO WINDOWS_10
ECHO [3/3+] Undo Optional procedure for Windows 8.1 operating systems and below (disable ATMFD)
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD /t REG_DWORD /d 0 /f
REG DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD /f
TIMEOUT /T 15 /NOBREAK > nul
REG DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD /f
REG QUERY "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v DisableATMFD
GOTO WINDOWS_REBOOT
:WINDOWS_10_1709ORNEWER
:WINDOWS_10
:WINDOWS_REBOOT
ECHO You need to restart computer!
REM ECHO Restart computer in 30 sec. Type CTRL+C to cancel.
TIMEOUT 30
REM SHUTDOWN /R /T 0
GOTO END
:WINDOWS_UNKOWN
ECHO Do nothing.
:END
▲「undofixit_adv200006.cmd」

 これらのバッチを「管理者として実行」すると、回避策を実施/解除します(画面3)。回避策解除バッチは、この脆弱性を解消するセキュリティ更新プログラムが利用可能になった際に使用してください。これらのバッチは、64bit版Windows 7、32bit版Windows 7、64bit版Windows 8.1、64bit版Windows 10で動作確認を確認しましたが、Windows Server 2008以降のWindows Serverでも問題なく動作するはずです。

画面3
画面3 回避策実施バッチを管理者として実行すると(画面左)、再起動後に回避策が実施された状態になるはず(画面右)

 なお、追加のオプション構成であるレジストリ値「DisableATMFD」の作成や削除は、1行のコマンドライン(REG ADDまたはREG DELETE)で書くこともできるのですが、バッチファイルの1回の実行では期待通りに作成または削除できないことがあったため、試行錯誤の上でレジストリ値を作成してからデータを変更、データを変更してからレジストリ値を削除するという方法でレジストリの値の作成または削除を行うように記述しています。

 それでも作成または削除されない場合があるかもしれないので、自動的に再起動する処理はコメント化しています(WINDOWS_REBOOTラベルの部分)。自動的に再起動まで行わせたい場合は、その部分を調整してください。

おまけ――ADV200001の回避策のバッチ化

 2020年1月にサポートが終了したWindows 7、Windows Server 2008、Windows Server 2008 R2には、サポート終了直後に以下のセキュリティアドバイザリで公表された「Internet Explorer」の深刻度「緊急(Critical)」の脆弱性もあります。

 ESUの対象であれば2020年2月のセキュリティ更新プログラムで修正されましたが、ESUの対象外の場合は何もしなければ未パッチの脆弱性として存在しています。

 おまけとして、セキュリティ更新プログラムが利用できない方のために、こちらの脆弱性の回避策の実施および解除のためのバッチ「fixit_adv200001.cmd」と「undofixit_adv200001.cmd」も作成しました。

@ECHO OFF
ECHO Apply Fix it for ADV200001
REM https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/ADV200001
IF not EXIST %windir%\system32\jscript.dll goto END
takeown /f %windir%\system32\jscript.dll
cacls %windir%\system32\jscript.dll /E /P everyone:N
IF not EXIST %windir%\syswow64\jscript.dll goto END
takeown /f %windir%\syswow64\jscript.dll
cacls %windir%\syswow64\jscript.dll /E /P everyone:N
:END
ECHO Done. You do not need to restart your computer.
TIMEOUT 15
▲「fixit_adv200001.cmd」

┌─────────────────────────────────┐
@ECHO OFF
REM https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/ADV200001
ECHO Undo Fix it for ADV200001
IF not EXIST %windir%\system32\jscript.dll goto END
cacls %windir%\system32\jscript.dll /E /R everyone
IF not EXIST %windir%\syswow64\jscript.dll goto END
cacls %windir%\syswow64\jscript.dll /E /R everyone
:END
ECHO Done. You do not need to restart your computer.
TIMEOUT 15
▲「undofixit_adv200001.cmd」

 繰り返しになりますが、セキュリティ更新プログラムが提供されない、ライフサイクルが終了した製品の利用を継続すべきではありません。それを承知で使い続けるというなら、こうした重大なセキュリティ問題にその都度対処しましょう。新しいウイルスに感染するのは構いませんが、他に移すのだけは勘弁してください。日ごろの手洗いと咳エチケットをお忘れなく。

最新情報(2020年4月16日追記)

 ADV200006の脆弱性の問題を修正するセキュリティ更新プログラムは、2020年4月15日(日本時間)に公開された品質更新プログラムまたはセキュリティ品質ロールアップまたはセキュリティのみの品質更新プログラムに含まれます。拡張セキュリティ更新プログラム(ESU)を利用できないWindows 7/Windows Server 2008 R2では、対応するセキュリティ更新プログラムは利用できません。

 対応するセキュリティ更新プログラムについては、以下のセキュリティ更新プログラムガイドで確認してください。


筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る