Skip to main content

SnykでJHipsterのセキュリティスキャン

Blog illustrations fipster feature

2020年10月8日

0 分で読めます

JHipsterは、最新のWebアプリケーションやマイクロサービスアプリケーションをすばやく生成、開発、デプロイできる、よく知られたオープンソースプラットフォームです。JHipster CLIを使うと、アプリケーションで使いたいフレームワークやプラットフォームを選択できます。

さまざまなフレームワークを簡単に組み合わせられます。たとえば、バックエンドにはSpring Bootを使ったJava、データベースにはMongoDB、フロントエンドにはAngularまたはReactを選べます。お気に入りのテストフレームワークを組み合わせれば、必要なボイラープレートを含むアプリケーションがその場で生成されます。

青い眼鏡と蝶ネクタイを身に着けた、ひげを生やした男性のイラスト。筆記体で「Hipster」と書かれている

セキュリティを組み込んだアプリケーションの作成

アプリケーションをスキャフォールディングし、複数のエコシステムを同時に使うと、選択した各エコシステムから多くの依存関係が取り込まれます。依存関係の健全性を常に把握することが欠かせません。利用している多数の依存関係のいずれかにセキュリティ上の問題が見つかった場合は、すぐに通知を受け取りたいものです。


JHipster security scanning with Snyk

コマンドラインでJHipsterプロジェクトをスキャンする

無料のSnyk脆弱性スキャナーを使って、アプリケーションの依存関係をテストします。JHipsterのインストールにnpmを使ったので、次のコマンドを実行するだけで、ローカルマシンにSnykをインストールできます。

npm i -g snyk

最初に認証を行います。スキャン機能を使うには、無料のSnykアカウントが必要です。snyk authと入力するとCLIがWebブラウザーを開くので、無料アカウントを作成するか、サインインしてください。すでにSnykアカウントをお持ちの場合は、APIキーsnyk auth <api key>を使うか、環境変数SNYK_TOKENに設定することもできます。

プロジェクトをスキャンするときは、次のコマンドを実行するだけです。

snyk test --all-projects

フォルダー内に複数のプロジェクトがある場合もあるため、all-projectsフラグの使用をおすすめします。このフラグを指定すると、Snykは現在のディレクトリとそのサブディレクトリにある複数のマニフェストファイルを検索します。

JHipsterで小規模なモノリシックアプリケーションを作成した場合、フォルダー内にはバックエンド用のJavaマニフェストファイルと、フロントエンド用のNode.jsマニフェストファイルの両方があるかもしれません。どちらもスキャンしましょう。

スキャン結果から、脆弱性のあるライブラリが含まれているか、簡単に修正できるかを確認できます。直接アップグレードできるバージョンがまだない場合でも、ライブラリを手動でアップグレードできることがあります。Mavenでの解決方法の例をご覧ください。

Java依存関係の脆弱性を一覧表示するターミナル出力。信頼できないデータのデシリアライズやサービス拒否の脆弱性と、アップグレードの案内が含まれています。

CI/CDパイプラインで依存関係をスキャンする

jhipster ci-cdを実行すると、CIパイプラインをいくつかの選択肢から作成できます。このパイプラインの一部として、依存関係もスキャンできると便利です。ここでもSnykを使います。必要なのは無料のSnykアカウントだけです。APIキーを使ってスキャンできます。

次の例では、JHipsterで作成できるさまざまなパイプラインにCLIを統合する方法を紹介します。最近ローカルマシンで使ったものと同じCLIで、同様の出力が得られます。

また、ビルド後も依存関係を監視したい場合があります。時間の経過とともに脆弱性が見つかることがあるため、依存関係を継続的に監視できると便利です。パイプラインでsnyk monitorを使う方法を紹介します。

Jenkins

Jenkinsパイプラインを選択すると、新しいsrc/main/docker/jenkins.ymlファイルが生成されます。次のコマンドでDockerコンテナを実行できます。docker-compose -f src/main/docker/jenkins.yml up

Jenkinsを使う場合、2つの方法があります。Jenkinsの画面からSnykプラグインをインストールし、パイプラインで使えるように設定できます。

