現代の開発に必要な「独立性」と「信頼」

ガイ・ポジャーニー氏(以下、ガイ):ただ今ご紹介に預かりましたガイ・ポジャーニーです。皆さま、ようこそ「SnykCon」へ。

本日は、開発者のセキュリティに関する私たちのビジョンと、それが当社のプラットフォームとイノベーションをどのように促進しているかについて、ご紹介できることを本当にうれしく思います。

まだ基調講演の半分も終わっていませんが、皆さんはすでに「デジタルトランスフォーメーション」という言葉を何度も耳にしていることでしょう。私も、「デジタルトランスフォーメーション」という言葉が流行語であることは知っています。市場で起きている変化を表現するには、非常に良い言葉だと思います。

しかし、少し使い古された言葉でもありますね。そこで、あなたの“耳にタコ”ができないように、この言葉の代わりに、別の2つの言葉を使おうと思います。

その言葉とは、「独立性」と「信頼」です。

開発者の学習と成長のスピードを速める「独立性」のあるチーム

現代の開発は、独立したチームが継続的に作業することが重要です。その目的は、1行のコードを書いてからユーザーの手に渡るまでの時間を短縮すること、そして、ユーザーやその使い方から学び、コードに戻って修正することです。このループがしっかりしていればいるほど、イノベーショのスピードが速くなり、競争力が高まり、ビジネスは成功します。

別の見方をすれば、これらのチームの独立性が高ければ高いほど、ビジネスの拡張性も高くなります。チームがお互いに邪魔することなく、複数の分野で高速に実行できるからです。

Amazon、Google、Salesforce、Twilioなど、Snykの顧客やパートナーを見ると、成功を収めている多くの企業は、多くの市場のニーズを並行して迅速に満たすことができる、動きの速い独立したチームのおかげで規模を拡大しています。

これは、Snykにおいても同様です。これはSnykの運営方法でもあり、私たちが超成長を成功させ、お客さまのあらゆるニーズに応えるうえで、非常に大きな役割を担っています。

この運用方法は、ビジネスに役立つだけではありません。創造性と革新性を存分に発揮できるため、開発者にとっても非常に充実したものになります。開発者は、自分のコードがもたらす効果をすぐに確認でき、個人的な学びと成長のスピードを速めることができます。

実際、独立した権限のあるチームの一員としてソフトウェア開発を経験すると、なかなか元には戻れないのです。このモデルが機能するためには、開発チームとそれを構成するすべての開発者に権限が与えられなければなりません。

しかし、それはどのような意味を持つのでしょうか。ビジネスがあなたに「権限を与える」とはどういうことなのでしょうか。そのようなエンパワーメントを成功させるための秘訣は何でしょうか。

エンパワーメントの根源にある「信頼」

エンパワーメントの根底にあるのは、信頼です。会社は、あなたが仕事を成し遂げ、それをうまくやることを信頼しています。例えば、フロントエンドとバックエンドの両方に同じ言語を使いたいからNodeでコーディングするとか、スピードが欲しいからGoでコーディングするとか、密かにC++を恋しく思っているかもしれないとか、それらを選択することを信頼されているのです。

また、エンタープライズ環境で実際に動作する言語を選択するために、Javaや.NETを選択することも可能です。この決断には、セキュリティへの影響を含め、多くの意味があります。

例えば、JavaScriptはDoS攻撃を受けやすいかもしれませんし、Javaはデシリアライズのリスクゾーンが広いかもしれません。あなたは、これらのリスクと、他のすべての変数との間で適切なトレードオフを行い、実際にどの程度のリスクを取るのか、選択することが求められます。

同様に、開発を加速させるためにオープンソースやオープンソースライブラリをいつ使用するのか、実際にそのライブラリに依存するかを選択することもあなたは信頼されています。より多くのライブラリを使用すれば、より速く構築できるかもしれませんが、その分メンテナンスの手間がかかります。

あなたは、これらのライブラリに既知の脆弱性がないかを追跡する必要があります。また、ライブラリを更新するための一定のサイクルを構築する必要があります。

