Windows 10のセキュリティ対策について、今回は「脅威からの保護」の仕組みを解説する。

Windows 10では、セキュリティ上の脅威からの保護策は大きく3つに分かれる。1つ目は伝統的なセキュリティ機能であるWindows Defender(アンチマルウェア)、Windows Firewall(ホスト型ファイアウォール)、SmartScreen(Webサイトのリアルタイムの検証)だ。2つ目はWindows 10に新たに導入されたセキュリティ機構「Device Guard」、3つ目はWebブラウザで「Microsoft Edge(以下Edge)」の導入だ。

●正しいコードを正しい状態で動かすDevice Guard

以下ではDevice GuardとEdgeについて、どのようなセキュリティ機能を備えるのかを順に紹介する。

Device Guardは、第1回で紹介した仮想マシン「VBS」をベースに動作する。「正しいコード」が、悪意ある改変を受けていない「正しい状態」で稼働していることを担保する一連の機構だ。

Device Guardの概念は幅広い。そのため、Microsoftのドキュメント内でも内容や指し示す技術の範囲が微妙に異なっている。今回は、“Device Guard の概要:仮想化ベースのセキュリティとコードの整合性ポリシー”で述べられている内容を中心に取り上げる(*1)。

――
(*1) マイクロソフト TechNetにある該当ページの内容はこちら。
――

そもそも正しいコードとは何だろうか。適切な署名がされたコードという意味だ。つまり、コードの出荷元が明確であり、改版がされていないコードだ。Device Guardを一連の機構と呼ぶのは、PCのブートからユーザーによるアプリケーションの起動まで、複数の技術を利用して正しさを保証するからだ。

まずPCのブート時に、第1回で解説した「Windows Trusted Boot」を利用して正しさを保証する。

ブート後のコード実行は、「KMCI(Kernel Mode Code Integrity)」と、「UMCI(User Mode Code Integrity)」で保証する。

ドライバのコード署名やAppLockerなど、コード(プログラム)の整合性チェック自体は、Windows 10以前のシステムで実装済みだ。ところが、整合性チェック機能自体がWindows上で稼働し、整合性チェックに利用するデータもWindows上にあるため、どちらも改ざんされる可能性があった。

そこでWindows 10から導入されたVBSの機能を用いる。KMCIとUMCIは、VBS内で動作するVSM(Virtual Secure Mode)の「Hyper-Visor Code Integrity」を利用する。

検証機能と検証に必要なデータをVSMに移すことで、信頼性の高い整合性チェック機構を実装できた。なお、VBSを利用することで、DMAベースの攻撃(*2)からも情報とコードを保護できる。

――
(*2) Direct Memory Access(DMA)を利用することで、ファイルではなく、メモリ上に残った整合性チェックに利用するデータなどを読み出す攻撃をいう。
――

企業内でDevice Guardを利用する際には、稼働を許可する署名されたソフトウェアをまずリスト化する。標準PCで「コード整合性ポリシー」を作成し、これを組織内のPCに展開する。

コード署名のないソフトウェアも実行可能だ。Device Guardの一部として開発されたツール「Package Inspector」を使用して、実行を許可するアプリのカタログをまず作成する。その後、組織内のPCに展開すればよい。

●詐欺対策を施したEdge

「水飲み場型攻撃」という言葉があるように、Webブラウザは主要な攻撃ターゲットの1つだ。Windows 10には、PCのWebブラウザを経由した攻撃に向けた対策も強化した。そのために標準のWebブラウザをInternet Explorerから、セキュリティを強化したEdgeに変更した(*3)。

――
(*3) Edge のセキュリティの強化。
――

Webブラウザを悪用する攻撃は大きく2種類に分けることができる。フィッシングや架空請求などの”詐欺”と、Webブラウザの拡張機能や脆弱(ぜいじゃく)性を使ってデバイス上でコードの実行を試みる“ハッキング”だ。まずは詐欺対策について紹介する。

オンラインサービスの認証情報を狙ったフィッシングやリスト型攻撃などによる被害が後を絶たない。これらの被害が生じる本質的な問題は、オンラインサービスが、ユーザーIDとパスワードによる認証に頼っている点にある。

