ウェブアプリケーションをホスティングすることは、便利なサービスを一般公開するのに優れた方法ですが、それには代償が伴います。ウェブアプリケーションに脆弱性があると、攻撃者に重要なシステムへのアクセスを許し、顧客やビジネスを危険にさらす恐れがあります。
Indeed セキュリティチームは、この問題に対処するため、Another Vulnerability Auditor (AVA) を開発しました。AVA を利用してアプリケーションを自動スキャンすることで、本番環境および QA のシステムの潜在的な脆弱性を継続的にモニターできます。また、AVA はオープンソースツールとして公開されているので、ユーザーが自身のアプリケーションをモニターするために使うこともできます。
AVA の仕組み
AVA は HTTP Archive (HAR) 形式で定義された一連のアプリケーションエンドポイントをスキャンします。HAR ファイルは、HTTP リクエストの URL、ヘッダー、Cookie、POST データをカタログ化します。AVA はこの情報を使ってエンドポイントをモデル化し、それをオーディッターとチェックを組み合わせてスキャンします。
オーディッター
オーディッターは AVA が監査する HTTP 要素を決定します。URL、ヘッダー、Cookie、POST データなどがあります。
タイプ | 監査対象 |
---|---|
Cookie | Cookie リクエストヘッダー内の個々の Cookie |
ヘッダー | 大部分のリクエストヘッダー |
JSON | リクエスト本文内の JSON データ |
マルチパート | リクエスト本文内のマルチパートフォーム |
パラメーター | URL 照会文字列およびリクエスト本文内のパラメーター |
レスポンス | レスポンスのアスペクト (パッシブ監査) |
テキスト | リクエスト本文内のプレーンテキストデータ |
URL | リクエスト URL |
チェック
チェックは、AVA がチェックするセキュリティの脆弱性のタイプを決定します。対象となるのは、クロスサイトスクリプティング、オープンリダイレクト、SQL インジェクション、シェルインジェクションなどです。
タイプ | チェック対象 |
---|---|
コードインジェクション | Python の pickle ステートメントや eval ステートメント内のコードインジェクション |
ヘッダーインジェクション | レスポンス内のヘッダーインジェクション |
オープンリダイレクト | 任意の URL へのオープンリダイレクト |
パストラバーサル | ローカルファイルシステムにおけるパストラバーサル |
シェルインジェクション | Bash ステートメント内のシェルインジェクション |
SQL インジェクション | データベース照会内の SQL インジェクション |
クロスサイトスクリプティング | レスポンス内の HTML インジェクションと JavaScript インジェクション |
XML 外部エンティティ | XML ドキュメント内の XML 外部エンティティ |
個人を特定できる情報 (PII) | メールアドレス、クレジットカード、社会保障番号 |
使用方法
AVA は自動化されたシステム内での使用を想定しています。Indeed では、AVA を Docker Swarm と Jenkins で自動化しています。しかし、AVA は Python をインストールできる環境であれば、どこでもご利用いただけます。
Docker Swarm で使用する場合
Indeed のセキュリティチームは Docker Swarm を利用して AVA を自動化し、一般公開されているアプリケーションを毎日スキャンしています。そうすることで、Indeed では、発生した脆弱性を直ちに特定できます。パイプラインには次の 3 つのコンポーネントがあります。
- エンリッチャー: WES などのソースから得たデータを、エンドポイント定義に組み込みます。
- スケジューラー: スケジュールと構成を保守します。
- 脆弱性マネジャー: レポートを保管し脆弱性情報を表示します。
プロセスは次のとおりです。
- スケジューラーがエンリッチャーにコンタクトして現在のアプリに関するエンドポイント定義をリクエストします。
- エンリッチャーがこれらの定義を HAR 形式で返します。
- スケジューラーがこの HAR データと攻勢設定を AVA にプッシュします。
- AVA がアプリケーションに対して構成されたスキャンを実行し、レポートを生成します。
- AVA はレポートを保管のため脆弱性マネジャーに送ります。
Jenkins で使用する場合
Indeed では、QA 環境のシステムを検査するために、Jenkins でも AVA を使っています。そうすることで、Indeed では、本番環境に到達する前に脆弱性を特定できます。パイプラインには機能テストと AVA という 2 つのコンポーネントがあります。機能テストは、Selenium ベースのテストケースのコレクションです。これを使って、QA にあるリリース候補を検証します。
プロセスは次のとおりです。
- アプリケーションに対して機能テストを実行します。
- プロキシーがテストからトラフィックを収集し、HAR ファイルとしてエクスポートします。
- AVA がエクスポートされた HAR ファイルを使ってアプリケーションをスキャンします。
- スキャン結果を文書化したレポートが AVA から提供されます。
AVA の入手方法
AVA はオープンソースであり、 Git から入手できます。ダウンロードしてお試しください。サポートが必要な場合は、GitHub または Twitter からご連絡ください。問題点は GitHub レポジトリーで公開することも、Twitter から Indeed にお問い合わせいただくこともできます。