前提条件: Git/Githubとの連携が出来ること、Mavenに関しての知識があること
Petclinicとは:
MavenまたはGradleを使ってビルドされたSpring Bootアプリケーションです。jarファイルをビルドして、コマンドラインから実行することができます(Java 17以降で動作確認)
以下のコマンドでgithubよりspring-petclinicをダウンロードし、mvnw packageコマンドによりspring-petclinicのjar/warをビルドし、java -jar target/*.jarコマンドで起動します。
git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
./mvnw package
java -jar target/*.jar
ローカル環境でPetclinicへアクセス出来ます。
この段階ではContrast agentは組み込まれておりません。
次にContrast mavenプラグインを利用してmavenビルドでのContrast agentの組込方法をご紹介します。
Contrast mavenプラグインとは:
Contrast Maven Pluginは、Java WebアプリケーションのMavenプロジェクトにおいてContrast Securityを簡単に組込むことができ、分析機能を含めることを支援します。
ゴールの概要
contrast:install Contrast Javaエージェントを統合テストに含め、Contrast Assessの実行時セキュリティ分析を提供します。
contrast:verify 統合テスト中にContrast Assessが検出した脆弱性のいずれもがプロジェクトのセキュリティポリシーに違反しないことを検証します(違反が検出された場合はビルドを失敗させます)。
contrast:scanMaven プロジェクトのアーティファクトをContrast Scanで解析し、静的解析を用いて脆弱性を検出します。
システム要件
Contrast Maven Pluginを動作させるための最小要件は以下の通りです。
Maven |
2.0 |
JDK |
8 |
Memory |
No minimum requirement. |
Disk Space |
No minimum requirement. |
使用方法
Contrast Maven Pluginの一般的な使用方法は、以下の通りです。
Contrast Maven プラグインは、ユーザーが Maven プロジェクトに 1 つまたは複数の Contrast Security 解析機能を含めることを支援します。このような解析はすべて Contrast に接続する必要があり、そのため各プラグインのゴールには Contrast 接続パラメーターが必要です。これらの接続パラメーターは環境変数に外部化することができます。spring-petclinic配下のpom.xmlに以下のように接続パラメータを記載する必要があります。サンプルのpomファイルを添付させて頂いておりますので参照ください。
<pluginManagement>
<plugins>
<plugin>
<groupId>com.contrastsecurity</groupId>
<artifactId>contrast-maven-plugin</artifactId>
<configuration>
<username>${env.CONTRAST__API__USER_NAME}</username>
<apiKey>${env.CONTRAST__API__API_KEY}</apiKey>
<serviceKey>${env.CONTRAST__API__SERVICE_KEY}</serviceKey>
<orgUuid>${env.CONTRAST__API__ORGANIZATION_ID}</orgUuid>
</configuration>
</plugin>
</plugins>
</pluginManagement>
それぞれのContrast接続パラメーターをContrastUIのどこから取得するのかに関しては以下のURLを参照ください。
https://docs.contrastsecurity.jp/ja/personal-keys.html
またオプションを含めたそれぞれのパラメータは以下を参照ください。
https://contrastsecurity.dev/contrast-maven-plugin/install-mojo.html (Goal:Install)
https://contrastsecurity.dev/contrast-maven-plugin/verify-mojo.html (Goal:Verify)
参考までに以下のようなオプションを追加することでより良い運用が可能となります。
<pluginManagement>
<plugins>
<plugin>
<groupId>com.contrastsecurity</groupId>
<artifactId>contrast-maven-plugin</artifactId>
<configuration>
<username>{UIユーザの電子メールアドレス}</username>
<apiKey>{API Key}</apiKey>
<serviceKey>{UIユーザのService Key}</serviceKey>
<orgUuid>{組織ID}</orgUuid>
<url>https://{Contrast UIのホスト名}/Contrast/api</url>
<appName>{アプリケーション名}</appName>
<environment>{サーバ環境}</environment>
<serverName>{サーバ名}</serverName>
<minSeverity>{深刻度}</minSeverity>
</configuration>
</plugin>
</plugins>
</pluginManagement>
備考:
environmentがサーバ環境設定箇所となります。例えば <environment>DEVELOPMENT</environment> とすれば開発環境となります。デフォルトのenvironmentはQAです。
また<minSeverity>{深刻度}</minSeverity> は verify ゴール設定時に mvn コマンドが失敗する際の深刻度設定となります。例えば <minSeverity>Medium</minSeverity> とした場合はMediumレベル以上の脆弱性が検出されて場合に mvn コマンドが失敗します(exit code 1 となります)。デフォルトはMediumとなっています。
Contrast Assess
Contrast Assessは、静的(SAST)、動的(DAST)、対話型(IAST)アプローチを組み合わせたアプリケーションセキュリティテストツールで、アプリケーションのセキュリティ脆弱性について高精度かつ継続的に情報を提供します。
Java WebアプリケーションのテストにContrast Assess分析を追加するには、Contrast Javaエージェントをアプリケーションと同時に起動する必要があります。contrast:installゴールはContrast Javaエージェントを取得し,${project.build.directory}/contrast.jarに格納します。
contrast:installゴールは,Maven Surefire Plugin,Maven Failsafe Plugin,Spring Boot Maven Pluginを自動的に検出・設定し,それぞれtest, integration-test,runゴールにContrast Javaエージェントを含めるように設定します。
ユーザーは、プロジェクトの統合テストフェーズでContrast Assessがプロジェクトのセキュリティポリシーに違反する脆弱性を検出した場合、Mavenビルドを失敗させるためにverifyゴールを含めることができます。
次の例では、contrast:verifyゴールを記載しているため、プロジェクトの統合テストに Contrast Java エージェントを含め、テスト中に "Medium" 脆弱性が検出された場合、ビルドを失敗させます。
<profile>
<id>assess</id>
<build>
<plugins>
<plugin>
<groupId>com.contrastsecurity</groupId>
<artifactId>contrast-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>install</goal>
</goals>
</execution>
<execution>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
※エラー例
上記のように深刻度がMediumの脆弱性を発見すると下記のようなエラーメッセージと共にBuildが失敗します。
[INFO] Trace: ハードコードされたパスワード、(エンタープライズライセンスを適用してください)
Trace Uuid: IN12-YN6U-D80K-GO84
Trace Severity: Medium
Trace Likelihood: Low
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:07 min
[INFO] Finished at: 2023-03-01T15:24:14+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.contrastsecurity:contrast-maven-plugin:2.13.2:verify (verify-with-contrast) on project spring-petclinic: Your application is vulnerable. Please see the above report for new vulnerabilities. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
セキュリティ解析と検証を伴う統合テストを実行するには、このプロファイルを有効にして検証ライフサイクルフェーズを以下のコマンドで実行します。
mvn verify -Passess
mvn install -Passess
どちらも実行内容は同様となり、結果も同じです。
Contrast Scan
Contrast Scan は静的アプリケーションセキュリティテスト(SAST)ツールで、Java Web アプリケーションの脆弱性を簡単に発見し、修正することができます。
Contrast Scan を使用して Java Web アプリケーションの Maven プロジェクトで脆弱性を見つけるには、スキャンゴールを使用します。このゴールは、解析のためにアプリケーションパッケージを Contrast Scan にアップロードします。
次の例では、スキャンプロファイルにスキャンゴールを含めています。
<profile>
<id>scan</id>
<build>
<plugins>
<plugin>
<groupId>com.contrastsecurity</groupId>
<artifactId>contrast-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
スキャンを実行するには、スキャンプロファイルを有効にしてMavenを実行します。
mvn verify -Pscan
またオプションを含めたScanのパラメータは以下を参照ください。
https://contrastsecurity.dev/contrast-maven-plugin/scan-mojo.html (Goal:Scan)
- sample_pom.xml10 KB