ブログ

FFRI BLOG

Monthly Research 「Windowsのセキュリティ新機能-Control Flow Guardについて


Control flow guard(以下、Guard CFと表記します)は、脆弱性攻撃によって行われる任意のコード実行を防ぐための新しいセキュリティ機能です。現在、Windows 10 Technical PreviewとVisual Studio 2015 Previewで試すことができます。なお、Guard CFがWindows 10の出荷版に搭載されるかどうかは現時点で分かりません。しかし、さかのぼるとWindows 8.1 Previewでテストされていたことからも、いずれWindowsに標準搭載されるのではないかと推測できます。

Guard CFは、脆弱性攻撃によってinstruction pointerの制御を奪われ、任意のコードを実行されることを防ぐための仕組みです。まず、コンパイル時にレジスタ、メモリに格納されたアドレスをcallするコードを探し、そのようなindirect callの前に、Guard CFのための呼び出し先アドレス検査関数を挿入します。検査関数は、プログラムのリンク時に作られる、"間接呼び出しされる関数一覧"に、呼び出し先アドレスが載っているかをチェックし、その結果によっては、セキュリティ例外を発生させ、プログラムを停止、またはレポーティングします。検査関数と"間接呼び出しされる関数一覧"の管理はWindowsのランタイム(ntdll)がそれを担当します。



Fig.1 Guard CFによる保護のイメージ


このため、実際にGuard CFが使うためには、コンパイラ(Visual Studio)側の対応、OSランタイム側の対応の2つが必要となります。プログラムの再コンパイルが必要なため、注意が必要です。Visual Studio 開発者ブログで、Guard CFについての記事がでておりますので、こちらもご参照ください。

CFIの研究発表から10年が経とうとしており、その間にWindowsはASLRやEMETなど新しい機能を次々と実装していますが、Guard CFはそれらとは違う方向性の、より堅牢なシステムを作るための仕組みです。

今月のMonthly Researchでは、Guard CFについて解説しました。今後活用されるかもしれない、今までとはちょっと違う方向のセキュリティ強化の仕組みについて興味を持っていただければ幸いです。


Monthly Researchのダウンロードはこちら


関連記事

Monthly Research 「SELinux 再入門-仮想化・コンテナ編-」

Monthly Research 「POSマルウェアについて」

Monthly Research 「SELinux再入門-Android編-」