次の方法で共有


Web アプリケーションのセキュリティ上の脅威の概要

更新 : 2007 年 11 月

不明なユーザーが Web アプリケーションにアクセスする場合、ほぼ確実に、悪意のあるユーザーがアプリケーションへの承認されていないアクセスを取得しようとしています。サーバーはインターネット上で一般に公開されており、常に、脆弱性を探るアクセスを受けています。したがって、すべての Web アプリケーションに対策を講じ、セキュリティを組み込むことをお勧めします。

安全なコードの記述およびアプリケーションのセキュリティ保護に関する推奨される手順の詳細については、『Writing Secure Code』(Michael Howard および David LeBlanc の共著)、または Microsoft Patterns and Practices 提供のガイダンスを参照してください。

セキュリティ テクノロジは解決策の一部にすぎない

セキュリティの実装は、解決策の一部にすぎません。その他に重要なことは、常に警戒を行うことです。システムに多くのセキュリティ対策が講じられている場合でも、次のように注意深くシステムを監視する必要があります。

  • システムのイベント ログを監視してください。システムに繰り返しログインを試みていないかどうかまたは、Web サーバーに多すぎる要求がないかどうかを監視します。

  • Microsoft Windows や Microsoft Internet Information Services (IIS) の最新のセキュリティ更新プログラムと共に Microsoft SQL Server やアプリケーションで使用されるその他のデータ ソースの更新プログラムを使用して、アプリケーション サーバーを常に最新の状態に維持します。

脅威のモデリング

安全なアプリケーションを開発するために重要なのは、アプリケーションにとって脅威となるものを理解することです。Microsoft では、STRIDE (Spoofing (なりすまし)、Tampering (改変)、Repudiation (否認)、Information disclosure (情報の暴露)、Denial of service (サービス拒否)、Elevation of privilege (特権の昇格)) で、脅威の分類方法を作成しました。このセクションでは、これらの脅威の内容とその Web アプリケーションへの適用方法を説明します。

なりすまし

"なりすまし" とは、承認されていない方法でユーザーまたはプロセスを偽装することです。簡単に言うと、なりすましは、他のユーザーの資格情報をキー入力できることを意味します。悪意のあるユーザーは、また、Cookie の内容を改変して、自分が別のユーザーである、または Cookie が他のサーバーから送信されたものであるかのように偽装します。

一般的に、認証を厳しくすることによって、なりすましを防ぐことができます。公開されていない情報へのアクセスをだれかが何度も要求してきたら、要求元が名乗っている身元を確認します。また、資格情報の安全を保つことによっても、なりすましを防ぐことができます。たとえば、悪意のあるユーザーが簡単に見つけて改変できる Cookie にパスワードなどの機密情報を保持しないことが重要です。

改変

"改変" とは、承認なしにリソースを変更したり削除したりすることを意味します。Web ページが欠落してしまう一例として、悪意のあるユーザーがサイトに侵入してファイルを変更することが挙げられます。彼らは、"スクリプトによる攻略" を用いて、改変を間接的に行います。悪意のあるユーザーは、ページからのユーザー入力またはリンクであるかのように見せかけてコード (スクリプト) を実行しようとします。

改変に対する基本的な対策としては、Windows セキュリティを使用して、ファイル、ディレクトリ、その他の Windows リソースをロックします。アプリケーションを最小限の権限で実行することも必要です。スクリプトによる攻略行為を防ぐには、ユーザーから受け取る情報やデータベースから受け取る情報をすべて疑ってかかる必要があります。信頼できないソースから情報を受け取るごとに、そこに実行可能コードが含まれていないことを確認します。

否認

脅威の "否認" とは、トランザクションに関連するプリンシパルの後に証拠がない方法で、トランザクションを実行することです。否認は、Web アプリケーションで無実のユーザーの資格情報を偽装できることを意味します。否認に対しては、認証を強化することで対処できます。さらに、Windows のログ機能を使用して、サーバー上でのすべての活動の監査証跡を記録します。

情報の暴露

"情報の暴露" とは、非公開情報を盗み出したり公開したりすることを表します。典型的な例としてはパスワードを盗み出すことがありますが、情報の暴露には、サーバー上のすべてのファイルまたはリソースへのアクセスも含まれます。

情報の暴露に対する最善の防御方法は、暴露されると問題になるような情報を持たないことです。たとえば、パスワードを格納していなければ、悪意のあるユーザーもパスワードを盗み出すことはできません(パスワードを格納する方法に代わる方法として、パスワードのハッシュだけを格納する方法があります。ユーザーから資格情報が提示されたら、ユーザーのパスワードをハッシュし、その後で 2 つの情報のハッシュだけを比較します)。機密情報を格納する場合は、Windows セキュリティを使用して保護します。当然のことながら、認証を使用して、承認されたユーザーだけが制限付きの情報にアクセスできるようにする必要があります。機密情報を公開する必要がある場合は、格納時に情報を暗号化し、Secure Sockets Layer (SSL) を使用して、ブラウザとの間で送受信するときに情報を暗号化することをお勧めします。

サービス拒否

サービス拒否攻撃は、アプリケーションの利用可能性を通常の状態から故意に低下させることです。一般的な例としては、高い負荷をかけることによって、Web アプリケーションが一般ユーザーにサービスを提供できないようにします。あるいは、悪意のあるユーザーがサーバーをクラッシュさせようとすることもあります。

IIS では、アプリケーションを "スロットル" つまり受け入れる要求の数を制限できます。悪意があると判明しているユーザーまたは IP アドレスへのアクセスを拒否することもできます。アプリケーションをオンラインにしておくには、堅牢なコードを実行することが重要です。アプリケーションを徹底的にテストして、エラー条件が発生した場合は適切に応答できるようにする必要があります。

権限の昇格

"特権の昇格" 攻撃とは、通常割り当てられるよりも高い権限を不正な手段により取得することです。たとえば、特権の昇格攻撃が成功した場合、悪意のあるユーザーは Web サーバーへの管理者特権を取得して、サーバー上のデータへのアクセス権とサーバー機能に対する制御を付与します。

特権の昇格攻撃に対抗するには、アプリケーションを実用的な範囲で最小限の権限コンテキスト内で実行します。たとえば、ASP.NET アプリケーションを SYSTEM (管理者) ユーザーとして実行しないことをお勧めします。

参照

その他の技術情報

ASP.NET Web サイトのセキュリティ