AppScan プロキシー・サーバーを使用した AppScan® Enterprise でのテスト自動化

AppScan プロキシー・サーバーでは、トラフィックを記録して、AppScan Enterprise (ASE) ジョブで探査データとして使用できます。AppScan プロキシー・サーバーは、記録プロキシーを管理するためのシステムです。要求に応じてプロキシー・インスタンスを作成して、後で DAST スキャンに使用されるトラフィックを記録できます。この文書では、プロキシー・サーバーを設定して使用する方法について説明します。

概説

DevOps の世界では、CI/CD プロセスにセキュリティー・スキャンを組み込む機能の重要性が増しています。自動化フレームワーク (Selenium など) を使用する場合、既に作成済みのスクリプトを利用して、個別の要件に合ったスキャンを作成できます。
  • AppScan プロキシー・サーバーを使用すると、記録プロキシーを自動的に開始できます。自動化フレームワークから Web アプリへの要求が記録されるのは、この記録プロキシーを経由して送信されるためです。トラフィックは、HAR 形式で .dast.config ファイルに保存されます。このファイルは、AppScan Enterprise (ASE) がスキャンの探査データとして使用できるように後でアップロードできます。
  • また、プロキシー・サーバーを経由してトラフィックを手動で記録して、.dast.config ファイルを作成することもできます。
  • プロキシー・サーバーを使用せずに、独自の HAR ファイルを ASE に直接アップロードすることもできます。

この図は、automated scan flow with AppScan® Enterprise を示します。


AppScan Enterprise で自動化されたスキャン・フロー

通常ワークフロー

  1. プロキシー・サーバーのインストール
  2. プロキシー・サーバーの構成
  3. プロキシー・サーバーの開始
  4. プロキシー・サーバーの使用
注: このワークフローのデモ・スクリプト ProxyServerDemoScript.py は、AppScan インストール・フォルダーにあります。

AppScan プロキシー・サーバーのインストール

  1. 現在のバージョンの Node.js (v12 以降) のいずれかをダウンロードして、マシンにインストールしてください。サービスが FIPS に準拠している場合は、FIPS 準拠の Node.js サーバーを使用する必要があります。
  2. マシン上の任意のフォルダーに DastProxyServerStandalone.zip を解凍します。
  3. プロキシー・サーバーを実行するデフォルト・ポートを上書きするには、以下のようにします。Settings.json でポート設定を構成します。

AppScan プロキシー・サーバーの構成

構成を変更した後、サーバーを再開する必要があります。
注: Settings.json は JSON ファイルであるため、" (二重引用符) や \ (円記号) などの特定の文字はエスケープする必要があります。そのため、" は \" になり、 \ は \\ になります。このファイルの internalConfiguration 設定は変更しないでください。

FIPS 準拠モード

  1. プロキシー・サーバーのルート・フォルダーで Settings.json ファイルを見つけて、テキスト・エディターで開きます。
  2. 設定 requireFips を見つけ、その値を false から true に変更します。
  3. ファイルを保存します。

