技術交流

示範如何建置 Fortify ScanCentral SAST 進行集中掃描

Fortify Static Code Analyzer(SCA)除了在開發人員電腦或建置主機上安裝這種單機版的使用之外,現在也提供另一種集中式的架構:Fortify ScanCentral SAST。ScanCentral 包含三個重要組件:Client、Controller 與 Sensor,軟體原始碼從 Client 被打包上傳到 Controller,由 Controller 檢視其控管的所有 Sensor 狀態後,再將打包的軟體原始碼派送到可用的 Sensor 進行掃描工作;若所有 Sensor 都在忙碌中,Controller會控管掃描請求進行排隊,等到有 Sensor 可用後再派送過去。接下來將示範如何建置 Fortify ScanCentral SAST,並且進行實際測試。

如何建置與使用 Fortify ScanCentral SAST?

一、 準備使用工具

  • Fortify ScanCentral SAST 23.1.0
  • Fortify SCA 23.1.0

二、 了解 ScanCentral SAST 重要組件

ScanCentral SAST組件
圖一

Controller:

如圖一所示,Controller 是位於 Client、Sensor 及 Software Security Center(SSC)之間的獨立伺服器。Controller 負責接收來自 Client 的掃描請求,再將請求派送至可用的 Sensor 進行掃描。掃描完成後,Sensor 將掃描結果回傳 Controller,Controller 暫時儲存這些結果, Client 可從 Controller 下載掃描結果。

Clients:

Client 可分二種類型,分別是 Embedded Client 與Standalone Client。Embedded Client 透過 Fortify SCA 將原始碼轉譯成 mobile build sessions(MBS),然後將 MBS 傳送到 Controller,再由 Controller 派送到 Sensor 執行分析(掃描);Standalone Client 則是不經轉譯直接將原始碼打包送到 Controller,再由 Controller 派送到 Sensor,轉譯與掃描分析都是在 Sensor 完成。

由於 Embedded Client 需要使用 Fortify SCA,因此必須安裝 Fortify SCA(必須使用一個Fortify授權);Standalone Client 則不須安裝Fortify SCA,因此不會使用 Fortify 授權。Standalone Client 目前可支援 16 種程式語言,包括:Python、Go、Ruby、JavaScript、PHP、Java、ABAP、Apex、Classic ASP、Adobe ColdFusion、PL/SQL、T-SQL、Microsoft TypeScript、VB6、.NET、Dockerfiles。

而本文將以 Standalone Client 為例進行示範。

Sensors:

Sensor 是設定為接收掃描請求並使用 Fortify SCA 分析程式碼的電腦,負責接收從 Controller 派送來的 MBS(來自 Embedded Client)或直接打包的原始碼(來自 Standalone Client)進行掃描,為了執行掃描工作,Sensor 必須安裝 Fortify SCA。若來源是 MBS,Sensor 可掃描 Fortify SCA 所支援的超過三十種程式語言;若是已打包的原始碼,Sensor 則支援上一段所敘述的 16 種程式語言。

在部署環境上可以將 Sensor 與 Client 使用不同子網路隔離,只要讓 Controller 可以分別與 Client 及 Sensor 連線即可。

Software Security Center(Optional):

Software Security Center(SSC)是選用的獨立伺服器,ScanCentral SAST 整合 SSC 可以有一些額外功能,本文為了聚焦於 ScanCentral SAST,因此本文示範將不包含 SSC。

三、 開始建置主機

