Firefox + EMET 5.5 の EAF 緩和策による動作遅延を解決する方法
Microsoftが提供する無料ツール「EMET(Enhanced Mitigation Experience Toolkit)」を使えば、システムをソフトウェアの脆弱性やエクスプロイト攻撃から保護できます。しかし、EMETをバージョン5.5へアップグレードした途端、Firefoxの動作が極端に遅くなり、CPU使用率が異常に跳ね上がるという問題に直面することがあります。一見、両者に関係があるようには思えませんが、実際には密接な関連があります。対象環境はWindows 8.1です。
この記事では、まず問題の原因となっている要素を切り分けた経緯を説明し、そのうえで、互換性のない緩和策(mitigation)を無効化することで問題を回避する方法をご紹介します。つまり「緩和策を緩和する」わけですね。
問題の詳細
筆者の環境は、Ubuntu 14.04とWindows 8.1のデュアルブート構成のAsus VivoBookです。Windows側でいくつかのソフトウェア更新を行い、EMETを4.0から5.5へ引き上げると同時に、ソフトウェア一式も最新版へ更新しました。すると、Firefoxの挙動が明らかにおかしくなったのです。起動にも終了にも10〜15秒かかり、操作への反応が著しく悪く、空白のタブを1枚開いているだけでもCPU使用率が40〜50%に達します。
そこで段階的にトラブルシューティングを開始しました。まず、すべての拡張機能とプラグインを無効にしたセーフモードでブラウザを起動しましたが、状況は変わりません。次に別のプロファイルを試し、さらにはFirefox 50からFirefox 46 ESRへダウングレードまで実施しました。これは、最近のブラウザバージョン特有の問題ではないことを確認するためです。マルチプロセス機能「Electrolysis(e10s)」のオン/オフも切り替えてみましたが、結果は同じでした。
ここで、別の変更――つまりEMETのアップデート――がシステム全体に影響を及ぼしている可能性に思い至りました。この事例は、可能な限り一度にひとつの変更だけを加えることの重要性を物語っています。そうすれば、各要素がどう相互作用するのかを確実に把握できるからです。とはいえ、新たな容疑者としてEMETが浮上した以上、実際に確かめてみることにしました。
まず、EMETのアプリケーション設定リストからFirefoxを完全に削除すると、問題は消失しました。次に、すべての緩和策を再度有効化し、ひとつずつ解除していき、どれがブラウザに悪影響を与えているのかを特定します。その結果、意外なことに、EMET 5.5の「EAF」と「EAF+」という2つの緩和策がMozillaの看板ブラウザと相性が悪いことが判明したのです。将来的なバージョンアップで修正されるはずですが、現時点での回避策は、この2項目のチェックを外すことです。
こうしてCPU使用率は再び正常な水準に戻りました。ふぅ、ようやく一安心です。
なぜ急にこのような問題が?
当然の疑問です。実はMicrosoftは互換性リストを公開しており、EMETの一部の緩和策と併用すると正常に動作しないことが判明済みのソフトウェアが網羅されています。このリストにFirefoxは掲載されていませんが、いずれ更新で追加される可能性もあります。
さらに筆者は、公式ガイドと各緩和策の細かな仕様に目を通すことにかなりの時間を費やしました。EAFは「Export Address Table Access Filtering(エクスポートアドレステーブルアクセスフィルタリング)」の略で、リクエストが不正と判定された場合に、特定のコアDLLの機能を利用しようとするアプリケーションからのシステムコール、少なくとも読み書きアクセスをブロックする仕組みです。
EAF+はこれをさらに拡張し、スタック境界のチェック、フレームポインタレジスタの不整合、メモリ破壊などを監視対象に加えます。こうした機能は、デバッガ類のソフトウェアや、サンドボックス機構・DRMなどを利用するアプリケーションと衝突する可能性があります。おそらく――あくまで筆者の推測ですが――Mozillaはサンドボックス化によってFirefoxのセキュリティ強化を進めており、その動作がEMETの保護メカニズムと干渉し、一部のシステムコールがブロックされることで、ブラウザの性能や機能に支障が出ているのだと思われます。推測の域を出ませんが、デバッガを動かして検証する気にはなれませんでした。
まとめ
以上のように、対処そのものはごくシンプルですが、問題の根本原因は決して単純ではなく、診断も容易ではありません。EMETの緩和策を有効にしたこと自体を忘れていたり、何気ないアップデート後のブラウザの低速化と結びつけて考えられなかったりすることもあるでしょう。それでも筆者は、EMETはMicrosoftが過去10年間でリリースした中で最高の製品だと考えています。ただ、どんなセキュリティツールでも、ときには水面下から姿を現して存在を主張することがあります。他のセキュリティ対策ツール群に比べればはるかに控えめですが、ゼロではありません。もし同様の症状に遭遇したら、冷静かつ体系的に問題を切り分けましょう。コンポーネントごとの検証、既知のクリーンな状態との比較といった、問題解決の基本テクニックを駆使してください。
そして、EMETの将来に関わる重要な論点もあります。残念ながらMicrosoftは、当初のサポート終了時期から約18ヶ月延長したうえで、2018年中頃にこのツールを廃止する予定です。さらに、いずれWindows 10もこのツールをサポートしなくなる見込みで、恐らく――期待を込めて言えば――緩和策はOS/カーネルレベルに統合されていくでしょう。加えて、5.5以前の既存バージョンはすべてサポート対象外となっており、現行ユーザーにとっては頭の痛い話です。とはいえ現時点では依然として優れたツールであり、今回は実際に問題をひとつ解決できました。それでは、快適なPCライフをお楽しみください。
-
Firefox 4 vs Internet Explorer 9 徹底比較レビュー
さあ、覚悟してください!こんな対決記事を書くことになるとは思いもしませんでしたが、いざ始めましょう。あらゆるサプライズは起こりうるものです。Microsoftが一流の高性能ブラウザを届けてくることも、その一つです。社内での厳しい指導と減給が効いたのでしょうか。さて数日前、Firefox 4ベータの詳細なプレビューが公開され、その翌日にはInternet Explorer 9ベータが登場しました。どちらも非常に期待できる製品です。Firefox 4は長い歴史を持つ優れたブラウザの系譜を受け継ぎ、従来の精神を保ちながらさらに進化を遂げています。一方、Internet Explorer 9は革命です
-
Firefox 3.1 Beta 3のメモリ使用量を徹底検証 ― LinuxとWindowsでの実測レポート
先日、Firefox 3.1 Beta 3をレビューしました。JavaScriptパフォーマンスの大幅な向上、使い勝手とプライバシーに関する新機能、将来のHTMLマルチメディア要素への対応など、非常に魅力的なリリースです。ところが、あの記事ではメモリ使用量については一切触れていませんでした。 それには、ちゃんとした理由があります。 アプリケーションのメモリ使用量を正確に測定するのは、実は非常に難しい作業です。せいぜい得られるのは「推測」や「目安」程度で、しかも主観的かつ限られた要因に基づくもので、ほとんど役に立たないことも珍しくありません。多くの人は、タスクマネージャー、Process Exp