1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windowsセキュリティ(Defender)をコマンドラインで扱う

ASCII.jp / 2024年1月28日 10時0分

 Windowsを使っていると、ときどきWindowsセキュリティ(Defender)からの通知を見ることがある。今回は、このWindowsセキュリティの機能をコマンドラインから使う方法を解説する。

Windowsセキュリティ
Windowsセキュリティの「ウィルスと脅威の防止」が、Microsoft Defender Antivirusのウィンドウになる。すべての履歴を見るには、「フィルター」で「フィルターのクリア」を選択する

そもそもDefenderとは?

 以前からWindowsを使っているユーザーからすれば、Windowsのセキュリティ機能といえば「Defender」を思い浮かべるだろう。Defenderの名称は、Windows XP時代の2006年(これ以前にベータ版が配布されていた)にスパイウェア対策ソフトに使われた。これは買収した製品(GIANT Company SoftwareのGIANT AntiSpayware)の名前を変更したものだった。当時のWindowsは標準でコンピューターウイルス対策機能を持っていなかった。

 Windows 7で、ウイルス対策機能を持つMicrosoft Security Essentialsに一旦置き換えられたが、Windows 8では、Defenderの名称でウイルス対策機能を含めて復活する。Windows 10では、ファイアウォールやさまざまなセキュリティ機能にDefenderの名称を使った。

 2017年のRS3(Fall Creater Update。Windows 10 Ver.1709)以後は、Defenderはセキュリティ対策の総合ブランド名になった。ただしそのせいか、「Windows Defenderナントカ」「Microsoft Defenderカントカ」といった名前が氾濫し、さらにそれらの製品が統合されて別の名前になるなど、かなり混乱した様相があった。

 現在では、Windowsのセキュリティ設定には「Windowsセキュリティ」という名称が使われている。ここは、もともとは「Windows Defender セキュリティ・センター」という名称だった。設定ページからはDefenderの名称が消えたものの、ヘルプページには残っている。

 また、個別機能にもDefenderの名前が残る。たとえば、ウイルス対策機能が「Windows Defender Antivirus」(Microsoft Defender Antivirusとも、日本語ではWindows/Microsoft Defenderウイルス対策)、ファイアウォールが「Windows Defenderファイアウォール」である。現状、Microsoft Defenderという用語は、Microsoft 365で提供されるセキュリティ機能の名称として使われているようだ。ただし、Microsoftの常として、文書が混乱していることがある。

 また、後述するmpcmdrun.exeコマンドやPowerShellコマンド、WMIのクラス名などに含まれる「MP」は、Microsoft Security Essentialで開発された「Microsoft Malware Protection Engine(MSMPENG)」の「Malware Protection」に由来する。現在でもmsmpeng.exeというプログラムがWindowsに含まれている。

 ここでは、ウィルス対策のDefender Antivirusの機能を対象とする。Defenderファイアウォールに関しては、本連載の過去記事(「WindowsのファイアウォールをPowerShellから制御する」)を参考にしてほしい。

Defenderをコマンドラインから扱う

 Windowsセキュリティの機能をコマンドラインから使うには、大きく3つの方法がある。1つはcmd.exeからも利用できるmpcmdrun.exeプログラム、もう1つはWIM(CIM)経由、最後はPowerShellコマンドだ。

 なお、グループポリシー(gpedit.msc)の「コンピュータの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「Microsoft Defender ウィルス対策」で、Defenderの挙動や一部設定を変更できる。グループポリシーはHome Editionなどで利用できないため、ここでは解説を省略する。なお、解説は以下のMicrosoftのサイト上にある(https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/use-group-policy-microsoft-defender-antivirus?view=o365-worldwide)。

 mpcmdrun.exeに関しては、マイクロソフトのサイトにある「コマンドラインを使用して Microsoft Defender ウイルス対策を管理する」(https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/command-line-arguments-microsoft-defender-antivirus?view=o365-worldwide)に情報がある。コマンドは以下のパスにあり、PATH環境変数に設定がないため、パスを直接指定する必要がある。「-?」オプションでオンラインヘルプを表示する。