Windows 10では、より安全で簡単な認証方式を導入している。FIDOアライアンス(*4)のWeb認証に従った「Windows Hello」と「Microsoft Passport」だ。Windows Helloは、生体認証システムを用いることでパスワードを使わない安全なWindowsシステムへのログオンを提供する。加えてMicrosoft Passportで利用する秘密鍵と公開鍵を生成し、デバイス内に保存する。特に秘密鍵はTPM(Trusted Platform Module、セキュリティチップ)に保存する。

――
(*4) FIDO Allianceはオンライン認証技術の標準化団体。生体認証や多要素認証の利用に向けた標準を策定している。
――

オンラインサービスへの攻撃やリスト型攻撃に向けた対策

ユーザーがオンラインサービスにアクセスした場合を例に、実際の認証の流れを追ってみよう。

Microsoft Passportは、FIDOをサポートするオンラインサービスの利用を開始する場合などに、Windows Helloが生成した公開鍵をオンラインサービスに登録する。

オンラインサービスとデバイスの認証は、デバイスのTPMに保存した秘密鍵と、オンラインサービスに登録した公開鍵を使ったチャレンジ&レスポンス方式で進める*5)。つまり、デバイス自体を多要素認証の1つとして活用する。

――
(*5) オンラインサービスなどに対してランダムな値(チャレンジ値)を送信し、このチャレンジ値をサービス側が暗号化した値(レスポンス値)を送信元に戻す。返されたレスポンス値と元のランダム値から計算した値を比較することで、正しい相手にアクセスできていることを確認する認証方式。認証ごとに異なるランダムな値を使用するため、パスワード方式に比べて安全性が高い。
――

Microsoft Passportを使えば、オンラインサービスに登録した証明書が漏えいした場合でも、オンラインサービスの悪用には至らない。

その理由はこうだ。パスワードを使わないため、フィッシングサイトのような偽サイトは、ログオンに必要なアカウント情報を取得できない。加えてオンラインサービスが侵害されて登録した公開鍵に相当する証明書が盗まれた場合でも、ユーザーの手元にあるデバイスのTPMに記録された秘密鍵を攻撃者が入手できないため、悪用はできない。

IDとパスワードを使うサービスにも配慮

ただし、Microsoft HelloとMicrosoft Passportの組み合わせも万能ではない。現段階では、ユーザーIDとパスワードを使うオンラインサービスが多いためだ。引き続きフィッシングなどへの従来型の対策が必要だ。

従来型の対策とは、Windows 7で導入された「Microsoft SmartScreen」である。フィッシングサイトやマルウェアを含むサイトのリストを利用することで防御する。Windows 10では証明書のレピュテーション(信用)を評価し、不適切な証明書を使用しているサイトへのアクセスもブロックする。

SSL(Secure Sockets Layer)やTLS(Transport Layer Security)などで利用するサーバ証明書は、本来なら信頼できるものだ。だが、2011年に起きたDigiNotarの事件に加えて、Stuxnetでは第三者の正規の証明書を利用し、Flameではマイクロソフト証明書を偽装するなど、証明書に対する攻撃が無視できない状況にある。証明書だからといって、必ずしも信頼できるとはいえなくなっている。

SmartScreenの目的は、このような信頼できない証明書による被害を防ぐことだ。アクセス時に証明書を厳密に評価し、偽証明書を使った可能性のあるサイトなどを検出し、疑わしいサイトへのアクセスをブロックする(*6)。

――
(*6) 「より信頼できる証明書利用環境へ向けて~ Internet Explorer 11 SmartScreen 証明書評価」(マイクロソフト TechNet)
――

●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の構成では、それぞれの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万通り)でランダムに割り当てられる。メモリ空間の広さと予測の難しさが合わさって、ヒープスプレー攻撃を成功させることを極めて難しくしている。

バイナリコードに対する制限の追加

Windows 10 Creators Updateでは、「CIG(Code Integrity Guard)」「ACG(Arbitrary Code Guard」と呼ぶ保護機構も導入した(*9)。

CIGは先ほど解説したUMCIを利用し、適切に署名されたコードだけがロードされることを保証する。

ACGは、コードが展開されたメモリ領域を書き込み禁止にすることで、ロード後にコードが改変されることを防止する。同時に新たなコードページの生成を防止する。これによって、メモリ上でコードを生成する攻撃を防止する。

――
(*9) 「Microsoft Edgeでの任意のネイティブコード実行の影響の緩和」。