次の方法で共有



December 2010

Volume 25 Number 12

セキュリティに関するブリーフィング: Visual Studio 2010 のコード分析による ASP.NET のセキュリティ強化

Sacha Faust | December 2010

ASP.NET 開発を行っている人ならだれでも、おそらく、これまでのキャリアのどこかでセキュリティの問題を発生させた、または経験したことを (公然とかどうかはともかくとして) 認めるでしょう。開発者はコードをできるだけ早く提供するよう圧力をかけられていることが多く、プラットフォームの複雑さや構成オプションの数の膨大さのせいで、アプリケーションが望ましくないセキュリティ状態のままになってしまうことがよくあります。また、デバッグと運用の構成要件は異なるため、デバッグ用の設定が運用環境に持ち込まれることでさまざまな問題が発生することがよくあります。

長年の間に、ASP.NET プラットフォームは成熟し、MSDN やコミュニティ ブログを通じて優れたドキュメントが提供されるようになりましたが、どのような機能や構成設定を使用すればよいかを理解するのは、多くの場合、困難です。セキュリティ機能を熟知していても、アプリケーションにセキュリティ上の脆弱性をもたらす可能性のあるミスが起きてしまうことはあります。

コードのピア レビューは有効なプロセスであり、問題を早期発見する優れた方法です。ですが、だれにでも、このようなレビューを実施するための時間や予算がある (また、知識の豊富な同僚や仲間が近くにいる) とは限りません。

Visual Studio 2005 でコード分析が導入されて以来、開発者は、コードを自動分析して、コードが設計から保守容易性、パフォーマンス、セキュリティに至るまでの一連のベスト プラクティスに従っているかどうかを確認することができるようになりました。これまで、コード分析は優れたツールでしたが、ASP.NET のセキュリティに関するベスト プラクティス ガイダンスを提供することには重点が置かれていませんでした。

今月のコラムでは、新しい ASP.NET コード分析規則を紹介します。この規則を Visual Studio のコード分析やスタンドアロンの FxCop アプリケーションと共に使用して、ASP.NET アプリケーションのセキュリティを強化することができます。

概要

Visual Studio 2010 および FxCop Version 10.0 用の ASP.NET セキュリティ コード分析規則パッケージは、go.microsoft.com/?linkid=9750555 (英語) からダウンロードすることができます。インストールには、次の 3 つの新しい規則パッケージが含まれます。

  • ASP.NET.Security: System.Web.Ui.Page プロパティの初期化方法に関連するセキュリティ ベスト プラクティスに的を絞っています。
  • ASP.NET.MVC.Security: ASP.NET MVC の使い方に関連するセキュリティ ベスト プラクティスに的を絞っています。
  • ASP.NET.Security.Configuration: web.config ファイル内の構成要素に関連するセキュリティ ベスト プラクティスに的を絞っています。

規則パッケージをインストールしたら、[ビルド] メニューの [コード分析を Web サイトで実行] をクリックして、Web アプリケーションのセキュリティの自動レビューを開始できます (図 1 参照)。分析では、アプリケーションの各 Page クラスと web.config ファイルが ASP.NET の一連のセキュリティ ベスト プラクティスに照らしてレビューされます。

コード分析をサンプル Web サイトで実行

図 1 コード分析をサンプル Web サイトで実行

たとえば、Web アプリケーションでよく見られるセキュリティ上の脆弱性の 1 つに、クロスサイト リクエスト フォージェリがあります。これは、攻撃者が別のユーザーとしてコマンドを実行する攻撃手法です。この脆弱性の一般的な軽減策は、Page.ViewStateUserKey プロパティを使用することです (bit.ly/cTSHM0 参照)。ASP.NET MVC の AntiForgeryToken を使用する方法もあります (bit.ly/ciiQIP (英語) 参照)。どちらの手法でも、アプリケーションへの悪意のあるリプレイ攻撃を防ぐことができます。コード分析を利用すると、アプリケーションで適切な軽減策が使用されていることを確認できます。

コード分析を初めて実行した開発者からよく聞く反応の 1 つに、返される警告の数が非常に多くて圧倒されたというのがあります (図 2 参照)。開発者は、すべての警告の解決方法を自力で突き止めなければならないように思いがちです。

[エラー一覧] の [警告] タブに違反が表示される

図 2 [エラー一覧] の [警告] タブに違反が表示される

それぞれの警告を解決する負担を軽減するため、各規則では、何をどのように修正する必要があるかが明示されており、変更を適用する前にもう少し詳しい情報が必要な場合のための参照事項も示されています (図 3 参照)。

[警告] セクション内の詳細情報

図 3 [警告] セクション内の詳細情報

[Web サイト] メニューの [Web サイトのコード分析の構成] をクリックし、[ビルドに対するコード分析の有効化 (CODE_ANALYSIS 定数を定義)] チェック ボックスをオンにすると、ビルドを行うたびにコード分析が実行されるように構成できます (図 4 参照)。

ビルド時にコード分析をの有効にする

図 4 ビルド時にコード分析をの有効にする

FxCop によるコード分析

