クラウドネイティブアプリケーションセキュリティの道を切り拓く
2020年12月21日
0 分で読めます2020年は私たち全員にとって非常に困難な年でした。しかし、新年が目前に迫る今、エンジニアリングチームとプロダクトチームの取り組みを振り返る絶好の機会です。厳しく過酷な状況の中で成し遂げられたこの努力は、Snykを市場をリードする開発者ファーストのクラウドネイティブアプリケーションセキュリティソリューションとして確立するのに貢献しました。
クラウドネイティブアプリケーションセキュリティとは?
数年前まで当たり前だったソフトウェア開発の姿は、変化しました。
アプリケーションの開発とデプロイのプロセスは、より迅速で頻繁なデプロイを実現する形へと変わりました。また、アプリケーションを構成するコードも変化し、オープンソースコード、独自コード、コンテナ、Infrastructure as Codeを組み合わせるケースが増えています。
アプリケーションセキュリティの観点から見ると、こうした変化は独自の課題をもたらし、それには独自のソリューションが必要です。今年のSnykConでは、業界で唯一の開発者ファーストのソリューションとして、DevOps環境でクラウドネイティブアプリケーション全体を迅速かつ安全に構築できる、当社のCloud Native Application Securityプラットフォームを発表しました。
それでは、今年を振り返ってみましょう。
1. SDLC全体を通じて早期に統合
脆弱性管理の第一歩は、まず問題の存在を特定することです。2020年、Snykをアプリケーションのライフサイクルのさまざまな段階に簡単に導入できるよう、多くの取り組みを行いました。新しいIDEプラグインの提供、GitHubおよびBitbucketとの統合の改善、プライベートレジストリやコンテナレジストリとの新たな統合などが含まれます。
IDE
開発者のローカル開発環境にセキュリティテストを組み込むことは、セキュリティを開発プロセスの早い段階に移すうえで重要です。開発者は問題をできるだけ早期に発見して修正でき、修正コストが高くなる前に対処できます。2020年、Snykは従来からのEclipseとIntelliJのサポートに加え、主要なJetBrains IDEすべて(WebStorm、PyCharm、PhpStorm、GoLandなど)へサポートを拡大しました。

Snyk CLI
Snyk ContainerとSnyk IaCが加わり、Snyk CLIでできることがこれまで以上に広がりました。既存および今後の機能をサポートするためCLIの動作をいくつか更新する必要がありましたが、その結果、ワークフローが改善され、新たな機能が加わりました。
Snyk Containerのテスト
従来のsnyk test --dockerコマンドに代わり、新たにsnyk container testコマンドと、対応するmonitorサブコマンドが導入されました。CLIの構文だけでなく、新しいcontainerコマンドでは内部にもさまざまな改善が加えられています。
名称の変更からもわかるように、Dockerコンテナ以外もスキャンできるようになりました。SnykはあらゆるOCIコンテナに対応しており、Dockerエンジンが起動していない場合もスキャンできます。podmanユーザーの方や、Javaアプリでjibなどのツールを使ってビルドしている方も、Snykでスキャンできます。
コンテナイメージからファイルのアーカイブを抽出し、イメージそのものではなくそのアーカイブをスキャンしたい場合にも、Snyk Containerで対応できるようになりました。
ベースイメージの脆弱性を減らすためにdistrolessイメージを使用している場合も、新しいSnyk CLIで正しくスキャンできます。
さらに、
containerとiacのサブコマンドが追加されたことで、組み込みのヘルプシステムも整理・改善され、必要なときに状況に応じたヘルプを確認できます。
Snyk IaCのテスト
Snyk Infrastructure as Code (IaC)は昨年リリースした3つ目の主要製品です。詳細は後ほどご紹介します。当初、Snyk IaCはGitリポジトリからのスキャンのみをサポートしていましたが、CIパイプラインの一環としてテストを自動化したいというお客様の要望を受け、Snyk CLIでのテストにも対応しました。snyk iac testコマンドを使って、KubernetesやTerraformのファイルをスキャンできます。
Gitベースのワークフロー
今年は、既存のさまざまなGitベースのソースコード管理システムとの統合の改善にも注力し、開発者にとって使いやすく、それぞれのユーザーにより自然な操作感を提供できるよう取り組みました。
GitHub
ご想像のとおり、GitHubとの統合はSnykで最もよく利用されている連携方法です。そのため、できる限りスムーズに利用できるよう、継続的に新機能を提供しています。
まず、Snykが修正PRやアップグレードPRを作成する際に使用するGitHubアカウントを設定するオプションと、リポジトリ内の特定のコントリビューターにこれらのPRを割り当てる機能を追加しました。また、コントリビューターがSnykのテスト失敗をスキップするようリクエストできるオプションも導入しました。

