第5章 Windows 10のテクノロジー - Windows 10のセキュリティ強化ポイント その2

基本的にセキュリティ対策と攻撃は"矛と盾"に似ている。優れた矛ができたら、さらに堅い盾を研究するように、互いが存在を高めていく妙な関係だ。Windows 8はブートコンポーネントの暗号と検証のために、OSローダーの署名データベースを検証して安全性を高めるSecure Bootと、起動中に悪意を持つプログラムを検出するELAM(Early Launch Anti-Malware)を組み込んでいる。これはOSのブートプロセスに対しても攻撃を行うマルウェアが多数存在する証拠だ。

だが、BIOS環境においては完全ではなかっとMicrosoftは説明する。下図はBIOS環境で動作するWindows 8.xと、UEFI環境で動作するWindows 10のブートプロセスに対するセキュリティ構造を図に表したものだ。まずは上段(=Windows 8.x)をご覧頂きたい。通常はPCの電源を入れるとBIOSがOSローダーを呼び出し、そこからWindowsのブートプロセスが起動。デバイスドライバの読み込みやELAMの起動を経て、サインイン画面が現れる。だが、このブートプロセスではマルウェアが自身を隠匿し、ELAM起動前の感染リスクが高まっていた。

Windows 10で見直されたブートプロセスのセキュリティ対策

これがWindows 10では、UEFIがWindows 10のローダーを呼び出す際に改ざんされていないかチェックを行い、その次にELAMを起動する順序に変更した。この変更により、BIOSのブートストラップローダーがストレージ上のOSローダーが改ざんされているいないに関わらず起動してしまうセキュリティリスクや、マルウェアに感染したデバイスドライバ、拡張子「.sys」型のマルウェアに感染するセキュリティリスクを大幅に低下させている。

もう1つの注目ポイントはメモリ保護機能である。Microsoftが本格的にセキュリティ対策を導入したWindows XP Service Pack 2以降、当時の技術を活用しながらメモリ上のマルウェア侵入や攻撃を防いでた。この頃はデータ領域に埋め込まれたコードに対して実行禁止のフラグを立てるDEP(Data Execution Prevention)や、開発統合環境であるVisual Studioの「/GS」(例外ハンドラーのアドレスやバッファーオーバーランを検出するオプション)など、基本的なセキュリティ対策にとどまっている。

Windows XP SP2から始まったメモリ保護機能

Windows 10では「Control Flow Guard」という正しい関数のみ呼び出す仕組みが加わった

さて、肝心のWindows 10には、脆弱性攻撃によって行われる任意のコード実行を防ぐ「Control Flow Guard」が加わった。具体的には仮想関数テーブル攻撃(vtable攻撃)と呼ばれる攻撃手法は、コンパイル時に特定の関数があるメモリアドレスを書き換えて、異なる関数を呼び出してシェルを起動するシェルコード型である。この攻撃に対してVisual Studio 2015の「/guard:cf」を使用すると、呼び出しテーブルを固定してシェルコードによる被害を未然に防ぐことができるというものだ。

Control Flow Guardの概要。vtable overwrite攻撃を無効にできる

実のところWindows 8.1 Updateでも使用可能だったという資料も目にしたこともあるが、Control Flow Guardを実現するには対応するOSとコンパイラが必要だったため、MicrosoftはWindows 10の機能としてアピールすることになったのだろう。この他にもコード署名を付与したアプリケーションだけを動作可能にする「Device Guard」というセキュリティ対策機能も加わるが、こちらはWindows 10 Education/Enterpriseエディションに限定されるため、Home/Proエディションでは使用できない。

"究極のホワイトリスト"を用いて使用可能なアプリケーションを制限する「Device Guard」

このようにWindows 10はセキュリティの堅牢性も高め、普遍化すると同時に安全性が著しく低下したインターネット時代に対応するOSに進化している。