Snyk(スニーク)は、プロジェクトのソースコードを解析し、含まれる脆弱性(セキュリティ上の弱点) を発見するためのツールです。
=> Snyk
例えば、プロジェクトで使っているライブラリが古いことによる脆弱性を検知したりできます。
また、ご自身が書いたソースコードが含んでしまっている脆弱性を検出することもできます。
法人など、大規模プロジェクトの開発では特にセキュリティチェックが重要ですが、小規模プロジェクトや個人開発においても、もちろん大事ですよね。
Snyk は無料で試すこともできるので、小さな Ruby on Rails プロジェクトで使ってみることにしました。
Synk に登録する
まずは無料アカウントを登録しましょう。
Google や GitHub アカウントをそのまま使えるので楽チンです。
なお、Google アカウントで登録したとしても、GitHub リポジトリとの連携には特に困らなかったので安心してください。
Snyk の初期設定を行う
基本的には画面の指示に従っていけばOKです。
今回は GitHub リポジトリ内の脆弱性をスキャンしてみます。
初期設定の途中で「Snyk にどんなスキャンをさせるか」」を設定することができます。
すべて ON にすると、以下のような形で Snyk が働くようです。
- 新しくプルリクエストを作成したときに脆弱性をスキャン
- 使っている OSS に脆弱性がある場合、修正するプルリクエストを自動的に作成
- ライブラリの依存関係を自動的に修正するプルリクエストを自動的に作成
- ソースコードを静的解析して脆弱性の有無を検知
GitHub リポジトリの脆弱性を検知してみる
試しに、2年以上前に作った Ruby on Rails ベースのリポジトリをスキャンしてもらいました。
もう動かしていないリポジトリですので、堂々と見せながら実験します。
対象のリポジトリでは Ruby 2.7.0 を使っていますが、執筆時点では Ruby 2.7.8 が最新です。
セキュリティアップデートを含んだバージョンアップが行われているため、いろいろと脆弱性が検知されることを期待しています。
さて、実際に試してみました。
以下のように「Dockerfile」「Gemfile.lock」「package.json」など、各種 OSS・ライブラリのバージョン情報が記載されたファイルをベースに検知してくれています。
詳細を確認してみると、確かに Ruby のバージョンに関して指摘してくれています。
「使用する Docker イメージのアップグレードをした方がいいよ〜」と言った指摘ですね。
Snyk で脆弱性修正のプルリクエストを作成してみる
Snyk を使うと、使用している OSS バージョンに基づく修正ぐらいであれば、各種 lock ファイルを修正するプルリクエストを簡単に作れるようです。
今回はもう使っていないリポジトリなので、気軽に試してみましょう。
ボタンをぽちぽちすると、以下が実際に作成されたプルリクエストです。
通常、プルリクエストの概要欄は自分で書きますが、Snyk が修正の概要・変更理由などを自動的に書いてくれるので楽ちんですね!
Snyk が作成するプルリクエストに関する注意点
すぐにマージせずに検証する
モノによっては、このようにメジャーバージョンまで一気に上がってしまう場合もあります。
今回ですと、Gemfile.lock に対するプルリクエストを作成すると Rails のバージョンを 6系から 7系に一気に上げる変更になっていました。
これだけ一気にバージョンアップすると、破壊的な変更を含んでいることもありますので、何も考えずにマージしてしまうとアプリが動かなくなる可能性もあります。
(もちろん、マイナーバージョンだろうと事前に検証は必要ですが)
そのため、プルリクエストを作って即マージするのではなく、作られたブランチで動くことを必ず検証するようにしましょう。
Snyk を Ruby on Rails プロジェクトで使ってみた感想
機能変更などの OSS・ライブラリのバージョンアップはスルーしたとしても、セキュリティ上の理由があればどのプロジェクトでもバージョンアップは必要です。
しかし、小規模プロジェクトや個人開発などの場合、チェックする意欲や時間がないかもしれません。
そんな時、セキュリティに関するチェックだけでも自動的に行い、さらに修正方法の提案まで行ってくれるのは便利だと思いました。