LoginSignup
10
6

More than 1 year has passed since last update.

Snyk を使って iOS プロジェクトのライブラリ脆弱性を検査する

Last updated at Posted at 2021-12-05

Snyk(スニーク)とは?

1. 概要

logo.png

Snyk(スニーク)はデベロッパーファーストのセキュリティプラットフォームです。Snykは、コードやオープンソースとその依存関係、コンテナやIaC(Infrastructure as a Code) における脆弱性を見つけるだけでなく、優先順位をつけて修正するためのツールです。Gitや統合開発環境(IDE)、CI/CDパイプラインに直接組み込むことができるので、デベロッパーが簡単に使うことができます。

(引用:https://qiita.com/advent-calendar/2021/snyk)

簡単にいうと脆弱性を見つけるためのツールです。

2. ロゴ

ロゴはマスコット犬で「Patch(パッチ)」という名前がついています。
(セキュリティホールを修正するプログラムを「パッチ」というので、その辺から命名されたのかな?とか思ったり)

NFT

(引用:https://snyk.io/blog/snyk-6th-birthday-nft-gifts/)

最近だと NFT で出たりと運営側も結構気に入っているみたいです!笑

iOSプロジェクトへの導入

1. Synkで出来ること

synk for ios

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.

(引用:https://docs.snyk.io/products/snyk-open-source/language-and-package-manager-support/snyk-for-swift-and-objective-c-cocoapods

動作としては、プロジェクト内のPodfilePodfile.lockからライブラリとバージョンを見て、Snykが管理する独自データーベースと照らしあわせて検査するようです。この説明から、仕組み上はCarthageSPMも使えそうですが、まだ対応していないということでしょう。

ちなみに独自のデーターベースは公開されています。

2. 導入していく

① 登録

まずは公式サイトから登録を行ってください。
登録方法は公式が書いたQiitaを見てください。

② 検査する対象の選択

登録すると検査するリポジトリの対象を選ぶ画面になります。

sy_ex12.png

Github/Bitbucket/個別のリポジトリ の3つから選択可能です。
一番上の「Github」を選択するさらに詳細に設定を行えます。

❶ リポジトリのアクセス範囲を選択

- リポジトリ全部(パブリック&プライベート)
- リポジトリ全部(パブリックのみ)

どちらかを選択することができます。チームに所属している場合、そちらのリポジトリも対象になってしまうようなので、個別にリポジトリ設定する方がミニマムに行えて良いです。

❷ 自動で動作するオプションの設定

細かい設定として自動的に以下のことも設定できます。

- [ ] 新しいプルリクエストをにつき、新しい脆弱性をテスト
- [ ] パッチ(脆弱性を修正する)プルリクエストの作成
- [ ] 古い依存関係をアップグレードするプルリクエストの作成
- [ ] ソースコードの脆弱性テスト (リポジトリのクローン、コードのアップロード。最大24時間のキャッシュ。)

デフォルトですべてオンになっており、特に外す必要はないかと思います。

今回は1つ画面を戻って、個別のリポジトリ設定を選択していきます。

sy_ex34.png

色々と選択肢はありますが、iOSはないので、脆弱性をチェックしたいリポジトリのパスを自分で貼り付けます。

リポジトリを追加すると自動で Snyk のプロジェクトに追加され、以下のような画面に移動します。

sy_pr1.png

左側のタブで表示の設定などを切り替えることができます。
さらに中身を見てみると、脆弱性に問題がある場合は、詳細が表示されます。

sy_pr2.png

脆弱性にもスコアがあり、スコアに応じてレベル分けがなされているようです。今回は、依存関係であるnanopb325スコアMEDIUMレベルの脆弱性と判定されたようです。

リポジトリを追加するだけ検査できるのはとてもお手軽です!

3. 脆弱性のテスト

試しに脆弱性のあるライブラリを読み込んで、テストを行ってみました。データベースからCocoaPodsで問題のあるライブラリを適当にピックアップします。

demo library

今回はGPAC4iOSというライブラリを入れてみます。

gpac

追加後は pod install して Podfile.lock を更新するのを忘れないでください。

そして、Snykの管理画面を見てみると...

res1.png

見事に脆弱性のレベルが増えてます。中身を見ると

re2.png

このように詳細も見れました。

ちゃんと機能していることがわかり大変便利です!

終わりに

冒頭にも書きましたが、対応しているのがCocoaPodsだけなのが残念ですが、CarthageSPMも仕組み上は可能そうなので、Github Actionsでこねくり回せばできなくはないように思います。

少し手間ではありますが、CarthageSPMで提供されているライブラリは、大抵の場合はCocoapodsでも提供されているので、脆弱性をチェックするためだけのリポジトリを作っても良いかもしれません。

10
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6