C:\Program Files\Windows Defender\MpCmdRun.exe

 exeコマンドであるため、cmd.exeでも利用可能である。なお、後述するPowerShell Defender系コマンドとの違いだが、定義ファイルの扱いや各種レポート/ログの出力など、Defenderの「素」の機能に近いのがmpcmdrun.exeで、WMIとPowerShell側は主にDefender関連の管理を中心とした機能になる。

 WMI(CIM)を使う場合には、

Get-CimInstance -ClassName MSFT_MpComputerStatus -Namespace root/microsoft/windows/defender -Property *

などとする。クラス名(以下の表)だけでなく名前空間(Namespace)も指定が必要になる。

Windowsセキュリティ

 これに関しては「WMI を使用してMicrosoft Defenderウイルス対策を構成する」(https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/use-wmi-microsoft-defender-antivirus?view=o365-worldwide)に解説があり、クラス名に関しては、「Windows Defender WMIv2 Provider(英語)」(https://learn.microsoft.com/ja-jp/previous-versions/windows/desktop/defender/windows-defender-wmiv2-apis-portal)に記述がある。ここでは、クラス名だけを挙げるのみにしておく。というのは、PowerShellのDefender系コマンドは、出力するオブジェクトがWMIのDefenderクラスをベースとしており、WMIの上に構築されているのだと思われるからだ。

PowerShellでDefenderを管理する

 さて、PowerShellには、次の表のようなコマンドが用意されている。

Windowsセキュリティ

 これは、

get-command -module defender

とすることで一覧が得られる。

 また、Microsoftのサイトにも「Defender Module」(https://learn.microsoft.com/ja-jp/powershell/module/defender/?view=windowsserver2022-ps)があるのだが、「Start-MpRollback」についての解説がない。そのほか、「PowerShell コマンドレットを使用して Microsoft Defender ウイルス対策を構成する」(https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/use-powershell-cmdlets-microsoft-defender-antivirus?view=o365-worldwide)にも情報がある。

 ウイルス対策の結果を調べるには「Get-MpThreatDetection」を使う。これは、Windowsセキュリティの「ウィルスと脅威の防止」→「現在の脅威」→「保護の履歴」に相当する情報である(冒頭画面)。

 このコマンドが出力するオブジェクトに対象となるファイルパスがResourceプロパティに入る。ただし、このオブジェクトには、脅威(Threat)の名前が含まれていないのでThreatIDプロパティを使って、名前を検索する必要がある。

 脅威の情報は、カタログにあり「Get-MpThreatCatalog」で得られる。ただし、カタログには、30万件弱の情報が含まれているため、扱いには注意が必要だ。このコマンドを実行するだけで3分以上時間がかかり、メモリ利用量が警告レベルを超えたというメッセージも表示される。このコマンドは、ThrottleLimitオプションを持つものの、1を指定しても警告は収まらない。使うには、変数などにいったん代入し、繰り返しコマンドを使わないようにした方がいいだろう。変数に入れることで、以後の処理を短時間で終えることができる。

 似たようなコマンドに「Get-MpThreat」がある。こちらは、検出された脅威の種類だけを返し、検出履歴などを含まない。しかし、このオブジェクトには脅威の名称とThreatIDが含まれている。「Get-MpThreatDetection」と組み合わせて見ることで、基本的な情報が得られる。

Windowsセキュリティ
Get-MpThreatには検出された脅威の情報を出力し、Get-MpThreatdetectionは、検出の履歴や対象ファイルなど個々の検出の情報がある。これらを組み合わせることでどのような脅威が検出されたのかを調べることが可能

 PowerShellでGet-MpThreatCatalogの出力のような大量のデータから検索をする場合、Where-Objectコマンドでは、条件に一致する全てのオブジェクトを出力するためデータを全部調べるので効率が悪い。「ThreatID」などデータが一件のみと最初から分かっているなら、配列のwhereメソッドを使い、最初のヒットだけを取り出せばよい。具体的には、

$x=Get-MpThreatCatalog $x.where({$_.ThreatID -eq $p.<ThreatID>},1)

のようにする。

 Defender Antivirusには、多くの機能があるが、コマンドラインからもこれを扱うことができる。保護の履歴で対象になったファイル名を得る、脅威の名前をインターネット検索してみるといったことも、コマンドラインからなら簡単に行える。一応「Windowsセキュリティ」の「保護の履歴」では、各項目を開くとファイルのリストがあり、パス部分が選択可能で「Ctrl+C」でコピーできる。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください