DASTブラウザベースアナライザー
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
DASTバージョン4のブラウザベースアナライザーは、GitLab 17.0でDASTバージョン5に置き換えられます。DASTバージョン5への移行手順については、移行ガイドを参照してください。
ブラウザベースのDASTは、ウェブアプリケーションにおける脆弱性(CWEs)の特定を支援します。ウェブアプリケーションをデプロイすると、新しい種類の攻撃にさらされますが、その多くはデプロイ前に検出できません。たとえば、アプリケーションサーバーの設定ミスやセキュリティ制御に関する誤った前提は、ソースcodeからは見えない場合がありますが、ブラウザベースのDASTで検出できます。
動的アプリケーションセキュリティテスト(DAST)は、デプロイされた環境で、このような脆弱性がないかアプリケーションを検査します。
概要については、DAST - 高度なセキュリティテストを参照してください。
本番環境サーバーに対してDASTスキャンを実行しないでください。ユーザーが行うことができるボタンのクリックやフォームの送信などの機能を実行できるだけでなく、バグをトリガーし、本番環境データの変更や損失につながる可能性があります。テストサーバーに対してのみDASTスキャンを実行してください。
DASTブラウザベースアナライザーは、最新のウェブアプリケーションの脆弱性をスキャンするためにGitLabによって構築されました。シングルページアプリケーションなどのJavaScriptに大きく依存するアプリケーションのテストを最適化するために、スキャンはブラウザで実行されます。詳細については、DASTがアプリケーションをスキャンする方法を参照してください。
アナライザーをCI/CDパイプラインに追加するには、アナライザーを有効にするを参照してください。
はじめに
DASTを初めて使用する場合は、このガイドに従って最初のスキャンを設定してください。
前提条件:
- Linux/amd64上で、
dockerexecutorを備えたGitLab Runner。 - デプロイされたターゲットアプリケーション。デプロイオプションを参照してください。
- お使いのGitLab Runnerとターゲットアプリケーション間のネットワーク接続。
DASTの使用を開始するには:
- アナライザーを有効にします。パイプラインにDAST CI/CDジョブを作成して、スキャナーを実行します。
- 認証を設定します。アプリケーションでログインが必要な場合は、認証を設定して、DASTが認証済みのページをスキャンできるようにします。
- 設定の問題のトラブルシューティングを行います。設定中に問題が発生した場合は、トラブルシューティングドキュメントを参照してください。
次の手順
最初のスキャンを完了した後:
- スキャン結果の解釈方法を学ぶために結果を理解するを確認してください。
- スキャンをカスタマイズするには設定オプションを調べてください。
- DASTがアプリケーションをスキャンする方法について詳しく学んでください。
結果について理解する
パイプラインの脆弱性を確認できます:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左側のサイドバーで、ビルド > パイプラインを選択します。
- パイプラインを選択します。
- セキュリティタブを選択します。
- 脆弱性を選択して、次の詳細を表示します:
- ステータス: 脆弱性がトリアージされたか、解決されたかを示します。
- 説明: 脆弱性の原因、潜在的な影響、推奨される修正手順について説明しています。
- 重大度: 影響に基づいて6つのレベルに分類されます。重大度レベルの詳細はこちらをご覧ください。
- スキャナー: 脆弱性を検出したアナライザーを示します。
- メソッド: 脆弱性のあるサーバーの相互作用タイプを確立します。
- URL: 脆弱性の場所を表示します。
- エビデンス: 特定の脆弱性の存在を証明するためのテストケースを記述します。
- 識別子: 脆弱性を分類するために使用される参照のリスト(CWE識別子など)。
セキュリティスキャンの結果をダウンロードすることもできます。
- パイプラインのセキュリティタブで、結果をダウンロードを選択します。
詳細については、パイプラインセキュリティレポートを参照してください。
検出結果はフィーチャーブランチで生成されます。これらの検出結果がデフォルトブランチにマージされると、脆弱性になります。この区別は、セキュリティ対策状況を評価する上で重要です。
最適化
特定のアプリケーションまたは環境向けにDASTを設定する方法については、設定オプションを参照してください。
ロールアウトする
単一プロジェクトに対してDASTを設定した後、その設定を他のプロジェクトに拡張できます:
パイプラインが実行ごとに同じウェブサーバーにデプロイするように設定されている場合は注意してください。サーバーの更新中にDASTスキャンを実行すると、不正確で非決定的な結果につながります。
Runnerを常にプルポリシーを使用するように設定して、アナライザーの最新バージョンを実行します。
デフォルトでは、DASTはパイプラインの以前のジョブで定義されたすべてのアーティファクトをダウンロードします。DASTジョブがテスト対象のURLを定義するために
environment_url.txt、または以前のジョブで作成された他のファイルに依存しない場合、アーティファクトをダウンロードする必要はありません。アーティファクトのダウンロードを回避するには、アナライザーCI/CDジョブを拡張して依存関係がないことを指定します。たとえば、DASTプロキシベースアナライザーの場合は、.gitlab-ci.ymlファイルに以下を追加します:dast: dependencies: []
DASTがアプリケーションをスキャンする方法
スキャンは以下の手順を実行します:
- 設定されている場合、認証します。
- リンクのたどり、ボタンのクリック、フォームの入力などのユーザーアクションを実行することで、ターゲットアプリケーションの表面積を検出するためにアプリケーションをクロールします。
- パッシブスキャンして、クロール中に検出されたHTTPメッセージとページ内の脆弱性を検索します。
- クロールフェーズ中に記録されたHTTPリクエストにペイロードを注入することで、脆弱性を検索するためにアクティブスキャンします。
アプリケーションのクロール
「ナビゲーション」とは、ボタンのクリック、アンカーリンクのクリック、メニュー項目のオープン、フォームの入力など、ユーザーがページで実行する可能性のあるアクションです。「ナビゲーションパス」とは、ユーザーがアプリケーションをどのように移動するかを表すナビゲーションアクションのシーケンスです。DASTは、ページとコンテンツをクロールし、ナビゲーションパスを識別することで、アプリケーションの表面積を検出します。
クロールは、特別に計装されたChromiumブラウザでターゲットアプリケーションURLを読み込む1つのナビゲーションを含むナビゲーションパスで初期化されます。DASTは、すべてのナビゲーションパスがクロールされるまでナビゲーションパスをクロールします。
ナビゲーションパスをクロールするために、DASTはブラウザウィンドウを開き、ナビゲーションパス内のすべてのナビゲーションアクションを実行するように指示します。ブラウザが最終アクションの結果の読み込みを完了すると、DASTはユーザーが実行する可能性のあるアクションについてページを検査し、見つかったアクションごとに新しいナビゲーションを作成し、それらをナビゲーションパスに追加して新しいナビゲーションパスを形成します。例:
- DASTはナビゲーションパス
LoadURL[https://example.com]を処理します。 - DASTは2つのユーザーアクション、
LeftClick[class=menu]とLeftClick[id=users]を見つけます。 - DASTは2つの新しいナビゲーションパス、
LoadURL[https://example.com] -> LeftClick[class=menu]とLoadURL[https://example.com] -> LeftClick[id=users]を作成します。 - 2つの新しいナビゲーションパスでクロールが開始されます。
アプリケーション内の複数の場所にHTML要素が存在することはよくあります。たとえば、すべてのページで表示されるメニューなどです。重複する要素があると、クローラーが同じページを再びクロールしたり、ループに陥ったりする可能性があります。DASTは、HTML属性に基づいた要素の一意性計算を使用して、以前にクロールした新しいナビゲーションアクションを破棄します。
パッシブスキャン
パッシブスキャンは、スキャンのクロールフェーズ中に検出されたページ内の脆弱性をチェックします。パッシブスキャンは、データの削除などの破壊的なアクションを実行することを含め、通常のユーザーと同じ方法でサイトと対話しようとします。ただし、パッシブスキャンは敵対的な動作をシミュレートしません。パッシブスキャンはデフォルトで有効になっています。
チェックは、HTTPメッセージ、Cookie、ストレージイベント、コンソールイベント、およびDOMで脆弱性を検索します。パッシブチェックの例には、公開されたクレジットカード、公開されたシークレットトークン、不足しているコンテンツセキュリティポリシー、および信頼できない場所へのリダイレクトの検索が含まれます。
個々のチェックの詳細については、チェックを参照してください。
アクティブスキャン
アクティブスキャンは、スキャンのクロールフェーズ中に記録されたHTTPリクエストに攻撃ペイロードを注入することで、脆弱性をチェックします。アクティブスキャンは、敵対的な動作をシミュレートするため、デフォルトで無効になっています。
DASTは、クエリ値、ヘッダー値、Cookie値、フォーム投稿、JSON文字列値などの注入場所について、記録された各HTTPリクエストを分析します。攻撃ペイロードは注入場所に注入され、新しいリクエストを形成します。DASTはターゲットアプリケーションにリクエストを送信し、HTTP応答を使用して攻撃の成功を判断します。
アクティブスキャンは2種類のアクティブチェックを実行します:
- 一致応答攻撃は、応答内容を分析して攻撃の成功を判断します。たとえば、攻撃がシステムパスワードファイルを読み取りしようとする場合、応答本文にパスワードファイルの証拠が含まれているときに結果が作成されます。
- タイミング攻撃は、応答時間を使用して攻撃の成功を判断します。たとえば、攻撃がターゲットアプリケーションをスリープさせようとする場合、アプリケーションがスリープ時間よりも長く応答する場合に結果が作成されます。タイミング攻撃は、誤検出を最小限に抑えるために、異なる攻撃ペイロードで複数回繰り返されます。
簡略化されたタイミング攻撃は次のとおりです:
- クロールフェーズはHTTPリクエスト
https://example.com?search=peopleを記録します。 - DASTはURLを分析し、URLパラメータ注入場所
https://example.com?search=[INJECT]を見つけます。 - アクティブチェックは、Linuxホストをスリープさせようとするペイロード
sleep 10を定義します。 - DASTは、注入されたペイロード
https://example.com?search=sleep%2010を使用して新しいHTTPリクエストをターゲットアプリケーションに送信します。 - ターゲットアプリケーションは、検証なしでクエリパラメータ値をシステムコマンドとして実行する場合(例:
system(params[:search]))、脆弱です。 - DASTは、応答時間が10秒を超える場合に結果を作成します。