コード分析機能を使用できるのは、Visual Studio の Premium バージョンと Ultimate バージョンのみです。ですが、スタンドアロンの FxCop ツールを使用して ASP.NET コード分析を実行することもできます。FxCop は、Windows SDK の一部として提供されます。Windows SDK 7.1 リリースは、bit.ly/dzCizq (英語) から入手することができます。

スタンドアロンの FxCop ツールを使用する場合、分析の実行に必要な作業はやや多くなります。このツールで分析を実行する手順について説明しましょう。

通常、Web プロジェクトをコンパイルすると、ページ マークアップ (分離コード ファイルに含まれていないページ コード) はコンパイルされず、アプリケーションの Web ルートにそのまま残されます。最初のユーザーがページを要求すると、このマークアップがコンパイルされて独立したアセンブリになります。これにより、他のすべてを再コンパイルすることなくサイトを更新することが可能になります (ASP.NET のページ コンパイル プロセスの詳細については、msdn.microsoft.com/library/ms366723 を参照してください)。

すべてのコードが自動的にコンパイルされるわけではないため、分析中に認識できないコードもあり、セキュリティ上重要な問題が見落とされてしまう可能性があります。すべてのコードが分析中に認識されるようにするには、すべてのページのプリコンパイルを強制実行する必要があります。プリコンパイルは、"Web サイトの発行" ツールを使用して行うことができます。このツールを起動するには、[ビルド] メニューの [Web サイトの発行] をクリックします。このツールを使用すると、Web サイトの発行方法を構成でき、ここでプリコンパイルを有効にできます。[このプリコンパイルされたサイトを更新可能にする] チェック ボックスをオフにして、[OK] をクリックするだけです (図 5 参照)。これにより、サイトは完全にコンパイルされ、分析準備が整った状態になります。

プリコンパイルされた Web サイトの発行

図 5 プリコンパイルされた Web サイトの発行

サイトは完全にコンパイルされたので、サイトに対して FxCop を実行します。

ASP.NET 分析を実行するには、コマンド ライン バージョンの FxCop でのみ使用できる機能が必要なので、コマンド プロンプトを開き、FxCop のインストール先に移動します。インストール先はおそらく、次のうちどちらかでしょう。どちらになるかは、Windows の 32 ビット版と 64 ビット版のどちらを実行しているかによって決まります。

 

C:\Program Files (x86)\Microsoft FxCop 10.0 C:\Program Files\Microsoft FxCop 10.0

FxCop フォルダーから Fxcopcmd.exe を実行してコード分析を開始します。ASP.NET Web サイトの場合は、次のようなコマンドを使用するだけです。

fxcopcmd.exe /file:"H:\MSDN\PrecompiledWeb\ MSDNSampleSite\bin" /rule: AspNetConfigurationSecurityRules.dll /rule:AspNetMvcSecurityRules.dll /rule:ASPNetSecurityRules.dll /aspnet /console

 

このコマンドで使用しているオプションについて理解するため、各オプションについて順に説明します。

/file オプションは、分析対象のアセンブリを指定します。この例では、プリコンパイルされたサイトのアセンブリは H:\MSDN\PrecompiledWeb\MSDNSampleSite\bin にあります。

/rule オプションは、分析に使用する規則を指定します。この例では、AspNetConfigurationSecurityRules.dll、AspNetMvcSecurityRules.dll、ASPNetSecurityRules.dll の 3 つの ASP.NET セキュリティ規則のみを使用しています。

/aspnet オプションを指定すると ASP.NET 分析が有効になり、/console オプションを指定すると分析結果がコマンド ウィンドウに出力されます。図 6 に結果を示します。Fxcopcmd とそのさまざまなオプションの詳細については、msdn.microsoft.com/library/bb429474(VS.80) (英語) を参照してください。

Fxcopcmd.exe を使用して ASP.NET 規則を実行

図 6 Fxcopcmd.exe を使用して ASP.NET 規則を実行

まとめ

ASP.NET サイトのセキュリティ強化は難しい課題となることがありますが、ASP.NET セキュリティ コード分析規則を使用すると、いくつかの重大な脅威を特定することができるため、非常に役立ちます。ここでご覧いただいたように、コード分析のプロセスは単純で、ビルドを行うたびに実行されるように構成できます。これにより、問題の早期特定が可能になります。

すべての開発者コンピューターに規則を展開し、さらに、規則を Team Foundation Sever や他のリポジトリのチェックイン ポリシーの一部として追加することをお勧めします。これにより、個々の開発者がビルド時にコードを検証できるようになります。また、ベスト プラクティスに従っていないコードをチェックインできないようにポリシーを適用します。

カスタムのコード分析規則を独自に実装することも可能です。これに興味がある方は、コード分析チームのブログの Duke Kamstra による投稿 (bit.ly/blpP38、英語) に優れた情報が掲載されていますので、そちらをご参照ください。また、Tatham Oddie のブログ (bit.ly/5tFrMw、英語) にはプロセスの順を追った説明が掲載されており、役に立ちます。

Sacha Faust は、Microsoft Office 365 プラットフォーム チームの開発者です。Faust のブログは blogs.msdn.com/b/sfaust (英語) でご覧いただけます。

この記事のレビューに協力してくれた技術スタッフの Bryan Sullivan に心より感謝いたします。