使用 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