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 (v14.14 以降) のいずれかをダウンロードして、マシンにインストールしてください。サービスが FIPS に準拠している場合は、FIPS 準拠の Node.js サーバーを使用する必要があります。
  2. TrafficRecorder.Windows.zip をマシン上のフォルダーに unzip します。
  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 が使用されます。
  • トラフィック・レコーダーを停止する必要はなく、永続的に実行したままにすることができます。

Windows サービスとして開始

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

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

node service.js --install

node service.js --start

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

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

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

Windows サービスの停止

「Service」フォルダーにある service.js 実行可能ファイルを使用してトラフィック・レコーダーの Windows サービスを停止するには、次のコマンドを実行します。

node service.js --uninstall

systemD を使用して Linux サービスとして開始

  1. systemD ディレクトリーの下に新規ファイルを作成します (通常は /etc/systemd/system)。例えば、sudo vim /etc/systemd/system/TrafficRecorder.service です。

    File content:

    [Unit]

    Description=Appscan TrafficRecorder

    After=multi-user.target

    [Service]

    ExecStart=[ノードへのパス] [app.js へのパス]

    Restart=always

    RestartSec=10StandardOutput=syslog

    StandardError=syslog

    SyslogIdentifier=TrafficRecorder

    [Install]

    WantedBy=multi-user.target

    ExecStart の例: ExecStart= node /home/admin/Documents/TrafficRecorder.Linux.1.2.0/app.js

  2. app.js と内部 Java ファイルを確認します。/java/bin/java には「実行可能ファイルとして実行」許可があります。
  3. 次のコマンドを使用して、systemD ファイルを再ロードします。 sudo systemctl daemon-reload
  4. 次のコマンドを使用して、サービスを開始します。 sudo systemctl start TrafficRecorder.service
  5. 状況を確認するには、次のコマンドを使用します。 sudo systemctl status TrafficRecorder.service
    注: 状況は「アクティブ: アクティブ (実行中)」と表示されます。
  6. 次のコマンドを使用して、サービスを有効にします。 sudo systemctl enable TrafficRecorder.service

Linux サービスの停止

  1. 次のコマンドを使用して、サービスを停止します。 sudo systemctl stop TrafficRecorder.service
  2. 次のコマンドを使用して、サービスを使用不可にします。 sudo systemctl disable TrafficRecorder.service

トラフィック・レコーダーの使用

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

  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://<domain>:9443/ase/api/pages/apidocs.html. 詳しくは、「トラフィック・レコーダー API コマンド」セクションを参照してください。

トラフィック・レコーダー API コマンド

トラフィック・レコーダーを開始したら、トラフィック・レコーダー・インスタンスを開始して、アプリケーションにトラフィックを送信することができます。

資料

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

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

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

server = トラフィック・レコーダーがインストールされているマシンの IP アドレス (デフォルトは localhost)

port = トラフィック・レコーダーが listen するポート

「StartProxy」

指定されたポートで listen するトラフィック・レコーダー・インスタンスを開始します。
  • 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