この信頼は、これらのライブラリのメンテナーに委ねられることになります。あなたは、メンテナーが問題を迅速に修正すること、安全なコードを書くことを期待しています。そして、メンテナーがどのライブラリを信用するのか、そのメンテナーを信頼するのかについて、適切な判断をすることを期待するのです。

このように、非常に重要な決断を迫られています。ここでの判断ミスは、技術的負債やリスクの増大につながる可能性があります。しかし、ここで過度に保守的になってしまうと、スピードが落ちてしまい、競争力がなくなってしまいます。正しい選択をすることは、あなたの責任です。あなたが持っているアプリのコンテキストは、他の誰にもわかりません。

また、どのライブラリを使うかを管理チームに頼っていては、そのライブラリがすぐにボトルネックになってしまい、本来の目的であるスピードが損なわれてしまいます。クラウドネイティブの世界では、不信感はインフラの意思決定にも及びます。あなたは、コンテナで使用するOSの選択、パッケージ化するベースイメージの選択、ベースイメージに含まれる可能性のあるその他の選択においても信頼されています。

また、Helmチャートを設定してインストールするアプリを選択したり、Terraformファイルやサーバーレスファイルを編集して、プロビジョニングするストレージを定義したりもできます。あなたは、どのようなAPIが存在し、何を受け入れるのかを定義して、各サービスが実行するパーミッションを定義します。

お察しのとおり、これらの決定はセキュリティに重大な影響を及ぼします。そして、それらはすべてメンテナンスされる必要があります。さもなければ、陳腐化し、脆弱性が増大することになります。

信頼は単独で意思決定をすることではない

ここで忘れてはならないのは、「信頼」とはあなたが単独で意思決定をすることではないということです。他のチームとうまく協力することも信頼されることであり、それが効率化につながっています。他のチームと協力して、共有プラットフォームを構築し、ガードレールを定義します。すべてのチームがすべての学習を、自分たちだけで行う必要はありません。

一方で、私たちが実際に望むスピードとスケールを実現するためには、他のチームに依存せずに速く動けるように、常にチームの独立性を高めることを目指す必要があります。そのためには「信頼」が必要です。信頼され、力を与えられることは、開発者として驚くほどやりがいがあることですし、ビジネスに花を咲かせることができます。

しかし、それは簡単なことではありません。

セキュリティとなると、二重に大変なことかもしれません。セキュリティは複雑なので、自分が下した決断が、セキュリティに与える影響を知ることが難しくなり、そしてそのリスクは高いのです。大規模なセキュリティ侵害ほど、企業の存続を危うくするものはありません。

Snykが提供する開発者向けセキュリティプラットフォーム

ここでSnykの出番です。

私たちの仕事は、セキュリティをより簡単に、お客さまの迅速な開発を支援し、セキュリティを維持することです。Snykは、お客さまの通常の開発作業にシームレスに接続し、適切なタイミングで、適切な場所で、セキュリティリスクを顕在化させます。

私たちは、セキュリティの専門家でない開発者が、正しい判断ができるように必要な情報を提供します。そして、セキュリティ上の欠陥を未然に防ぐお手伝いをします。また、お客さまが安全な道を歩めるように正しい方向に誘導し、問題を解決しやすくします。

時には、実際に安全なライブラリを選んだり、安全なコードを書いたりして、プルリクエストとしてパッケージ化し、お客さまに承認していただくこともあります。

私たちはお客さまを単独で支援することはほとんどありません。私たちは、アプリケーション・セキュリティ、クラウド・セキュリティ、製品セキュリティの各チームと連携し、それぞれの組織でソフトウェア開発の基盤にセキュリティを組み込もうと考えています。これらのセキュリティチームは、それぞれローカルな専門家です。

あなたは、自分のアプリケーションのことを一番よく知っているかもしれませんが、専門家はあなたの敵やリスクをはるかによく知っています。私たちは、このようなセキュリティ・チームが、セキュリティの専門知識を製品に組み込み、お客さまの組織のニーズに合わせてプラットフォームを調整し、充実させるのを支援しています。

