AppScan トラフィック・レコーダーを使用した AppScan® Enterprise でのテスト自動化
AppScan トラフィック・レコーダーでは、トラフィックを記録して、AppScan Enterprise (ASE) ジョブで探査データとして使用できます。AppScan トラフィック・レコーダーは、トラフィック・レコーダー・インスタンスを管理するためのシステムです。要求に応じてトラフィック・レコーダー・インスタンスを作成して、後で DAST スキャンに使用されるトラフィックを記録できます。この文書では、トラフィック・レコーダーを設定して使用する方法について説明します。
概要
- AppScan トラフィック・レコーダーを使用して、トラフィック・レコーダー・インスタンスを自動的に開始できます。自動化フレームワークから Web アプリへの要求が記録されるのは、このトラフィック・レコーダーを経由して送信されるためです。トラフィックは、HAR 形式で .dast.config ファイルに保存されます。このファイルは、AppScan Enterprise (ASE) がスキャンの探査データとして使用できるように後でアップロードできます。
- また、トラフィック・レコーダーを経由してトラフィックを手動で記録して、.dast.config ファイルを作成することもできます。
- トラフィック・レコーダーを使用せずに、独自の HAR ファイルを ASE に直接アップロードすることもできます。
この図は、automated scan flow with AppScan® Enterprise を示します。
通常ワークフロー
AppScan トラフィック・レコーダーのインストール
- 現在のバージョンの Node.js (v14.14 以降) のいずれかをダウンロードして、マシンにインストールしてください。サービスが FIPS に準拠している場合は、FIPS 準拠の Node.js サーバーを使用する必要があります。
- TrafficRecorder.Windows.zip をマシン上のフォルダーに unzip します。
- トラフィック・レコーダーを実行するデフォルト・ポートを上書きするには、以下のようにします。Settings.json でポート設定を構成します。
AppScan トラフィック・レコーダーの構成
FIPS 準拠モード
- トラフィック・レコーダーのルート・フォルダーで Settings.json ファイルを見つけて、テキスト・エディターで開きます。
- 設定 requireFips を見つけ、その値を false から true に変更します。
- ファイルを保存します。
トラフィック・レコーダー接続
- トラフィック・レコーダーを実行するデフォルト・ポートを設定するには、以下のようにします。Settings.json でポート設定を構成します。
- トラフィック・レコーダーへのセキュアな (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 トラフィック・レコーダーによって生成された証明書を 1 つ以上のマシンにインストールします。
- REST API を使用して自己署名ルート認証局をダウンロードします。これは、AppScan トラフィック・レコーダーで PEM ファイルとして使用します。
- 探査に使用するブラウザー、または必要な場所 (トラフィックの送信元に応じて決まります) に証明書をインストールします。
- 独自のルート証明書を AppScan トラフィック・レコーダーにインポートします。サポートされる証明書形式は、PKCS12 (.P12、.PFX)、JKS です。
- コマンド行ウィンドウを開き、トラフィック・レコーダー・マシンのインストール・フォルダーに移動します。
- 以下のコマンドを実行します。
.\Java\jre\bin\java -jar DastProxy.jar -irc [path to certificate file] -ircp [password]
注: コマンドの詳しい使用法を表示するには、.\Java\jre\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 ファイルに設定されたポートが使用されます。このファイルに何も定義されていない場合は、ポート 8383 が使用されます。
- トラフィック・レコーダーを停止する必要はなく、永続的に実行したままにすることができます。
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 です。 File content:
[Unit]
Description=Appscan TrafficRecorder
After=multi-user.target[Service]
ExecStart=[ノードへのパス] [app.js へのパス]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
- app.js と内部 Java ファイルを確認します。/java/bin/java には「実行可能ファイルとして実行」許可があります。
- 次のコマンドを使用して、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 ファイルをダウンロードします。トラフィック。ファイルは、1 つ以上の .har (HTTP Archive) ファイルを含む ZIP ファイルです。このファイルをダウンロードすると、AppScan トラフィック・レコーダーからデータが削除されます。
- 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」
- URL:http://[server]:[port]/automation/StartProxy/<recordingPort>
- 要求タイプ: POST または GET (chainedProxy、proxyCertificate、および clientCertificate を使用している場合、要求は POST、それ以外の場合は GET)
「StopProxy」
- URL:http://[server]:[port]/automation/StopProxy/<recordingPort>
- 要求タイプ: GET
"StopAllProxies"
実行中のすべてのトラフィック・レコーダー・インスタンスを停止します。このコマンドは、他のユーザーが開始したものを含め、すべてのポート上のすべてのトラフィック・レコーダー・インスタンスを停止します。
- URL:http://[server]:[port]/automation/StopAllProxies
- 要求タイプ: POST
"EncryptDastConfig"
- URL:http://[server]:[port]/automation/EncryptDastConfig
- 要求タイプ: POST
"DownloadEncryptedDast"
- URL:http://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
- 要求タイプ: GET
「Traffic」
- URL:http://[server]:[port]/automation/Traffic/<recordingPort>
- 要求タイプ: GET
「Certificate」
- URL:http://[server]:[port]/automation/Certificate
- 要求タイプ: GET