セキュリティ ウォッチセキュリティに関する 10 の鉄則再考 : 第 1 部
Jesper M. Johansson
Scott Culp は、2000 年に「セキュリティに関する 10 の鉄則」というエッセイを公開しました。これは、セキュリティに関して私がこれまでに読んだ中で、最も優れたエッセイの 1 つです。彼が提供した情報は、いまだに情報セキュリティに関するすべての作業の基礎になっているので、まだ読んでいない方は、Web 上で (または印刷して) 一読することをお勧めします。このエッセイは、microsoft.com/technet/archive/community/columns/security/essays/10imlaws.mspx で公開されています。
このエッセイには、さまざまな反応が寄せられました。一部の人々は、これはマイクロソフトが多くの深刻な問題の解決を避けるための方法である、と皮肉たっぷりに批評しました。また、これはセキュリティに関する最も基本的な項目が含まれた文章であると考え、その重要性の高さから、好き勝手に盗用する人々もいました。最も興味深い反応の 1 つは、edgeblog.net/2006/10-new-immutable-laws-of-it-security で公開されているような一覧を人々が独自に作成する気になったことです。
このエッセイが公開されてから 8 年の間に、セキュリティ分野ではさまざまなことが起こりました。注意すべき重要なワームは、ほぼすべて明らかになりました。また、世界は (組織犯罪や政治的要素を含む) 情報戦争に突入しました。さまざまな新しい単語や語句が一般的な用語になりました。たとえば、フィッシング、ファーミング、ボットネット、スパイウェア、クロスサイト リクエスト偽造攻撃などが挙げられます。また、Windows 上で動作する非常に巧みないくつかのルートキットが作成されました。さらに、セキュリティを強く意識した新しいオペレーティング システムが発表される一方で、依然としてセキュリティがほとんど無視されたオペレーティング システムも存在しました。
ソーシャル エンジニアリングは、主要な脅威へと進化しました。9,400 万人のクレジット カード番号を流出させた大手小売業者など、データの漏洩も、よくニュースの話題として登場するようになりました (そして、人々は現在でもそのような店舗でショッピングをしています)。米国および英国政府は、西欧諸国に住む非常に多くの人々の個人情報を誤って適切でない場所に配置しました (そして、人々は現在でもこれらの政府に個人情報を提供しています)。セキュリティ ショーも、私たちの生活、および空港に非常に多く入り込んでいます。
私は、今こそセキュリティに関する鉄則の見方を変えるべきだと思います。今世紀の初頭に起こったあらゆる変化を考えて、それでもなお、これらの鉄則が絶対であると主張できるでしょうか。それが可能であれば、つまりこれまでの 8 年間生き残ってきたのであれば、これらの鉄則は今後 10 年間生き残ると言ってもよいでしょう。
この 3 部シリーズでは、10 の鉄則それぞれを批判的に分析します。今月は鉄則 1 ~ 3 を取り上げます。そして来月は、鉄則 4 ~ 7 を取り上げます。最終回では、鉄則 8 ~ 10 を取り上げ、2000 年にこれらの鉄則が初めて公開されてから現在までに起こったことを踏まえて、妥当だと思われる考え方と見解を提供します。
鉄則 1: 悪意のある攻撃者の誘惑に乗って、攻撃者のプログラムをあなたのコンピュータで実行した場合、もはやそれはあなたのコンピュータではない
この鉄則は実質的に、コンピュータで実行されるすべてのソフトウェアが、そのコンピュータを制御する可能性があることを示しています。これらの鉄則が初めて公開されたときにマイクロソフトから提供されていた最新のオペレーティング システムは、Windows 98、Windows Me、および Windows NT 4.0 でした。現在私たちが使用しているのは、Windows Vista や Windows Server 2008 です。
Windows 98 と Windows Me では、実行するすべてのソフトウェアがコンピュータを完全に制御していました。Windows NT 4.0 は、信頼性の高いセキュリティ モデルに基づいて構築されましたが、管理者として実行すると、事実上その分離レベルは Windows 98 と Windows Me と同じレベルまで低下しました。Windows NT 4.0 を管理者以外のアカウントで実行することもできますが、非常に骨の折れる作業だったので、その方式を採用した組織はごくわずか (両手で足りるほど) でした。
Windows NT 4.0 を管理者以外のアカウントで実行したとしても、鉄則が公開された当時、鉄則 1 は有効であると言えたでしょうか。答えはイエスです。まず、Windows NT 4.0 には非常に多くの重大な欠点がありました。たとえば、特にカーネル オブジェクト上やレジストリ内で厳しく制限することもできたアクセス許可がありました。また、まだ見つかっていなくても、専門家が登場を予測した攻撃の種類が数多くありました。たとえば 1999 年、ユーザーは、昇格したユーザーとして対話型デスクトップでプロセスを実行するとコンピュータが攻撃を受ける可能性があることを認識していませんでした。2002 年に Chris Paget がシャッター攻撃に関するホワイト ペーパーを公開 (seclists.org/bugtraq/2002/Aug/0102.html) して初めて、これが一般的な知識になりました。
鉄則 1 が考案されたとき、マイクロソフトはシャッター攻撃の出現を予測していたでしょうか。実はそれほど確固とした予測が立っていたわけではありません。マイクロソフトが認識していたのは、ある単純な事実のみです。それは、コンピュータ上で実行されるアプリケーションがそのコンピュータを完全に制御できないようにする真のセキュリティ境界は、ほとんど存在しないことです。
Windows Vista と Windows Server 2008 の 2 つは、Windows NT 4.0 とは完全に異なるオペレーティング システムです。これらのオペレーティング システムによって、鉄則 1 の説得力は弱まるでしょうか。また、他にこの鉄則に該当するオペレーティング システムは存在するでしょうか。この答えは場合によって変わります。確かに、新しいオペレーティング システムでは、より強力なセキュリティ境界が提供され、2000 年には、適切なセキュリティ境界を提供するいくつかのオペレーティング システムが、実験に基づいて作成されました。ただし、現在提供されているのは、それらのセキュリティ境界のうちのごくわずかに過ぎません。たとえば、Microsoft .NET Framework のコード アクセス セキュリティはセキュリティ境界です。このセキュリティ境界は、サンドボックス内で実行されるコードが、基盤となるオペレーティング システムに影響を与えないように設計されています。
Internet Explorer の Iframe では、また別のセキュリティ境界が提供されます。ただし、Iframe はオペレーティング システム自体へのアクセスには影響を与えず、Web ページ コンテンツ間のアクセスにのみ影響を与えます。Internet Explorer の保護モード (図 1 参照) は、オペレーティング システム レベルのセキュリティ境界です。保護モードの目的は、ブラウザ内で実行されるコードが、基盤となるオペレーティング システムに影響を与えないようにし、さらにそれをユーザーの操作なしで実現することです。他にもいくつかのセキュリティ境界があります。たとえば、標準ユーザー アカウントは、ユーザー アカウントが他のユーザーや基盤となるオペレーティング システムに影響を与えないことを目的としたセキュリティ境界です。
図 1 Internet Explorer 7 でセキュリティ境界として使用される保護モード (画像をクリックすると拡大表示されます)
"セキュリティ境界" という言葉が何を意味するかを理解することは非常に重要です。これは、攻撃を受けない無期限の分離を提供することが保証された、絶対に壊れない壁を意味しているわけではありません。本当の意味は、マイクロソフトなどのソフトウェア ベンダが、セキュリティ更新プログラムを使用して、攻撃を受けた境界を修正する責任を負っていることです。ソフトウェアには常にバグが存在し、必ずユーザーは、その後もさらに多くのバグを発見し続けるので、ソフトウェア ベンダは修正プログラムの開発を続けることになります。やがて、ベンダによってソフトウェアが強化され、最初に存在した脆弱性も解決されます。このことから、鉄則 1 は現在でも有効であると考えることができます。
ただし、もう 1 つ重要なことを検討する必要があります。先ほど "ユーザーの操作なしで" という表現を使用しました。鉄則 1 は、ソフトウェアの欠点や脆弱性について述べた鉄則ではありません。人々の中に潜む脆弱性について述べているのです。鍵となるフレーズは "説得する" です。悪意のある人物が、特定のプログラムを実行するようユーザーを説得できる場合、おそらくその人物は、昇格した特権が (仕様に従って) プログラムに与えられるコンテキストでそのプログラムを実行するようそのユーザーを説得することもできます。
そのユーザーが管理者特権を持っていなくても、おそらくそれは問題になりません。標準ユーザーでも、多くの重要な情報にアクセスできます。たとえば、銀行関連のファイル、ラブレター、写真、ビデオ、企業の機密データなどがあります。これらのデータはすべて、攻撃者に興味を与える可能性があり、すべて昇格した特権なしで参照できます。コンピュータ上で情報を管理するという観点から考えると、悪意のあるプログラムを実行することによって、そのコンピュータ上で行うすべての操作内容が攻撃者の手に渡ります。このため、"コンピュータ" の定義が "コンピュータ上で管理しているデータ" である場合、特権に関する話題は無視し、鉄則 1 は有効であると結論付けることができます。
コンピュータの定義に関する細かいことを抜きにしても、鉄則 1 は時の試練に耐えたと思います。鉄則 1 で重要なのは、コンピュータを操作するユーザーが、そのコンピュータ上で実行するソフトウェアに責任を持つ必要があることです。悪意のあるドライバやビデオ コーデックをインストールした場合、それは犯罪者がそのコンピュータを完全に制御できるようになったことを意味します。
ソフトウェア ベンダは、誤ってコンピュータが攻撃されるのを防ぐためにさまざまな対策を施しています (それがセキュリティ境界の意義です) が、通常、悪意のあるソフトウェアを意図的に実行すると、それらの保護対策がすべて突破されてしまいます。これが、管理タスクを実行できるアクセス許可をユーザーに与えないようにするだけでなく、ユーザーを教育することも重要である理由です。したがって、鉄則 1 は今日でも有効であると言って間違いありませんが、場合によってはコンピュータに関する皆さんの定義を少し変えていただく必要があります。
鉄則 2: 悪意のある攻撃者があなたのコンピュータのオペレーティング システムを改ざんした場合、もはやそれはあなたのコンピュータではない
表面上、これは非常にわかりやすい鉄則であるように思われます。当然のことですが、悪意のある人物にコンピュータのオペレーティング システムを改ざんされた場合、そのコンピュータを信頼することはできなくなります。ただし、コンピューティングに関する要件が進化するに従って、オペレーティング システムが持つ意味も変わりました。何年も前に、私は『The Blackwell Encyclopedia of Management』(managementencyclopedia.com) に掲載されている "オペレーティング システム" の項目を執筆しました。その定義には、"オペレーティング システムは入力および出力デバイスへのアクセス、ハードウェアへのアクセスなどを管理する" というようなことを書いたと思います。その百科事典を実際に見たことはなく、私が提出した元の原稿も歴史の中に失われてしまいましたが、これだけは確かです。私は、オペレーティング システムにソリティアやタブレット入力システム、およびビデオ トランスコーダが含まれていると書いた覚えはありません。
コンピューティングがますます複雑になるにつれ、オペレーティング システムでもさらに多くの機能がサポートされるようになっています。さらに問題はややこしくなり、OEM が独自の追加ソフトウェア一式を含めることもよくあります。このような追加ソフトウェアは、若干役立つものからまったく役立たないものまで、さまざまです。また、これらのソフトウェアによって提供される機能が、コア オペレーティング システムに組み込まれている機能と重複することもあります。
たとえば、Windows Server 2008 Enterprise Edition の既定のインストールでは、5 GB を超えるディスク領域が使用されます。Windows Vista Ultimate Edition には、58,000 個を超えるファイルが含まれており、これらの合計容量は 10 GB を超えます。また、オペレーティング システムを構成するファイルの他にも、構成設定などの数千個のファイルがあり、さらにデーモンやサービスもあります。
これらの一部またはすべてがオペレーティング システムを構成しています。"オペレーティング システム" は、すべてのファイル、すべての構成設定、およびすべてのサービスを含む総称です。これらのファイルや構成設定によって作成されるすべてのランタイム オブジェクト (セマフォ、名前付きパイプ、RPC エンドポイント) も含まれます。システム時刻などの非常に抽象的な構造体や、イベント ログの内容などの特定の種類に分類されるデータも、オペレーティング システムの一部と見なされます。
オペレーティング システムの成長と進化の過程を考えると、これらのファイルのいずれかを変更することがコンピュータの信頼性を低下させると本当に言えるでしょうか。単純に考えると、答えはノーです。たとえば、Windows Vista に付属している edlin.exe を例に考えてみましょう。これは MS-DOS で使用されていた、旧式のライン エディタです。絶対とは言えませんが、Windows Vista がリリースされてから、このオペレーティング システムのすべてのインストール済みコピーの中で、edlin.exe が呼び出されたのは 2 回のみです。グランデ サイズのトリプル ショット モカを賭けてもいいでしょう。その 2 回はどちらも、私がこのファイルの構文を思い出そうとした、約 3 分前に実行されました。だれも使用しない edlin.exe やその他のファイルを変更したからといって、それが本当にコンピュータがもはや自分のものではなくなることを意味するのでしょうか。
edlin.exe がオペレーティング システムの一部であることは明らかですが、そのファイルをだれも実行しなければ、ファイルを変更してもコンピュータは攻撃を受けないのではないでしょうか。もちろん攻撃は受けません。オペレーティング システムでまったく使用されない部分を変更しても、コンピュータは攻撃を受けません。また、オペレーティング システムでまったく使用されない部分は数多くあります。
ただし、複雑に考えると、先ほどの質問の答えはイエスになります。単純にだれかがファイルを実行したかどうかという事実から、コンピュータが攻撃を受けるかどうかを判断することはできません。問題はもう少し複雑です。edlin.exe のアクセス制御リスト (ACL) を見てみましょう (図 2 参照)。
図 2 非常に制限が厳しい edlin.exe の ACL (画像をクリックすると拡大表示されます)
edlin.exe の ACL では、非常に厳しい制限が適用されます。この実行可能ファイルを変更する権限が与えられているのは、TrustedInstaller サービスのみです。これは非常に重要なことであり、コンピュータ上でこのファイルを変更する悪意のある人物に間接的な影響が与えられます。edlin.exe が変更されると、それはもう持ち主のコンピュータではなくなります。ここで鍵となるのは、悪意のあるユーザーが edlin.exe を変更できるという事実です。悪意のあるユーザーは、このファイルを変更できればどのファイルでも変更できるので、持ち主はコンピュータ上のどのファイルも信頼できなくなります。
オペレーティング システムは自分自身を保護します。サービスは不正な変更から保護されます。構成設定も不正な変更から保護されます。ディスク上のファイルも不正な変更から保護されます。オペレーティング システムによって使用されるセマフォや RPC エンドポイントも不正な変更から保護されます。攻撃者は、これらの保護されたオブジェクトのいずれかを変更できれば、すべてのオブジェクトを変更でき、おそらく既にいくつかの変更を完了しています。
このことは重要です。いくつかの鉄則にもありますが、何かを行うことでコンピュータが攻撃を受けるのではなく、だれかが何かを行うことが "できる" かどうかが重要なのです。この点を見落としてはいけません。コンピュータ セキュリティのあらゆる側面において、実際に行われる操作よりも、その操作を行うことができるという事実の方がはるかに重要であることを覚えておいてください。
コンピュータがインターネットに接続されており、何か月も修正プログラムを適用していない場合、まだそのコンピュータを信頼できるでしょうか。できませんね。そのコンピュータは攻撃を受けていると見なす必要があります。攻撃を受けている可能性があるシステムの構成要素はすべて信頼できません (5 年前に執筆した、technet.microsoft.com/library/cc512587 で公開されている「ハッキングされたらどうするか」でも同じことを書きました)。高度なスキルを持つ攻撃者を相手にした場合、システムが攻撃されていても、それを示す兆候が一切現れない可能性があります。つまり、システムが完全に正常であるように見える場合があるということです。
当然、鉄則 2 は今日でも有効です。攻撃者がコンピュータ上で保護されているオブジェクトを変更できる場合、それはもはや持ち主のコンピュータではありません。重要なのはそれらのオブジェクトが実際に攻撃を受けたかどうかではなく、それらのオブジェクトを変更できるかどうかであることを忘れないでください。
鉄則 3: 悪意のある攻撃者があなたのコンピュータに対して物理的なアクセスを無制限に行える場合、もはやそれはあなたのコンピュータではない
2000 年当時、この鉄則は重要でした。多くの人々は、システムに物理的にアクセスできることによって何が可能になるかを十分に理解していませんでした。実際、十分な知識を持っている必要がある政府機関も、この基本的なポイントを理解していない場合がありました。当時のセキュリティ ガイダンスでは、[Allow shut down without logon] (ログオンなしでのシャットダウンを許可する) オプションを無効に設定することが推奨されていました。このオプションを有効に設定すると、ログオン画面の [シャットダウン] ボタンがグレー表示されます。このオプションが実装された背景には、どのユーザーがシステムをシャットダウンしたかに関する監査記録がないので、ユーザーがコンピュータをシャットダウンするときにはまずログオンする必要があるという理論がありました。
欠陥のある考え方に関する事例研究として考えてみましょう。ログオン画面の [シャットダウン] ボタンにアクセスするには、実際にコンソールの前に座る必要があります。そして、コンソールの前に座っていれば、本当にコンピュータの電源を切りたくなったときに、コンピュータの前面に付いている大きな丸いボタンを使用するか、最悪の場合は電源コードを抜けば、システムの電源は切れます。監査記録は残りません。
Windows 2000 には、[Allow undock without logon] (ログオンなしの装着解除を許可する) というセキュリティ設定がありました。このオプションはまだ Windows Vista で提供されています (図 3 参照)。原理は同じで、ドッキング ステーションからラップトップを取り外すには、まずシステムにログオンする必要があります。
図 3 装着したまま盗まれることに対処できないオプション (画像をクリックすると拡大表示されます)
この設定がセキュリティにもたらす実際の価値は、非常にあいまいです。この設定の背景には、だれでもラップトップのある場所まで歩いていって、そのラップトップの装着を解除できれば、簡単にそのコンピュータを盗むことができるという理論があったと思います。私がラップトップを盗むと言っているわけではなく、そうしようと思えば、この保護対策によって阻止されることなく盗むことができると言っているのです。おそらく、単純にラップトップとドッキング ステーションを 1 つのセットとして一緒に持ち去るでしょう。ネットワーク ケーブルと電源コードも盗んでいくでしょうね。無意味なセキュリティ強化とはまさにこのことです。
Petter Nordahl-Hagen が作成した Offline NT Password & Registry Editor は、物理的なアクセスに関する議論の核心を突きました。彼が作成したのは、NTFS ボリュームへの読み取りおよび書き込みアクセスを可能にする、実験に基づいて作成された NTFS ファイル システム ドライバを含む単純な Linux ブート ディスクです。このブート ディスク上のソフトウェアは、ローカル コンピュータのレジストリをマウントし、Administrator アカウントの新しいパスワードをソフトウェア資産管理 (SAM) ハイブに書き込みます。必要なのは、システムへの物理的なアクセスと、1、2 分の時間のみでした。
このようなツールこそが、最初に鉄則 3 が考案された理由です。実際に、Nordahl-Hagen のツールは多くのデモで使用されました。残念ながら、大部分の観衆には、このポイントがうまく伝わりませんでした。私も個人的にいくつかのデモでこのツールを使用しましたが、「このようなツールを知っているユーザーがいないことをどのようにして確認すればよいですか」、「この問題を解決するためにマイクロソフトが実施している対策を教えてください」といった質問に疲れてしまったので、使用することを止めました。IT 業界に属する驚くほど多くの人々が、物理的なアクセスがどのような対策でも打ち破ってしまうことを受け入れたり、理解しようとしませんでした。
物理的なアクセスが可能な環境では、鉄則 3 が非常に重要なメッセージとなりますが、批評家はこれを容赦なく批判しました。この鉄則は、マイクロソフトが物理的なアクセスに関するあらゆる問題の解決を放棄するための試みであるとして愚弄されました。実際、鉄則 3 は、Offline NT Password & Registry Editor によるハッキングなどの脆弱性の報告を退けるために使用されたことが何回かあります。ただし、物理的にアクセスできる攻撃者からシステムを保護する方法は、本当に 1 つしかありません。それは、確実にどの構成要素にもアクセスできないようにすることです。
この点は、鉄則 3 という鎧の弱点となる可能性があります。10 の鉄則が公開されてから、ディスク全体を暗号化するテクノロジが適切な解決策となりました。ハード ディスク全体の暗号化、より正確に言えばフル ボリューム暗号化を使用すると、ボリューム (他のオペレーティング システムではパーティションとして知られています) 全体を暗号化できます。そこで、ブート ボリューム (つまり、オペレーティング システムが格納されているボリューム) 全体を暗号化した場合でも、鉄則 3 は有効であるかという疑問が浮かび上がります。
この答えはおそらく今後変わることはありません。まず、復号化キーを別の場所に保存する必要があります。最も単純なキーの保存場所は、BitLocker の既定の選択肢でもある、コンピュータのトラステッド プラットフォーム モジュール チップです。この操作を行った場合、コンピュータは自動的に起動します。一度コンピュータが起動すると、コンピュータをいつでも物理的に制御できる、機知に富んだ資金豊富な攻撃者であれば、さまざまな方法を使用してそのコンピュータを攻撃できます。コンピュータが任意のネットワークに接続される可能性もあるので、ネットワーク関連の方法によってシステムが攻撃されることも考えられます。
たとえば、攻撃者は USB フラッシュ ドライブなどのダイレクト メモリ アクセス (DMA) デバイスを使用して、メモリからの読み取りやメモリへの書き込みを行う場合があります。コンピュータが一度起動すれば、物理的にそのコンピュータにアクセスできる攻撃者に関しては、すべての防御策が意味を成さなくなります。
復号化キーがコンピュータ自体に格納されていない場合、そのコンピュータが攻撃を受けるかどうかは、攻撃者がそれらのキーを入手または推測できるかどうかによって決まります。コンピュータの起動に PIN コードが使用される場合、そのコードを推測するために攻撃者が行う作業は比較的少なくて済みます。復号化キーが、USB フラッシュ ドライブやワンタイム パスワード フォブなどの別のハードウェア デバイスに保存されていたり、そのデバイスから抽出されたりする場合、攻撃者はそのデバイスにアクセスできる必要があります。これらのキーを入手する方法もあれば、キーにアクセスできるユーザーに大きなデメリットを与える方法もあるので、コンピュータの起動にかなり複雑な作業が必要になる可能性があります。
鉄則 3 を少し異なる見方で、"攻撃者が物理的にコンピュータにアクセスできる場合、そのコンピュータは盗まれた可能性があるので、戻ってくることは考えにくい" と解釈することもできます。その観点から考えると、それはもはや持ち主のコンピュータではありません。また、コンピュータ上のデータにアクセスできるかどうかは、攻撃者にとって問題にならない場合があります。ただし、これは厳密に言うと、鉄則 3 の精神に反しています。この鉄則は、攻撃者がコンピュータ自体だけではなく、そのコンピュータ上のデータにもアクセスできることを前提としています。
総合的に考えて、鉄則 3 はまだ有効であると言えます。今日提供されている特定のテクノロジは、物理的なアクセスを利用する攻撃者からの保護に非常に役立ち、その結果、保護対策が実装されたコンピュータ上のデータにアクセスできる攻撃者の数が最小限に抑えられています。とはいえ、実際に攻撃を成功させる攻撃者の数は、常に攻撃者の能力によって決まります。また、新しいテクノロジが、10 の鉄則の多くにある程度まで対処しています。ただし依然として、システムに物理的にアクセスできれば、(今までよりも複雑な作業が必要になりますが) そのシステムに侵入できます。
これまでのところ、セキュリティに関する 10 の鉄則は、技術の進歩と時間の流れに対して、優れた柔軟性を見せています。最初の 3 つの中では、鉄則 3 が最もその立場を追われる可能性がありますが、これが適用される状況もまだあります。また、これは最も利用しやすい堅牢な緩和策を提供する鉄則でもあります。TechNet Magazine の次回とその次の回でも、このトピックについて取り上げ、鉄則 4 ~ 10 がまだ有効であるかを判断します。
Jesper M. Johansson は、セキュリティ ソフトウェアの開発に取り組むソフトウェア アーキテクトで、TechNet Magazine の編集にも携わっています。管理情報システムの博士号を持ち、セキュリティ分野で 20 年以上の経験があります。また、エンタープライズ セキュリティの Microsoft Most Valuable Professional (MVP) でもあります。最新の著書には、『Windows Server 2008 Security Resource Kit』があります。