AVA でウェブアプリケーションを監査する

ウェブアプリケーションをホスティングすることは、便利なサービスを一般公開するのに優れた方法ですが、それには代償が伴います。ウェブアプリケーションに脆弱性があると、攻撃者に重要なシステムへのアクセスを許し、顧客やビジネスを危険にさらす恐れがあります。

AVA exposes vulnerabilities like a magnifying glass finding flaws

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 などのソースから得たデータを、エンドポイント定義に組み込みます。
  • スケジューラー: スケジュールと構成を保守します。
  • 脆弱性マネジャー: レポートを保管し脆弱性情報を表示します。

プロセスは次のとおりです。

  1. スケジューラーがエンリッチャーにコンタクトして現在のアプリに関するエンドポイント定義をリクエストします。
  2. エンリッチャーがこれらの定義を HAR 形式で返します。
  3. スケジューラーがこの HAR データと攻勢設定を AVA にプッシュします。
  4. AVA がアプリケーションに対して構成されたスキャンを実行し、レポートを生成します。
  5. AVA はレポートを保管のため脆弱性マネジャーに送ります。

Jenkins で使用する場合

Indeed では、QA 環境のシステムを検査するために、Jenkins でも AVA を使っています。そうすることで、Indeed では、本番環境に到達する前に脆弱性を特定できます。パイプラインには機能テストと AVA という 2 つのコンポーネントがあります。機能テストは、Selenium ベースのテストケースのコレクションです。これを使って、QA にあるリリース候補を検証します。

プロセスは次のとおりです。

  1. アプリケーションに対して機能テストを実行します。
  2. プロキシーがテストからトラフィックを収集し、HAR ファイルとしてエクスポートします。
  3. AVA がエクスポートされた HAR ファイルを使ってアプリケーションをスキャンします。
  4. スキャン結果を文書化したレポートが AVA から提供されます。

AVA の入手方法

AVA はオープンソースであり、 Git から入手できます。ダウンロードしてお試しください。サポートが必要な場合は、GitHub または Twitter からご連絡ください。問題点は GitHub レポジトリーで公開することも、Twitter から Indeed にお問い合わせいただくこともできます。