次の方法で共有


Azure でセキュリティで保護されたアプリケーションを開発する

この記事では、クラウド用のアプリケーションを開発するときに考慮するセキュリティ アクティビティとコントロールについて説明します。 Microsoft セキュリティ 開発ライフサイクル (SDL) の実装フェーズと検証フェーズで考慮すべきセキュリティの質問と概念について説明します。 目標は、より安全なアプリケーションの開発に使用できるアクティビティと Azure サービスを定義できるようにすることです。

この記事では、次の SDL フェーズについて説明します。

  • 実装
  • 検証

実装

実装フェーズの焦点は、早期防止のベスト プラクティスを確立し、コードからセキュリティの問題を検出して削除することです。 アプリケーションを使用するつもりがなかった方法で使用されているとします。 これは、アプリケーションの偶発的または意図的な誤用から保護するのに役立ちます。

コード レビューを実行する

コードをチェックインする前に、コード レビューを実施して全体的なコード品質を向上させ、バグを作成するリスクを軽減します。 Visual Studio を使用して、コード レビュー プロセスを管理できます。

静的コード分析を実行する

静的コード分析 ( ソース コード分析とも呼ばれます) は、コード レビューの一部として実行されます。 静的コード分析とは、通常、静的コード分析ツールを実行して、実行されていないコードの潜在的な脆弱性を見つけることを指します。 静的コード分析では、 テイント チェックデータ フロー分析などの手法が使用されます。

Azure Marketplace には、静的コード分析を実行し、コード レビューを支援する 開発者ツール が用意されています。

アプリケーションのすべての入力を検証してサニタイズする

最も一般的な Web アプリケーションの脆弱性からアプリケーションを保護するために、すべての入力を信頼されていないものとして扱います。 信頼されていないデータは、インジェクション攻撃の手段です。 アプリケーションの入力には、URL のパラメーター、ユーザーからの入力、データベースまたは API からのデータ、およびユーザーが操作できる可能性のある渡されたデータが含まれます。 アプリケーションは、データが構文的かつ意味的に有効であることを 検証 してから、アプリケーションが何らかの方法でデータを使用する必要があります (ユーザーへの表示を含む)。

データ フローの早い段階で入力を検証して、適切な形式のデータのみがワークフローに入っていることを確認します。 形式が正しくないデータをデータベースに保持したり、ダウンストリーム コンポーネントで誤動作を引き起こしたりしないようにします。

ブロックリストと許可リストは、入力構文の検証を実行するための 2 つの一般的な方法です。

  • ブロックリストは、特定のユーザー入力に "悪意があると知られている" コンテンツが含まれていないことを確認しようとします。

  • 許可リストは、特定のユーザー入力が一連の "既知の正常な" 入力と一致することを確認しようとします。 文字ベースの許可リストは、ユーザー入力に "既知の正常な" 文字のみが含まれていること、または入力が既知の形式と一致することをアプリケーションがチェックする許可リストの形式です。

    たとえば、ユーザー名に英数字のみが含まれているか、2 つの数字が正確に含まれていることを確認する必要があります。

許可リストは、セキュリティで保護されたソフトウェアを構築するための推奨されるアプローチです。 ブロックリストは、潜在的に不適切な入力の完全なリストを考えることができないため、エラーが発生しやすくなります。

これは、クライアント側 (またはサーバー側とクライアント側) ではなく、サーバーで行います。

アプリケーションの出力を確認する

視覚的またはドキュメント内で表示する出力は、常にエンコードしてエスケープする必要があります。 エスケープ ( 出力エンコードとも呼ばれます) は、信頼されていないデータがインジェクション攻撃の手段ではないことを確認するために使用されます。 エスケープとデータ検証を組み合わせることで、システム全体のセキュリティを強化するための多層防御が提供されます。

エスケープすると、すべてが出力として表示されます また、エスケープすると、データが実行されることを意図していないことをインタープリターに認識させ、攻撃が機能するのを防ぎます。 これはクロス サイト スクリプティング (XSS) と呼ばれるもう 1 つの一般的な攻撃手法です。

サード パーティの Web フレームワークを使用している場合は、 OWASP XSS 防止チート シートを使用して、Web サイトでの出力エンコードのオプションを確認できます。

データベースに接続するときにパラメーター化されたクエリを使用する

コードでインライン データベース クエリを "オン ザ フライ" に作成し、データベースに直接送信しないでください。 アプリケーションに挿入された悪意のあるコードにより、データベースが盗まれたり、ワイプされたり、変更されたりする可能性があります。 アプリケーションを使用して、データベースをホストするオペレーティング システムで悪意のあるオペレーティング システム コマンドを実行することもできます。

代わりに、パラメーター化されたクエリまたはストアド プロシージャを使用します。 パラメーター化されたクエリを使用する場合は、コードからプロシージャを安全に呼び出し、クエリ ステートメントの一部として扱われることを心配せずに文字列を渡すことができます。

標準サーバー ヘッダーを削除する

Server、X-Powered-By、X-AspNet-Versionなどのヘッダーはサーバーおよび基盤技術に関する情報を明らかにします。 アプリケーションのフィンガープリントを回避するために、これらのヘッダーを抑制することをお勧めします。 Azure Web サイトでの標準サーバー ヘッダーの削除を参照してください。

運用データを分離する

運用データ ("実際の" データ) は、開発、テスト、またはビジネスが意図した目的以外の目的には使用しないでください。 マスクされた (匿名化された) データセットは、すべての開発とテストに使用する必要があります。

つまり、実際のデータにアクセスできるユーザーが少なくなり、攻撃対象領域が減少します。 また、個人データを見る従業員が少なくなり、機密性の侵害の可能性を排除することも意味します。

強力なパスワード ポリシーを実装する

ブルート フォースと辞書ベースの推測から保護するには、強力なパスワード ポリシーを実装して、ユーザーが複雑なパスワードを作成できるようにする必要があります (たとえば、12 文字の最小長で英数字と特殊文字を必要とします)。

外部テナントの Microsoft Entra External ID は、 セルフサービスパスワードリセット などを提供することで、パスワード管理に役立ちます。

既定のアカウントに対する攻撃から保護するには、すべてのキーとパスワードが置き換え可能であり、リソースをインストールした後に生成または置き換えられたことを確認します。

アプリケーションでパスワードを自動生成する必要がある場合は、生成されたパスワードがランダムであり、エントロピが高いかどうかを確認します。

ファイルのアップロードを検証する

アプリケーションで ファイルのアップロードが許可されている場合は、この危険なアクティビティに対して実行できる予防措置を検討してください。 多くの攻撃の最初のステップは、攻撃を受けているシステムに悪意のあるコードを取り込む方法です。 ファイルのアップロードを使用すると、攻撃者はこれを実現するのに役立ちます。 OWASP には、アップロードするファイルが安全であることを確認するファイルを検証するためのソリューションが用意されています。

マルウェア対策保護は、ウイルス、スパイウェア、その他の悪意のあるソフトウェアを特定して削除するのに役立ちます。 Microsoft マルウェア対策または Microsoft パートナーのエンドポイント保護ソリューション (Trend MicroBroadcomMcAfeeWindows の Microsoft Defender ウイルス対策Endpoint Protection) をインストールできます。

Microsoft マルウェア対策 には、リアルタイム保護、スケジュールされたスキャン、マルウェアの修復、署名の更新、エンジンの更新、サンプル レポート、除外イベント収集などの機能が含まれています。 デプロイと検出の組み込み (アラートとインシデント) を容易にするために、Microsoft Antimalware とパートナー ソリューションを Microsoft Defender for Cloud と統合できます。

機密性の高いコンテンツをキャッシュしない

機密性の高いコンテンツをブラウザーにキャッシュしないでください。 ブラウザーは、キャッシュと履歴の情報を格納できます。 キャッシュされたファイルは、Internet Explorer の場合、インターネット一時ファイル フォルダーのようなフォルダーに格納されます。 これらのページが再び参照されると、ブラウザーはキャッシュからページを表示します。 機密情報 (住所、クレジット カードの詳細、社会保障番号、ユーザー名) がユーザーに表示される場合、情報はブラウザーのキャッシュに格納され、ブラウザーのキャッシュを調べたり、ブラウザーの [戻る ] ボタンを押して取得したりできます。

