はじめに
今回は脆弱性診断を行う際の「自動診断ツール」と「手動診断ツール」の特徴や違いなどを自身の復習もかねてまとめてみました。
◎自動診断ツールとは
WEBアプリケーションの脆弱性やセキュリティ機能の不足を効率的に発見することを目的としたツールです!
「脆弱性スキャナー」や「脆弱性検査ツール」などと呼ばれています。
《主な機能は以下の通り》
●テストケース作成機能
●脆弱性診断の実施機能
●レポート作成機能
▶テストケース作成機能
テストケース作成機能とは、脆弱性診断の実施時の手順や実施した内容を決める機能。
**「診断対象を記録する機能」と「シナリオ作成機能」**の2つを使って行われます。
●診断対象を記録する機能はWEBサイトを自動または手動によってクロール(巡回)することによって、診断対象のWEBアプリケーションのWEBページやリクエスト内容を記録していく機能。
●シナリオ作成機能は記録した診断対象を基に、診断対象を診断する手順や、実施する内容を決める機能。
▶脆弱性診断の実施機能
脆弱性診断の実施機能とは、テストケース作成機能によって作成されたテストケースに基づき、
WEBページの脆弱性を発見する機能。
《脆弱性を発見する方法》
●記録したパラメーターに対して脆弱性診断の検査パターンを挿入し、正常時のレスポンスと検査パターン挿入時のレスポンスや挙動を比較する。
●レスポンスに含まれる特定の文字列を検出する。
▶レポート作成機能
レポートを作成する機能とは、脆弱性診断の実行機能によって発見した脆弱性についてまとめたレポートを出力する機能。
「発見した脆弱性の名称」や「概要」「URL」や「送信したリクエストとレスポンス」「脆弱性だと判断した理由」「脆弱性の緊急度」「対策方法」などを記載します。
自動診断ツールの特徴と得意分野
自動診断ツールの最も大きな特徴はスピードです!!
そのほか自動診断ツールが主に得意とすることは以下の3つになります。
●パラメーターに値を挿入して発見するタイプの脆弱性
●HTMLやCookieなどのセキュリティ機能の不足
●ディレクトリやファイルの発見
▶パラメーターに値を挿入して発見するタイプの脆弱性
インジェクションに分類される「SQLインジェクション」や「クロスサイトスクリプティング」のようなタイプの脆弱性を発見することを特に得意としており、自動診断ツールが備える複数の検査パターンをクエリーやPOSTデータなどのパラメーターに次々と挿入することで、そのレスポンスを見るなどして脆弱性を発見していきます。
▶HTMLやCookieなどのセキュリティ機能の不足
CookieやhttpOnly属性が付いているか、オートコンプリート機能が有効になっているかといったレスポンス内容を見れば判断ができるセキュリティ不足を発見することを得意としています。
▶ディレクトリやファイルの発見
リンクされているURLの検索だけではなく、検索エンジンのためのrobots.txtのようなファイルを探したりすることも得意としている。場合によっては、自動診断ツールが備えた辞書機能によって、どこからもリンクされていないファイルやディレクトリを探すこともあります。
自動診断ツールでは発見が難しい脆弱性や機能
《脆弱性》 |
---|
●認可制御の不備・欠落 |
●ビジネスロック上の問題 |
●メールヘッダーインジェクション |
●クロスサイトリクエストフォージェリ |
※認可制御の不備・欠落やビジネスロック上の問題は、正しい状態が何なのか**『人間の判断』**が必要になってきます!! |
《機能》 |
---|
●人間の判断や操作が必要になるもの |
‐メール受信、CAPTCHA、二要素認証、複数要素認証 |
●ゲームのような操作を伴うもの |
●脆弱性の発動に複数のパラメーターを利用するもの |
●一度しか実行できない機能 |
●入力値の影響が次画面ではなく他の画面にでるもの |
※WEBアプリケーションの脆弱性診断では**”手作業による診断”**併せて行うことが必要になります! |
◎手動診断補助ツールによる診断
手作業で診断を行う際にWEBブラウザだけでは行うことが困難なリクエストの内容を書き換えたり、レスポンス内容を確認したり、検査パターンを連続して挿入するといったことを行うことができます。
《主な機能は以下の通り》
●HTTPメッセージ(リクエスト・レスポンス)の確認
●リクエストメッセージの書き換え
●HTTPメッセージ(リクエスト・レスポンス)の記録
▽リピーター | 一度送ったリクエストを再び送るリクエスト再生機能。プロキシにより、記録された過去のリクエストを再び送ることができる。 |
▽ファザー | 自動的に値をクエリーやPOSTデータ、ヘッダーフィールドなどに入れてリクエストを連続して送信する機能。自動診断ツールのように自動的に脆弱性を検出することはないので、レスポンスの内容を人間が判断する必要がある。 |
▽エンコーダ・デコーダ | 指定した文字列をBase64やURLエンコードなどでエンコードしたり、デコードしたりする機能。 |
▽diff | 2つの差分をとることで変化している箇所を発見するための機能。2つのHTTPメッセージを比較したい場合、この機能を用いることで同じ箇所や異なっている箇所を発見しやすくなる。 |
脆弱性診断に必ず付きまとう問題~誤検知と見逃し~
脆弱性診断に必ずつきまとう問題として、誤検知と見逃しの問題があります!
●誤検知・・・正常のものを誤って脆弱性だと判断してしまうこと
●見逃し・・・脆弱性を発見できずに見逃してしまうこと
誤検知が起きるときは、WEBアプリケーションに何らかの問題があることも多いので、一概に誤検知が悪いとはいえないこともあります!!
自動診断の診断結果の検証は、誤検知と見逃しを減らすことを目的としています!
自動診断ツールによる診断は、手作業による診断に比べると大幅に時間を減らすこともできますが、「誤検知」や「見逃し」が発生することがあります!
効率かつ確実な診断のためには「自動診断ツール」と「手作業による診断」を組み合わせて行うことが必要になります!!
参考文献
書籍:Webセキュリティ担当者のための脆弱性診断スタートガイド
上野宣が教える新しい情報漏えいを防ぐ技術 第2版
著者:上野 宣