有關此應用程式的「官方」版本以及其他管道集成,請訪問 https://github.com/fortify/IWA-Java。
IWA(不安全的 Web 應用程式)Pharmacy Direct是一個範例 Java/Spring Web 應用程序,用於DevSecOps場景和演示。它包括一些不良和不安全程式碼的範例 - 可以使用靜態和動態應用程式安全測試工具(例如 Micro Focus Fortify 提供的工具)找到這些範例。
該專案的主要目標之一是說明如何在開發生命週期中儘早(“Shift-Left”)和持續(“CI/CD”)嵌入安全性。因此,提供了許多與常見 CI/CD 管道工具「整合」的範例。
該應用程式旨在提供典型「線上藥局」的功能,包括購買產品(藥物)和請求服務(處方、健康檢查等)。它有一個現代的 HTML 前端(帶有一些 JavaScript)和一個基於 Swagger 的 API。
請注意:該應用程式不應在生產環境中使用!
您可以在 https://iwa.onfortify.com 上找到正在運行的應用程式的最新版本。
為了自行執行範例場景,建議您將此儲存庫的副本「分叉」到您自己的 GitHub 帳戶。 GitHub 文件中詳細描述了「分叉」的過程 - 您可以透過點擊右上角的「分叉」按鈕來啟動該過程。
為了成功建置並執行應用程序,您需要在路徑上安裝 Java JDK 11。
要使用 Gradle 建立應用程序,請從命令列執行以下命令:
.gradlew clean build
根據您希望執行的場景,有多種運行應用程式的方法。
若要在開發模式下本機執行(和測試),請從命令列執行下列命令:
.gradlew bootRun
然後導覽至 URL:http://localhost:8888。您可以在未經身份驗證的情況下執行許多操作,但如果您想登錄,可以按以下步驟操作:
還有一個管理用戶:
請注意,如果您使用user2
登錄,隨後系統會要求您提供多重身份驗證 (MFA) 代碼。您可以透過檢查控制台輸出找到此程式碼。
如果您想使用開發電子郵件伺服器,我建議使用(smtp4dev)[https://github.com/rnwood/smtp4dev.git]。最簡單的方法是將其作為 docker 容器啟動:
docker run --rm -it -p 5000:80 -p 2525:25 rnwood/smtp4dev
如果您想讓 smtp4dev 在背景運行,請刪除--rm -it
,否則它將一直運行,直到您按 CTRL+C。
(application-dev.yml)[./src/main/resources/application-dev.yml] 檔案已預先配置為使用此配置。瀏覽至http://localhost:5000
以查看電子郵件。
可以使用提供的Dockerfile
和以下命令將 JAR 檔案建置到 Docker 映像中:
docker build - t iwa -f Dockerfile .
或在 Windows 上:
docker build - t iwa -f Dockerfile.win .
然後可以使用以下命令執行該映像:
docker run - d - p 8888 : 8888 iwa
還有一個範例docker-compose.yml
文件,說明如何使用 nginx 和 certbot 透過 HTTPS/SSL 運行應用程式 - 請注意,這僅供參考,因為它使用「硬編碼」網域名稱。
以下大多數範例都需要環境和使用者特定的憑證。它們是從專案根目錄中名為.env
的檔案載入的。預設不會建立此文件(並且永遠不應將其儲存在原始碼管理中)。下面舉例說明了以下場景的所有可能設定的範例:
# Application URL (locally)
APP_URL=http://localhost:8888
# Software Security Center
SSC_URL=http://[YOUR-SSC-SERVER]
SSC_USERNAME=admin
SSC_PASSWORD=password
SSC_AUTH_TOKEN=XXX
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
# ScanCentral SAST/DAST
SCANCENTRAL_CTRL_URL=http://[YOUR-SCANCENTRAL-SERVER]/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=XXX
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
SCANCENTRAL_DAST_API=http://[YOUR-SCANCENTRAL-DAST-SERVER]/api/
# ScanCentral FAST
FAST_EXE=C:\Program Files\Micro Focus WIRC Server\Fast.exe
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
# Fortify on Demand
FOD_API_URL=https://api.ams.fortify.com
FOD_API_KEY=XXXX
FOD_API_SECRET=YYYY
FOD_TENANT=[YOUR-TENANT]
FOD_USER=[YOUR-USERNAME]
FOD_PAT=XXXX
您可以使用一個範例 PowerShell 腳本 fortify-sast.ps1 透過 Fortify SCA 執行靜態應用程式安全測試。
.binfortify - sast.ps1 - SkipSSC
此腳本運行sourceanalyzer
翻譯並掃描專案的原始程式碼。它會建立一個名為IWA-Java.fpr
的 Fortify 專案結果文件,您可以使用auditworkbench
工具開啟該文件:
auditworkbench.cmd .IWA - Java.fpr
它還會建立一個名為IWA-Java.pdf
的 PDF 報告,並可選擇將結果上傳至 Fortify 軟體安全中心 (SSC)。
為了上傳到 SSC,您需要在.env
中包含類似以下內容的條目:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=28145aad-c40d-426d-942b-f6d6aec9c56f
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
SSC_AUTH_TOKEN
條目應設定為在 SSC “管理 -> 令牌管理”中建立的“CIToken”的值。
您可以使用 PowerShell 腳本 fortify-scancentral-sast.ps1 來打包專案並使用 Fortify ScanCentral SAST 啟動遠端掃描:
.binfortify - scancentral - sast.ps1
為了使用 ScanCentral SAST,您需要在.env
中包含類似以下內容的條目:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=6b16aa46-35d7-4ea6-98c1-8b780851fb37
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
SCANCENTRAL_CTRL_URL=http://localhost:8080/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=96846342-1349-4e36-b94f-11ed96b9a1e3
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
SSC_AUTH_TOKEN
條目應設定為在 SSC “管理 -> 令牌管理”中建立的“CIToken”的值。
要執行 Fortify on Demand SAST 掃描,您需要打包原始程式碼並將其上傳到 Fortify on Demand。要將程式碼打包成 Zip 檔案進行上傳,您可以使用scancentral
命令實用程序,如下所示:
scancentral package - bt gradle - bf build.gradle - bt " clean build -x test " -- output fod.zip
然後,您可以使用 Fortify on Demand UI、FoDUploader 公用程式或透過 Fortify CLI 使用以下命令手動上傳:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod sast-scan start --release YOUR_APP:YOUR_RELEASE -f fod.zip --store curScan
fcli fod sast-scan wait-for ::curScan::
要執行 WebInspect 掃描,您應該先使用上述步驟之一「執行」應用程式。然後您可以使用以下命令列開始掃描:
" C:Program FilesFortifyFortify WebInspectWI.exe " - s " .etcIWA-UI-Dev-Settings.xml " - macro " .etcIWA-UI-Dev-Login.webmacro " - u " http://localhost:8888 " - ep " .IWA-DAST.fpr " - ps 1008
這將使用etc
目錄中提供的預設設定和登入巨集檔案開始掃描。它假設應用程式正在“localhost:8888”上運行。它將使用 id 1008 的策略執行「關鍵和高優先級」掃描。名為IWA-DAST.fpr
的 FPR 檔案也將可用 - 您可以使用auditworkbench
開啟它(或使用ReportGenerator
產生 PDF 報告)。您也可以將其上傳到 Fortify SSC 或 Fortify on Demand。
您可以執行一個範例 PowerShell 腳本檔案 fortify-webinspect.ps1 來執行掃描並將結果上傳到 SSC:
.binfortify - webinspect.ps1
您可以使用 FCLI 公用程式呼叫 Fortify on Demand 動態掃描。例如:
fcli sc-dast session login --ssc-url http://YOUR_SSC.DOMAIN -t YOUR_SSC_CI_TOKEN
fcli sc-dast scan -n "IWA-Java - FCLI" -s YOUR_SCAN_SETTINGS_ID --store curScan
fcli sc-dast scan wait-for ::curScan::
Fortify on Demands 提供兩種執行 DAST 掃描的方法:傳統 DAST 和DAST 自動。在本節中,我們將使用DAST Automated ,因為這更適合命令和管道整合。
您可以使用 FCLI 實用程式呼叫 Fortify on Demand DAST 自動掃描。例如:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod dast-scan start --release YOUR_APP:YOUR_RELEASE --store curScan
fcli fod dast-scan wait-for ::curScan::
TBD:如何上傳登入巨集和/或工作流程。
IWA 應用程式包含完整記錄的基於 Swagger 的 API,您可以透過 http://localhost:8888/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config 瀏覽到該 API。您可以使用 Fortify WebInspect 或 ScanCentral DAST 對此 API 進行安全測試。提供了 Postman 集合來幫助實現這一點。您可以使用 newman 來練習該集合。例如,從 Windows 上的 PowerShell 命令提示字元:
newman run .etcIWA - API - Dev - Auth.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json -- export-environment .etcIWA - API - Dev.postman_environment.json
newman run .etcIWA - API - Dev - Workflow.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json
為了將此集合與 WebInspect 一起使用,您需要確保 newman 在路徑上,然後您可以執行:
& " C:Program FilesFortifyFortify WebInspectWI.exe " - pwc .etcIWA - API - Workflow.postman_collection.json - pec .etcIWA - API - Dev.postman_environment.json - ep " .IWA-API.fpr "
將下列 Postman 集合匯入 ScanCentral DAST:
etcIWA-API-Prod.postman_environment.json
- 作為環境etcIWA-API-Auth.postman_collection.json
- 作為身分驗證集合etcIWA-API-Workflow.postman_collection.json
- 作為工作流程集合然後,您將需要對動態令牌生成進行以下設置
響應令牌:
"accessToken"s*:s*"(?<BearerTokenValue>[-a-zA-Z0-9._~+/]+?=*)"
請求令牌:
Authorization:sBearers(?<BearerTokenValue>[^rn]*)r?n
註銷條件:
[STATUSCODE]401
掃描可以從 ScanCentral DAST UI 運行,也可以透過儲存設定並使用fcli sc-dast scan
命令來運行。
可以使用以下「組合」Postman 集合來執行 API 掃描:
etcIWA-API-Prod-Combined.postman_environment.json
這可以與傳統 DAST 或DAST Automated一起使用。
Fortify FAST 代理程式可讓您從自動化測試運行中擷取流量,然後使用該流量作為 ScanCentral DAST 執行的工作流程。為了執行此處的範例,您需要在本機上安裝 WebInspect WIRCServerSetup64-ProxyOnly.msi
,該檔案位於 ScanCentral DAST 安裝媒體的Dynamic_Addons.zip
中。
有一些 Selenium 範例可用於對正在運行的應用程式執行簡單的功能測試。還有幾個 PowerShell 腳本 start_fast_proxy.ps1 和 stop_fast_proxy.ps1 可用於啟動/停止 FAST 代理程式。為了使用這些腳本,您需要在.env
檔案中包含類似於以下內容的條目:
APP_URL=http://localhost:8888
SSC_AUTH_TOKEN_BASE64=MmYyMTA5MzYtN2Q5Ny00NmM1LWI5NTUtYThkZWI2YmJlMDUy
SSCANCENTRAL_DAST_API=http://scancentral-dast-api.example.com/api/
SCANCENTRAL_DAST_CICD_IDENTIFIER=c3c3df60-de68-45b8-89c0-4c07b53392e7
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
SSC_AUTH_TOKEN_BASE64
是 SSC 中顯示的(第一個)編碼令牌,而不是(第二個)解碼令牌。然後從命令列執行以下操作:
python -m pip install --upgrade pipenv wheel
pipenv shell
pipenv install --dev
確保應用程式正在運行,然後在終端機視窗中執行以下命令:
.binstart_fast_proxy.ps1
然後在另一個終端機視窗中執行以下命令:
pytest - v - s
最後:
.binstop_fast_proxy.ps1
第一個終端的 FAST 執行檔應終止,然後在 ScanCentral DAST 環境中執行掃描。
如果您使用 Jenkins,則會提供全面的Jenkinsfile
來自動執行典型 DevSecOps 持續交付 (CD) 流程的所有典型步驟。此範例利用 Fortify ScanCentral SAST/DAST 和 Sonatype Nexus IQ 進行軟體構成分析。
要使用Jenkinsfile
請建立新的 Jenkins管道作業,並在管道部分中選擇Pipeline script from SCM
,然後輸入此 GitHub 儲存庫的分叉版本的詳細資訊。
管道的第一次運行應被視為「設定」步驟,因為它將建立一些作業參數,然後您可以選擇這些參數來確定要在管道中啟用哪些功能。
您需要安裝並設定 Fortify Jenkins 外掛程式。
Jenkinsfile
本身中有很多文檔,因此請檢查它以了解成功呼叫還需要做什麼。
此儲存庫在 .github/workflows 中包含許多 GitHub Actions 範例,這些範例可自動建立應用程式並使用 Fortify on Demand 或 Fortify ScanCentral for SAST 掃描程式碼。
有關與其他管道工具的集成,請參閱 https://github.com/fortify/IWA-Java。
有關如何開發和貢獻的信息,請參閱貢獻指南。
如果您有任何問題,請查閱 GitHub Issues 看看是否已經討論過。
該應用程式根據 GNU 通用公共授權 V3 提供