使用 AppScan Traffic Recorder 在 AppScan® Enterprise 中進行測試自動化

HCL AppScan Traffic Recorder 可讓您記錄資料流量,以作為 AppScan Enterprise (ASE) 工作中的探索資料使用。HCL AppScan Traffic Recorder 是用於管理資料流量記錄器實例的系統。您可以依需求建立資料流量記錄器實例,以記錄稍後將用於 DAST 掃描的資料流量。本主題說明如何設定和使用資料流量記錄器。

概觀

在 DevOps 的領域中,能夠在 CI/CD 處理程序中納入安全掃描越來越重要。如果您使用自動化架構(如 Selenium),可以利用已經撰寫好的 Script 來建立自訂的掃描。
  • 使用 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. 將 include 路徑更新為指向您在安裝 OpenSSL FIPS 提供者時所使用的 openssl fipsinstall 命令的輸出。
  3. 若要將 Traffic Recorder 作為處理程序執行,請使用 nodefips <filename>。這會在您執行 Node.js 時自動套用 nodejs.cnf 配置。

    例如:nodefips app.js

若要安裝「資料流量記錄器」:

  1. 下載 Traffic Recorder 檔案。您可以從 https://<HOST_NAME>/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 資料流量記錄器

進行任何配置變更之後,您必須重新啟動伺服器。
Note:
進行升級時,若您已在 Settings.json 中擁有 PKCS12 憑證,請重新設定該憑證。

符合 FIPS 標準模式

  1. 在「資料流量記錄器」的根資料夾中找到 Settings.json 檔案,然後在文字編輯器中開啟。
  2. 找到 requireFips 設定,並將其值從 false 變更為 true。
  3. 儲存檔案。

資料流量記錄器連線

  1. 在 Settings.json 中配置「資料流量記錄器」執行時使用的預設連接埠。
  2. 設定資料流量記錄器的安全 (SSL) 連線。您可以使用自己的憑證(方法 A)或自簽憑證(方法 B)來執行此操作。

    方法 A:在 Settings.json 中配置您自己的 PEM 或 PKCS12 憑證。

    PEM:

    PEM 憑證需要兩個檔案路徑(指向 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 的 keygen 工具將 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」node 旗標,請參閱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 必須充當中間人來記錄流量。若要這麼做,它必須具有根憑證,可用來簽署它與應用程式的通訊。

依預設,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 [憑證檔案路徑] -ircp [密碼]

      Note:
      若要檢視完整的指令用法,請執行 .\Java\bin\java -jar DastProxy.jar 指令。

      重要:因為憑證將會儲存在「資料流量記錄器」上,所以建議您使用專用的測試憑證。

  3. 在 StartProxy 指令中提供您自己的固定伺服器憑證(不是根憑證)。

設定閒置逾時

如果資料流量記錄器實例在使用後未以關閉指令關閉,將會維持開啟並且在埠上接聽。如果資料流量記錄器實例閒置超出預先定義的時間,則會自動關閉。

資料流量記錄器實例的預設閒置逾時為 60 分鐘。您可以透過變更安裝資料夾中 Settings.json 檔案內的 inactivityTimeoutInMinutes 值來變更此值。

加密資料流量

依預設,資料流量 (.dast.config) 檔案未加密。若要配置伺服器加密所有資料流量,請將 Settings.json 檔案(可以在安裝資料夾中找到)中的 "encryptDastConfig" 值變更為 “true”。

鏈結 Proxy

如果您需要定義多個已鏈結 Proxy,或是定義 Proxy 的例外,請使用安裝資料夾中的已鏈結 Proxy 規則檔案 (proxy.chain)。檔案包括使用說明。

啟動/停止資料流量記錄器

您可以直接啟動「資料流量記錄器」,或是當成服務來執行(如下)。請注意,您不能同時執行這兩項作業。

如果要啟動「資料流量記錄器」,請執行下列動作:
  • 執行此指令:node app.js [port]

    其中 *port = 資料流量記錄器用來接聽 REST API 要求的埠。

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.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. 若要啟動資料流量記錄器實例,請使用 REST API 要求:StartProxy
  2. 透過已定義的資料流量記錄器埠,將資料流量傳送至您要測試的應用程式。
  3. 完成後,傳送 REST API 要求:StopProxy。
  4. 透過傳送 REST API 要求 Traffic 來下載包含已記錄流量的 .dast.config 檔案。檔案是 ZIP 檔案,其中包含一個或多個 .har(HTTP Archive)檔案。當您下載此檔案時,資料會從 HCL AppScan Traffic Recorder 中刪除。
  5. 您可以利用 ASE REST API,使用 .dast.config 檔案來更新現有工作的「探索」資料。請參閱文件連結:https://<domain>:9443/ase/api/pages/apidocs.html。如需相關資訊,請參閱資料流量記錄器 API 指令章節。

資料流量記錄器 API 指令

「資料流量記錄器」啟動之後,您就可以啟動資料流量記錄器實例,並將您的資料流量傳送至您的應用程式。

文件

若要在 Swagger 中檢視完整的 REST API 說明文件,請在瀏覽器中輸入:https://<server>:<port>

所有指令都會指向與下列類似的端點:

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

server = 在其上安裝「資料流量記錄器」之機器的 IP 位址(預設值為 localhost)

port = 資料流量記錄器接聽的埠

"StartProxy"

啟動在指定的埠上接聽的資料流量記錄器實例。
  • URL:https://[server]:[port]/automation/StartProxy/<recordingPort>
  • 請求類型:POST 或 GET(如果使用 chainedProxy、proxyCertificate 和 clientCertificate,則請求為 POST;否則為 GET)

"StopProxy"

停止在指定的埠上接聽的資料流量記錄器實例。
  • 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