プロキシー・サーバー接続

  1. プロキシー・サーバーを実行するデフォルト・ポートを設定するには、以下のようにします。Settings.json でポート設定を構成します。
  2. プロキシー・サーバーへのセキュアな (SSL) 接続の場合:Settings.json で独自の PEM 証明書または PKCS12 証明書を構成します。
    • PEM 証明書には 2 つのファイル (絶対パス) が必要であり、PKCS12 証明書には 1 つのファイル (絶対パス) とパスワードが必要です。
    • 必要に応じて、ファイル・パスとパスワードの両方で文字をエスケープすることを忘れないでください。例えば、abc!”123 というパスワードであれば abc!\”123 とします (" はエスケープされます)。

      openssl を使用して PEM 証明書を作成する例:

      openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

      openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

      openssl を使用して PEM 証明書を PKCS12 証明書に変換する例:

      openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in server.crt

      Java のキー生成ツールを使用して JKS 証明書を PKCS12 証明書に変換する例:

      keytool -importkeystore -srckeystore certificate.jks -srcstoretype JKS -destkeystore certificate.p12 -deststoretype PKCS12

ルート証明書

テスト対象のアプリケーションが SSL (HTTPS) を使用している場合、トラフィックを記録するためには AppScan 記録プロキシーが中間者攻撃として動作する必要があります。このためには、AppScan 記録プロキシーに、アプリケーションとの通信に署名するために使用できるルート証明書が必要です。

デフォルトでは、AppScan プロキシー・サーバーは、ユーザーの介入なく固有のルート証明書を生成します。ただし、アプリケーションを参照中に SSL 警告が表示されます。無視することも、次のいずれかを実行することもできます。
  1. AppScan プロキシー・サーバーによって生成された証明書を 1 つ以上のマシンにインストールします。
    1. REST API を使用して自己署名ルート認証局をダウンロードします。これは、AppScan プロキシー・サーバーで PEM ファイルとして使用します。
    2. 探査に使用するブラウザー、または必要な場所 (トラフィックの送信元に応じて決まります) に証明書をインストールします。
  2. 独自のルート証明書を AppScan プロキシー・サーバーにインポートします。サポートされる証明書形式は、PKCS12 (.P12、.PFX)、JKS です。
    1. コマンド行ウィンドウを開き、プロキシー・サーバー・マシンのインストール・フォルダーに移動します。
    2. 以下のコマンドを実行します。

      .\Java\jre\bin\java -jar DastProxy.jar -irc [path to certificate file] -ircp [password]

      注: コマンドの詳しい使用法を表示するには、.\Java\jre\bin\java -jar DastProxy.jar コマンドを実行します。

      重要: 証明書がプロキシー・サーバーに保存されるため、専用のテスト証明書を使用することをお勧めします。

  3. StartProxy コマンドで (ルート証明書ではなく) 独自の固定サーバー証明書を指定します。

プロキシー非アクティブ・タイムアウトの設定

記録プロキシー・インスタンスは、使用後に close コマンドで閉じないと、ポート上で開いたままとなって listen を続行します。記録プロキシー・インスタンスは、事前定義した時間だけアイドルになると、自動的に閉じられます。

記録プロキシー・インスタンスのデフォルトの非アクティブ・タイムアウトは、60 分です。この値を変更するには、インストール・フォルダーに保存されている Settings.json ファイルで inactivityTimeoutInMinutes の値を変更します。

トラフィックの暗号化

デフォルトでは、トラフィック (.dast.config) ファイルは暗号化されません。すべてのトラフィックを暗号化するようにサーバーを構成するには、インストール・フォルダーにある Settings.json ファイルで「encryptDastConfig」値を「true」に変更します。

チェーニングされたプロキシー

複数のチェーニングされたプロキシー、またはプロキシーの例外を定義する必要がある場合、インストール・フォルダーにあるチェーニングされたプロキシーのルール・ファイル (proxy.chain) を使用します。このファイルには、使用手順が含まれています。

プロキシー・サーバーの開始

単にプロキシー・サーバーを開始することも、サービスとして実行する (以下) こともできます。両方を並行して行うことはできない点に注意してください。

プロキシー・サーバーを開始するには、以下のようにします。
  • 以下のコマンドを実行します。 node app.js [port]

    ここで、*port は REST API 要求に対してプロキシー・サーバーが listen するポートです。

注:
  • プロキシー・サーバーの開始時にポートを定義しないと、Settings.json ファイルに設定されたポートが使用されます。このファイルに何も定義されていない場合は、ポート 8383 が使用されます。
  • プロキシー・サーバーを停止する必要はなく、永続的に実行したままにすることができます。

サービスとして開始

Service フォルダーにある service.js 実行可能ファイルを使用して、プロキシー・サーバーをサービスとして実行できます。サービスはローカル・システム特権を使用します。
注: すべてのサービス・コマンドを管理者特権で実行する必要があります (管理者として実行)。

サービスを開始するには、以下のコマンドを実行します。

node service.js --install

node service.js --start

追加のサービス・コマンド

このリストは、node service.js --help コマンドを実行して出力できます。

サービス・コマンド 説明
--start サービスの開始
--stop サービスの停止
--install サービスのインストール
--uninstall サービスの停止とアンインストール
--h | --help 使用状況情報の出力

プロキシー・サーバーの使用

プロキシー・サーバーを開始したら、新しい記録プロキシー・インスタンスを開始して、アプリケーションのトラフィックを記録できます。

  1. プロキシー・インスタンスを開始するには、REST API 要求を使用します。StartProxy
  2. 定義された記録プロキシー・ポートを介して、テスト対象のアプリケーションにトラフィックを送信します。
  3. 完了したら、以下の REST API 要求を送信します:StopProxy
  4. REST API 要求を送信して、記録されたトラフィックが含まれている .dast.config ファイルをダウンロードします。トラフィック。ファイルは、1 つ以上の .har (HTTP Archive) ファイルを含む ZIP ファイルです。このファイルをダウンロードすると、AppScan プロキシー・サーバーからデータが削除されます。
  5. ASE REST API を使用し、.dast.config ファイルを使用して既存のジョブの探査データを更新できます。以下の資料を参照してください。https://%3Case_server%3E:9443/ase/api/pages/apidocs.html。詳しくは、「プロキシー・サーバー API コマンド」セクションを参照してください。

プロキシー・サーバー API コマンド

プロキシー・サーバーを開始したら、記録プロキシー・インスタンスを開始して、アプリケーションにトラフィックを送信できます。

資料

Swagger で REST API 資料全体を参照するには、ブラウザーに以下のように入力します。http(s)://<server>:<port>

すべてのコマンドが以下のようなエンドポイントを指します。

http(s)://[server]:[port]/automation/

server = プロキシー・サーバーがインストールされているマシンの IP アドレス (デフォルトは localhost)。

port = プロキシー・サーバーがリスンするポート。

「StartProxy」

指定されたポートでリスンするプロキシーを開始します。
  • URL:http://[server]:[port]/automation/StartProxy/<recordingPort>
  • 要求タイプ: POST または GET (chainedProxy、proxyCertificate、および clientCertificate を使用している場合、要求は POST、それ以外の場合は GET)

「StopProxy」

指定されたポートで listen している記録プロキシーを停止します。
  • URL:http://[server]:[port]/automation/StopProxy/<recordingPort>
  • 要求タイプ: GET
注: ポートを 0 に設定しても、開かれているいずれのプロキシーも停止しません。これを行うには、StopAllProxies を使用します。

"StopAllProxies"

実行中のすべての記録プロキシーを停止します。このコマンドは、他のユーザーが開始したものを含め、すべてのポート上のすべての記録プロキシーを停止します。

  • URL:http://[server]:[port]/automation/StopAllProxies
  • 要求タイプ: POST

"EncryptDastConfig"

DAST.CONFIG ファイルをアップロードして暗号化します。
  • URL:http://[server]:[port]/automation/EncryptDastConfig
  • 要求タイプ: POST

"DownloadEncryptedDast"

暗号化された .dast.config ファイル (EncryptDastConfig API を使用してアップロードされたファイル) をダウンロードします。
注: ファイルがダウンロードされたら、.dast.config の暗号化されたファイルと暗号化されていないファイルの両方がプロキシー・サーバーから削除されます。
  • URL:http://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
  • 要求タイプ: GET

「Traffic」

ポートで特定された記録プロキシーから、記録されたデータを .dast.config ファイルとしてダウンロードします。
  • URL:http://[server]:[port]/automation/Traffic/<recordingPort>
  • 要求タイプ: GET

「Certificate」

自己署名ルート認証局をダウンロードします。これは、記録プロキシーで PEM ファイルとして使用されます。
  • URL:http://[server]:[port]/automation/Certificate
  • 要求タイプ: GET

AppScan プロキシー・サーバーの更新

AppScan プロキシー・サーバーをドロップして新しいバージョンに移行する前に、変更した構成ファイルがあれば新しいフォルダーに必ずコピーしてください。

プロキシー・サーバーをサービスとしてインストールした場合は、更新する前にサービスをアンインストール (「追加のサービス・コマンド」を参照) してから再インストールしてください。