脆弱性診断のシナリオ作成をMagicPodで自動化した話


こんにちは。MagicPod カスタマーサクセスのIshiiです。

MagicPodは「E2Eテスト自動化ツールです」とお伝えしていますが、実はE2Eテストだけでなく別の用途にも使うことができます!本記事ではそんな意外な活用法の一例として、MagicPodを用いた脆弱性診断のシナリオ作成の自動化をご紹介します。


目次

脆弱性診断とは?

脆弱性診断とは、アプリにSQLインジェクションやXSS(クロスサイトスクリプティング)といった脆弱性がないかを診断するセキュリティテストのことです。攻撃者の視点に立って、脆弱性を狙った攻撃が成功する可能性がないかを検証し、問題点を洗い出します。

脆弱性診断は手動で行うサービスだけでなく、自動で行うことができるツールがあります。当社ではクラウド型Web脆弱性診断ツールであるVAddyを使用し、MagicPodのWebアプリの脆弱性診断を毎日実行しています。

VAddyで脆弱性診断を行う流れはシナリオ作成、検査実施、結果確認の3ステップです。E2Eテスト自動化とほぼ同じですね!

  • 検査を行うためのテストシナリオ作成(クロール)
  • 検査を実施(スキャン)
  • 検査結果を確認

検査を行うためのテストシナリオ作成(クロール)

検査を行うためのテストシナリオを作成します。MagicPodに例えると、テストケース編集画面でシナリオを作成することに相当します。
一般的な方法としては、まずChrome/Edgeのブラウザ拡張機能(VAddy Recorder)をインストールします。
その後、VAddy Recorderでテスト対象のWebサイトを実際に手動で操作し、その操作を記録します。
他にもプロキシを使う方法もあり、MagicPodではこのプロキシを使う方法にてテストシナリオを作成しています。

検査を実施(スキャン)

作成したシナリオに基づき、脆弱性を狙った攻撃が成功する可能性がないかをVAddyが検査します。
MagicPodに例えると、作成したテストケースを一括実行することに相当します。
MagicPodではではCIツール連携を行い、夜間に毎日自動で流す仕組みを構築しています。

〜裏話〜
スキャン時には脆弱性チェックのためにVAddyから様々なリクエストがサーバーに送られます。 初めてスキャンを実行した際、サーバーエラー通知が鳴り止まず、エンジニアチームに「ごめんなさい、これは脆弱性診断なので無視してください〜〜><」と謝った思い出があります。。 ちゃんと怪しいリクエストが通知される仕組みがあると認識できたことは思わぬ収穫の一つでした^^

検査結果を確認

検査結果はWeb APIで取得することができるため、普段は毎回サイトに結果を見にいく必要はありません。
検査結果はこのようなPDF形式でもダウンロードできるため、セキュリティ監査の際にも安心です。


私はVAddy導入時にシナリオ作成を担当したのですが、想像以上に脆弱性診断が簡単にできて感動した思い出があります。SQLインジェクションなどの脆弱性に興味を持つきっかけにもなりました。私のような全くセキュリティ専門知識がない方にもおすすめできるサービスです✨

脆弱性診断のペイン、シナリオ作成

「シナリオは一度行ったらおしまい、後は作成したシナリオに基づいて毎日検査するだけ!」

…とは残念ながらなりません。
アプリに変更があった場合、再度クロールを行い、テストシナリオを再作成する必要があります。作成しておしまい、ではなくメンテナンスが必須です。

当社のようにリリース頻度が高いWebアプリを提供している場合、新しいページの追加やUIの変更により、検査対象が頻繁に変わります。
VAddyでは現状シナリオの一部を変えたい場合、再度1からシナリオ作成を行う必要があります。(テスト自動化でいうところのキャプチャーリプレイ形式です)

メンテナンスを怠ると、必要な診断がなされず脆弱性が検出できなくなってしまいます。
E2Eテスト自動化におけるペインと「完全に一致」​ですね...

シナリオ作成を自動化してみた

そんなペイン解消のため、MagicPodではMagicPodを用いて脆弱性診断用シナリオ作成を自動化することにしました。ここからはどのように自動化をしているのか解説します。

事前準備

magic_pod_config.jsonを編集する

現状クラウド環境ではプロキシを使用する方法がサポートできていないため、ローカル環境でシナリオ作成を行う必要があります。(クラウド環境での実施を希望する方は、こちらに投票をお願いします!)
magic_pod_config.jsonにてVAddy​の「クロール作成手順」にあるIPとポート番号をChromeのプロキシサーバーオプションとしてセットします。