また、私たちがより多くの機能を構築し、プラットフォームをよりスマートにすることで、お客さまをより良くサポートできるように後押ししてくれるのです。

もしあなたがセキュリティチームに所属しているのなら、開発者のセキュリティのためのプラットフォームを設置する支援をします。すべての問題を検討し、イノベーションを妨げる「無用の長物」としてのボトルネックから、戦略的かつ強力な組織として、開発者がセキュリティにうまく取り組めるよう支援し、開発者が助けを必要とする時に呼び出す専門家となることを支援します。

また、セキュリティガバナンスの導入も支援します。そして、何が起こっているのか、どこに関与する必要があるのかを把握できるように、ガードレールを構築します。

このような価値を提供するために、私たちは強力な開発者向けセキュリティプラットフォームを構築しています。

開発者優先のセキュリティを実現する「Snyk Developer Security」

そして、私たちは、「開発者優先のセキュリティ」と呼ぶアプローチにこだわっています。開発者にこのプラットフォームを受け入れてもらい、活用してもらうことが最も重要な目標だからです。“開発者だけ”でなく、セキュリティチームや他のステークホルダーもこのミッションの中核であり、全員がここで成功する必要があります。

とはいえ、優先順位はあり、私たちは、開発者のニーズを最優先しています。「開発者第一主義」「セキュリティ第一主義」それが私たちの目的です。開発者の負担を軽減するうえで、最も簡単な方法は、あまり多くのものを探さないことです。脆弱性データベースの更新が不十分であったり、ルールセットが最小限であったりすると、警告を減らすには最適な方法ですが、実際にはお客さまのデータを十分保護できません。

私たちは、開発者がより安全なアプリケーションを構築できるよう、単にチェックボックスにチェックを入れるだけでなく、実際に構築できるよう支援します。 たとえそれが、やらなければならないことを表面化させることであったとしてもです。

「Snyk Developer Security」プラットフォームは、まさにこのバランスをとるために構築されました。6年以上前から、この問題を解決するためのスキルを磨いてきました。決して楽な経験ではありませんでした。特に私たちと一緒に旅をしてきた方にとっては、決して楽ではなかったかもしれません。

重要度だけでなく、それ以上の要素を考慮した、よりスマートな優先度スコアを作成することを学ぶまでは、一見同じように見える重要度の高い問題でバックログが溢れかえっていたことにお気づきかもしれません。

文字が多すぎるプルリクエストを修正し、文字が少なすぎるプルリクエストを修正し、また文字が多すぎるプルリクエストを修正して、文字数とフォーマットのバランスがかなり良いと感じるものを今日見つけることができました。

オープンソースのメンテナーには、きちんと報告もせず、協力も得ずにプロジェクトの脆弱性を表面化させ、迷惑をかけたこともありました。また、既知の脆弱性について、お客さまから逆に知らされ、恥ずかしい思いをしたこともありました。

二度とこのようなことが起きないように、私たちはSnykにこれらの脆弱性ソースをすぐに追加しました。この学習には終わりはなく、今後も改善を続けていく予定です。

Snykの強み 「セキュリティ・インテリジェンス(脆弱性データベース)」

これまでに私たちは、正しい知識を身につけるための強力な筋肉を身につけてきました。それは、「セキュリティ・インテリジェンス」「アプリケーション・インテリジェンス」「デベロッパー・エクスペリエンス」の3つの強みです。

「セキュリティ・インテリジェンス」とは、お客さまが最初に当社に依頼するセキュリティに関する専門知識のことです。当社の脆弱性データベースは、最もタイムリーで、最も包括的で、最も高品質なデータベースであると自負しています。

というのも、私たちはコミュニティから脆弱性に関する情報を歓迎していますが、それだけに頼っているわけではありません。洗練されたセンサーを使って、インターネット上でこれらの問題を積極的に探し出すこともしています。

