
lcamtufがGoogle向けに作成したWebアプリケーションセキュリティスキャナー - 非公式ミラー
http://code.google.com/p/skipfish/
作成・メンテナンス:
Michal Zalewski [email protected] Niels Heinen [email protected] Sebastian Roschke [email protected]
Copyright 2009 - 2012 Google Inc, 無断複製禁止。
Apache License Version 2.0 の条件に基づいて公開されています。
Skipfishは、アクティブなWebアプリケーションセキュリティ偵察ツールです。再帰的なクロールと辞書ベースのプローブを実行することで、対象サイトのインタラクティブなサイトマップを作成します。得られたマップには、多数のアクティブ(ただし、非破壊的であることを期待する)なセキュリティチェックの出力が注釈として付けられます。このツールが生成する最終レポートは、プロフェッショナルなWebアプリケーションセキュリティ評価の基礎として利用されることを意図しています。
同様の機能を持つ商用およびオープンソースのツールは数多く存在します(例:Nikto、Nessus)。自分に最適なものを選んでください。とはいえ、skipfishはWebセキュリティスキャナによくある問題に対処しようとしています。具体的な利点は以下の通りです。
高性能:応答性の高いインターネットターゲットに対して毎秒500以上のリクエスト、LAN/MANネットワークでは毎秒2000以上のリクエスト、ローカルインスタンスでは毎秒7000以上のリクエストが観測されており、CPU、ネットワーク、メモリのフットプリントは非常に控えめです。これは以下によるものです。
マルチプレックス単一スレッド、完全非同期のネットワークI/Oおよびデータ処理モデルにより、一部のマルチスレッドクライアントに見られるメモリ管理、スケジューリング、IPCの非効率性を排除。
Rangeリクエスト、コンテンツ圧縮、Keep-Alive接続などの高度なHTTP/1.1機能、および強制的な応答サイズ制限により、ネットワークレベルのオーバーヘッドを抑制。
スマートな応答キャッシュと高度なサーバ動作ヒューリスティックを使用して、不要なトラフィックを最小化。
パフォーマンス重視の純粋なC実装(カスタムHTTPスタックを含む)。
使いやすさ:skipfishは高い適応性と信頼性を持っています。スキャナの特徴は以下の通りです。
あいまいなパスおよびクエリベースのパラメータ処理スキームのヒューリスティック認識。
特定のパスが完全に異なるセマンティクスに従う、または異なるフィルタリングルールの対象となる、マルチフレームワークサイトの優雅な処理。
サイトコンテンツ分析に基づく自動的なワードリスト構築。
任意に複雑なサイトの定期的かつ時間制限付き評価を可能にする確率的スキャン機能。
よく設計されたセキュリティチェック:このツールは正確で意味のある結果を提供することを意図しています。
手作りの辞書は優れたカバレッジを提供し、合理的な時間枠での徹底的な$keyword.$extensionテストを可能にします。
脆弱性検出には、シグネチャチェックよりも3段階の差分プローブが優先されます。
Ratproxyスタイルのロジックを使用して、微妙なセキュリティ問題(クロスサイトリクエストフォージェリ、クロスサイトスクリプトインクルージョン、混合コンテンツ、MIMEおよび文字セットの不一致、不適切なキャッシュディレクティブなど)を発見します。
バンドルされているセキュリティチェックは、厄介なシナリオ(保存型XSS(パス、パラメータ、ヘッダー)、ブラインドSQL/XMLインジェクション、ブラインドシェルインジェクション)を処理するように設計されています。
Snortスタイルのコンテンツシグネチャで、サーバエラー、情報漏洩、または危険なWebアプリケーションを強調表示します。
レポートの後処理により、繰り返しパターンを識別することで、残っている誤検出やサーバのギミックによるノイズを大幅に低減します。
とはいえ、skipfishは銀の弾丸ではなく、特定の目的には適さない場合があります。例えば、WASC Web Application Security Scanner Evaluation Criteriaで概説されている要件のほとんどを満たしていません(一部は意図的、一部は必要性から)。また、この種の他のほとんどのプロジェクトとは異なり、バナータイプのチェックのための既知の脆弱性の広範なデータベースは付属していません。
以下に、このツールが提供するセキュリティチェックの大まかなリストを示します。
高リスクの欠陥(システム侵害につながる可能性があるもの):
中リスクの欠陥(データ侵害につながる可能性があるもの):
低リスクの問題(限定的な影響または低い特異性):
内部警告:
非特異的な情報エントリ:
特定された問題のリストに加えて、skipfishは見つかったドキュメントタイプと問題タイプの概要も提供します。また、ブルートフォースで発見されたノードが区別可能な方法で示されたインタラクティブなサイトマップも提供します。
注意:設計上の決定として、skipfishは非常に非特異的な問題について冗長に警告することはありません。これには以下が含まれますが、これらに限定されません。
これらの側面のほとんどは、必要に応じてレポート内で簡単に検査できます。たとえば、すべてのHTMLフォームは個別にリストされ、新しいCookieや興味深いHTTPヘッダーも同様です。そして、監査担当者は適切な場合にこれらのデータに基づいて特定の設計上の推奨を行うことを選択できます。とはいえ、これらの出現は特定のセキュリティ上の欠陥として強調表示されるわけではありません。
まず第一に、悪用しないでください。所有しているサービス、またはテストする許可があるサービスに対してのみskipfishを使用してください。
あらゆる種類のセキュリティテストは破壊的になる可能性があることを覚えておいてください。スキャナは悪意のある攻撃を実行しないように設計されていますが、誤ってサイトの運用を妨害する可能性があります。リスクを受け入れ、それに応じて計画を立てる必要があります。可能であればテストインスタンスに対してスキャナを実行し、問題が発生した場合の結果に対処する準備をしてください。
また、このツールはセキュリティ専門家が使用することを意図しており、実験的な性質を持っています。誤検出を返したり、明らかなセキュリティ問題を見逃したりする可能性があります。完全に動作している場合でも、ポイントアンドクリックのアプリケーションとして設計されているわけではありません。その出力を額面通りに受け取らないでください。
ベンダー提供のデモサイトに対してツールを実行することは、それを評価する良い方法ではありません。これらのサイトは通常、脆弱性を非常に不完全に近似しているためです。私たちはこれらのケースに対応するための努力はしていません。
最後に、スキャナは単に不正な動作をするHTTPサーバを扱うようには設計されていません。また、そこでの安全な(またはまともな)動作を保証するものではありません。
コンパイルするには、アーカイブを解凍してmakeを試してください。おそらく、最初にlibidnをインストールする必要があります。
次に、doc/dictionaries.txtの説明を読み、適切な辞書ファイルを選択し、正しく設定する必要があります。このステップは、後でスキャン結果の品質に大きな影響を与えるため、省略しないでください。
辞書を選択したら、-Sを使用してその辞書をロードし、-Wを使用して新しく学習したサイト固有のキーワード(将来の評価で役立ちます)のために最初は空のファイルを指定できます。
$ touch new_dict.wl
$ ./skipfish -o output_dir -S existing_dictionary.wl -W new_dict.wl
http://www.example.com/some/starting/path.txt
自動学習されたキーワードをどこにも保存したくない場合は、-W-を使用できます。
必要に応じて複数の開始URLを指定できることに注意してください。それらすべてがクロールされます。また、以下の構文を使用してファイルからURLを読み取ることも可能です。
$ ./skipfish [...その他のオプション...] @../path/to/url_list.txt
ツールはスキャンの進行中にいくつかの役立つ統計情報を表示します。また、リターンを押すことで進行中のHTTPリクエストのリストに切り替えることもできます。
上記の例では、skipfishはwww.example.com全体(メインページからリンクされている場合、他のポートのサービスも含む)をスキャンし、output_dir/index.htmlにレポートを書き込みます。その後、お好みのブラウザでこのレポートを表示できます(JavaScriptが有効である必要があります。また、最近の一部のブラウザでのfile:///のセキュリティ強化のため、結果にはHTTP経由でアクセスする必要があるかもしれません)。index.htmlファイルは静的です。実際の結果はJSONファイルの階層として保存され、必要に応じて機械処理や異なるプレゼンテーションフロントエンドに適しています。さらに、発見されたすべてのURLのリストが単一のファイルpivots.txtに保存され、後処理が容易になります。
シンプルな付属スクリプトsfscandiffを使用して、同じターゲットに対して同じフラグで実行された2つのスキャンの差分を計算できます。新しいレポートには、すべての新規または変更されたノードに赤い背景、すべての新規または変更された問題に青い背景が非破壊的に追加されます。
一部のサイトでは認証が必要であり、そのサポートについてはdoc/authentication.txtに記載されています。ほとんどの場合、フォーム認証方法を使用することになります。この方法は、再認証のために壊れたセッションを検出できます。
認証後、サイト上の特定のURLがセッションをログアウトさせる可能性があります。これに対抗するには、2つの方法があります:-Nオプションを使用すると、スキャナがCookieの設定または削除の試みを拒否するようになります。または、-Xパラメータを使用して、一致するURLのフェッチを防ぎます。
$ ./skipfish -X /logout/logout.aspx ...その他のパラメータ...
-Xオプションは、/icons/、/doc/、/manuals/などの標準的なありふれた場所を除外することでスキャンを高速化するのにも役立ちます。一般的に、-Xと-I(サブ文字列に一致するURLのみをスパイダーする)を使用して、スキャンのスコープを好きなように制限できます。特定のプロトコルとポートに制限することも含みます。
$ ./skipfish -I http://example.com:1234/ ...その他のパラメータ...
関連する機能として、-Kを使用すると、ファジングしないパラメータ名を指定できます(アプリケーションがURLにセッションIDを配置する場合にノイズを最小化するのに役立ちます)。