Snykを使用したOSSの脆弱性チェック
はじめに
ソフトウェアを開発する上でOSSを使用する機会が多いですが、使用するOSSのライセンスの問題や脆弱性があるかどうかをチェックすることは、ソフトウェアの品質を高めるうえで非常に重要になってきます。
OSSのチェックを行うためのツールとしてはいくつかあり、有名どころでいくとBlack DuckやSnykが挙げられます。
今回は、Snykを利用したOSSの脆弱性チェックを、自動化ツールGithubActionsと連携させて行う簡単な仕組みを構築しました。
Snykの特徴
Snykとはセキュリティプラットフォームで、docker、IaC、プログラム等の様々なソースコードの脆弱性を検知できるサービスとなっています。
様々なバージョン管理ツールやCI/CDツールをサポートしていて、連携がとりやすいことも特徴の一つです。
プランは無償プランから有償プランまでいくつか選べます。
無償プランでは、月にテスト回数の制限がありますが脆弱性のチェックを行うことができます。
※Snykの詳細については、公式ページが公開されているのでこちらをご覧ください。
GithubActionsとSnykの連携
それでは実際にSnykを使っていきたいと思います。
自動化ツールとしては、会社でも使用しているGithubActionsを用いたいと思います。
今回サンプルで作成するのは、ソフトウェア開発で使用しているOSS(grpcやprotocolbufferなど)をWorkspaceにダウンロードし、そのOSSの脆弱性を自動でチェックします。
SnykのWEB UIと連携して、チェック結果をUI上に表示させます。
併せて、結果ファイル(vuln.json)も出力します。
ファイル構成
フォルダ構成は以下の通りとなります。
|--.github
| |--workflows
| | |--snyk-scan.yml
|--README.md
ワークフローの定義ファイル(snyk-scan.yml)は、以下の通りとなります。
---
name: snyk-scan
on:
workflow_dispatch:
push:
branches:
- "develop"
- "main"
jobs:
scan-job:
name: scan-job
runs-on: ubuntu-latest
steps:
- name: Ceckout repository
uses: actions/checkout@v3
- name: Download rules_proto
run: |
curl -OL https://github.com/bazelbuild/rules_proto/archive/refs/tags/4.0.0-3.19.2-2.tar.gz
tar xfzv 4.0.0-3.19.2-2.tar.gz
- name: Download com_github_protocolbuffers_protobuf
run: |
curl -OL https://github.com/protocolbuffers/protobuf/archive/v3.19.2.tar.gz
tar xfzv v3.19.2.tar.gz
- name: Download com_github_grpc_grpc
run: |
curl -OL https://github.com/grpc/grpc/archive/2717aa8c9b768de99c811628af4e8c30d6c2da4f.tar.gz
tar xfzv 2717aa8c9b768de99c811628af4e8c30d6c2da4f.tar.gz
- name: Setup SNYK
run: |
curl https://static.snyk.io/cli/latest/snyk-linux -o snyk
chmod +x ./snyk
./snyk auth ${{ secrets.SNYK_API_TOKEN }}
- name: Scan source
run: |
set +e
./snyk test --unmanaged --all-projects --json-file-output=vuln.json
./snyk monitor --unmanaged
set -e
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: Results file
path: vuln.json
- name: Clean workspace
if: ${{ always() }}
run: |
chmod +w ${{github.workspace}} -Rf
rm -rf ${{github.workspace}}/*
DownloadステップでOSSをWorkspaceにダウンロードしています。
Setup SNYKステップで、Snyk CLIのダウンロードとAPIキーの認証を行っています。
(事前に、Snykへの登録およびAPIキーの取得とシークレットへの登録を行ってください。)
今回はSnyk CLIをダウンロードして行っていますが、Docker環境を用いてscanを実行することも可能です。
(参考:Snyk CLIを用いたC/C++プロジェクトのScan方法)
Scan Sourceステップでは、Scanの実行とSnykのWEB UIへの表示を行っています。
実行結果
GithubActionsの実行結果です。
結果ファイルとして、vuln.jsonファイルもUploadされています。
WEB UIにアクセスすると、以下のようにScanしたOSSの脆弱性を確認することができます。
今回は無償プランということでOSSの脆弱性の表示のみされますが、有償プランにすると各OSSのライセンスの管理をすることも可能となります。
おわりに
今回は、Snyk CLIを用いて直接ソースコードをScanしました。
しかし、ビルドツールであるBazelと連携したScanなども可能なので、Scan方法は状況に応じて適切なものを選択していきたいと思います。
また、まだ試せていない機能もたくさんあるので、随時アップデートしていきたいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません