Skip to main content

Language Server Protocolを活用したSnyk Security

著者
Headshot of Bastian Doetsch

Bastian Doetsch

feature dev challenge

2022年9月6日

0 分で読めます

Snykは、Visual Studio Code、IntelliJ、WebStorm、PHPStorm、GoLandなどのJetBrains IDE、そしてVisual Studio向けのプラグインや拡張機能を提供しています。しかし、お気に入りのエディターやIDEがVim、Emacs、Sublime、Eclipseの場合でも、日々の作業にSnykを取り入れたいと思ったことはありませんか?Eclipseプラグインを公開し、新しいSnyk Language Server Protocolも含めたことで、まもなく実現できるようになります。

多彩なエディターとIDE

現在、SnykはVisual Studio Code、Visual Studio、Eclipse、IntelliJプラットフォーム向けのプラグインを提供しています。これらのインテグレーションは機能が充実している一方、個別に開発・保守されているため、提供する機能はそれぞれ異なります。

すでにサポートしている4つのIDEで、Snykを利用する開発者の大部分をカバーしています。しかし、IDEやエディターの選択肢をさらに増やし、異なる環境で開発しながら、エンジニアリング作業でSnyk製品すべての充実したインテグレーションを利用したいという方もいます。これまでは組み込みのソリューションを提供できず、CLIをご案内するしかありませんでしたが、Language Serverによって状況が変わります。

Language Server Protocolの登場

Language Server Protocol(LSP)はMicrosoftが開発し、2016年にオープンソース化されました。VSCodeで広く使われており、IDEとの通信方法を標準化することで、コードのハイライトや注釈、修正案、コーディング支援(問題の報告機能を含む)を実現します。ほぼすべてのプログラミング言語に高機能なLanguage Serverが提供されているため、あらゆる環境で豊かなプログラミング体験が可能になりました。

Snykでは、このプロトコルを活用してIDEを問わずSnykの解析を提供する方法を検討し、LSPで問題や脆弱性を表示できると結論づけました。IDEごとに個別のインテグレーションを開発する代わりに、さまざまな開発環境にすでに備わっているLSPサポートを活用できます。Eclipse、VSCode、Visual Studio、Sublime、Vim、Atomなど、多くのエディターが標準でこの機能を備えています。新しいJetBrains FleetもLSPをサポートしています。

さらに、必要に応じてLSPを拡張でき、LSPをサポートするIDEもますます増えています。

Snyk Language Server

複数のIDEにおけるSnykプラグインと言語サーバープロトコルが、非ローカルネットワークを経由してSnyk API、CLI、Sに接続する構成図

Snyk製品をLanguage Server Protocolの背後に組み込む作業を始めるにあたり、最初のIDEとしてEclipseを選びました。Snykのバックエンドプロトコルとして利用するためです。Snyk Eclipseプラグインは他のプラットフォームほど機能が充実しておらず、Eclipseプラットフォームにはすぐに利用できるLanguage Serverプラグインがあったためです。LSPインテグレーションのLSP4eはすでにEclipseとの連携に対応しており、目的に合わせて拡張・設定するだけで利用できました。

Snyk Language ServerはGoで実装されているため、さまざまなプラットフォーム向けに単体で動作するバイナリを提供できます。Eclipseプラグイン向けに一般公開したばかりで、現在は対応する他のIDEプラグインへの追加にも取り組んでいます。これにより、あらゆる開発環境により迅速な改善を届けられます。

新しいEclipse Plugin 2.0

Eclipse IDEでJavaScriptのソースコードが表示され、Snykの脆弱性パネルに中程度の深刻度のCWE-770の警告と推奨される修正方法が表示されています。

NeoVimやSublimeなどのエディターでは、カスタムインテグレーションなしでLanguage Serverを社内テストしました。Snyk Eclipseプラグインは、Snykが正式にサポートする最初のインテグレーションとして、この機能を搭載・公開しています。

新しいEclipseプラグインは、Snyk Open Sourceだけでなく、Snyk IaC(Infrastructure as Code)とSnyk Codeの検出結果にも対応し、設定オプションも拡充しています。以前はSnyk Open Sourceのみの対応でした。

認証とダウンロード

必要なバイナリの認証とダウンロードは、必要に応じて実行されるようになりました。また、スキャンの進行状況やユーザーへの通知も表示されます。バイナリの自動管理が不要な場合は無効にでき、カスタムパスを指定して、すべてを自分で管理できます。

Snykの設定、ベータ機能の有効化、Language ServerとCLIのパス、テレメトリーのオプションを表示したEclipseの環境設定ウィンドウ

さらに、インテグレーションは以前より大幅に充実しました。Snyk Eclipse Pluginでは、コードエディター内で問題をハイライト表示し、Project ExplorerとPackage Explorerでは問題のあるファイルを、Outlineビューでは該当する要素をマークします。また、Snykの問題はEclipseのProblemsビューに追加され、フィルタリングもできます。

プラグインの起動時、またドキュメントを開いたときや保存したときにスキャンが自動で実行されます。プロジェクトのコンテキストメニューから手動で実行することもできます。

注釈とハイライト表示

Snykが問題を検出すると、該当する行に下線が引かれ、行番号の左側にもマークが表示されます。

adm-zip バージョン 0.4.7 と body-parser バージョン 1.17.1 の JSON 依存関係を示すコードスニペット

Problemsビュー

すべての問題がEclipseのProblemsビューに一覧表示されます。

コードエディターに表示されたSnykの検出結果。パッケージ内の任意コード実行、コードインジェクション、コマンドインジェクションの脆弱性が一覧表示されています。

Project Explorer

問題のあるファイルは、Project ExplorerビューとPackage Explorerビューでもハイライト表示されます。

routesフォルダにindex.jsファイルが含まれているファイルツリー

ホバー表示

問題(ここではSnyk Codeの問題)にカーソルを合わせると、問題の理解や修正に役立つ追加情報が表示されます。

レート制限のないファイル操作によって発生した、中程度の重大度のCWE-770脆弱性を示すSnyk Codeのスキャン。

Code Lenses

Code Lensesは、エディター内でコードを操作し、Language Serverにコマンドを送るための機能です。Code Lensが設定されたコード行の上に表示されます。ここでは、Snyk CodeのデータフローをCode Lensesで表示し、クリックひとつでデータフロー内の各箇所に移動できるようにしています。

241行目に警告マーカーが表示された、exports.import関数の宣言が見えるコードエディター。

Code Actions

Snyk Open SourceとSnyk IaCでは、ハイライト表示された問題の詳細な説明をブラウザーで開くことができます。

adm-zipの依存関係のバージョンと、ディレクトリトラバーサルおよび任意ファイル書き込みの脆弱性に関するセキュリティ提案のポップアップが表示されたコードエディター。

今後、EclipseはSnyk Language Serverを通じて提供されるすべてのSnyk製品に自動で対応します。

Snykを、すぐ手の届くところに

LSPにより、Snykの機能をこれまで以上に多くのIDEやエディターで利用できるようになります。Eclipseへの対応は大きな一歩ですが、開発者が使う主要な環境のほぼすべてがLSPをサポートしています。こちらをクリックして、使い慣れた環境で今すぐSnykを無料でお試しください。ご自身に合ったプラグインをインストールして、安全な開発を実現しましょう。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。