SPN通信 2012年9月3日

ROP攻撃の緩和機能が追加されたEMET Tech Preview版(後編)


(...前編からの続き)

さてEMET v3.5 Tech Preview版に導入された、ROP攻撃を緩和する5つの技術についてもう少し詳しく見てみましょう。参考文献はEMETに付属するユーザーズ・ガイド、および、下記のマイクロソフトのブログ記事です。

  • EMET 3.5 Tech Preview leverages security mitigations from the BlueHat Prize
    http://blogs.technet.com/b/srd/archive/2012/07/24/emet-3-5-tech-preview-leverages-security-mitigations-from-the-bluehat-prize.aspx

■ ロードライブラリ・チェック(Load library checks)

この機能はLoadLibrary関数の呼び出しを監視し、SMBパスによるリモートからのDLLのロードを防ぎます。つまり「\\server\share\foo.dll」といった形でリモートホスト上のDLLを指定してLoadLibraryを呼び出すことを阻止します。

■ メモリ保護チェック(Memory protection checks)

DEPによる保護を回避するため、攻撃者はしばしばスタック領域のメモリ・ページを動的に実行可能にする関数呼び出しを行いますが、この機能はスタック領域が実行可能に変更されることを防ぎます。

■ 呼び出し元チェック(Caller checks)

VirtualAllocや、VirtualProtect、HeapCreate、LoadLibraryといった、ROP攻撃においてよく利用される関数(EMETではこれらの関数を「クリティカル関数」と呼んでいます)がreturn命令ではなくcall命令によって正しく呼び出されたかどうかを確認する機能です。

■ 実行フロー・シミュレーション(Simulate execution flow)

この機能はクリティカル関数のリターンアドレスからいくつかのインストラクションのシミュレーションを行い、ROPのテクニックが使われているかどうかをチェックします。シミュレートするインストラクションの数はデフォルトで15です。

■ スタック・ピボットの検知(Stack pivot mitigation)

スタック・ピボットが行われたか、つまりスタックの位置がありえない場所に変更されたかどうかを検知します。

これらのROP攻撃の抑止技術はデフォルトではOFFの状態になっていますので、使用したい場合はアプリケーション・プログラムごとに明示的にONにする必要があります。ただしアプリケーション・プログラムによっては、これらの抑止技術により正常な動作が阻害される可能性があるため注意が必要とされます。

興味深いことにこれらの技術は、前述したクリティカル関数のいずれかが呼ばれた際に機能するように、これらの関数の先頭にフックする形で実装されています。つまり、ROP攻撃ではこのような関数が呼ばれるという前提に立った実装だと言えるでしょう。具体的にどの関数がクリティカル関数として扱われているかについては、明確な資料は見当たりませんが、ざっと調べた限りでは少なくともkernel32.dll中の以下が対象となっているようです。

  CreateFileA                      LoadLibraryExA
  CreateFileMappingA               LoadLibraryExW
  CreateFileMappingW               LoadLibraryW
  CreateFileW                      MapViewOfFile
  CreateProcessA                   MapViewOfFileEx
  CreateProcessInternalA           VirtualAlloc
  CreateProcessInternalW           VirtualAllocEx
  CreateProcessW                   VirtualProtect
  CreateRemoteThread               VirtualProtectEx
  HeapCreate                       WinExec
  LoadLibraryA                     WriteProcessMemory
前述のマイクロソフトのブログ記事にも明記されていますが、このような実装方式の欠点としてこれらのクリティカル関数を呼び出さない攻撃が行われた場合、つまり例えばもっと低レベルの関数が使用された場合などは、残念ながらROP攻撃の抑止機能は効果を発揮することができません。実際にEMET v3.5 Tech Preview版がリリースされた2週間後には、それを回避する攻撃手法が公開されています。

  • Bypassing EMET 3.5's ROP Mitigations
    http://repret.wordpress.com/2012/08/08/bypassing-emet-3-5s-rop-mitigations/

最終的なリリースで実装方法が変更されるかどうかはわかりませんが、いずれにせよこのようなROP攻撃の抑止機能は、EMETが持つ数多くの防御機能の一つとして有効であることに変わりはありません。大切なのは多角的に複数の防御を施すことにより、攻撃者にとってのハードルを上げることです。EMETにとってはどれか一つの防御が攻撃を防ぐことができれば事足りるわけですから。

EMETはv3.0以降、プロファイルを使用したコンフィグレーションや、グループポリシーによる管理、またイベントログへの記録およびポップアップによるユーザ通知といった機能が追加され、使い勝手と組織内展開の面で一段と向上していますので、この機会に組織内におけるEMETの導入を検討されることをお勧めします。

それではみなさん、またお会いしましょう。

合同会社セキュリティ・プロフェッショナルズ・ネットワーク
代表社員 塩月誠人