"capabilities": {
    "browserName": "chrome",
    "goog:chromeOptions": {
      "args": [
        "--proxy-server=http://xx.xx.xx.xx:xxxxx",
        "--ignore-ssl-errors=yes",
        "--ignore-certificate-errors"
      ]
    }

⬆️ magic_pod_config.jsonの一部

Chromeでシナリオ作成を行う

MagicPodにてVAddyで記録したいシナリオをテストケースとして作成します。
ステップの全体像はこのようなイメージです。

  1. 「URL指定で遷移」コマンドでシナリオ開始用のURLに遷移
  2. 記録したいシナリオのステップ作成
  3. 「URL指定で遷移」コマンドでシナリオ終了用のURLに遷移

このようにMagicPodのテストケースとしてシナリオを作成することで、シナリオの変更、追加が簡単にできるようになります!
さらに、MagicPodではAIによる自動修復機能があるため、メンテナンスが最小限で済みます。例えばデザイン変更等で操作したいUI要素が変わった場合にAIが自動的に変更に追随してシナリオが修正されるため、手動で修正する必要がありません◎

VAddyのWeb APIを通じてクロールIDを取得

MagicPodではシナリオ作成から検査実行までを完全自動化するために、VAddyのWeb APIを活用しています。


curl "https://api.vaddy.net/v2/crawl?user=$&auth_key=$&project_id=$&search_label=$"

⬆️ クロールIDを取得する

クロールIDを簡単・確実に取得するために「クロール開始URL」と「クロール終了URL」にはラベルをつけることをおすすめします。magic_pod_config.jsonには環境変数を指定することもできるので、テスト用のシェルスクリプトの中で生成したVADDY_LABELをMagicPodのテストでは${label}として参照できます。


 "testCondition": {
    "environment": "local",
    "browser": "chrome",
    "shared_variables": [
      ", "secret": false}
    ]
  }

⬆️ magic_pod_config.jsonの一部


# クロール開始URL例
https://example.com/vaddy-xxx.html?action=begin&project_id=xxx&label=$
# クロール終了URL例
https://example.com/vaddy-xxx.html?action=commit&project_id=xxx&label=$

⬆️ MagicPodの「URL指定で遷移」コマンドで指定するURL

いざ検査実行

こちらも自動化のため、VAddyのWeb APIを通じて検査を実行します。


curl https://api.vaddy.net/v2/scan -X POST -d "action=start&user=$&auth_key=$&project_id=$&crawl_id=$"

⬆️ クロールIDを指定して検査を実行する


curl "https://api.vaddy.net/v2/scan/result?user=$&auth_key=$&scan_id=$"

⬆️ 検査結果を取得する

CIツール連携で毎日実行する

MagicPodでは上記の「シナリオ作成→直前に作成したシナリオに基づくスキャン」を完全自動化するために、CIツールを用いています。具体的には以下の一連の流れをCIで自動化しています。

  • VADDY_LABELの生成などの下準備
  • CircleCIが立ち上げたDocker Container上のChromeブラウザでシナリオ作成
  • VAddyのWeb API経由で検査実行を指示
  • 検査結果の通知



このようにVAddyとMagicPodを組み合わせることで、メンテナンスは最小限でしっかりセキュリティを担保できる体制を作ることができました🎉 ちなみにこの仕組みは2024年に構築しており、1年以上継続して回ってます!

最後に

MagicPodはノーコードでE2Eテスト自動化ができるだけでなく、脆弱性診断のシナリオ作成といったことも自動化出来るツールです。他にも大量のデータ作成やユーザー作成といったRPAツール的な使い方や、本番環境の監視などにもご活用いただいている事例がございます。他の事例についても今後ご紹介していきます!

このような意外な活用法もできる限りサポートしていきたいと思っていますので、ぜひお気軽にMagicPodサポートまでお問い合わせくださいね。今回のVAddyの脆弱性診断を自動化する上で作成したシェルスクリプトなどもご提供可能です!

もしMagicPodが気になった方は、ぜひお気軽にお問い合わせください!
https://magicpod.com/consulting/


Mami Ishii

Mami Ishii

MagicPodカスタマーサクセスエンジニア。元々は法務系の仕事をしていたが、エクセルVBAを用いた事務作業の自動化にハマりWebエンジニアに転向。今の推し生成AIモデルはClaudeで、推しMagicPodコマンドはWeb APIコール。