本文將以下列主機(VM)示範 Fortify ScanCentral SAST,請注意,各主機的配置規格並非原廠建議,詳細規格需求請見 Fortify ScanCentral SAST Requirements

  1. Controller
    1. 配置規格
      • OS:Windows Server 2016
      • RAM:4G
      • CPU:4 cores
    2. 安裝
      1. 安裝 JDK 11,設定系統環境變數 JAVA_HOME、Path。
      2. 下載安裝檔 Fortify_ScanCentral_Controller_23.1.0.zip,解壓縮後取得 Fortify_ScanCentral_Controller_23.1.0_x64.zip 及 Fortify_ScanCentral_Client_23.1.0_x64.zip。
      3. 將 Fortify_ScanCentral_Controller_23.1.0_x64.zip 解壓縮到安裝目錄(圖二),請注意,安裝目錄路徑不可含有空白字元!
        圖二
      4. 設定為 Windows 服務

        開啟命令提示字元視窗,切換到 <controller_dir>/tomcat/bin 資料夾,執行以下指令:

        service.bat install

        執行完成即新增一個名為「Apache Tomcat 9.0 Tomcat9」的 Windows 服務。

      5. 執行 tomcat9w.exe,在 Java tab 中修改 Maximum memory pool 值。
      6. 將名為「Apache Tomcat 9.0 Tomcat9」的 Windows 服務設定為自動啟動,並啟動服務。
      7. 測試

        開啟瀏覽器,輸入 URL(http://127.0.0.1:8080/scancentral-ctrl),網頁應顯示「Fortify ScanCentral Controller {版本}」(圖三),至此 ScanCentral SAST Controller 基本安裝完成。

        圖三
  2. Sensor
    1. Sensor1 配置規格
      • OS:Windows Server 2022
      • RAM:8G
      • CPU:4 cores
    2. Sensor2 配置規格
      • OS:Windows 10
      • RAM:8G
      • CPU:4 cores
    3. 安裝
      1. 安裝Fortify SCA(略)

        安裝過程中請確認勾選「Fortify ScanCentral SAST Client」。

      2. 設定參數

        開啟<sca_install_dir>/Core/config/worker.properties,設定worker_auth_token參數值,該值來自Controller的<controller_dir>\tomcat\webapps\scancentral-ctrl\WEB-INF\classes\config.properties。

      3. 將 Sensor 設定為自動啟動的 Windows 服務

        開啟命令提示字元視窗,切換到<sca_install_dir>\bin\scancentral-worker-service資料夾,輸入以下指令:

        
        setupworkerservice.bat <fortify_release_version> <scancentral_controller_url> <shared_secret>
            
        指令範例:
        
        setupworkerservice.bat 23.1 http://192.168.16.178:8080/scancentral-ctrl CHANGEME123!
            
      4. 最後將名為「FortifyScancentralWorkerService」的 Windows 服務設定為自動(延遲啟動),並啟動服務。
  3. Client
    1. 配置規格
      • OS:Windows 10
      • RAM:4G
      • CPU:4 cores
    2. 安裝
      1. 安裝 JDK 11,設定系統環境變數 JAVA_HOME、Path。如果 JAVA_HOME 已經被其他版本 JDK 使用,請設定 SCANCENTRAL_JAVA_HOME 系統環境變數指向 JDK 11。
      2. 將 1.2.2 取得的 Fortify_ScanCentral_Client_23.1.0_x64.zip 解壓縮(圖四)。請注意,安裝目錄路徑不可含有空白字元!
        圖四
      3. 設定參數

        開啟<client_install_dir>/Core/config/client.properties,設定 client_auth_token 參數值,該值來自 Controller 的 <controller_dir>\tomcat\webapps\scancentral-ctrl\WEB-INF\classes\config.properties。

四、 進行測試

  1. 測試準備

    準備進行測試的三個專案名稱分別為 eightball、php8.0 及 LoginProject,都是來自 Fortify SCA 23.1 所提供的 Sample Project。其中 LoginProject 是一個 Web Application,有較多的原始碼,而eightball 及 php8.0 都是只有一支程式檔案的超小 Sample Project。

    現在一共有二部 Sensor 在線上等待掃描請求中,本文預計從唯一一部 Client 上按照 LoginProject、php8.0、eightball 這樣的順序在短時間內連續發出掃描請求。LoginProject 與 php8.0 將會分別送到二部Sensor,接下來因為二部 Sensor 都在使用中,所以 eightball 專案會在 Controller 等待,直到出現可用的 Sensor 出現後才派送過去,由於 LoginProject 專案需要較多的掃描時間,因此可以預期 eightball 專案最終將會被派送到與 php8.0 相同的 Sensor。

  2. 測試執行

    測試指令格式如下:

    
    scancentral.bat –url <SCANCENTRAL_URL> start -block -o -f <FPR name> --build-tool none –targs <Translation Options>
        

    開啟三個命令提示字元視窗,各自切換到三個專案原始碼根目錄,執行以下測試指令:

    1. LoginProject
      
      C:\Fortify_ScanCentral_Client\bin\scancentral.bat –url http://192.168.16.178:8080/scancentral-ctrl/ start -block -o -f FortifyLoginProject.fpr --build-tool none -targs "-source 14 -cp LoginProject/lib/**/*.jar"
              
      圖五
    2. php8.0
      
      C:\Fortify_ScanCentral_Client\bin\scancentral.bat -url http://192.168.16.178:8080/scancentral-ctrl/ start -block -o -f Fortifyphp8.0.fpr --build-tool none --php-version 8.0
              
      圖六
    3. eightball
      
      C:\Fortify_ScanCentral_Client\bin\scancentral.bat -url http://192.168.16.178:8080/scancentral-ctrl/ start -block -o -f Fortifyeightball.fpr --build-tool none -targs "-source 1.8"
              
      圖七
  3. 測試結果

    開啟三個專案的掃描結果檢視如下,可以確認LoginProject是派送到Sensor2進行掃描,而php8.0及eightball則是派送到Sensor1進行掃描,符合預期。

    1. FortifyLoginProject.fpr
      圖八
    2. Fortifyphp8.0.fpr
      圖九
    3. Fortifyeightball.fpr
      圖十

五、 使用 Fortify ScanCentral 帶來的效益

以上示範如何建置及使用 Fortify ScanCentral SAST。透過 Fortify ScanCentral 能帶來以下效益:

  • 減輕負擔:可將源碼掃描任務從建置主機卸載到專門用來掃描的Sensor,除減輕開發或建置人員的負擔,也可以更好地管理主機資源。
  • 享受彈性授權:彈性的 Fortify 授權讓團隊可以根據其需求及資源選擇。
  • 動態擴展:可動態擴展或縮小規模,以滿足不斷變化的需求。
  • 掃描技術集中:因為集中掃描,可讓小規模的專業AppSec團隊,服務整個組織的軟體安全需求。

延伸閱讀:

閱讀更多