なぜなら、私たちは、オープンソースのメンテナーがセキュリティの専門家になることを期待しておらず、セキュリティ上の欠陥だけを分類しているからです。私たちは、セキュリティの専門家を連れてきて、彼らが正しく理解できるように協力します。

私たちは、脆弱性が悪用されているかどうかを把握しています。コード内のすべてのサニタイザーをマッピングします。クラウドやKubernetesの設定ごとに、セキュリティへの影響を分類しています。

このように、開発者がセキュリティの専門家である必要はありません。私たちのプラットフォームは、そのような専門家そのものであることが望ましいのです。

Snykの強み 「アプリケーション・インテリジェンス」

「アプリケーション・インテリジェンス」により、私たちはお客さまのアプリケーションをお客さまと同じように、時にはそれ以上に理解することができます。お客さまが使用しているライブラリと、他社が使用しているライブラリを正確に把握しているので、お客さまは、誤ったアラートに時間を費やすことはなく、本当のアラートを見逃すこともありません。

脆弱なコンテナバイナリがベースイメージに由来するのか、Dockerファイルに由来するのかを理解し、正しい改善策を導くことができます。つまり、コードの各行がどのようにデータを操作し、Terraformコマンドがどのようなアクセスや許可を与えるかを理解するということです。

「インテリジェンスのスケールアップ」は、その幅の広さゆえに特に困難です。各エコシステムは独自の雪の結晶であり、おかしな癖や特別なアルゴリズムを持っています。

PythonはPHPと同じルールには従いませんし、MavenがNPMやAWS Azureを模倣するわけでもありません。これらをすべて同じように扱うと、誤検知やセキュリティギャップの見落としにつながり、開発者の幸せや会社の安全にもつながりません。私たちは、エコシステムのアプリケーション・インテリジェンスに多大な投資をしています。

つまり、他のエコシステムのサポートを主張するチェックボックスよりも、エコシステムにおける精度を重視しています。これは終わりのないミッションであり、皆さまからの建設的なご意見には心から感謝しています。

ユーザーは、私たちの知識を磨き、スタックに対する理解を深めてくださる存在であり、それはすばらしいことです。これからもよろしくお願いします。

Snykの強み 「デベロッパー・エクスペリエンス」

最後に、「セキュリティ」と「アプリケーション・インテリジェンス」の両方を開発者が利用できるようにする「デベロッパー・エクスペリエンス」を紹介します。

「デベロッパー・エクスペリエンス」は、重要なコア機能の長いリストに依存しています。

例えば、スキャンを高速かつ正確に行うことで、お客さまのビルドのスピードに合わせ、本当に必要な時以外はスキャンを行わないようにしています。

私たちは、アプリとセキュリティのインテリジェンスを活用して、修正プルリクエストを自動生成します。開発者の仕事は、問題を発見することではなく、修正することだと知っているからです。

私たちは、GitやIDEのベストプラクティスを具現化する意見集約型の統合と、お客さまの特定のカスタムパイプラインに適応可能なパワフルで柔軟なAPIとコマンドラインを組み合わせています。

真に優れたデベロッパー・エクスペリエンスを構成する無数の小さなディテール

優れたデベロッパーエクスペリエンスの「真の秘訣」は、これらのどれでもありません。私たちは、同じようなチェックボックスを持つツールを使ったことがありますが、片方のツールは気に入っているのに、もう片方のツールには我慢できません。真に優れたデベロッパー・エクスペリエンスは、「無数の小さなディテール」にかかっています。

それは、プルリクエストの文章やCLIの出力の構成です。それは、ページ上の行動喚起と、そこに書かれている言葉です。

また、何かを得た時に得られるアニメーションGIFもそうです。これらを正しく理解するために、私たちは絶え間なく実験を行っています。Snykのプラットフォームを利用している何百万人もの開発者が、どのような変化や考えに反応するかを学び、それに応じてプラットフォームを変更・適応させています。

