脅威からPCを守るWindows 10の「Device Guard」と「Edge」:Windows 10が備えるセキュリティ機能(2)(3/3 ページ)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、機能を5つのスタックに分けて順に押さえていくことが早道だ。連載第2回は不正なコードの実行や、Webブラウザを利用した詐欺、ハッキングなど「脅威からの保護」について紹介する。
Edgeのハッキング対策
詐欺対策に続いて、Edgeが備えるハッキング対策についても紹介しよう。
Edgeは、新しいWebブラウザとして開発された。このため、最新の標準に基づいた実装に加え、大きく4つのセキュリティ対策を組み込むことができた。「HTML5のサポートとアクティブコンテンツのサポート停止」「Universal Appsへの移行とAppContainerの利用」「Use After Free対策/ヒープスプレー対策」「バイナリコードに対する制限の追加」だ。
HTML5のサポートとアクティブコンテンツのサポート停止
Edgeは、従来のVBScript、Jscript、VML(Vector Markup Language)、ブラウザヘルパーオブジェクト、ツールバー、ActiveXコントロールのサポートを取りやめた。そして新たにHTML5をサポートした。
加えてInternet Explorerで見つかった脆弱性の多くを占めるDocument Mode*7)も削除したことで、攻撃を受ける可能性を大幅に引き下げた。
*7) HTMLをレンダリングするエンジンを切り替える機能。古いInternet Explorerのバージョンに相当するエンジンを利用できる。
Universal Appsへの移行とAppContainerの利用
さまざまな対策を講じていたとしても、Webブラウザ上で攻撃が成功してしまう可能性が残っている。その場合でもシステムへの影響を最小化するため、Webブラウザとシステムを分離するサンドボックス化をこれまでも進めてきた。Internet Explorer 7では保護モード、Internet Explorer10/11では拡張保護モードを採用している。
さらにWindows 8ではスマートフォンのアプリケーションと同様に、システムリソース(ファイルや通信など)への直接的なアクセスができない仕組み「AppContainer」を導入した。
Windows 10ではEdgeがActive Xやサードパーティーのバイナリ拡張機能を削除した。これにより、64bitプロセスのUniversal Appとして、常時AppContainer上で稼働できるようになった。
従来の整合性レベルに基づいた保護モード/拡張保護モードと比較して、より明確にシステムと分離できており、攻撃コードが実行された場合でもシステムの安全性が高まっている。
Windows 10 Creators Updateで提供されたEdgeのAppContainerの構成を図5に示す。それぞれのAppContainerは独立したコンポーネントとして、互いに分離された環境で動作する*8)。
*8) Windows Blogsに掲載された「Strengthening the Microsoft Edge Sandbox」の内容。
5つのAppContaierの役割を以下に示す。
- Internet AppContainer(以下AC):JavaScriptやマルチメディアを含むインターネットサイトからのコンテンツをホストする
- Intranet AC:イントラネットからのコンテンツをホストする
- Extension AC:Edgeの拡張機能をホストする
- Service UI AC:「about:flags」やデフォルトのWebページなどの特別なページをホストする
- Flash AC:Adobe Flash Playerをホストし、他のコンポーネントと分離する
Use After Free対策/ヒープスプレー対策
Windows 10 Creators Updateでは、Edge向けに攻撃コードの新たな実行防止機能「MemCG」と「Control Flow Guard」を実装した。
MemCGは、システム上の対応が難しかった「Use After Free(UAF)攻撃」への対策として盛り込まれた。UAF攻撃では、解放されたヒープメモリ領域に対して攻撃者が不正なコードを書き込み、実行させる(関連記事)。
このような攻撃を防ぐためにMemCGはメモリへの参照がないことを確認した上でメモリを解放し、UAFを回避する。
Control Flow Guardは、Edgeばかりではなく、全てのWindowsプログラムで利用可能な機構だ。プログラムのビルド時に仮想関数に代表される間接呼び出しのジャンプ先を、アドレステーブルとして作成し、ジャンプ先がテーブル内に収まっていることを確認する。こうして、「Return-to-Libc」や「ROP(Return Oriented Program)」などの攻撃を防止する。
Edgeではヒープスプレー攻撃に対する防御も強化された。従来の32bit版のWebブラウザは、2GBのアドレススペースしか持たない。そのため、プロセスに割り当てられたメモリの大半をヒープスプレーでコントロールできる。
Edgeは64bitアプリケーションだ。64bitプロセスのメモリ空間は、128TBと格段に広く、ヒープスプレーで攻撃が成立するために必要なメモリ領域を攻撃者がコントロールすることは現実的ではない。
例えば攻撃側が1Tバイトのヒープ領域を確立したとしよう。1Tバイトは、16Gバイトの実メモリを搭載している場合でも64倍のメモリ空間に相当することに加えて、Edgeが利用可能なメモリ空間の128分の1しかカバーできていない。ヒープスプレー攻撃が成功する確率はかなり低くなる。
さらに、Windows 8で実装したアドレス空間配置の強いランダム化「High Entropy ASLR(Address Space Layout Randomization)」では、ヒープの開始アドレスが24bit(約1700万通り)でランダムに割り当てられる(図6)。メモリ空間の広さと予測の難しさが合わさって、ヒープスプレー攻撃を成功させることを極めて難しくしている。
バイナリコードに対する制限の追加
Windows 10 Creators Updateでは、「CIG(Code Integrity Guard)」「ACG(Arbitrary Code Guard」と呼ぶ保護機構も導入した*9)。
CIGは先ほど解説したUMCIを利用し、適切に署名されたコードだけがロードされることを保証する。
ACGは、コードが展開されたメモリ領域を書き込み禁止にすることで、ロード後にコードが改変されることを防止する。同時に新たなコードページの生成を防止する。これによって、メモリ上でコードを生成する攻撃を防止する。
*9) 「Microsoft Edgeでの任意のネイティブコード実行の影響の緩和」(MSDN Blogsの記述)。
次回はWindows 10が備える5つのセキュリティスタックのうち、今回の「脅威からの保護」に続いて、3番目の「認証情報の保護」を解説する。
筆者プロフィール
高橋 正和(たかはし まさかず)
日本マイクロソフト株式会社
チーフ セキュリティ アドバイザー
1980年代初頭からミニコン、PC-98、8085、4bitマイコンなどを使った制御システムの開発などを経験。
1980年代中頃から、日本デジタル研究所株式会社で標準ライブラリの開発保守、開発環境の開発保守、独自OSからWindows NT/Windows XPへの移植、品質管理、新入社員向けのC言語の新人教育などを担当した。
標準ライブラリでは、ファイルシステムやSocketライブラリの開発と実装、保守を行い、開発環境では、68K系のCPUにWhite Sims’s Cによるリロケータブルな実行ファイル形式という特性を使って、オーバレイリンカーやオーバーレイローダーなども開発した。
1999年にISS(現在はIBM)セキュリティに関わり、2006年から現職(日本マイクロソフト株式会社 チーフセキュリティアドバイザー)を務める。
Copyright © ITmedia, Inc. All Rights Reserved.