2017/05/12

2017 年 4 月以降、Windows 8.1 の Windows Defender 用コマンドレッドが全滅(回避策あり)

Windows 8 以降に標準搭載される Windows Defender にも影響する、Microsoft Malware Protection Engine の重大な脆弱性問題が先日公開されました。

マイクロソフト セキュリティ アドバイザリ 4022344
Microsoft Malware Protection Engine 用のセキュリティ更新プログラム
[URL] https://technet.microsoft.com/ja-jp/library/security/4022344.aspx

Windows Defender 自体の定義の更新と一緒に更新されるので、Windows Update を明示的に実行しなくても、Windows Defender が有効(別の対策ソフトを使っていない場合) なら、定期的な定義の更新で自然と脆弱性は解消されているはずです。気になる人は、Windows Defender のバージョン情報で「エンジンのバージョン:1.1.13704.0」またはそれより新しくなっていれば問題ないです(Windows 10 なら[設定 > 更新とセキュリティ > Windows Defender] でも確認可)。

Windows Defender はWindows 8 以降に搭載され、Windows PowerShell の Defender モジュールも利用可能になっています。Windows 8.1 (Windows 8 は EOS なので省略) や Windows 10 なら、Windows PowerShell を開いて...

PS C:\> Get-MpComputerStatus 
または
PS C:\> (Get-MpComputerStatus).AMEngineVersion

でエンジンのバージョンを確認することができる...はずなのですが、Windows 8.1 でなんとなく実行してみたところ、エラーが発生。しかも、Windows Defender 関連のコマンドレット(Defender モジュール)が全滅状態になっていました。(ここから本題。今回の脆弱性とは別の話)


インターネットで検索してみると...

同じ症状を解消する、System Center/Forefront Endpoint Protection 向けの更新プログラムの(2016年3月の)情報がすぐに見つかりました。でも、これは、Windows Defender 向けではありません。

2016年 3 月マルウェア対策プラットフォーム更新の改訂版のクライアントのエンドポイントの保護
[URL] https://support.microsoft.com/ja-jp/kb/3153224/

Import-Module Defender のエラーを見ると、MSFT_MpWDOScan.cdxml が見つからないということで、%Windir%\System32\WindowsPowerShell\v1.0\Modules\Defender を覗いてみると、Defender.psd1のタイムスタンプが2017/02/10 で怪しい(親ディレクトリは2017/04/12でこれも怪しい)。開いてみると、存在しない MSFT_MpWDOScan.cdxml が NestedModules に書いてあって、FunctionsToExport に Start-MpWDOScan (たぶん MSFT_MpWDOScan.cdxml が関係している) が書いてありました。

クリーン インストールしただけで放置していた(起動していない、Windows Update していない) Windows 8.1 仮想マシンでは、ちゃんと動きます。 Defender.psd1 を見ると、MSFT_MpWDOScan.cdxml と Start-MpWDOScan は存在しません。

この問題、いつから発生していたのか分かりませんが、ここ数か月の間にこうなっていたと思います。脆弱性のある「エンジンのバージョン:1.1.13701.0」の Windows 8.1 でもこの問題が発生しました。話題になっていないのは、Windows PowerShell で Windows Defender を使っている人なんていないからか、それとも Windows Defender を使っていないからか...

Defender.psd1 を書き換えてしまえば、簡単に問題を解消できそう。システムファイルの変更は所有権とかアクセス許可が面倒ですが、Windows PowerShell のモジュール問題は経験済み。

Windows Server 2016 TP3 > システムロケールと FailoverClusters モジュール問題(の真相)(2015/08/31)

回避策(自己責任で)


というわけで、いつかは Windows Defender に対する更新プログラムで修正されると思いますが、待てないという方は、次の方法で問題を解消できます。ただし、するかしないかは、自己責任で。Defender モジュールが使えなくても、Windows Defender の MSASCUI.exe とか MpCmdRun.exe による更新やスキャンには影響しませんので。

C:\Windows\System32> mkdir C:\work
(一時フォルダーの作成)
C:\Windows\System32> cd WindowsPowerShell\v1.0\modules\Defender
C:\..\Defender> copy Defender.psd1 c:\work\
(Defender.psd1を編集用にコピー)
C:\..\Defender> copy Defender.psd1 c:\work\Defender.psd1.bak
(念のためバックアップ)
C:\..\Defender> notepad C:\work\Defender.psd1