GitHubセキュリティ統合
GitHubは10月にサードパーティのセキュリティ統合機能をリリースしました。これにより、Snyk ContainerとSnyk IaCの検出結果を、リポジトリのGitHub Securityタブに直接表示できるようになりました。以前からGitHub Actionsをサポートしており、この新機能によって、GitHubを幅広く利用している開発者は、GitHubのUIでセキュリティの詳細なレポートを確認できます。

SCMからのDockerfileスキャン
コンテナには多くの利点がありますが、その一方で、イメージが作成に使用したDockerfileとは別に保存されるという側面があります。セキュリティの観点では、コンテナが安全かどうかを判断できるのは、ビルドしてスキャナーで確認した後になってしまいます。
今まではそうでした。Snykはすでにお使いのSCMツールと統合しており、Dockerfileは通常コードと一緒に保存されています。そこで、リポジトリから直接Dockerfileを検出してスキャンする機能を追加しました。選択したベースイメージを確認し、そのイメージに含まれる脆弱性を報告します。これにより、コンテナのスキャンを簡単に始められ、特に導入初期に多くの脆弱性の原因となるベースイメージについて、すぐに結果を確認できます。
さらに、検出されたDockerfileと、実行したコンテナイメージのテストを関連付けられるようになりました。Snyk Containerでは以前からこの2つのオブジェクトを関連付けることができましたが、この機能によってプロセスが簡素化され、Dockerfileを探してGitリポジトリを調べる必要がなくなり、どのイメージがどのDockerfileに紐づいているかも簡単に把握できます。
Bitbucket
Bitbucket Cloudのユーザーにとって、SnykがCode Insightsのサポートを追加したことは朗報でした。Bitbucketのユーザーインターフェース内で、検出された問題を確認できるようになりました。また、BitbucketのCI/CDパイプラインの一環として脆弱性スキャンに使用するSnyk Pipeも強化し、Code Insightsに対応させました。
Azure Repos
さらに、Azure Repos Serverのサポートを追加しました。これにより、Azure Repos(クラウド版と新たにオンプレミス版)、Azure Pipelines、Azure Container Registry、Azure Functionsに至るまで、Microsoft Azureエコシステム全体をサポートします。
2. エコシステムのサポートを強化
2020年には、既存のプログラミング言語のカバレッジを改善するとともに、Snykのセキュリティテストを拡張し、より多くのパッケージマネージャーとエコシステムに対応しました。
Java
Gitリポジトリ(GitHub/GitLab/Bitbucket/Azure Repos)からインポートしたJava Gradleプロジェクトのセキュリティスキャンを改善するため、gradle.lockfileファイルのサポートを拡充しました。ロックファイルにはさまざまな利点がありますが、Snykのセキュリティテストでは、より正確で包括的な結果を得られます。詳しくはこちらをご覧ください。
Python
このエコシステムの人気を反映して、SnykユーザーがテストするPythonプロジェクトの数は着実に増加しています。そこで今年は、Pythonを使用する組織がコードベースをより安全に保護できるよう、さまざまな改善を行いました。成長著しいPythonのパッケージ・プロジェクト管理ツールを利用するユーザーが、Snyk CLIでプロジェクトのテストと監視を行えるよう、Poetryをサポートしました。また、SCM統合にPipenvのサポートを追加しました。Pythonの脆弱性を簡単に修正できるよう、Python向けの自動修正ワークフローも追加しました。

Snyk CLIでPoetryプロジェクトをスキャン
Golang
Golangはここ数年で急速に普及しており、Snykユーザーにも人気の言語です。2020年には、この言語のパフォーマンスとカバレッジの両方を改善するために投資しました。depGraphsへの移行によりGoプロジェクトのスキャン体験が大幅に向上し、Kubernetesのような大規模プロジェクトも非常に高速にスキャンできるようになりました。CLIスキャンですでに利用可能だったGo Modulesプロジェクトのサポートは、GitベースのSCM統合にも拡大しました。また、Goコンテナ内の脆弱性検出を可能にするための取り組みも行いました。

KubernetesとTerraform
Snykは2020年に3つ目の正式な製品、Snyk Infrastructure as Code (Snyk IaC)をリリースしました。これにより、デプロイ構成がまだコードの段階にあるうちにスキャンできるようになり、デプロイ時に作成するリソースの設定が適切であることを確認できます。宣言型マニフェストで定義されるアプリケーションやクラウドインフラが増えるにつれ、アプリケーションとサービスの安全性を確保する役割を担う開発者も増えています。コードをコミットするたびに変更が加わる可能性があるため、規模に応じて対応するには、デプロイ前に問題を発見して修正できるよう、パイプラインにセキュリティを組み込む必要があります。