優れたデベロッパーエクスペリエンスは、一度に一つの実験を獲得し、常に調整される必要があります。これらの3つの柱、「セキュリティ・インテリジェンス」「アプリケーション・インテリジェンス」「デベロッパー・エクスペリエンス」が、Snykの「Developer Security Platform」の中心となっています。

このプラットフォームにはさらに多くの機能が搭載されており、その機能はさらに向上しています。ここでは、最高製品責任者のアネル・マズル氏を招いて、「Developer Security Platform」と、そのエキサイティングな開発について話してもらおうと思います。

プラットフォームをどのように進化させているか

アネル・マズル(以下、アネル):ご紹介ありがとうございます。

おっしゃるとおり、最近の開発者は、信頼されているものの範囲がますます拡大しています。

コードのセキュリティだけでなく、基盤となるインフラや構成も含めて、開発者が所有権を持つようになったということは、統一されたワークフローの報告や、優先順位づけを行うためのツールの統合が必要になるということです。

開発者が所有するアプリケーション層すべてに対して単一のプラットフォームを持つことは、単一のコンポーネントではなく、アプリケーション全体の状況を考慮して分析を行うことができることを意味します。

現在、私たちがサポートしているCodeからIaCまでのアプリケーションの各側面は、共有プラットフォームのコンポーネントから恩恵を受けていますし、将来的にはそれはさらに増えるでしょう。

前述した「デベロッパー・エクスペリエンス」「セキュリティ・インテリジェンス」「アプリケーション・インテリジェンス」のプラットフォーム・コンポーネントは、セキュリティのための開発者を生み出す中核となるものです。

しかし、このプラットフォームには、さらにいくつかの重要な要素があります。

開発者のエンパワーメントは、すべての開発者のセキュリティの知識を深め、セキュリティ・エラーの発生を減らし、その修正を迅速に行うことができます。拡張性は、このプラットフォームが環境内の他のツールやワークフローとネイティブに統合できるようにするためのものです。

また、セキュリティ専門家が可視化し、ポリシーを設定し、開発者がアプリケーションを保護するために必要なガイダンスを提供できるよう、ガバナンスを確立しています。

この場をお借りして、最近のプラットフォームのさまざまな分野における驚くべき進歩と、それらをどのように進化させていくのかについて、ご紹介したいと思います。

Visual Studio、VS Code、Eclipseなどに対応するSnykのIDE

まず、デベロッパー・エクスペリエンスについて説明します。開発者の皆さんが通常使うIDEから始めましょう。

Snykでは、開発者の日々のワークフローをIDEの中で拡張し、チームが自然でネイティブな方法でアプリケーションのセキュリティ態勢を改善できるようにすることを重要な投資分野の1つとしています。

包括的で拡張性のあるSnykのIDEは、JetBrains社の全製品、Visual Studio、VS Code、Eclipseに対応しています。そのため、使用している言語やフレームワーク、IDEの選択は問いません。Snyk IDEプラグインは、あなたのプロジェクトを分析し、数秒以内に結果を表示します。修正アドバイスや事例を紹介します。

私たちのサポートは幅広いだけではありません。深いところまでサポートをしています。業界初の試みをご紹介できることをうれしく思います。

Snykを使えば、IDEの中で、プロプライエタリなコード、オープンソースの依存関係、コンテナベースのイメージ、インフラの設定などの問題を発見して、修正することができます。

また、開発者は、業界をリードするSnykのセキュリティ データベースからの情報だけでなく、プロジェクトの人気や採用状況、メンテナンスの状況、コミュニティの規模や活動状況を考慮したパッケージの健全性に関する「Snyk Advisor」の情報に基づいて、IDE 内でアプリケーション依存関係を簡単に選択および更新できるようになりました。

Snyk IDEのデモ

それでは、「Developer Journeys」の製品バイスプレジデントであるベン・ウィリアム氏にデモをしていただきましょう。

ベン・ウィリアム(以下、ベン): こんにちは、私はSnykの製品開発バイスプレジデントのベンです。デモを見てみましょう。

