運用
|
|
|
MS BlasterやSlammerなど、Windows OSシステムの脆弱性を攻撃するウイルスやワームが過去に広く蔓延したことがあるが、これらは、バッファ・オーバーフローやスタック・オーバーフローなどの脆弱性を利用して自分自身のコードを実行していた。バッファ・オーバーフローとは、あらかじめ用意されたバッファのサイズを超えるような巨大なデータを送り込むことであり、例えばInternet Explorerのアドレス・バーや文字列入力フィールドなどに、数Kbytesとか数十Kbytesものデータを入力することである。
通常は、用意されたバッファ・サイズ以上のデータ入力は受け付けないようになっているはずであるが、プログラムのコードにミスがあると、バッファのサイズを超えるような大きなデータでも受け付けてしまい、ほかのデータ領域やスタック領域、関数の戻りアドレス・データなどを上書きしてしまうことがある。このバグ(脆弱性)を利用すると、任意のプログラム・コードをシステムに送り込み、さらに関数からの戻りアドレスを細工するなどして、任意のコードを実行させることができる。
このような脆弱性を防ぐための対策としてXP SP2で新たに導入されたのが「データ実行防止(Data Execution Prevention。以下DEP)」という機能である。DEPが有効になっていると、本来コードが置かれることはないスタック領域やヒープ領域中に置かれたコードは(デフォルトでは)実行できなくなり、実行しようとすると、プログラムが強制終了させられる。これにより、バッファ・オーバーフローによる攻撃を阻止することができる。CPUから見たプログラムのアドレス空間は、コード領域とデータ領域(静的データ、ヒープ、スタックなど)に分かれているが、XP SP2ではコード領域以外でのプログラムの実行を禁止することにより、システムの安全性を高めるようにしている。
DEPによる不正なコードの実行防止
XP SP2におけるDEPには、ハードウェアDEPとソフトウェアDEPの2種類があり、利用するプラットフォームやCPUタイプに応じて次のようになっている。
プラットフォーム | 利用できるDEP機能 | ハードウェアDEPの適用領域 |
Athlon64/Opteron | ハードウェアDEP/ソフトウェアDEP | スタック領域のみ |
上記以外のx86 CPU | ソフトウェアDEP | − |
Athlon64/Opteron/Itanium+64bit版のWindows XP/Windows Server 2003(現在ベータ版) | ハードウェアDEP/ソフトウェアDEP | スタック領域とページ・プール/セッション・プール・データ領域 |
プラットフォームによるDEP機能の違い |
ハードウェアDEPは現在のところ、AMDのAthlon64/Opteronプロセッサ(もしくはItaniumプロセッサ)でのみ利用できる。これらのプロセッサでは、仮想記憶のためのメモリ管理用ページ・テーブル中に、「実行不可」という属性を付けることができる。コード領域以外のアドレス空間を実行不可にすることにより、不正なコードの実行を防いでいる。
これに対して、ソフトウェアDEPはどのプロセッサでも利用できるが、不正なコードの実行を防ぐことはできず、その機能は非常に限定的である。ソフトウェアDEPを有効にすると、Windows OSの持つ「SafeSEH(安全な例外ハンドラ)」機能を利用する場合の処理に一部変更が加えられる。これにより、例えば例外ハンドラ(エラー発生時に呼び出される特別な処理ルーチン)として不正なルーチンを登録、上書きしてしまうという脆弱性を防ぐ効果がある。
DEPによる実行防止の例
以下に、ハードウェアDEP機能による不正なプログラムの実行防止の例を示す。
※DEPサンプル・プログラム |
このプログラムでは、スタック上のcode[]という配列にプログラムのコード(値1を返すコード)を用意し、それを呼び出しているだけである。このプログラムをAthlon64ではないCPU上で実行すると、次のような結果が得られる。
C:\>deptest … deptestの実行 |
スタック上に置かれたコードが実行され、結果が表示されている。
だがこのプログラムをAthlon64 CPUのWindows XP SP2コンピュータ上で実行すると、次のようにスタック上のコードを呼び出した時点でDEPによってプログラムの実行が終了させられる。
このように、DEPが有効になっているとスタック上に置かれたコードを実行しようとしただけでプログラムが終了させられる。
だが場合によっては、わざとこのようなプログラムになっている場合もあるだろう。例えばあるプログラムを変換してCPUの命令コードを直接生成し、それを実行したいといった場合である。またCPUの違いや環境の違いなどに応じて、プログラムのコード列を直接変更し、最適化して実行する場合もあるだろう。高速化が求められるマルチメディアのデータ処理などでよく使われる手法である。従来はこのようなプログラムでも何の問題もなく実行することができたが、DEPが有効になっていると、データやスタック領域にプログラム・コードを置いてそれを実行することはできなくなる。
このような場合、XP SP2では2つの解決方法がある。
1つは、プログラム・コードを変更してXP SP2に対応させる方法である。スタック上やヒープ上にコードを置く場合、「実行可能な領域」としてメモリ領域を確保し、処理をする。この方法は、プログラマにとっては負担が増えるが、不正なコードへの感染や実行を防ぐという意味で見ると、十分価値のある投資である。今後のWindows OSにおけるプログラムでは、このような正しいマナーを守ったプログラムだけが実行できるようになる予定となっている。さらにXP SP2でDEP機能をオンにすると、カーネル・モードで動作するデバイス・ドライバにはすべてこの機能が働き、不正な実行はすべて阻止されることになる。そのためXP SP2では、認定されたデバイス・ドライバの重要性が増すことになる。設計のよくない("できの悪い")デバイス・ドライバや、ベータ版のデバイス・ドライバなどでは、DEP機能によって実行できなくなるものも出てくるだろう。カーネル・モードのDEP機能は、「デバイス・ドライバごと」といった、選択的にオフにすることができないので、どうしてもこのようなデバイス・ドライバを使いたければ、DEP機能そのものをすべて無効にする必要がある。カーネル・モードでシステム・エラーが発生すると、OSそのものが再起動することになるからだ。DEP機能に対応したアプリケーションは、実行ファイル中に特別なフラグをセットしておくことにより、以下のDEPダイアログの設定にかかわらず常にDEP機能を有効にした状態で実行されるようになる。
もう1つの対処方法は、ある特定のプログラムに対してDEP処理を無効にすることである。DEPに違反するプログラムが見つかると、XP SP2では先の画面のようなダイアログが表示される。ここでユーザーが指定すれば(次の画面参照)、そのプログラム(実行ファイル名で識別されている)に対しては例外的にDEP機能を無効にすることができる。この方法は、従来のプログラムがそのまま利用できるというメリットがあるが、バッファ・オーバーフローの脆弱性などを使ったウイルス・コードに感染する可能性があるので、注意が必要である。DEPによるエラーが検出されたからといって、無条件にDEPの非適用リストに追加するのではなく、アプリケーション・ベンダからの指示などがあった場合にのみ追加するのが望ましいだろう。
DEP機能の設定ダイアログ | |||||||||||||||
DEP機能をシステム全体で使うか、それとも限定的な用途でのみ使用するかを設定するダイアログ。[マイコンピュータ]を右クリックしてポップアップ・メニューから[システムのプロパティ]を表示させ、[詳細設定]タブにある[パフォーマンス]の[設定]ボタンを押すとこれが表示される。XP SP2では新たに[データ実行防止(DEP)]というタブが増設されている。 | |||||||||||||||
|
なおDEP機能は、バッファ・オーバーフローそのものを防ぐものではない。バッファ・オーバーフローの脆弱性などを突いて、システムにプログラム・コードが送り込まれた後、そのコードが起動されるのを阻止するだけである。プログラムがバッファ・オーバーフローを起こしている場合はそのままプログラムを実行しても意味がないと考えられるので、DEPによるエラーを検出すると、プログラムは強制終了させられることになる。バッファ・オーバーフローを防止するには、プログラムそのものを改良することや、バッファ・オーバーフローのチェック・コードをコンパイル時に組み込むなどの措置が必要である(例:マイクロソフト社のC/C++コンパイラならば、/GSオプションを利用すると、ある程度のバッファ・オーバーフローが検出できる)。
DEP機能の有効/無効設定
DEP機能には全部で4つの動作モードがある。これらの設定はc:\boot.iniファイルの/NoExecute=オプションによって設定され、システム起動時から有効になる(msconfigコマンドでboot.iniファイルの内容を確認することもできる)。そのため、モードを変更すると、システムを再起動する必要がある。
設定 | 意味 |
/NoExecute=OptIn | デフォルト設定。Windows OSのすべてのシステム・ファイルと、DEPの使用が許可されたいくつかの特別なユーザー・アプリケーションでのみDEPが有効になる |
/NoExecute=OptOut | Windows OSのすべてのシステム・ファイルと、すべてのユーザー・アプリケーションがDEPの対象となるが、除外リストに登録されたアプリケーション・プログラムについてはDEPが適用されない |
/NoExecute=AlwaysOn | すべたのシステム・ファイルとユーザー・アプリケーションがDEPの対象となる。除外リストにアプリケーション・プログラムを登録することはできない |
/NoExecute=AlwaysOff | DEP機能をすべて無効にする |
boot.iniにおけるDEP設定 |
新規にWindows XP SP2をインストールすると、デフォルトでは「/NoExecute=OptIn」の状態になるが、インストール前にこのフラグが設定されていれば、その設定を引き継ぐようになっている。
■
以上、XP SP2の主要な機能について見てきた。これ以外にも、新しく追加されたXP SP2の機能としては次のようなものがある。
■新しいWindows Update
Windows Updateの構成が変更され、使いやすくなった。またシステムの更新に使用するコンポーネントが従来のv4(バージョン4)からv5(バージョン5)に更新された。中断したダウンロードの再開機能やネットワーク接続の帯域幅に応じた効果的なファイル・ダウンロードなどが改良されている。
■新しいグループ・ポリシー項目
セキュリティ機能の強化に伴って、グループ・ポリシーで制御できる項目が大幅に増加している。特にInternet Explorerのセキュリティ設定に関する項目が目立って増えている。
■デバイス・ドライバのセキュリティ強化
データ実行保護(DEP)でも解説したように、XP SP2(および今後のWindows OS)では、システムの信頼性を揺るがすようなコードの実行は、著しく制限されることになる。インストールするデバイス・ドライバに対しては、デフォルトでは署名がないドライバのインストールを警告するようになるし(以前は、署名がなくても無視してインストールした)、不明なデバイスが見つかった場合には、まずWindows Updateサイトに接続して、最適なデバイスを検索するのがデフォルトとなる(以前はユーザーが指定しない限り、Windows Updateサイトを検索しない)。
デバイスのWindows Updateサイトでの検索 | |||||||||
XP SP2では、新しいデバイス用のデバイス・ドライバを探す場合、(デフォルトでは)まずWindows Updateサイトへ接続するようになっている。これにより、信頼性の低いデバイス・ドライバ・コードの使用を抑え、システムの信頼性向上を図っている。 | |||||||||
|
これら以外にもXP SP2の機能改良点は多々あるが、それらについては機会を改めて取り上げる予定である。
関連記事(Windows Server Insider) | ||
Windows XP SP2の展開に失敗しないために(Insider's Eye) | ||
Windows XP SP2日本語版がついに公開(Windows HotFix Briefings) | ||
関連リンク | ||
Windows XP SP2(マイクロソフト) | ||
HotFix Report BBS | ||
INDEX | ||
[運用] | ||
ネットワーク管理者のためのWindows XP SP2レビュー(前編) | ||
1.XP SP2の概要とインストール | ||
2.ファイアウォール機能(1) | ||
3.ファイアウォール機能(2) | ||
4.ファイアウォール機能(3) | ||
ネットワーク管理者のためのWindows XP SP2レビュー(後編) | ||
5.Internet Explorerの機能強化 | ||
6.Outlook Expressのセキュリティ機能 | ||
7.データ実行保護機能(DEP) | ||
更新履歴 |
【2005/11/16】boot.iniファイルにおけるオプション値の記述が間違っておりました。当初公開した記事ではオプション値を「OptIn/OutOut/AlwayOn/AlwayOff」と記述しておりましたが、正しくは「OptIn/OptOut/AlwaysOn/AlwaysOff」でした。お詫びして訂正させていただきます。 |
運用 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|