または、Snyk CLIバイナリでアプリケーションをスキャンし、jhipster ci-cdジェネレーターが生成したJenkinsfileに処理を記述する方法もあります。

最新のSnyk CLIをダウンロードしてスキャンするには、次のステージをJenkinsfileに追加します。

注:(無料)アカウントのSnyk APIトークンを環境変数SNYK_TOKENとして追加する必要があります。

タキシードと蝶ネクタイを身に着け、赤い円形の背景の前で白い巻物を持つJenkinsのマスコット
Jenkinsfile
// Not required if you install the Snyk CLI on your Agent
stage('Download Latest Snyk CLI') {
   sh """
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
   """
}

// Run snyk test to check for vulnerabilities and fail the build if any are found
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Test using Snyk CLI') {
   sh './snyk test --all-projects'
}

// Run snyk monitor to create a snapshot and let it monitor by Snyk
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Monitor using Snyk CLI') {
   sh './snyk monitor --all-projects'
}

Jenkinsfileには3つのタスクが含まれます。

  • 最新のSnyk CLIバイナリをダウンロードする

  • Snyk Test — アプリケーションをスキャンして脆弱性を表示する

  • Snyk Monitor — 現在の状態のスナップショットを作成し、継続的な監視のためにSnykへ送信する

Snyk TestとSnyk Monitorのどちらにも--severity-threshold=<low|medium|high>を追加すると、指定した深刻度以上の脆弱性だけが通知されます。

Github Actions

GitHubをリポジトリとして使う場合、GitHub Actionsはパイプラインを構築する最も一般的な方法の1つです。jhipster ci-cdジェネレーターで「Github Actions」を選ぶと、JHipsterが.github/workflow/github-ci.ymlファイルを生成します。ワークフローフォルダー内のYAMLファイルは、プッシュのたびにGitHubによって「アクション」として実行されます。

再生、チェックマーク、保留中のステータスを示すアイコンがつながったGitHub Actionsのワークフローアイコン

Snykを統合する方法はいくつかあります。

個別のGithub Actions

Snyk Test用に個別のGitHub Actionsを作成することもできます。その場合は、ワークフローフォルダーに別のYAMLファイルを作成します。このアクションは、JHipsterが作成したパイプラインと並行して実行されます。

エコシステムに応じたアクションを追加する必要があります。アクションの例はこちらのリポジトリにあります。

生成されたパイプラインにSnykのテストを統合する

追加のステップとして、JHipsterが生成したパイプラインにSnykを統合することもできます。

まず、Snyk APIトークンを環境変数に追加します。スクリプトのenv部分に追加できます。

env:
   ...
   SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

トークンを外部に公開しないよう、Settings †’ Secrets †’ New secretを選択してシークレットに追加してください。

既存のSNYK_TOKENシークレットと、更新または削除するオプションが表示されたGitHubリポジトリの設定ページのシークレットセクション。

以下のステップを追加すると、次の処理を行えます。

  • 最新のCLIバイナリをダウンロードする

  • Snyk Testでアプリケーションをテストする

  • Snyk Monitorで現在のスナップショットを監視する

    • - name: Install Snyk CLI
       run: |
         curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
         chmod +x snyk
      - name: Snyk Test
       run: ./snyk test --all-projects
      - name: Snyk Monitor
       run: ./snyk test --all-projects

npmを使ってバイナリをインストールする方法もあります。ただし、パイプライン内にnpmがインストールされている必要があります。JavaScriptベースのフロントエンドを選択している場合は、すでにインストールされています。その場合は、「Install Snyk CLI」ステップを次の内容に置き換えられます。

- name: Install Snyk
 run: npm install -g snyk
- name: Snyk Test
 run: snyk test --all-projects
- name: Snyk Monitor
 run: snyk test --all-projects

Snyk TestとSnyk Monitorのどちらにも--severity-threshold=<low|medium|high>を追加すると、指定した深刻度以上の脆弱性だけが通知されます。

Travis CI

jipster ci-cdジェネレーターでこのオプションを選択すると、JHipsterは.travisファイルを生成します。スクリプトセクションに次の内容を追加するだけで、Snykを簡単に統合できます。