このデモでは、Dockerコンテナにデプロイされたシンプルなnode.jsアプリケーションを、AWS上のTerraformで設定されたEC2内のKubernetesクラスタ経由でオーケストレーションしてみます。

Snyk IDEのプラグインがどのようにコーディング中の安全な開発を可能にし、コード、オープンソースライブラリ、コンテナイメージ、インフラストラクチャの設定内の問題を発見し、修正するのか、その方法を説明します。

ここでは、「Snyk issue navigator」が表示されています。問題の種類ごとに構造化されており、ハイレベルな概要と具体的な課題へのドリルダウン機能が提供されています。

ここではまず、Snykが見つけたオープンソース依存関係に関する問題を見てみましょう。

ここでは、使用しているLodashのバージョンに致命的な脆弱性があります。この場合はprototype pollutionです。

問題をクリックすると、さらに詳細な情報が表示されます。CWEタイプ、CVSSスコア、そして脆弱性データベースからの詳細情報など、さまざまな重要情報を見ることができます。脆弱性の詳細については、こちらのリンクをご覧ください。

今回の件は、製品基調講演の残りの部分にご注目ください。脆弱性の経路と、実行可能な改善策のアドバイス(この場合はLodash 4.17.20以降にアップグレードすること)も確認できます。

ここでは、Lodash 4.17.20以降にアップグレードすることを勧めています。NPMをインストールして、再スキャンを実行します。この問題が修正されているのがわかります。

さらに「Snyk Advisor」のスコアを見ると、パッケージ全体の健全性評価が70より低いことがわかります。人気度、保守性、コミュニティ、セキュリティの観点から、パッケージとその健全性における詳細を簡単に確認することができ、より良い情報に基づいた依存関係の選択に役立ちます。

次に、私たちのコードにある問題を見てみましょう。

「Snyk plug-in」は、index.jsにクロスサイトスクリプティングの脆弱性があることを教えてくれました。この脆弱性がどのようにして作られたのかを完全に理解するために、データの流れを順を追って見ていきます。

「Snyk Code」は修正例を提供してくれるので、それを参考にできるのも魅力的です。

それでは、send関数を更新して、代わりにrenderを使うようにし、別のスキャンを開始しましょう。コードスキャン機能は驚くほど素早く実行され、より幅広いコード品質の推奨事項も提供してくれます。これでXSSの問題は解決しました。

次にTerraformの設定を見てみましょう。パスワードに関連した問題がたくさんあり、その問題を解決するための修正アドバイスも表示されています。今すぐに実行してみましょう。

パスワードの最小長を更新し、ポリシーの属性を追加して、大文字と小文字、数字と記号を必要にしましょう。

さらに再スキャンすると、これらの問題がなくなっていることがわかります。

ついでに、「Snyk IaC」で検出されたKubernetesの導入に関する問題を確認して、ポッドのセキュリティコンテキストに関する問題を解決してみます。

rootユーザーでコンテナを起動しようとすると、コンテナが起動しないように素早く変更します。クイックスキャンで、これらの問題が解決したことを確認します。

最後になりましたが、コンテナにはたくさんの問題が見られます。

詳細画面では、使用しているnginxイメージに重要度の高い脆弱性が多数存在していることがわかります。ベースイメージのアップグレードに関する推奨事項も表示されているので、アップグレードすることで、どのようにセキュリティ対策が改善されるかを簡単に確認できます。Kubernetesのデプロイメントファイルを手動で変更することもできますが、コンテキストセンシティブアクションを使って、素早く変更を適用することもできます。

このように、セキュアコーディングをフルスタックで行うことができました。

それでは、アネルに戻します。

統合機能の追加、既存の統合機能の深化のために投資を続けている

アネル:ありがとう、ベン。

Snykは設立当初から、開発者のエコシステムに組み込まれています。正確な結果を提供するには、使用されているフレームワークやツールを深く分析する必要があるので、Snykは統合機能を増やし、既存の統合機能を深めるための投資を続けています。

(次回へつづく)