使用 AppScan 資料流量記錄器在AppScan® Enterprise 中測試自動化

「AppScan 資料流量記錄器」可讓您記錄資料流量,以在您的 AppScan Enterprise (ASE) 工作中當作「探索」資料使用。「AppScan 資料流量記錄器」是用於管理資料流量記錄器實例的系統。您可以依需求建立資料流量記錄器實例,以記錄稍後將用於 DAST 掃描的資料流量。此文件說明如何設定及使用資料流量記錄器。

概觀

在 DevOps 的領域中,能夠在 CI/CD 處理程序中納入安全掃描越來越重要。如果您使用自動化架構(如 Selenium),可以利用已經撰寫好的 Script 來建立自訂的掃描。
  • 使用「AppScan 資料流量記錄器」時,您可以自動啟動資料流量記錄器實例。從自動化架構送往 Web 應用程式的要求會被記錄下來,因為是透過「資料流量記錄器」所傳送。資料流量會以 HAR 格式儲存在 .dast.config 檔案中,而您稍後可以上傳該檔案,以供 AppScan Enterprise (ASE) 用作掃描的「探索」資料。
  • 您也可以手動透過資料流量記錄器記錄資料流量,以建立 .dast.config 檔案。
  • 您也可以直接將自己的 HAR 檔案上傳至 ASE,而不需要使用「資料流量記錄器」。

此圖描述了 AppScan Enterprise 的自動掃描流程®


使用 AppScan Enterprise 的自動化掃描流程

一般工作流程

  1. 安裝資料流量記錄器
  2. 配置資料流量記錄器
  3. 啟動資料流量記錄器
  4. 使用資料流量記錄器
註: 此工作流程的示範 Script ProxyServerDemoScript.py 可以在 AppScan 安裝資料夾中找到。

安裝 AppScan 資料流量記錄器

先決條件:您的電腦上必須安裝目前版本的 Node.js (v16 或更高版本的 LTS 版本)。如果您的服務符合 FIPS 標準,則您必須使用符合 FIPS 標準的 Node.js 伺服器。

  1. Windows:將 TrafficRecorder.Windows.zip 解壓縮至電腦上的資料夾中。

    Linux:解壓 TrafficRecorder.Linux.zip

  2. 若要覆寫資料流量記錄器要在其上執行的預設埠,請在 Settings.json 配置埠設定。
  3. 確保 app.js 和內部 java 檔案:/java/bin/java 具有「以執行檔執行」的權限。

配置「AppScan 資料流量記錄器」

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

FIPS 相容模式

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

資料流量記錄器連線

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

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

    PEM:

    PEM 憑證需要兩個檔案路徑 (to private.key 和certificate.pem)。
    • 將檔案路徑插入到 Settings.json 的 PEM 部分。
      註: '\' 字元需要逸出,例如:“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

    方法二:若您沒有憑證,則必須建立並使用自簽憑證。請注意,此方法較不安全。

    選項 一:使用 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 部分。
      註: '\' 字元需要逸出,例如:“C:\\Users\\admin\\private.key”。

    選項二:使用 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),則「AppScan 資料流量記錄器」必須作為記錄資料流量的中間人。若要這麼做,它必須具有主要憑證,可用來簽署它與應用程式的通訊。

依預設,「AppScan 資料流量記錄器」會產生唯一的主要憑證,不需要任何使用者介入。不過,瀏覽應用程式時,會收到 SSL 警告。您可以忽略它們,或執行下列其中一項:
  1. 在您的機器上安裝「AppScan 資料流量記錄器」所產生的憑證:
    1. 使用 REST API 下載「AppScan 資料流量記錄器」所用的自簽「主要憑證管理中心」(PEM 檔案)。
    2. 在用於「探索」的瀏覽器上或是任何需要的地方(視資料流量來源而定)安裝憑證。
  2. 將您自己的主要憑證匯入至「AppScan 資料流量記錄器」。支援的憑證格式有 PKCS12(.P12、.PFX)、JKS:
    1. 開啟指令行視窗,並且導覽至「資料流量記錄器」機器上的安裝資料夾。
    2. 執行下列指令:

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

      註: 要查看完整的指令用法,請執行 .\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 要求的埠。

註:
  • 如果您在啟動「資料流量記錄器」時未定義埠,則會使用 Settings.json 檔案中設定的埠,如果該處未定義任何埠,則會使用埠 8383
  • 不需要停止「資料流量記錄器」,您可以讓它永久地執行。

以 Windows 服務啟動

您可以使用服務資料夾中找到的 service.js 執行檔,將「資料流量記錄器」以 Windows 服務執行。服務使用「本端系統」專用權。
註: 所有服務指令都必須以管理員專用權執行(以管理員身分執行)。

若要啟動服務,請執行下列指令:

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

    Example for 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
    註: 狀態應顯示為 “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 保存) 檔案。當您下載此檔案時,系統會從「AppScan 資料流量記錄器」刪除該資料。
  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
註: 將埠設定為 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 上傳)。
註: 下載檔案時,會從「資料流量記錄器」中刪除經過加密和未加密的 .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