DAST(動的アプリケーションセキュリティテスト)は、動いているアプリを外から検査して弱点を探すテストです。他のテストとの違いと、自分のアプリでの使い方を解説します(他人のサイトを検査する方法は載せません)。
DASTとは
DASTは、Dynamic Application Security Testingの略です。OWASPのDevSecOpsガイドラインは、DASTを、実行中のアプリケーションの脆弱性や弱点を探すブラックボックステストと説明しています。ブラックボックスとは、内部のソースコードを見ず、外から見える入出力だけで調べる、という意味です。
実際には、ツールがアプリのページや入力欄をたどり、検査用のリクエストを送って、その反応から問題の兆候を探します。同ガイドラインは、入出力の検証、認証の問題、サーバー設定のミスの検出に特に役立つとしています。
仕組み
SAST・IAST・SCAとの違い
| 手法 | 何を調べるか | 動かすか | 向いている問題 |
|---|---|---|---|
| DAST | 動作中のアプリの外側の振る舞い | 動かす | 入出力の検証、認証、サーバー設定 |
| SAST | ソースコードや、コンパイル後のコード | 動かさない | コードの書き方の問題を、開発の早い段階で見つける |
| IAST | アプリの内部の動作(センサーで監視) | 動かす(テスト中) | 自動テスト中に現れる問題 |
| SCA | 使っているライブラリなどの依存関係 | 動かさない | 既知の脆弱性(CVE)を含む部品 |
OWASPは、SASTについて、自動で見つけられるアプリのセキュリティ上の欠陥は比較的少ないこと、誤検知が多いこと、設定の不備を見落としやすいことを挙げています。DASTはこの弱点を補いますが、同じく万能ではありません。SCAについては、OSV-Scannerで依存関係を点検する方法を解説しています。
自分のアプリで使う方法(OWASP ZAPの例)
ZAP(Zed Attack Proxy。以前の呼び名はOWASP ZAP)は、無料で、ソースコードが公開されているDASTツールです。現在の公式サイトでは「ZAP by Checkmarx」と表記されています。
- まず、自分が管理するテスト環境のURLを用意する。本番ではなく、テスト用の環境を使う
- ベースラインスキャンを実行する。公式ドキュメントによると、これはパッシブなスキャンのみで、既定ではスパイダー(ページをたどる機能)を1分動かし、攻撃的な検査は行いません。数分程度で終わります
- 結果を読み、問題の兆候が実際の問題かを人が確かめる。誤検知もあります
- 必要に応じて、テスト環境に限ってアクティブスキャンに進む。これは既知の攻撃を対象に試すため、自分のものではないWebアプリには使ってはいけないと、公式ドキュメントに明記されています
- 修正のたびに、CIなどで定期的に再実行する
自分が所有・管理するアプリのテスト環境だけに行う
DASTのツールは、実際に攻撃に近い通信を送ります。許可を得ていないサイトに実行すると、不正アクセスや業務妨害にあたるおそれがあります。OWASP ZAPの公式ドキュメントも、アクティブスキャンを自分が所有していないWebアプリに使ってはいけないとしています。また、本番環境に実行すると、データの作成や負荷など、意図しない影響が出ることがあります。
DASTで見つからないこと
ZAPの公式ドキュメントは、アクティブスキャンでは、アクセス制御の不備のような論理的な問題は見つけられないため、手動の診断も組み合わせるよう述べています。たとえばIDORのような「他人のデータを見られる」問題は、自動ツールが「正しい挙動」を知らないため、見つけにくい種類です。別の利用者のIDでアクセスして拒否されるかを確かめるテストを、自分で書く必要があります。
また、セキュリティヘッダーのような設定の確認は、DASTが得意な領域です。何を設定すれば意味があるかは、セキュリティヘッダー:今も意味があるもので整理しています。
当サイトの視点:DASTは『最後の網』。順番はコード、部品、動作の三段で考える
1つのツールで全部を見つけようとするより、見る場所の違う三つを組み合わせるのが現実的です。まずコードを読む(SAST)、次に部品の既知の脆弱性を見る(SCA)、最後に動かして外から確かめる(DAST)。そして、ツールが苦手な「誰が何をしてよいか」は、自分で書いたテストで守ります。ツールの結果は、そのまま信じず、人が確かめてから直します。
出典(一次情報)
- OWASP DevSecOps Guideline「Dynamic Application Security Testing」 — owasp.github.io(DASTの定義、ブラックボックス)
- OWASP DevSecOps Guideline「Interactive Application Security Testing」 — owasp.github.io(IAST)
- OWASP Community「Source Code Analysis Tools」 — owasp.org(SASTと、その限界)
- ZAP Documentation「Active Scan」 — zaproxy.org(自分のものではないアプリに使わない、論理的な問題は見つけられない)
- ZAP Documentation「Baseline Scan」 — zaproxy.org(パッシブのみ、実行時間)
- SCAについては、本文では一般的な定義を示しています。個別の公的な定義は確認していません
次に読む
- 用語:ファジングとは / OWASP Top 10 とは / IDORとは
- 解説:セキュリティヘッダー:今も意味があるもの / OSV-Scannerで依存関係を点検する
- 用語:CVEとは