アプリケーション セキュリティ テスト (AST) ツール¶
用語の説明¶
ファズ テスト¶
ファジング、またはファズ テストとは、ネガティブ テストのための DAST (動的アプリケーション セキュリティ テスト) 手法の 1 つです。ファジングは、既知の脆弱性、未知の脆弱性、およびゼロデイ脆弱性を検出することをねらいとします。 ファザーはターゲットに不正な入力を送信します。その目的は、クラッシュや無限ループ、メモリ リークなどの誤動作を引き起こすことです。そういった異常な動作は、セキュリティ脆弱性が隠れているサインであることがよくあります。詳細についてはこちらのウェビナーを参照してください。
ランダム ファズ テスト¶
ランダム ファジングはアプリケーションにランダムな入力を送信します。テスト ケースの生成に系統だったやり方がないため、テスト ケースは有効な入力と同じようにはなりません。結果として、大半の入力はアプリケーションに侵入できず、コード カバレッジは低くなります。ランダム ファザーが他のより効果的なファザーと同等のカバレッジを達成するには、セキュリティ専門家がかなりの時間と労力をかける必要があります。詳細についてはこちらのブログを参照してください。
テンプレート ファズ テスト¶
テンプレート ファザーは、手動で指定されたカスタム入力値を使用し、値を変更して異常値を含めます。生成的ファザーおよびプロトコル ファザーもこのサブカテゴリに含まれます。全体として、これらの入力は有効な入力値に近いため、ランダム ファザーよりも効果的です。これらのテスト ケースがアプリケーションに侵入できる確率は、ランダム ファザーのテスト ケースよりも高いでしょう。しかし、いくつかデメリットがあります。テンプレート ファザーは、一般的なエラー検出技法を理解せずにランダムな異常値を含めます。結果として、テスト ケースがブロックされることがよくあります。また、テンプレートには限界があります。テンプレートが提供する有効な入力にテスト ケースの品質が制限されるだけでなく、テンプレートのスコープを超えたファジングは行われません。テンプレート ファザーは、巧妙に作成されたテンプレートがある場合は、単一の関数のファジングには効果的である可能性があります。ただし、テンプレート ファジングのスケールを拡大するには、専門的知識が必要です。生成的ファザーはもう少し優秀で、入力型の内部的な働きを理解しています。テストは有効な入力値に似せて作成される一方で、一般的なエラー 検出技法には従っていません。ベンダーが提供する生成的ファザーでテストを実施するために必要な専門知識はテンプレート ファザーと比べると格段に少ないものの、運用と結果の解釈には、依然として専門知識が必要です。現在の商用ファザーの多くはテンプレート/生成的ファザーです。
ガイド付きファズ テスト¶
ガイド付きファザーはインテリジェントで、実行時にターゲットの動作をモニターし、モニター結果を利用して新しいカスタム テスト ケースを自律的に生成する機能を備えています。ガイド付きファザーには送信するテスト ケースの有効性を評価するスコア付け機能があります。スコアが高いテスト ケースは、新たにどのようなテスト ケースのセットが作成され、送信されるかに影響を与えます。上記で説明した他のタイプのファザーとは異なり、ガイド付きファザーが必要とするのは、ターゲットおよび送信された入力値をモニターする方法だけです。初期テスト ケースは与えられません。近年、ファザーはますます高度化し、強力な自動化機能を持つようになっています。ガイド付きファザーは、手動でのテスト ケース 作成に伴う負担を大幅に軽減します。それでも、深いファジング解析を実施するには、専門家の支援が必要です。ForAllSecure 社の Mayhem は、ガイド付きファズ テストの自動化を可能にします。
ファズ テスト ハーネス¶
ファズ テストには、エントリポイント実行ファイル (EPE) を使用する必要があります。多くのファイルはもともとコマンド ラインから入力を受け取りますが、そうではないものもさらに多くあります。そういったファイルをテストするには、独自の EPE、つまりファズ テスト ハーネスを作成する必要があります。たとえば、EPE がない動的リンク ライブラリの場合、テスト ハーネスを作成してコマンド ラインからテスト対象の DLL 関数に入力を渡す必要があります。
シード テスト スイート¶
シード テスト スイートは、ターゲットをファジングする際の開始点となる有効なテスト ケース入力値のセットです。
ファズ テストを行うべき理由¶
あらゆる SDLC にファズ テストを組み込むべきです。ファズ テストはコードの実行時の動作に注目します。また、SAST や SCA よりも広い範囲のコードをカバーします。詳細についてはこちらのインフォグラフィックを参照してください。
ファズ テストの有効性¶
Google は Chrome ブラウザーのバグのうち 80% をファズ テストで発見し、残りの 20% を他のテスト技法または運用で発見しています。ソフトウェアに対して敵対的アプローチを取ることは、「低い位置にぶら下がった果実」、つまり悪意のあるアクターにとって最も魅力的な弱点に対処する実証済みの効果的な方法です。ファジングは効果的ですが、有効性は選択したツールやツールの背後にいる専門家にも依存します。詳細についてはこちらのウェビナーを参照してください。
ファジング技法の種類¶
ファズ テストには、ランダム、テンプレート、ガイド付きの 3 つのタイプがあります。
ファズ テスト はどんな問題の解決に役立つか¶
ファザーはターゲットに不正な入力を送信します。その目的は、クラッシュや無限ループ、メモリ リークなどの誤動作を引き起こすことです。そういった異常な動作は、セキュリティ脆弱性が隠れているサインであることがよくあります。
ファジングが生まれてからすでに 30 年がたっているのに、それほど広まっていない理由¶
開発者がソフトウェアを開発する際、ソフトウェアのあらゆる誤動作の可能性については調べていないのが通常です。残念ながら、何かを間違う方法は無限にあります。ファズ テストの有効性は十分に証明されていますが、全体として見ると、ファジングは解析が浅い、アプリケーションの周辺レイヤーを突破して侵入できないといった理由で批判されています。批判にもかかわらず、自社でソフトウェアを構築し、ビジネス生産性を目的としてサプライヤーのソフトウェアに依存する組織にとって、ファズ テストは実績のある手法であり、推奨されるプラクティスです。最近のガイド付きファジング ソリューションには、送信するテスト ケースの有効性を評価するスコア付け機能があります。たしかに、ガイド付きファザーはプログラムを探索するための最初のガイドとしてサンプル入力、あるいはテスト スイートを利用しますが、その後はターゲットの動作をフィードバックとして利用し、新しくカスタマイズされたテスト ケースをその場で生成します。新しく生成されたテスト ケースは、新しいコードのセクションを漸増的にテストし、侵入に成功した各新規領域のセキュリティをチェックし、ユーザビリティを改善することをねらいとします。
ファズ テストが検出する脆弱性の種類¶
おそらく、ファズ テストの最も有名な例は、OpenSSL の特定バージョンのバッファー オーバーフロー、より一般的にはハートブリードという名称で知られる問題を見つけたことではないでしょうか。Mayhem が発見した最近の脆弱性のリストは、次の場所にあります: https://go.forallsecure.com/vulnerabilities-lab
ファズ テストの利点¶
- 未知の脆弱性を発見できる
- 精度が高く、誤検出が少ない
- SDLC と連携して完全な自動化を実現できる
- マシンのスピードとスケールでセキュリティ テストを実行できる
- DAST のシフトレフトを実現できる
ファズ テストの恩恵を受けるのは誰か¶
あらゆる人です。冗談ではなく、エンド ユーザーにとっては、個人情報をリークしたり生命の危機がある状況でクラッシュしたりしないセキュアなアプリケーションを利用できるという恩恵があります。組織にとっては、開発時に欠陥を修正するのがより容易で、コストがかからないという恩恵があります。政府機関にとっては、ミッション クリティカルなシステムにサードパーティ製アプリケーションがデプロイされる前に厳格なテストを行って、未知の脆弱性がないかを検査できるという恩恵があります。
ファズ テストの恩恵が大きい組織の種類¶
コードを自社で開発している組織は、ソース コードを制御できる範囲が大きいため、ファズ テストから最も大きな恩恵を受けることができます。しかし、ファズ テストはサードパーティのバイナリにも適用できるため、サードパーティ製アプリケーションを調達する組織にも恩恵があります。