AppScan トラフィック・レコーダーを使用した AppScan® Enterprise でのテスト自動化
AppScan トラフィック・レコーダーでは、トラフィックを記録して、AppScan Enterprise (ASE) ジョブで探査データとして使用できます。AppScan トラフィック・レコーダーは、トラフィック・レコーダー・インスタンスを管理するためのシステムです。要求に応じてトラフィック・レコーダー・インスタンスを作成して、後で DAST スキャンに使用されるトラフィックを記録できます。このトピックでは、Traffic Recorder の設定方法と使用方法を説明します。
概要
- AppScan トラフィック・レコーダーを使用して、トラフィック・レコーダー・インスタンスを自動的に開始できます。自動化フレームワークから Web アプリへの要求が記録されるのは、このトラフィック・レコーダーを経由して送信されるためです。トラフィックは、HAR 形式で .dast.config ファイルに保存されます。
- また、トラフィック・レコーダーを経由してトラフィックを手動で記録して、.dast.config ファイルを作成することもできます。
- トラフィック・レコーダーを使用せずに、独自の HAR ファイルを ASE に直接アップロードすることもできます。
この図は、automated scan flow with AppScan® Enterprise を示します。
通常ワークフロー
AppScan トラフィック・レコーダーのインストール
前提条件:現在のバージョンの Node.js (v16 以降の LTS バージョン) をマシンにインストールする必要があります。サービスが FIPS に準拠している場合、FIPS 準拠の Node.js サーバーを使用する必要があります。
- Windows: TrafficRecorder.Windows.zip をマシン上のフォルダーに unzip します。
Linux: TrafficRecorder.Linux.zip を解凍します。
- トラフィック・レコーダーを実行するデフォルト・ポートを上書きするには、以下のようにします。
- app.js と内部 Java ファイルを確認します。
AppScan トラフィック・レコーダーの構成
FIPS 準拠モード
- トラフィック・レコーダーのルート・フォルダーで Settings.json ファイルを見つけて、テキスト・エディターで開きます。
- 設定 requireFips を見つけ、その値を false から true に変更します。
- ファイルを保存します。
トラフィック・レコーダー接続
- Tracker Recorder を実行するように、 Settings.jsonのデフォルト・ポートを構成します。
- 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 になります (" 記号はエスケープされます)。- コマンド・ラインで、次のように実行します。
.\Java\bin\java.exe -jar .\DastProxy.jar -sc "C:\Path\to\certificate.pfx"
- プロンプトが出されたら、証明書のパスワードを入力し、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 は含まれておらず、自己署名証明書を作成する目的以外では必要ありません。
- OpenSSL コマンド
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.pem
を使用して、キー・ファイルと PEM ファイルを作成します。 - 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- コマンド行で、トラフィック・レコーダーのルート・フォルダーを開きます。
- コマンド
.\Java\bin\keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore-new.p12 -storetype PKCS12 -validity 365 -keysize 2048
を使用して、 PKCS12 証明書ファイルを作成します。 - 証明書の詳細を入力し、パスワードで保護してください。このパスワードは、次のステップで必要になります。
- コマンド
.\Java\bin\java.exe -jar .\DastProxy.jar -sc "keystore-new.p12"
を使用して、生成された証明書を HCL AppScan Traffic Recorder で使用します。
- Settings.jsonの PEM セクションへのファイル・パスを挿入します。
ルート証明書
テスト対象のアプリケーションが SSL (HTTPS) を使用している場合、トラフィックを記録するためには AppScan トラフィック・レコーダーが中間者として動作する必要があります。このためには、AppScan 記録プロキシーに、アプリケーションとの通信に署名するために使用できるルート証明書が必要です。
- AppScan トラフィック・レコーダーによって生成された証明書を 1 つ以上のマシンにインストールします。
- REST API を使用して自己署名ルート認証局をダウンロードします。
- 探査に使用するブラウザー、または必要な場所 (トラフィックの送信元に応じて決まります) に証明書をインストールします。
- 独自のルート証明書を AppScan トラフィック・レコーダーにインポートします。サポートされる証明書形式は、PKCS12 (.P12、.PFX)、JKS です。
- コマンド行ウィンドウを開き、トラフィック・レコーダー・マシンのインストール・フォルダーに移動します。
- 以下のコマンドを実行します。
.\Java\bin\java -jar DastProxy.jar -irc [path to certificate file] -ircp [password]
注: コマンドの詳しい使用法を表示するには、.\Java\bin\java -jar DastProxy.jar コマンドを実行します。重要: セキュリティー上の理由から、ファイル・アプリケーションでは添付ファイル配置が使用されます。証明書がトラフィック・レコーダーに保存されるため、専用のテスト証明書を使用することをお勧めします。
- 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 サービスとして開始
サービスを開始するには、以下のコマンドを実行します。
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 サービスとして開始
- 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=syslogStandardError=syslog
SyslogIdentifier=TrafficRecorder[Install]
WantedBy=multi-user.target
ExecStart の例: ExecStart= node /home/admin/Documents/TrafficRecorder.Linux.1.2.0/app.js
- 次のコマンドを使用して、systemd ファイルを再ロードします: sudo systemctl daemon-reload
- 次のコマンドを使用して、サービスを開始します: sudo systemctl start TrafficRecorder.service
- 状況を確認するには、次のコマンドを使用します: sudo systemctl status TrafficRecorder.service注: ステータスには「アクティブ: アクティブ(実行中)」と表示されるはずです。
- 次のコマンドを使用して、サービスを有効にします: sudo systemctl enable TrafficRecorder.service
Linux サービスの停止
- 次のコマンドを使用して、サービスを停止します: sudo systemctl stop TrafficRecorder.service
- 次のコマンドを使用して、サービスを使用不可にします: sudo systemctl disable TrafficRecorder.service
トラフィック・レコーダーの使用
トラフィック・レコーダーを開始したら、新しいトラフィック・レコーダー・インスタンスを開始して、アプリケーションのトラフィックを記録できます。
- トラフィック・レコーダー・インスタンスを開始するには、REST API 要求 StartProxy を使用します
- 定義されたトラフィック・レコーダー・ポートを介して、テスト対象のアプリケーションにトラフィックを送信します。
- 完了したら、REST API 要求 StopProxy を送信します。
- REST API 要求を送信して、記録されたトラフィックが含まれている .dast.config ファイルをダウンロードします。トラフィック。このファイルをダウンロードすると、そのデータは App スキャン・トラフィック・レコーダーから削除されます。
- 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」
- URL: https://[server]:[port]/automation/StartProxy/<recordingPort>
- 要求タイプ: POST または GET (chainedProxy、proxyCertificate、および clientCertificate を使用している場合、要求は POST、それ以外の場合は GET)
「StopProxy」
- URL: https://[server]:[port]/automation/StopProxy/<recordingPort>
- 要求タイプ: GET
"StopAllProxies"
実行中のすべてのトラフィック・レコーダー・インスタンスを停止します。このコマンドは、他のユーザーが開始したものを含め、すべてのポート上のすべてのトラフィック・レコーダー・インスタンスを停止します。
- URL: https://[server]:[port]/automation/StopAllProxies
- 要求タイプ: POST
"EncryptDastConfig"
- URL: https://[server]:[port]/automation/EncryptDastConfig
- 要求タイプ: POST
"DownloadEncryptedDast"
- URL: https://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
- 要求タイプ: GET
「Traffic」
- URL: https://[server]:[port]/automation/Traffic/<recordingPort>
- 要求タイプ: GET
「Certificate」
- URL: https://[server]:[port]/automation/Certificate
- 要求タイプ: GET