@{
    GUID = 'C46BE3DC-30A9-452F-A5FD-4BF9CA87A854'
    Author="Microsoft Corporation"
    CompanyName="Microsoft Corporation"
    Copyright="ゥ Microsoft Corporation. All rights reserved."
    ModuleVersion = '1.0'
    NestedModules = @( 'MSFT_MpComputerStatus.cdxml',
                       'MSFT_MpPreference.cdxml',
                       'MSFT_MpThreat.cdxml',
                       'MSFT_MpThreatCatalog.cdxml',
                       'MSFT_MpThreatDetection.cdxml',
                       'MSFT_MpScan.cdxml',
                       'MSFT_MpSignature.cdxml',
                       'MSFT_MpWDOScan.cdxml'
)


    AliasesToExport = @()
    FunctionsToExport = @( 'Get-MpPreference',
                           'Set-MpPreference',
                           'Add-MpPreference',
                           'Remove-MpPreference',
                           'Get-MpComputerStatus',
                           'Get-MpThreat',
                           'Get-MpThreatCatalog',
                           'Get-MpThreatDetection',
                           'Start-MpScan',
                           'Update-MpSignature',
                           'Remove-MpThreat',
                           'Start-MpWDOScan
')

    PowerShellVersion = '3.0'
    HelpInfoUri="http://go.microsoft.com/fwlink/?linkid=390762"
}

(取り消し線のところを削除して上書き保存)

C:\..\Defender> robocopy C:\work\ .\ Defender.psd1 /B
(Robocopy のバックアップ モードで編集後のファイルをコピー)

問題解決!

 ・・・

ところで、Start-MpWDOScan は、Windows 10 Anniversary Update バージョン 1607 から内蔵
された Windows Defender Offline のオフライン スキャン (WinPE で起動してスキャン) を開始する機能です(→)。「エンジンのバージョン:1.1.13704.0」なら、Windows Defender Offline も「エンジンのバージョン:1.1.13704.0」になっていました。

関連:
Windows 10 1607 に Windows Defender Offline が内蔵 (2016/08/04)
Windows 10 Anniversary Update で Windows Defender Offline を使うと自動修復が自動起動しなくなる件(追記あり)(2016/08/31)

  ↑この問題は 1703 で治っていました。

Windows Defender Offline を搭載していない Windows 10 バージョン 1511 でも同じ問題が発生するのでは... と思いきや、Defender モジュールの読み込みに失敗することはありませんでした(MSFT_MpWDOScan.cdxml もちゃんと存在するから)。

ただし、Windows Defender Offline を搭載していなので、Start-MpWDOScan は機能しません。

追記) 犯人を特定しました

てっきり、Windows Update の定義(エンジンを含む)の更新でやってきた問題だと思っててましがた、違ってました。

%Windir%\System32\WindowsPowerShell\v1.0\Module\Defender ディレクトリのタイムスタンプを手掛かりに、4月の Monthly Rollup が怪しい。と思って、府更新プログラムの全ファイルリスト (4015550.csv)を見てみたら、タイムスタンプ 2017/2/10 の Defender.psd1 は、4月(2017/4/11)の Monthly Rollup KB4015550(3/22 Monthly Rollup Preview KB4012219 にも含まれる) でインストールされていました。累積的なので、そのまま 5月(2017/5/9) の Monthly Rollup KB4019215 にも含まれています。前月の3月(2017/3/14)の  Monthly Rollup  KB4012216 には含まれていません。



つまり、4 月 12 日の更新以降、Windows 8.1 の Defender モジュールのコマンドレットは全滅状態。来週出る 5 月の Montly Rollup Preview でもタイムスタンプが変わっていなければ、6 月も修正の見込みなしってことかな?

この問題に半日も費やしてしまった...(後悔) 。

Windows 8.1 のフィードバックをどこに送るればよいのか考えるのが面倒なので、誰かこの問題(またはここで)見つけてくれることを、祈ります。

0 件のコメント: