Snyk Code で究極のShiftLeftを体験する【Snyk アドベントカレンダー】

この記事は[Snykを使ってセキュリティにまつわる記事を投稿しよう！【PR】Snyk](https://qiita.com/advent-calendar/2021/snyk)2日目の記事です。

前回は、[Snykの脆弱性データベースってどれくらい凄いの？](https://blog.zzzmisa.com/try-snyk/)でした。Snykの脆弱性データベース、PoCがあるのか、どうやって修正を行うのか、などなどめちゃくちゃ見やすいんですよね。

## 脆弱性診断は（しばしば）遅すぎる
皆さん、特に大きめの会社の中でコードを書いているような方々は、「脆弱性診断」というのを受ける機会が多いと思います。多くの場合、それは開発の終盤で計画されることが多いです。基本的には脆弱性というのはE2Eでみるというソリューションが多いから、テストの最終段階という見方がされる、あたりが主な理由でしょうか。

では実際に、全てが完成してから脆弱性診断を行っていいのかと言うと、そんな事はありません。特定の脆弱性というのは、そんなに多くのレイヤーをぶっ通していることは少なくて、あるレイヤーでの設定やコーディングがミスっている場合がほとんどです。**単に、確認手段がエンドツーエンドだから後ろに倒れているだけなのです。**

そして、こういった後ろに倒れた診断というのは、開発効率を大きく阻害します。

私は以前、似たような問題として「コードレビューの限界」という形で発表しています。

<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vQX-Z4U_PCaQ4SYUeOzILjn8x9GmodYtgWodkNilUXvXhxRlm2DQtOrMWK-psKBoyTfOb3v83E9R_ML/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

つまり、こういうことが容易に起こりえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/8a660d61-9e8d-2d76-2353-0c2526b966c1.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/607034d8-3f34-8be1-0279-f39eee1a977f.png)


## ではどうすればいいのか
先のレビュー資料では、**コードを書くときから、ペアプロやモブプロによってレビューしながら進めよう** としました。
これはは、同様の解法をある程度はセキュリティについても言うことができます。設計やコーディング段階から、セキュリティを考慮した取り組みをすればいいのです。

こういった取り組みは、QAフェーズをどんどん手前側に「Shift Left」と呼ばれ、多くの組織で取り入れられ始めています。

https://www.nri-secure.co.jp/glossary/shift-left

しかし、ここで一つ大きく問題になるのは、 **多くの組織でセキュリティに関することは別部署や別会社** になっていることが多いことです。つまり、チームでペアプロやモブプロを行おうにも、その観点で指摘してくれる人がいる、そんな組織は非常に少ないと思います。


## そこでSnyk Code です！！
Snyk Codeというのは、一言で言えば**「凄腕AIセキュリティエンジニア」**です。一日目でも触れられていたSnykの膨大なセキュリティリソースなどで学習をしたAIが、その場でコードをスキャンし、脆弱性やコードの改善点を指摘してくれます。（脆弱性に特化したGithub Copilotみたいなもの、と思ってもいいかもしれません）

Snyk Codeは、スキャンの一部としてももちろん動作するのですが、それよりもシフトレフトを体験できるのがVisual Studio CodeなどのIDEのプラグインとして取り込んだ場合です。実際の動作している様子はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/ef5fac16-6f53-f68f-cd7f-9271054e521d.png)

このように、コードを書きながら、リアルタイムに脆弱性のフィードバックを受けることができるのです。

## Snyk Codeの設定方法
Visual Studio Codeであれば、やり方は非常にシンプルです。ExtensionsでSnykと検索すれば以下のように表示されるはずで、それをインストールし、認証を行えばほぼ完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/795cc987-2f5b-ea98-9fb3-60c4a4aa4292.png)

<details><summary>補足: うまく接続できない人へ</summary><div>

上記でうまくいく、、、はずなのですが、なぜ異様に認証に時間がかかったりすることがあります。そういう場合は、一旦Snykにログインし、 [アカウントページ](https://app.snyk.io/account) にあるAPIトークンを、SnykのVSCodeの設定にあるAPIトークンに貼り付けると、うまく動きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447106/d0a5b935-e4c6-77c2-d451-57cdf8a811ba.png)

</div></details>

## Snyk Codeへの今後への期待
現状、残念ながらSnyk Codeの対応言語は比較的限られています（JS/TS、Python、Javaが公式サポート）

しかしながら、Snykは[OSSのスキャンツールとして有名なFossIDを買収](https://snyk.io/news/snyk-acquires-fossid-to-accelerate-worldwide-developer-first-security-adoption/)するなど、コードスキャンへのフィードバックが期待できる動きを見せており、今後C/C++やモバイル系など、様々な分野への展開が期待できます。

また、コードという意味ではSnykは[IaCのスキャン](https://snyk.io/product/infrastructure-as-code-security/)という領域にも取り組んでおり、こちらも今後CDKなど最新の環境への対応が行われていけば、さらにシフトレフトな開発が進んでいくと思います。

DevOpsが当たり前になったように、DevSecOpsも当たり前の文化になるのはもはや遠い未来の話ではないでしょう。その時代にむけた一歩として、Snykには非常に期待をしています。