技術交流

如何透過 Fortify WebInspect 與 Postman 進行 WebAPI 黑箱測試?

Fortify WebInspect 是一套動態應用程式安全測試工具,可識別 Web Application 和 Web Service 中的弱點,並提出修補建議。一般網頁應用程式具備網頁及連結,因此 WebInspect 可透過爬網(Crawl)找出網站的結構與資源,接著再進一步攻擊測試,找出安全弱點。而 Web Service 中的 SOAP 及 RESTful API 因為各自具備 WSDL、Swagger 或 OData,因此 WebInspect 可以透過解讀 WSDL、Swagger 及 OData等文件來確認需掃描的標的。但還有更多的 Web API 並不屬於 Swagger 或 OData,所以不容易進行黑箱測試。

WebInspect 提供與 Postman 整合的機制,因此可以使用現有的 Postman 測試腳本掃描這些 Web API。如果有獨特的工作流程、複雜的身分驗證及自訂參數的需求,一樣都可以透過這個整合機制輕鬆達成。

Web API 黑箱測試步驟:

  1. 使用 Postman 為身分驗證 API 單獨建立 Authentication Collection
    1. 使用 Postman 新增一個 Collection(ex. GetTokenCollection),在 Collection 中新增一個 Request(ex. GetTokenRequest),並依據身分驗證 API 的規格設定 GetTokenRequest。
    2. 測試 GetTokenRequest,確認執行無誤,此時可在 Response Body 取得 access token,如下圖:
    3. 匯出 Authentication Collection(json 格式,ex. GetTokenCollection.postman_collection.json)另存,稍後使用。
  2. 建立 Workflow Collection

    現在我們將為以下的情境建立一個 Workflow Collection:乘客先查詢了客運班次之後,接著進行訂位。

    1. 新增 Collection(ex. SimpleBookingCollection),在 Collection 中新增二個 Request(ex. ScheduleRequest、BookingRequest),順序是先 ScheduleRequest 再 BookingRequest。
    2. 接著在二個 Request 的 Authenticationg 設定使用 Bearer Token,並設定其值為 1.2 步驟所獲得的 access token,其餘就依 API 的規格設定。
    3. 測試 ScheduleRequest 及 BookingRequest,確認執行無誤。
    4. 匯出 Workflow Collection(json 格式,ex. SimpleBookingCollection.postman_collection.json)另存,稍後使用。
  3. 建立 Response State Rule

    Response State Rule 是用來讓 WebInspect 知道該如何從 Authentication Request 的 Response 中取出身分驗證通過後所獲得身分憑據(本例中為 access token),然後取代 Workflow Collection 中 Requests 的 Authentication。

    1. 建立 SearchRegexes(Regular Expression)

      從 1.2 步驟的 Response 中可以取出 access token,以提供其他Request 作為 Authentication 使用。Response Body:

      設定以下 Regular Expression 可以取出 access token:"access_token":"(?<Token>[-a-zA-Z0-9._~+/]*)"

    2. 建立 ReplaceRegexes(Regular Expression)

      本例中使用了 Bearer Token,其 ReplaceRegexes 為:Authorization:\sBearer\s(?<Token>[-a-zA-Z0-9._~+/]*)

    3. 建立 Response State Rule 如以下 XML 字串,並儲存成純文字檔(ex. BearerRespStateRule.txt)
  4. 確認 Logout Condition

    Logout Condition 是為了讓 WebInspect 在自動進行黑箱測試時,遇到身分憑據(此例為 bearer token)失效時可以自動執行 Authentication Collection,重新取得有效的身分憑據。以本例而言,Logout Condition 如下:[STATUSCODE]401

  5. 掃描

    在安裝 WebInspect 的主機上,「以系統管理員身分執行」命令提示字元(Command-line),切換到 WebInspect 安裝目錄(預設目錄為C:\Program Files\Fortify\Fortify WebInspect),接著執行掃描指令,指令格式如下:wi.exe -pwc {Workflow Collection File Path} -plc {Authentication Collection File Path} -pls {Logout Condition String} -rs @{Response State Rule File Path}

    例如:wi.exe -pwc "C:\TEST\SimpleBookingCollection.postman_collection.json" -plc "C:\TEST\GetTokenCollection.postman_collection.json" -pls "[STATUSCODE]401" -rs @C:\TEST\BearerRespStateRule.txt

    等待掃描結束。

  6. 啟動 WebInspect,開啟掃描結果並檢視詳細內容或產出各式報告。

簡單來說,應用 Postman 的測試腳本進行 Web API 的黑箱測試,可透過執行掃描指令 wi.exe,掃描指定的 Postman Workflow Collection,有效找出 Web API 中的安全弱點。

閱讀更多