Snyk(スニーク)とは?
1. 概要
Snyk(スニーク)はデベロッパーファーストのセキュリティプラットフォームです。Snykは、コードやオープンソースとその依存関係、コンテナやIaC(Infrastructure as a Code) における脆弱性を見つけるだけでなく、優先順位をつけて修正するためのツールです。Gitや統合開発環境(IDE)、CI/CDパイプラインに直接組み込むことができるので、デベロッパーが簡単に使うことができます。
(引用:https://qiita.com/advent-calendar/2021/snyk)
簡単にいうと脆弱性を見つけるためのツールです。
2. ロゴ
ロゴはマスコット犬で「Patch(パッチ)」という名前がついています。
(セキュリティホールを修正するプログラムを「パッチ」というので、その辺から命名されたのかな?とか思ったり)
(引用:https://snyk.io/blog/snyk-6th-birthday-nft-gifts/)
最近だと NFT で出たりと運営側も結構気に入っているみたいです!笑
iOSプロジェクトへの導入
1. Synkで出来ること
iOSプロジェクトで使用する場合は、ライブラリの中身に脆弱性がないか確認してくれます。
現状は、CocoaPodsのみに対応しているようです。
We scan CocoaPods projects and examine your Podfile and Podfile.lock files. We then compare the specific versions of every direct and deep dependency in your project against our vulnerability database in order to build the project dependency tree accordingly.
Swift and Objective-C projects managed by CocoaPods can be imported from any of the Git repositories we support. In order to test your projects, we analyze your Podfile and Podfile.lock files.
動作としては、プロジェクト内のPodfile
とPodfile.lock
からライブラリとバージョンを見て、Snyk
が管理する独自データーベースと照らしあわせて検査するようです。この説明から、仕組み上はCarthage
やSPM
も使えそうですが、まだ対応していないということでしょう。
ちなみに独自のデーターベースは公開されています。
2. 導入していく
① 登録
まずは公式サイトから登録を行ってください。
登録方法は公式が書いたQiitaを見てください。
② 検査する対象の選択
登録すると検査するリポジトリの対象を選ぶ画面になります。
Github
/Bitbucket
/個別のリポジトリ
の3つから選択可能です。
一番上の「Github」を選択するさらに詳細に設定を行えます。
❶ リポジトリのアクセス範囲を選択
- リポジトリ全部(パブリック&プライベート)
- リポジトリ全部(パブリックのみ)
どちらかを選択することができます。チームに所属している場合、そちらのリポジトリも対象になってしまうようなので、個別にリポジトリ設定する方がミニマムに行えて良いです。
❷ 自動で動作するオプションの設定
細かい設定として自動的に以下のことも設定できます。
- [ ] 新しいプルリクエストをにつき、新しい脆弱性をテスト
- [ ] パッチ(脆弱性を修正する)プルリクエストの作成
- [ ] 古い依存関係をアップグレードするプルリクエストの作成
- [ ] ソースコードの脆弱性テスト (リポジトリのクローン、コードのアップロード。最大24時間のキャッシュ。)
デフォルトですべてオンになっており、特に外す必要はないかと思います。
今回は1つ画面を戻って、個別のリポジトリ設定を選択していきます。
色々と選択肢はありますが、iOSはないので、脆弱性をチェックしたいリポジトリのパスを自分で貼り付けます。
リポジトリを追加すると自動で Snyk
のプロジェクトに追加され、以下のような画面に移動します。
左側のタブで表示の設定などを切り替えることができます。
さらに中身を見てみると、脆弱性に問題がある場合は、詳細が表示されます。
脆弱性にもスコアがあり、スコアに応じてレベル分けがなされているようです。今回は、依存関係であるnanopb
が325スコア
でMEDIUMレベル
の脆弱性と判定されたようです。
リポジトリを追加するだけ検査できるのはとてもお手軽です!
3. 脆弱性のテスト
試しに脆弱性のあるライブラリを読み込んで、テストを行ってみました。データベースからCocoaPods
で問題のあるライブラリを適当にピックアップします。
今回はGPAC4iOS
というライブラリを入れてみます。
追加後は pod install
して Podfile.lock
を更新するのを忘れないでください。
そして、Snyk
の管理画面を見てみると...
見事に脆弱性のレベルが増えてます。中身を見ると
このように詳細も見れました。
ちゃんと機能していることがわかり大変便利です!
終わりに
冒頭にも書きましたが、対応しているのがCocoaPods
だけなのが残念ですが、Carthage
やSPM
も仕組み上は可能そうなので、Github Actions
でこねくり回せばできなくはないように思います。
少し手間ではありますが、Carthage
やSPM
で提供されているライブラリは、大抵の場合はCocoapods
でも提供されているので、脆弱性をチェックするためだけのリポジトリを作っても良いかもしれません。