検証

検証フェーズには、前のフェーズで確立されたセキュリティとプライバシーの教義をコードが満たしていることを確認するための包括的な取り組みが含まれます。

アプリケーションの依存関係の脆弱性を見つけて修正する

アプリケーションとその依存ライブラリをスキャンして、既知の脆弱なコンポーネントを特定します。 このスキャンを実行できる製品には、 OWASP 依存関係チェックSnykBlack Duck などがあります

動作状態でアプリケーションをテストする

動的アプリケーション セキュリティ テスト (DAST) は、動作状態のアプリケーションをテストしてセキュリティの脆弱性を見つけるプロセスです。 DAST ツールは、実行中にプログラムを分析して、メモリの破損、セキュリティで保護されていないサーバー構成、クロスサイト スクリプティング、ユーザー特権の問題、SQL インジェクション、その他の重要なセキュリティ上の問題などのセキュリティの脆弱性を見つけます。

DAST は、静的アプリケーション セキュリティ テスト (SAST) とは異なります。 SAST ツールは、セキュリティ上の欠陥を見つけるためにコードが実行されていない場合に、ソース コードまたはコンパイル済みバージョンのコードを分析します。

DAST を実行します。できれば、セキュリティプロフェッショナル ( 侵入テスト担当者 または脆弱性評価者) の支援を受けます。 セキュリティ担当者が利用できない場合は、Web プロキシ スキャナーとトレーニングを使用して DAST を自分で実行できます。 DAST スキャナーを早い段階で接続して、コードに明らかなセキュリティの問題が発生しないようにします。 Web アプリケーションの脆弱性スキャナーの一覧については、 OWASP サイトを参照してください。

ファジー テストを実施する

ファジー テストでは、誤った形式またはランダムなデータを意図的にアプリケーションに導入することで、プログラムの失敗を誘発します。 プログラムエラーの誘発は、アプリケーションがリリースされる前に潜在的なセキュリティの問題を明らかにするのに役立ちます。

セキュリティ リスク検出 は、ソフトウェアのセキュリティクリティカルなバグを見つけるための Microsoft 独自のファジー テスト サービスです。

攻撃面のレビューを実施する

コードの完了後に攻撃対象領域を確認すると、アプリケーションまたはシステムに対する設計または実装の変更が考慮されていることを確認できます。 これは、脅威モデルを含む変更の結果として作成された新しい攻撃ベクトルがレビューおよび軽減されたことを確認するのに役立ちます。

アプリケーションをスキャンすることで、攻撃対象領域の画像を作成できます。 Microsoft では、Attack Surface Analyzer と呼ばれる 攻撃面分析ツールを提供しています。 OWASP Attack Surface DetectorArachniw3af など、多くの商用動的テストおよび脆弱性スキャン ツールまたはサービスから選択できます。 これらのスキャン ツールは、アプリをクロールし、Web 経由でアクセスできるアプリケーションの部分をマップします。 同様の 開発者ツールについては、Azure Marketplace を検索することもできます。

セキュリティ侵入テストを実施する

アプリケーションのセキュリティを確保することは、他の機能をテストする場合と同じくらい重要です。 侵入テストをビルドおよびデプロイ プロセスの標準的な部分にします。 デプロイしたアプリケーションに対して定期的なセキュリティ テストと脆弱性スキャンをスケジュールし、開放ポート、エンドポイント、攻撃を監視します。

セキュリティ検証テストを実行する

Secure DevOps Kit for Azure (AzSK) の Azure テナント セキュリティ ソリューション (AzTS) には、Azure プラットフォームの複数のサービス用の SFT が含まれています。 これらの SVT を定期的に実行して、Azure サブスクリプションと、アプリケーションを構成するさまざまなリソースがセキュリティで保護された状態であることを確認します。 AzSK の継続的インテグレーション/継続的配置 (CI/CD) 拡張機能機能を使用して、これらのテストを自動化することもできます。これにより、SFT を Visual Studio 拡張機能として使用できます。

次のステップ

次の記事では、セキュリティで保護されたアプリケーションの設計と展開に役立つセキュリティ制御とアクティビティをお勧めします。