3. 脆弱性バックログの優先順位付け
脆弱性のバックログは、すぐに何千件もの問題で膨れ上がりがちです。すべての問題に対処するのは不可能ですし、通常はその必要もありません。では、どこから始めればよいのでしょうか?
そのため今年は、開発チームとセキュリティチームが、セキュリティへの効果を最大化するためにどこへ注力すべきかを判断できるよう、大きく力を入れました。その一環として、開発者ファーストの優先順位付け機能を数多く導入し、問題を精査して効果的に修正の優先順位を決めるために必要なセキュリティツールとコンテキストを提供しています。
優先度スコア
Snykの新しいPriority Scoreは、独自のアルゴリズムを活用する高度な組み込み型スコアリングシステムです。CVSSスコア、修正方法の有無、既知のエクスプロイト、脆弱性が発見されてからの期間、攻撃経路から到達可能かどうかなど、幅広い要素を評価します。算出されたスコアはSnyk UIの個々の問題カードに表示され、バックログをすばやく絞り込んだり、並べ替えたりするのに役立ちます。

到達可能な脆弱性
到達可能な脆弱性は、脆弱性に関するアプリケーションレベルのコンテキストを提供する高度な分析機能です。脆弱な関数がアプリケーションの実行経路から到達可能かどうかを判断するのに役立ちます。Snykユーザーはすでに、JavaのMavenおよびGradleプロジェクトで修正の判断にこの機能を活用しています。来年は、対応するエコシステムをさらに拡大する予定です。

Linuxの脆弱性におけるエクスプロイトの成熟度と相対的な重要度
優先度スコア機能はSnyk Containerでも利用でき、コンテナ固有の詳細情報も考慮します。たとえば、脆弱性に成熟したエクスプロイトがあり、Kubernetesクラスター内で実際に稼働している場合、優先度スコアは高くなります。コンテナをrootとして実行するなど、リスクを高める設定がKubernetes Podに適用されている場合も、優先度スコアに反映されます。
さらに、Linuxパッケージの脆弱性は、コンテナイメージで使用するLinuxディストリビューションによって評価が異なる場合があります。Linuxパッケージの高リスク脆弱性が、DebianやUbuntuなど特定のディストリビューションでは低深刻度と見なされることもあります。Snykでは両方の評価を考慮しますが、ディストリビューションのメンテナーを権威ある情報源と見なしているため、この例ではディストリビューション側の評価(低)を脆弱性に割り当てます。

ディストリビューション固有のセキュリティ詳細を表示するSnyk Container
4. より多くの問題を、より簡単に、より確かな方法で修正
コードの問題をスキャンするツールは数多くあります。しかし、問題への対応や修正を支援することは、まったく別の話です。自動化された実行可能な修正はSnykプラットフォームの中核をなす要素であり、今年はSnykの製品チームと開発チームが当然注力する領域となりました。
依存関係を最新の状態に保つ
3月、SnykはGreenkeeperの開発元であるNeighbourhoodie Softwareとのパートナーシップを発表しました。この提携により、Snykの依存関係自動アップグレードが正式に提供開始されました。依存関係の新しいバージョンが検出されると、コンテキストが豊富で実行に移しやすいプルリクエストが自動的に作成され、開発者がプロジェクトをより健全で安全な状態に保てるよう支援します。
確信を持って修正をマージ
開発者がSnykの修正PRをより確信を持ってマージできるよう、Merge Adviceを導入しました。プルリクエストに追加される新しいバッジで、修正によって破壊的変更が発生する可能性があるかどうかを示します。これにより、開発者はマージするかどうかを判断するために必要な情報を得られます。

SnykのPRテストをスキップ
GitHubリポジトリであなたや他のコントリビューターが新しいプルリクエストを作成すると、Snykはセキュリティテストとライセンステストを自動的に実行します。開発ワークフローへの影響を最小限に抑えるため、プルリクエストが失敗した理由の詳細を確認し、その後、管理者にテストのスキップを依頼してプルリクエストを「強制的にパス」できる機能を追加しました。
Infrastructure as Codeのガイダンス
Snyk IaCは、IaCの問題を表示し、その修正方法をユーザーに案内する独自のインターフェースを提供します。お客様との対話を通じて、IaCを正式なプロセスとして整備し始めたばかりの組織が多いことが分かりました。スキルレベルにはばらつきがあり、特にセキュリティ上の問題については、多くのユーザーが追加のガイダンスを必要としています。また、従来の意味での脆弱性とは限らないIaCの問題もあります。そのため、調査する時間があったとしても、NVDのようなデータベースで問題や参考情報を必ず見つけられるとは限りません。そこでSnyk IaCに追加のガイダンスを組み込み、検出された問題の背景情報と影響評価を提供できるようにしました。

