AppScan トラフィック・レコーダーを使用した AppScan® Enterprise でのテスト自動化

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

概要

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

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


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

通常ワークフロー

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

AppScan トラフィック・レコーダーのインストール

前提条件:現在のバージョンの Node.js (v16 以降の LTS バージョン) をマシンにインストールする必要があります。サービスが FIPS に準拠している場合、FIPS 準拠の Node.js サーバーを使用する必要があります。

  1. Windows: TrafficRecorder.Windows.zip をマシン上のフォルダーに unzip します。

    Linux: TrafficRecorder.Linux.zip を解凍します。

  2. トラフィック・レコーダーを実行するデフォルト・ポートを上書きするには、以下のようにします。
  3. app.js と内部 Java ファイルを確認します。

AppScan トラフィック・レコーダーの構成

構成を変更した後、サーバーを再開する必要があります。
注: アップグレード時、Settings.json で PKCS12 証明書を既に設定している場合、再度設定する必要があります。

FIPS 準拠モード

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

トラフィック・レコーダー接続

  1. Tracker Recorder を実行するように、 Settings.jsonのデフォルト・ポートを構成します。
  2. Tracker Recorder への安全な (SSL) 接続を設定します。これを行うには、ユーザー独自の証明書 (方法 A) または自己署名証明書 (方法 B) を使用します。

    方法 A: Settings.json で独自の PEM 証明書または PKCS12 証明書を構成します。

    PEM:

    PEM 証明書には、2 つのファイル・パス (private.key とcertificate.pem へのパス) が必要です。
    • Settings.jsonの PEM セクションへのファイル・パスを挿入します。
      注: 「\」文字には、例えば「C:\Users\admin\private.key」などのエスケープが必要です。

    PKCS12: メソッドの引数を Null にすることはできません。

    ファイル・パスとパスワードの両方で、必要に応じて文字をエスケープする必要があります。例えば、abc!”123 のパスワードは、abc!\”123 になります (" 記号はエスケープされます)。
    1. コマンド・ラインで、次のように実行します。

      .\Java\bin\java.exe -jar .\DastProxy.jar -sc "C:\Path\to\certificate.pfx"

    2. プロンプトが出されたら、証明書のパスワードを入力し、Enter キーを押します。

      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

    方法 B: 証明書がない場合は、自己署名証明書を作成して使用する必要があります。この方法は安全性が低い点に注意してください。

    オプション A: OpenSSL の使用

    OpenSSL は含まれておらず、自己署名証明書を作成する目的以外では必要ありません。

    1. OpenSSL コマンドopenssl req -new -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.pemを使用して、キー・ファイルと PEM ファイルを作成します。
    2. Settings.jsonの PEM セクションへのファイル・パスを挿入します。
      注: 「\」文字には、例えば「C:\Users\admin\private.key」などのエスケープが必要です。

    オプション B: Java keytool の使用

    NodeJS 17 以上の場合、キーツールの制限により、 「--openssl-ravel-provider」ノード・フラグを使用する必要があります。次を参照してください。https://nodejs.org/api/cli.html#--openssl-legacy-provider

    1. コマンド行で、トラフィック・レコーダーのルート・フォルダーを開きます。
    2. コマンド.\Java\bin\keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore-new.p12 -storetype PKCS12 -validity 365 -keysize 2048 を使用して、 PKCS12 証明書ファイルを作成します。
    3. 証明書の詳細を入力し、パスワードで保護してください。このパスワードは、次のステップで必要になります。
    4. コマンド.\Java\bin\java.exe -jar .\DastProxy.jar -sc "keystore-new.p12"を使用して、生成された証明書を HCL AppScan Traffic Recorder で使用します。

ルート証明書

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

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

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

      注: コマンドの詳しい使用法を表示するには、.\Java\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 ファイルに設定されたポートが使用されます。
  • トラフィック・レコーダーを停止する必要はなく、永続的に実行したままにすることができます。

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です。

    ファイル・コンテンツ:

    [Unit]

    Description=Appscan TrafficRecorder

    After=multi-user.target

    [Service]

    ExecStart=[path to node here] [path to app.js here]

    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. 次のコマンドを使用して、systemd ファイルを再ロードします: sudo systemctl daemon-reload
  3. 次のコマンドを使用して、サービスを開始します: sudo systemctl start TrafficRecorder.service
  4. 状況を確認するには、次のコマンドを使用します: sudo systemctl status TrafficRecorder.service
    注: ステータスには「アクティブ: アクティブ(実行中)」と表示されるはずです。
  5. 次のコマンドを使用して、サービスを有効にします: 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 ファイルをダウンロードします。トラフィック。このファイルをダウンロードすると、そのデータは App スキャン・トラフィック・レコーダーから削除されます。
  5. ASE REST API を使用し、.dast.config ファイルを使用して既存のジョブの探査データを更新できます。以下の資料リンクを参照してください。詳しい情報は、 Traffic Recorder API コマンドセクションを参照してください。

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

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

資料

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

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

https://[server]:[port]/automation/

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

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

「StartProxy」

指定されたポートで listen するトラフィック・レコーダー・インスタンスを開始します。
  • URL: https://[server]:[port]/automation/StartProxy/<recordingPort>
  • 要求タイプ: POST または GET (chainedProxy、proxyCertificate、および clientCertificate を使用している場合、要求は POST、それ以外の場合は GET)

「StopProxy」

指定されたポートで listen しているトラフィック・レコーダー・インスタンスを停止します。
  • URL: https://[server]:[port]/automation/StopProxy/<recordingPort>
  • 要求タイプ: GET
注: ポートを 0 に設定しても、開かれているすべてのトラフィック・レコーダー・インスタンスが停止するわけではありません。これを行うには、StopAllProxies を使用します。

"StopAllProxies"

実行中のすべてのトラフィック・レコーダー・インスタンスを停止します。このコマンドは、他のユーザーが開始したものを含め、すべてのポート上のすべてのトラフィック・レコーダー・インスタンスを停止します。

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

"EncryptDastConfig"

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

"DownloadEncryptedDast"

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

「Traffic」

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

「Certificate」

自己署名ルート認証局をダウンロードします。
  • URL: https://[server]:[port]/automation/Certificate
  • 要求タイプ: GET