EMETをOSに統合した「Windows Defender Application Guard」

MicrosoftはWindows 7/8.x時代、セキュリティ対策の1つとして、脆弱性緩和ツール「EMET(Enhanced Mitigation Experience Toolkit)」を提供していたが、Windows 10へ対応したバージョンは待てど暮らせどリリースされなかった。その理由はWindows 10 バージョン1709が「Windows Defender Application Guard」を搭載したからである。

Windows 8.1上で動作するEMET。最終版はバージョン5.52となった

本機能はゼロデイ攻撃を防ぐと同時に、セキュリティ対策をユーザーが講じなくても、マルウェアを異常終了させることで危険回避機会を増やすのが主な目的だ。EMETと同等の機能をWindows 10が供えたため、Microsoftは2016年11月の時点でEMET新バージョンの開発をキャンセルした。同社はEMETが持つ欠陥の1つに、"OSと未統合"である点を指摘。Windows 10が供える各種セキュリティ機能と並んでEMETと同等の機能を持つWindows Defender Application Guardを「Windows Defenderセキュリティセンター」に組み込んだ。

EMET相当の機能は、「Windows Defenderセキュリティセンター」の<アプリとブラウザーコントロール>から呼び出す

「Exploit Protection」は、CFGやDEPなど各脆弱性緩和機能をシステム単位やアプリケーション単位で選択できる

ご覧のとおり各脆弱性緩和をシステム全体や個別のアプリケーションに対して付与できる仕組みだが、セキュリティ方面に明るくない方は何が何やらではないだろうか。ここで各設定項目を簡単に紹介する。「CFG(制御フローガード)」はコードの流れや連続性を監視して、正しい関数のみを呼び出す対策手法。ASLR(アドレス空間配置のランダム化)をバイパスして悪用コードが侵入した場合も被害を未然に防ぐ可能性が高まる。

「DEP(データ実行防止)」はメモリーの一部範囲を"コード実行不可能"と設定することで、攻撃コードの実行を抑止する対策手法だ。バッファーオーバーフロー攻撃などを緩和する。「必須ASLR」はMandatory ASLRのため"ASLRの強制"と訳した方が伝わりやすいだろう。こちらは前述のとおりASLRはモジュールがロードするアドレスを悪用コードが予測できないようにランダム化するものだが、こちらを強制する対策手法となる。

「ボトムアップASLR」はヒープ(動的に確保できるメモリー領域)やスタック(コンパイラやOSが管理するメモリー領域)などボトムアップ型のメモリー割り当てを行う際のベースアドレスをランダム化する手法だ。「SEHOP」はスタックオーバーフローが発生した際の例外処理(SEH)を上書きする悪用コードの実行を抑止する対策手法。実行時に処理を施すため、一部のアプリケーションは正しく動作しない可能性がある。「ヒープ整合性の検証」はASLRを回避するため、解放したメモリー領域にシェルコードのコピーを配置するヒープスプレーなどの攻撃を、整合性チェックで未然に防ぐ対策手法だ。

各脆弱性緩和設定は、アプリケーションに対して個別設定も可能

エクスポート機能を使うと、各アプリケーションに行った個別設定をXMLファイルで保存できる

さて、上図で示したとおり個別のアプリケーション対する脆弱性緩和設定はXMLファイルにエクスポートできるが、Windows Defenderセキュリティセンターのどこを探してもインポートする項目が見つからない。これはEMET時代からの名残というか一部管理者に大人気の"何でもPowerShell"という、Microsoftのエンジニアチームに浸透した概念が影響している。例えばエクスポートしたXMLファイルをインポートするには、Windows PowerShell上で以下のコマンドレットを実行すればよい。


/*
Set-ProcessMitigation -RegistryConfigFilePath foo.xml
*/

もちろん「foo.xml」はご自分の環境に合わせて変更してほしい。なお、インポートができるのならエクスポート操作もWindows PowerShellで実行可能だ。


/*
Get-ProcessMitigation -RegistryConfigFilePath foo.xml
*/

EMET時代の構成ファイルをWindows Defender Application GuardのExploit Protection用に変換する場合も、Windows PowerShellならワンラインで済む。


/*
ConvertTo-ProcessMitigationPolicy -EMETFilePath foo.xml -OutputFilePath bar.xml
*/

なお、Get-ProcessMitigationコマンドレットが動作しない場合は、PowerShell Galleryを確認してほしい。これでEMETを始めとするセキュリティ対策の関係から、二の足を踏んでいた方も、安心してWindows 10に移行できるだろう。