5. セキュリティとコンプライアンスを大規模に管理
数千ものアプリケーションやプロジェクトのアプリケーションセキュリティプログラムを管理するには、効率と生産性を最大限に高める方法が必要です。そのため2020年、Snykは大規模なガバナンスを支援するために投資し、Snyk Open Source、Snyk Container、Snyk IaC全体にわたる複数の重要な機能を導入しました。
セキュリティポリシーとライセンスポリシー
組織が各プロジェクトやチーム全体のセキュリティとコンプライアンスをより簡単に管理できるよう、Snykは新しいポリシーエンジンを導入しました。ライセンスポリシーとセキュリティポリシーの定義、カスタマイズ、適用が可能です。
ライセンスポリシーを使うと、組織は許容する法的な範囲を定め、それを全体に適用できます。また、Snykのライセンスポリシーでは、特定のライセンス問題に直面した開発者が実行できる、具体的な法的指示を管理者が追加することもできます。
セキュリティポリシーを使うと、脆弱性の優先度を自動的に上げたり下げたりするルールを設定できます。各ポリシーには、脆弱性への対応方法を明確に定める1つ以上のルールが含まれます。ルールは条件に基づいてアクションを実行します。現在、脆弱性の種類(共通の特徴に基づいて脆弱性を分類する標準であるCWEを使用)やExploit Maturityに応じて、深刻度を変更するルールを設定できます。たとえば、成熟したエクスプロイトが存在するすべてのXSS(クロスサイトスクリプティング)の深刻度を上げ、RCE(リモートコード実行)の深刻度を下げるルールを、1つのポリシーに含めることができます。

プロジェクト管理
数千ものプロジェクトを管理し、それぞれに数千件ものセキュリティ上の問題がある状況では、対応に追われてしまいがちです。プロジェクトを見つけるだけでも難しくなり、ましてや緊急の対応が必要なプロジェクトかどうかを把握するのは簡単ではありません。
Snykのプロジェクト属性とプロジェクトタグを使うと、ビジネスへの影響や技術スタックのメタデータを関連付け、Snykプロジェクト(Snyk Open Source、Snyk Container、Snyk IaC)を標準化された方法で整理できます。これにより、プロジェクトの検索や発見が容易になるほか、デプロイ環境、ライフサイクルの段階、優先度スコア、その他組織にとって重要な特性に基づいて、特定のプロジェクトに注力しやすくなります。
バックログ管理
わずか数カ月前のSnykConで発表されたバックログ管理では、優先度スコアに基づいてバックログ内の脆弱性を修正するための、対象を絞った修正プルリクエストを作成します。これにより、より無理のないペースで脆弱性のバックログを減らせます。
ライセンスコンプライアンス管理
プロジェクトに取り込むオープンソースの依存関係には、セキュリティ上のリスクだけでなく、法的リスクもあります。今年、Snykの開発者ファーストなライセンスコンプライアンス管理機能を発表しました。これにより、利用しているオープンソースライセンスをより簡単に管理し、コンプライアンスを確保できます。
SnykはSDLC全体(CLI、IDE、SCM、CI/CD)に統合し、直接依存関係と推移的依存関係の両方でライセンスを検出できるようにすることで、幅広く、かつ詳細なライセンスコンプライアンス管理を実現します。Java、JavaScript、Scala、Go、Python、Ruby、PHP、Swift、Objective-C、.NETなど、主要なプログラミング言語をすべてサポートしています。
検出されたライセンスの問題は、開発者が問題の範囲を把握して対応できるよう、必要なコンテキストとともに表示されます。会社のポリシーに準拠するための次の手順を詳しく説明した法的指示も含まれます。さまざまなダッシュボードやレポート機能を利用すると、管理者は使用中のライセンスの詳細な一覧を確認・共有できます。BoMレポートでは、すべてのオープンソースコンポーネントとライセンスに加え、著作権情報も一覧表示されます。
2021年に向けて(ネタバレ注意!)
2020年もSnykの製品に関する素晴らしい発表が目白押しでしたが、2021年に予定していることにもご期待ください!
開発者にとっての使いやすさ、自動化された実行可能な修正、そして深いセキュリティ分析というSnykの中核テーマは、今後の発表でも重要な役割を果たします。非常に重要なエコシステムのサポートを追加し、Snykを市場をリードするクラウドネイティブアプリケーションセキュリティソリューションたらしめる独自の機能をさらに強化していきます。
皆さまにとって、健康で幸せな新年となりますように!