デモでSnyk Open SourceとSnyk Codeの動きを確認しよう
相澤氏は実際にSnykで脆弱性をどのように検知し、どのように修正するかをデモした。今回はSnyk Open SourceとSnyk Codeを用いる。
Snykは開発ライフサイクルのあらゆる場面で実行することができる。開発者はコードを書きながらIDEと連携して脆弱性やライセンスポリシー違反などのテストと修正を行う。新たな脆弱性にはJira Issueを自動作成することもできる。開発したコードは多くの場合Gitに保存されるため、Gitからテストし、修正プルリクエストから修正、パッチ適用、アップグレードしてマージする。次はCI/CDパイプラインのビルド、テスト、デプロイでも、自動テストを実行できる。テスト失敗時にはポリシーに従い、ビルドをブロックする。デプロイ後の本番環境にも、Log4Shellのように突然脆弱性が発生することがある。Snykは定期的にモニタリングし、新しい脆弱性が見つかったらアラートを発信する。
あらゆる場面でSnykを活用できることに加えて、あらゆるツールとの連携もSnykの強みであることも特筆しておこう。「だからこそ、皆さんの仕事のやり方を変えることなく、Snykをご利用いただけます」と相澤氏は力をこめる。
実際にオープンソースの脆弱性に対応しようとすると、次のような課題に直面する。脆弱性が大量であるため、効率的に対処していく必要がある。そして参照先で脆弱性が発見されることもあるため、参照先や依存関係も確認する必要がある。さらに繰り返しになるが、ある日突然新しい脆弱性が発見されることもあるため、情報をいち早くつかみ、継続的に対応していく必要がある。
デモではGitHubにあるアプリケーションの脆弱性をSnyk Open Sourceでスキャンした(事前にGitHubとの連携をすませてある)。SnykからGitHubをクリックし、自分のレポジトリ一覧から対象のアプリケーションを選択する。するとSnykはそれをインポートしてスキャンを開始する。ここでSnykはマニフェストファイルを読み込み、パッケージを(直接・間接両方とも)リストアップし、脆弱性をチェックしている。
スキャンを終えると、発見された脆弱性が表示される。発見された脆弱性が多数ある場合には、プライオリティスコアに着目するといいだろう(画面右上に表示されている)。このスコアはCVSSのスコア、悪用されやすさ、修正があるかどうかを総合したSnyk独自のスコアとなる。1000に近いほど優先順位が高くなる。
脆弱性をチェックする時に重要なポイントは「①どのような脆弱性か」「②どこから発生しているか」「③どう修正するか」だ。デモで表示された脆弱性なら、①は「Uninitialized Memory Exposure」なので初期化されていないメモリ領域からのデータ漏えいと分かる。②は「jasonwebtoken@0.4.0」などとなり、間接的に参照しているパッケージから来ていることが分かる。そして③は「base64url@3.0.0」とあるので、base64urlを3.0.0にアップグレードする必要がある。他にもSnyk画面から詳しい情報を調べることができる。
脆弱性が検出できたので、修正していこう。Snyk画面から[Fix these vulnerabilities](これらの脆弱性を修正する)から行う。もし実害がないと分かれば[Ignore]で無視してもいい。その時はコメントを添えておくといいだろう。また[Create a Jira issue]からJiraを使うこともできる。
[Fix these vulnerabilities]をクリックすると、修正対象がリスト表示されるので確認する。中にはメジャーバージョンアップする必要があり、互換性を確認する必要があるものもある。対象を確認し[Open a Fix PR]をクリックすると、Snykがプルリクエストを作成する。
次にカスタムコードの脆弱性をSnyk Codeで確認する。特徴はスキャンのスピードと精度の高さ(誤検知の少なさ)だ。ここでも大量に脆弱性が発見されたので、プライオリティスコアから大事なものから確認していく。カスタムコードの場合、データがどこから入り、どう処理されて、どう出力されたのか把握する必要がある。デモではSnyk画面からコードを追ってみるとクロスサイトスクリプティングになっていることが分かった。
「SnykはIDEからスキャンし、その場で修正の提案をしてくれます。コードを書いてスキャン、脆弱性があったら修正、これを繰り返すことで、スピーディーな開発とセキュリティ向上を両立させることができます」(相澤氏)
ガバナンスについては、レポーティング機能がある。現在どれだけ脆弱性があるのか、また過去の推移もグラフで表示される。Log4Shellのように突然上司から「ニュースで見たけど、うちは大丈夫なのか?」と質問されても、SnykからCVS番号で検索すればすぐに状況を把握できる。
なおSnykの顧客はLog4Shellの修正を、業界標準と比較して100倍速いスピードで完了したという調査結果がある。1社あたり開発者の作業時間を280時間削減できたことになる。「ぜひSnykをチェックしてみてください」と述べて相澤氏はセッションを締めた。