追加のパイプライン統合を備えたこのアプリケーションの「公式」バージョンについては、https://github.com/fortify/IWA-Java にアクセスしてください。
IWA (Insecure Web App) Pharmacy Direct は、 DevSecOpsシナリオおよびデモンストレーションで使用する Java/Spring Web アプリケーションの例です。これには、Micro Focus Fortify が提供する静的および動的アプリケーション セキュリティ テスト ツールを使用して検出できる、不正で安全でないコードの例がいくつか含まれています。
このプロジェクトの主な目的の 1 つは、セキュリティを開発ライフサイクルの早期 (「シフトレフト」) および継続的 (「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
にアクセスして電子メールを確認します。
JAR ファイルは、提供されたDockerfile
と次のコマンドを使用して Docker イメージに組み込むことができます。
docker build - t iwa -f Dockerfile .
または Windows の場合:
docker build - t iwa -f Dockerfile.win .
このイメージは、次のコマンドを使用して実行できます。
docker run - d - p 8888 : 8888 iwa
nginx と certbot を使用して HTTPS/SSL でアプリケーションを実行する方法を示すdocker-compose.yml
ファイルの例もあります。「ハードコーディングされた」ドメイン名を使用しているため、これは参照のみであることに注意してください。
次の例のほとんどでは、環境およびユーザー固有の資格情報が必要です。これらは、プロジェクトのルート ディレクトリにある.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
Fortify SCA 経由で静的アプリケーション セキュリティ テストを実行するために使用できるサンプル PowerShell スクリプト fortify-sast.ps1 があります。
.binfortify - sast.ps1 - SkipSSC
このスクリプトは、 sourceanalyzer
変換を実行し、プロジェクトのソース コードをスキャンします。 IWA-Java.fpr
という Fortify プロジェクト結果ファイルが作成されます。このファイルは、Fortify auditworkbench
ツールを使用して開くことができます。
auditworkbench.cmd .IWA - Java.fpr
また、 IWA-Java.pdf
という PDF レポートも作成され、オプションでその結果が Fortify Software Security Center (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」の値に設定する必要があります。
プロジェクトをパッケージ化し、Fortify ScanCentral SAST を使用してリモート スキャンを開始するために使用できる PowerShell スクリプト fortify-scancentral-sast.ps1 があります。
.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 のポリシーを使用して「クリティカルおよび高優先度」スキャンが実行されます。完了したら、WebInspect「デスクトップ クライアント」を開いて、この実行用に作成されたスキャンに移動できます。 IWA-DAST.fpr
という FPR ファイルも利用可能になります。このファイルは、 auditworkbench
で開くことができます (またはReportGenerator
を使用して PDF レポートを生成できます)。 Fortify SSC または Fortify on Demand にアップロードすることもできます。
スキャンを実行し、結果を SSC にアップロードするために実行できるサンプル PowerShell スクリプト ファイル fortify-webinspect.ps1 があります。
.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 Demand は、DAST スキャンを実行する 2 つの手段、従来の DAST とDAST Automatedを提供します。このセクションでは、コマンドとパイプラインの統合により適しているため、 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 で参照できます。 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
コマンドを使用して実行できます。
API スキャンは、次の「結合された」Postman コレクションを使用して実行できます。
etcIWA-API-Prod-Combined.postman_environment.json
これは、従来の DAST またはDAST Automatedのいずれかで使用できます。
Fortify FAST Proxy を使用すると、自動テスト実行からトラフィックをキャプチャし、そのトラフィックを ScanCentral DAST 実行のワークフローとして使用できます。ここの例を実行するには、WebInspect をローカルにインストールする必要がありますWIRCServerSetup64-ProxyOnly.msi
は、ScanCentral DAST インストール メディアのDynamic_Addons.zip
に含まれています。
実行中のアプリケーションの簡単な機能テストを実行するために使用できる Selenium の例がいくつかあります。 FAST プロキシの開始/停止に使用できるいくつかの PowerShell スクリプト start_fast_proxy.ps1 および stop_fast_proxy.ps1 もあります。これらのスクリプトを使用するには、 .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 に表示される (最初の) エンコードされたトークンであり、(2 番目の) デコードされたトークンではありません。次に、コマンドラインから次の操作を実行します。
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 を使用している場合は、一般的な DevSecOps 継続的デリバリー (CD) プロセスの一般的な手順をすべて自動化するための包括的なJenkinsfile
が提供されます。この例では、ソフトウェア構成分析に Fortify ScanCentral SAST/DAST および Sonatype Nexus IQ を利用しています。
Jenkinsfile
を利用するには、新しい Jenkinsパイプラインジョブを作成し、 [パイプライン]セクションでPipeline script from SCM
選択し、この GitHub リポジトリのフォークされたバージョンの詳細を入力します。
パイプラインの最初の実行は、パイプラインで有効にする機能を決定するために選択できるいくつかのジョブ パラメーターを作成するため、「セットアップ」ステップとして扱う必要があります。
Fortify Jenkins プラグインをインストールして構成しておく必要があります。
Jenkinsfile
自体には多くのドキュメントがあるため、それを調べて、呼び出しを成功させるために他に何をする必要があるかを確認してください。
このリポジトリには、アプリケーションのビルドを自動化し、Fortify on Demand または Fortify ScanCentral for SAST を使用してコードをスキャンする、.github/workflows 内の多数の GitHub アクション サンプルが含まれています。
他のパイプライン ツールとの統合については、https://github.com/fortify/IWA-Java を参照してください。
開発と貢献の方法については、貢献ガイドを参照してください。
問題がある場合は、GitHub の問題を参照して、すでに議論されているかどうかを確認してください。
このアプリケーションは、GNU General Public License V3 に基づいて利用可能です。