AppScan® Enterprise での AppScan Traffic Recorder を使用したテスト自動化

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

概要

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

この図は、AppScan Enterprise を使用した自動スキャン・フロー®を示しています。


を使用した自動スキャン・フローAppScan Enterprise

通常ワークフロー

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

HCL AppScan Traffic Recorder のインストール

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

OpenSSL FIPS プロバイダーを使用する場合は、OpenSSL FIPS 構成を更新してください。

  1. Traffic Recorder に付属の nodejs.cnf ファイルを見つけます。
  2. OpenSSL FIPS プロバイダーのインストール時に使用した openssl fipsinstall コマンドの出力を指すように、インクルード・パスを更新します。
  3. Traffic Recorder をプロセスとして実行するには、nodefips <filename> を使用します。これにより、Node.js の実行時に nodejs.cnf 構成が自動的に適用されます。

    例: nodefips app.js

Traffic Recorder をインストールするには、以下の手順を実行します。

  1. Traffic Recorder ファイルをダウンロードします。https:///ase/downloads/TrafficRecorder.zip からダウンロードするか、C:\Program Files (x86)\HCL\AppScan Enterprise\WebApp\downloads\TrafficRecorder.zip でローカルにアクセスできます。
  2. Windows の場合は、TrafficRecorder.zip をマシン上のフォルダーに解凍します。

    Linux の場合は、TrafficRecorder.Linux.zip を解凍します。

  3. トラフィック・レコーダーを実行するデフォルト・ポートを上書きするには、Settings.json でポート設定を構成します。
  4. Linux の場合は、app.js と内部 Java ファイル (/java/bin/java) に実行可能権限があることを確認してください。

HCL AppScan Traffic Recorder の構成

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

FIPS 準拠モード

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

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

  1. Traffic Recorder を実行するデフォルト・ポートを Settings.json で構成します。
  2. トラフィック・レコーダーへのセキュアな (SSL) 接続を構成します。これを行うには、独自の証明書 (方法 A) または自己署名証明書 (方法 B) を使用します。

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

    PEM:

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

    PKCS12:

    ファイル・パスとパスワードの両方で、必要に応じて文字をエスケープする必要があります。例えば、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 コマンドを使用して鍵ファイルと pem ファイルを作成します: openssl req -new -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.pem
    2. それらのファイル・パスを Settings.json の PEM セクションに挿入します。
      Note:
      「\」文字にはエスケープが必要です。例: "C:\\Users\\admin\\private.key"。

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

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

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

ルート証明書

テスト対象のアプリケーションが SSL (HTTPS) を使用している場合、HCL AppScan Traffic Recorder はトラフィックを記録するために中間者として機能する必要があります。 To do this it must have a root certificate that it can use to sign its communication with the app.

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

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

      Note:
      コマンドの完全な使用法を確認するには、.\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 するポートです。

Note:
  • トラフィック・レコーダーの開始時にポートを定義しないと、Settings.json ファイルに設定されたポートが使用されます。このファイルに何も定義されていない場合は、ポート 8383 が使用されます。
  • トラフィック・レコーダーを停止する必要はなく、永続的に実行したままにすることができます。

Windows サービスとして開始

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

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

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
    Note:
    ステータスは「Active: active (running)」と表示されるはずです
  5. 次のコマンドを使用してサービスを有効にします: sudo systemctl enable TrafficRecorder.service

Linux サービスの停止

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

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

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

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

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

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

資料

Swagger で完全な REST API ドキュメントを表示するには、ブラウザーに次のように入力します: https://:

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

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
Note:
ポートを 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 を使用してアップロードされたファイル) をダウンロードします。
Note:
ファイルがダウンロードされたら、.dast.config の暗号化されたファイルと暗号化されていないファイルの両方がトラフィック・レコーダーから削除されます。
  • URL: https://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
  • リクエスト・タイプ: GET

「Traffic」

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

「Certificate」

自己署名ルート認証局をダウンロードします。これは、トラフィック・レコーダーで PEM ファイルとして使用されます。
  • URL: https://[server]:[port]/automation/Certificate
  • 要求タイプ: GET