3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Snykを使ってセキュリティにまつわる記事を投稿しよう!【PR】SnykAdvent Calendar 2021

Day 3

snyk を使ってプロジェクトのセキュリティ管理を(できるだけ)楽にする.

Last updated at Posted at 2021-12-02

はじめに

この記事はSnykを使ってセキュリティにまつわる記事を投稿しよう!【PR】Snykの3日目の記事です.

普段の開発で「セキュリティや脆弱性には気を付けないといけない」と思っていても実際に行うのは簡単ではないですよね.

  • 書いているコードにセキュリティリスクがないか
    • 書いている人が確認する?レビュワーが確認する?両方?
    • XSSやCSRF・SQLインジェクションなど様々な場合について考えられる?
  • 使用しているライブラリなどに重大な脆弱性がないか
    • 使っているもの全て確認する?
    • どれくらいの頻度で確認する?
    • どうやって修正すれば良い?どのバージョンに上げれば良い?

パッと思いつくだけでも,考慮すべきことがたくさんあります.特に,個人開発やOSSではセキュリティレベルを担保することはかなり難しいと思います.

そこで今回は, snyk(スニーク)を使って上記を自動化したいと思います.
(スニークって初見で読むの難しくないですか...?)

snykを使うと上記の考慮事項を以下のように解決できます.

  • 書いているコードにセキュリティリスクがないか
    • 書いている人が確認する?レビュワーが確認する?両方? -> snykが確認してくれる
    • XSSやCSRF・SQLインジェクションなど様々な場合について考えられる? -> snyk codeでチェックする
  • 使用しているライブラリなどに重大な脆弱性がないか
    • 使っているもの全て確認する? -> snyk Open Sourceで(OSSに関しては)全て見てくれる
    • どれくらいの頻度で確認する? -> snyk Open Sourceで定期的に確認
    • どうやって修正すれば良い?どのバージョンに上げれば良い? -> snyk Open SourceでPRを自動作成

準備

snykを使うにあたって,アカウントを作成する必要があります.とはいえGithubやGoogleアカウントと連携できるので,とても簡単に作れるはずです.
今回はGithubアカウントで登録することで,Githubとの連携が済んでいることを前提に話します.他のアカウントを使った場合も,登録後に表示されるダッシュボードのintegrationタブから簡単にGithub連携ができるはずです.

上記記事に従ってアカウントを作成してください.

本題

実際に snyk の機能を使っていきます.snykはいくつかの機能に名前が分かれています.まずはライブラリなどの脆弱性に関する snyk Open Sourceを体験してみた後,静的解析によってコードに危険性がないかチェックしてくれる snyk Code を使用してみます.

snyk Open Source

snyk Open Source は 定期的に使用しているライブラリなどに脆弱性がないか,あれば自動で修正するためのPull Requestを作成したりと,使用しているオープンソースライブラリに問題がないか確認してくれる機能です.

準備でアカウントを作成できていれば,ダッシュボードにアクセスできるようになっているはずです.

アクセスすると,右上に「Add project」ボタンがあるので押します.
スクリーンショット 2021-11-23 17.53.00.jpg

試しに,僕の個人開発であるポートフォリオをimportしてみたいと思います.
追加したいプロジェクトにチェックを入れ,右上の「Add selected repositoriesボタンを押せばOKです.Settingsで検査を除外するフォルダの指定など,細かい設定を行うことができまが,今回は変更せず実行します.
スクリーンショット 2021-11-23 17.58.08.jpg

しばらく待つと,深刻度Highな懸念が1つあることが表示されました.
スクリーンショット 2021-11-23 18.03.46.jpg

クリックして詳細を見てみます.
スクリーンショット 2021-11-23 18.10.22.jpg

どうやら next@12.0.1で使用されているshell-quote@1.7.2に任意コード実行(Remote Code Execution)の脆弱性が存在するようですね.説明を読むと,「exec関数を使って実際のシェルに出力を渡すと任意コードが実行される」とあるので,必ずしも危険なわけでは無いようです.しかし,next@12.0.2にアップグレードすると修正できるとも書いてあるので,せっかくならアップグレードしてしまいましょう.
右下にある「Fix this vulnerability」ボタンを押します.

すると,修正する脆弱性とPull Requestを作成するボタンが表示されたページに移動します.
スクリーンショット 2021-11-23 18.11.29.jpg

「Open a Fix PR」ボタンを押すと,早速Pull Requestを作成してくれました.

あとはいつも通りPull Requestをレビューして,マージすればOKです!

今回は手動で修正のPull Requestを作成しましたが,デフォルトでは毎日自動でスキャンし,Pull Requestを作成してくれるはずです.

また,デフォルトで該当プロジェクトのCIにもsnykが追加され,PRを作成すると,追加された依存に脆弱性がないかなどをチェックしてくれます.
スクリーンショット 2021-11-23 18.30.43.jpg

Projects一覧の歯車ボタンから設定画面へ移動することで,どれくらいの頻度でスキャン・Pull Request作成をするか選べます.

スクリーンショット 2021-11-23 18.19.04.jpg

スクリーンショット 2021-11-23 18.22.12.jpg

自動PRでメジャーバージョンのアップグレードも行うかどうかなど,さらに細かい設定はアイコンの左にある歯車ボタンからSettingsを開き
スクリーンショット 2021-11-23 18.25.15.jpg

IntegrationsのGithub->Edit Settingsから行えます.
スクリーンショット 2021-11-23 18.27.06.jpg

snyk Code

snyk Codeは静的解析によってアプリケーションコードに危険性がないかをチェックしてくれる機能です.
既に存在するプロジェクトのコードをスキャンすることもできますし,JetBrains系IDEやVSCodeと連携してリアルタイムにチェックすることもできます.

今のところ

  • Java
  • JavaScript and TypeScript
  • Python
  • PHP
  • C#

に対応しているようです.

既に存在するプロジェクトをスキャンする

まずは右上にある歯車ボタンから設定を開きます.
スクリーンショット 2021-11-23 18.25.15.jpg

そしてsnyk Codeを有効にします.
スクリーンショット 2021-11-23 20.09.52.jpg

再度projectをimportしなおす必要があるので,メニュータブの「Projects」から再度「Add project」ボタンを押してimportします.

すると,「Code analysis」が追加されています.
スクリーンショット 2021-11-23 20.31.39.jpg

今回は危険性のあるコードが発見されませんでしたが,発見されると詳細ページには以下のように表示されます.(ちなみにこれはテストコードなので問題ありません)
スクリーンショット 2021-11-23 20.34.12.jpg

どのように修正すれば良いかも表示してくれます.素晴らしい...
スクリーンショット 2021-11-23 20.36.59.jpg

VSCodeの拡張機能として使う

開発中に問題のあるコードを指摘してもらいましょう.
以下の拡張機能をVSCodeにインストールします.
https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner

snykのアイコンがサイドバーに表示されるので,アカウントを認証します.
スクリーンショット 2021-11-23 20.41.10.jpg
スクリーンショット 2021-11-23 20.41.20.jpg

実際に脆弱性のあるコードを書いてみましょう

index.js

eval(location.hash);

exec(location.hash);

コードを書いて保存すると,コードスキャンが実行されます.
どこに脆弱性があり,どんな危険性があるかも説明されていますね.
スクリーンショット 2021-11-23 21.06.43.jpg

さいごに

実際にsnykの様々な機能を使ってみましたが,非常に直感的に設定ができますし簡単に実行できたので使いやすかったです.今回紹介した機能以外にも,コンテナイメージの脆弱性チェックやTerraformやCloudFormationなどのIasSのスキャンなどを行える機能もあるので,是非使ってみてください!

参考

3
3
0

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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?