赤いTの文字が入った黄色いヘルメット、安全メガネ、赤い口ひげを身に着けた、漫画風の建設作業員
script:
...
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
- curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
- chmod +x snyk
- ./snyk test --all-projects
- ./snyk monitor --all-projects

…

Snyk APIキーを環境変数SNYK_TOKENとして追加する必要があります。Snyk TestとSnyk Monitorのどちらにも--severity-threshold=<low|medium|high>を追加すると、指定した深刻度以上の脆弱性だけが通知されます。

Circle CI

Circle CIを使う場合、2つの方法があります。インテグレーションのドキュメントの説明に従って、Circle CIのインスタンスでSnyk Orbを使用するよう設定できます。もう1つの方法は、JHipster ci-cdが生成したconfig.ymlに次の内容を追加し、最新バージョンのCLIでスキャンすることです。

白黒のCircleCIロゴ
       steps:
...
# Dependency scanning with Snyk.
# add Snyk API token as environment variable SNYK_TOKEN
 - run:
     name: install-snyk
     command: |
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
 - run: # run snyk test
     name: snyk test
     command: './snyk test --all-projects'
 - run: # run snyk monitor
     name: snyk monitor
     command: './snyk monitor --all-projects'
...

Snyk APIキーを環境変数SNYK_TOKENとして追加する必要があります。Snyk TestとSnyk Monitorのどちらにも--severity-threshold=<low|medium|high>を追加すると、指定した深刻度以上の脆弱性だけが通知されます。

GitLab CI

GitLab CIでも、Snyk CLIを使ってCIパイプラインでプロジェクトをスキャンできます。JHipster ci-cdが生成した.gitlab-ci.ymlファイルの末尾に、次の例を追加すると、プロジェクトをスキャンして監視できます。

オレンジ色のキツネのアイコンとグレーの「GitLab CI」の文字が入ったGitLab CIのロゴ
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
dependency_scanning:
 stage: release
 script:
   # Download latest CLI version
   - curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
   - chmod +x snyk
   # SNYK_TOKEN environment variable should be present and containing the api key
   # run snyk test to break build if needed and snyk monitor to monitor this snapshot
   - ./snyk test --all-projects
   - ./snyk monitor --all-projects

ここでも、Snyk APIキーを環境変数SNYK_TOKENとして追加する必要があります。Snyk TestとSnyk Monitorのどちらにも--severity-threshold=<low|medium|high>を追加すると、指定した深刻度以上の脆弱性だけが通知されます。

まとめ

サードパーティ製ライブラリにセキュリティ上の問題がないか確認することは、言うまでもなく重要です。脆弱性のあるライブラリが修正済みバージョンに置き換えられず、深刻な問題に発展した事例は数多くあります。Snykでスキャンすれば、開発中のローカルマシンでもCIパイプラインでも、こうした問題を防ぐのに役立ちます。

ご覧のとおり、JHipsterプロジェクトの依存関係は簡単にスキャンできます。この記事で紹介したCIパイプラインのコード例は、JHipsterのサンプルプロジェクトをご覧ください。JHipsterで素早く開発し、Snykで安全を守りましょう。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

続きを読む

illustration hero ai
Blog

PHPが重大な未認証RCEの脆弱性2件を修正(CVE-2026-109618、CVE-2026-109619):今すぐアップデート

PHPのリクエスト処理に重大な脆弱性が2件あり、未認証のリモートコード実行につながるおそれがあります。修正版にアップグレードするか、旧バージョンにはベンダー提供のバックポートを適用してください。

blog feature ai lilac
Blog

エージェント型修正で脆弱性バックログをプルリクエストに変える

Evo Remediation Agentがオープンプレビューで利用可能になり、Evo Agentic AppSecに依存関係の自動解決機能が加わりました。AppSecチームは継続的な修正キャンペーンを実施できるようになりました

AI Background min crop
Blog

AIが、あなたが受け入れてきたあらゆるリスクを一気に顕在化させる:AI Security Panel: Unfilteredから得た7つの洞察

AIによって攻撃はより安価かつ高速になり、組織がすでに抱えているリスクが露呈しています。4人のセキュリティリーダーが、機械の速度に対応する防御と迅速な修復が今不可欠である理由を語ります。