DevOpsからDevSecOpsにステップアップするには?
まずはDevOpsやDevSecOpsについて確認しよう。もともとDevOpsとは、ソフトウェア開発ライフサイクルを短いサイクルで回し続けることで、開発のスピードを高めることを目的とする。しかしDevOpsにセキュリティを後付けしようとすると、オーバーヘッドが生じてしまい開発がスローダウンしてしまう。あるいはセキュリティが疎かになってしまう。開発スピードとセキュリティがトレードオフになってしまうのだ。そこでDevSecOps。開発ライフサイクル全体でセキュリティを組み込み、開発スピードとセキュリティの両立を目指す。
ではDevOpsからDevSecOpsに移行するにはどうしたらいいか。相澤氏はポイントを3つ挙げた。1点目はシフトレフト。下流(時間軸では右側)で取り組んでいたセキュリティの工程を全体で取り組むようにする。しかしそれでは先述したようにオーバーヘッドが生じてしまう。そこで2点目はSCA(ソフトウェア コンポジション解析)ツールなどを活用して自動化すること。さらに3点目はガバナンス。異なるチームが同じ目標へコラボレーションしていくのだから、セキュリティの基準を決めて守り、守られていなければ何らかの手を打つようにする。ここはシステム化で確実に実行することが重要になる。
ここで相澤氏は「DevSecOpsでセキュリティを担うのは誰か」と問いかけた。「全員」も正解だ。しかし誰が主役と思われているか。2020年にSnykが実施したアンケートによると、ソフトウェアに関しては開発者が85%となった。
人口も念頭に置いておきたい。世界全体で開発者は2700万人もいるのに対して、セキュリティ担当者(専門家)は400万人と言われている。相澤氏は「セキュリティの専門家に頼っていてはスケールできません。開発者がやらなかったら誰がやるのでしょうか」と呼びかける。
もう1つ、過去10~15年の変遷を振り返ってみよう。クラウドが浸透する前は、運用担当者がデータセンターでネットワークやサーバーを設定し、OSやミドルウェアをインストールして、ようやくアプリケーションをデプロイできた。ところが今はクラウドなので、OSをインストールしているのは実質的には開発者となる。なぜなら開発者がDockerfileで「FROM debian・・」などと書けばOSのインストールが終了したことになるからだ。かつてIT/Opが担っていた部分を開発者が行っているのだ。今では脆弱性の修正も開発者がコードを通じて行っている。
「DevOpsからDevSecOpsに移行するための重要なポイントはシフトレフトすること。そこでは自動化は欠かせません。そして共通の指標やガバナンスを持つことが非常に重要となります。そこでの主役は開発者の皆さんです」(相澤氏)
Snykを脆弱性の発見と修正をどのように行うか
これまで述べてきたことをSnykを使うとどうなるかを見ていこう。もともとSnykは「開発者がセキュリティにおいて重要な役割を担えるべきだ」という信念から創業した企業だ。単に開発者用のツールを提供しているだけではなく、開発者ファーストの目線で開発者が使うツールを提供しているスタンスに特徴がある。
クラウド時代のアプリケーションは下図のように表すことができる。最上位にアプリケーションコードがあり、そこから参照されるオープンソースライブラリーがある。今ではコンテナとしてパッケージ化されてデプロイされており、デプロイはIaC(Infrastructure as Code)で実行される。
これら4つの領域に対して、SnykはSnyk Code、Snyk Open Source、Snyk Container、Snyk IaCとして開発者向けセキュリティプラットフォームを提供している。共通しているのは開発者の体験を重視しており、開発者にアプリケーションの知見とセキュリティの知見を提供していると言える。
Snykならではの特徴は3つある。1点目は開発者へのエンパワーメント。言い換えると開発者を強力にサポートするということ。開発者はSnykを使うために従来のワークフローを変えることなく、親しみやすいツールでセキュアな開発ができる。2点目は自動修正機能。脆弱性を発見するツールは多くあるものの、Snykは発見だけではなく修正も可能であり、修正を自動適用することも可能だ。3点目はセキュリティの知見(脆弱性データベース)。脆弱性を修正するなら脆弱性情報が欠かせない。Snykはセキュリティ研究チームやAIに多額の投資をするほど力を入れている。
Snykの脆弱性データベースは脆弱性情報を大規模に収録してあり、正確かつ最新、修正に必要な情報も含まれている。相澤氏は「脆弱性データベースの親玉にあたるCVEは研究者や専門家向けで、どう修正するのかを知りたい開発者にとって親切ではありません。一方Snykは膨大な情報量、更新頻度の高さゆえに、Google、AWS、IBM、トレンドマイクロなどにご利用いただいています」と説明する。
デモで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をチェックしてみてください」と述べて相澤氏はセッションを締めた。