アプリケーションセキュリティの完全ガイド
このアプリケーションセキュリティガイドには、2023 年にセキュリティを確保するために必要なすべての情報が備わっています。
Daniel Berman
アプリケーションセキュリティとは?
アプリケーションセキュリティとは、ツールとプロセスを使用してアプリケーションのセキュリティをライフサイクル全体にわたって確保することです。現代の開発スピードでは、アプリケーションが本番稼動するまでセキュリティの確保を待つことはできません。セキュリティは、脅威モデリングなどのプラクティスを使用して最初から組み込む必要があります。さらに、スキャンツールを使ってセキュリティを自動化し、アプリケーションを実行するためのインフラやコンテナにも適用する必要があるでしょう。
このアプリケーションセキュリティガイドは、アプリケーションセキュリティの中核となる概念を明らかにし、アプリケーションセキュリティの課題を取り上げ、2023 年にセキュリティを確保するために必要なツールやベストプラクティスについて説明しています。
アプリケーションセキュリティが重要となる理由
アプリケーション、特にクラウドネイティブのアプリケーションは、サーバーやネットワークへのゲートウェイであり、ハッカーにとって理想的な攻撃ベクトルとなっています。ハッカーは、ソフトウェアに侵入する方法を改良し続けているため、セキュリティを開発プロセスに深く組み込まれた継続的な活動にすることが非常に重要です。アプリケーションセキュリティのベストプラクティスは、ハッカーが脆弱性を利用してネットワークやデータに不正にアクセスする前に、脆弱性を発見するのに役立ちます。顧客情報などの機密データを確実に保護するため、アプリケーションデータのセキュリティを考慮することも重要です。
脆弱性は、設定ミスや既知の脆弱性を含むソフトウェアコンポーネントの使用など、単純な原因で発生することがあります。ここ問題は広範囲に及んでいます。Snyk の 2021 年クラウドネイティブアプリケーションセキュリティの現状レポートによると、56% を超える企業が設定ミスまたは既知のパッチ未適用の脆弱性を抱えています。これらの脆弱性のすべてが重大なセキュリティリスクとなるわけではありませんが、ハッカーは自ら脆弱性を評価し、どの脆弱性を使って侵入するのが妥当かを見極めています。
また、あらゆる規模の組織で、特に機密データを扱う企業 (金融機関など) は、設定ミスにより生じるリスクを認識しておく必要があります。アプリケーションセキュリティは個別の市場に成長しており、Forrester アナリストによると、2025 年までに 129 億ドル規模になると予想されています。アプリケーションセキュリティを改善するため、企業は以下の 2 つのアプローチを導入する必要があります。
シフトレフトセキュリティカルチャーを中心としたセキュリティに求められるプロセスの導入と DevOps とセキュリティを統合する環境への移行です。
開発者ツールやワークフローと統合するスキャンツールなど、包括的なセキュリティに必要なツールを採用しましょう。
これらのツールやプロセスに加え、開発者とセキュリティチームは、最先端のアプリケーションセキュリティを把握しておくために、さまざまなリソースにアクセスすることができます。たとえば、オープンウェブアプリケーションセキュリティプロジェクト (OWASP) は非営利団体で、 毎年 Web アプリケーションのセキュリティ脆弱性のトップリストを発表しています。クラウドネイティブアプリケーションセキュリティの現状レポートなど、Snyk のリソースは、開発者がクラウドネイティブ時代のアプリケーションセキュリティに対応するのに役立ちます。
アプリケーションセキュリティのトレンド 2023
2022 年には、多数の組織が大規模で複雑なサイバー脅威に直面し、サイバーセキュリティの分水嶺となりました。企業は複数の点でサイバーセキュリティに注目しています。
経営陣に最高情報セキュリティ責任者 (CISO) が含まれるようになりました。米国では、サイバーセキュリティは国家安全保障の問題と考えられています。2022 年 2 月、バイデン大統領は情報通信技術 (ICT) 産業の重要なセクターに対するサイバーセキュリティ支援を強化することを目的とした、アメリカのサプライチェーンに関する大統領令に署名しました。ウクライナ紛争では、ロシアによるサイバー攻撃の可能性が懸念され、サイバーセキュリティがさらに脚光を浴びるようになりました。
専門の役職にもかかわらず、CISO には同じリソースでもっと多くの成果を上げることが期待されています。そのため、人材、テクノロジー、プロセスの各分野でイノベーションが求められています。
Log4J 攻撃をきっかけに、ソフトウェアサプライチェーンセキュリティの重要性が高まっています。ハッカーは、オープンソースのコードリポジトリやサプライチェーンの他のリンクに不正にアクセスできるものを探し続けています。企業は弱点を見極め、サプライチェーン全体で優れたセキュリティ対策を実施することで対応しています。
クラウドネイティブアプリケーションの普及により、クラウドインフラや Infrastructure as Code (IaC) の設定についても、セキュリティやコンプライアンスを考慮する必要があります。開発プロセスにセキュリティを継続的に統合するアプリケーションセキュリティテストのオーケストレーションは、全体的なクラウドセキュリティ態勢の一部となっています。アプリケーションセキュリティは、作成したコードから依存関係を経由し、クラウド設定に至るまで、すべてのレベルをカバーしていることを確認する必要があります。
現在のアプリケーションセキュリティにおける課題
現在のアプリケーションセキュリティといっても、幅が広く複雑なテーマです。そこで、企業が共通して直面している主な課題を 5 つにまとめました。
内在する脆弱性
サードパーティおよびオープンソースの脆弱性
DevSecOps アプローチの導入
資格ある専門家の確保
一元管理できるツールの不足
それぞれについて詳しく見ていきましょう。
内在する脆弱性
開発者は、コーディングのプロセスで導入される可能性のある脆弱性に注意する必要がありますが、一部の脆弱性は最新のアプリケーションに内在しています。このような脆弱性が内在するのは、いくつかの理由があります。
ソフトウェアシステムにもエントロピーの法則が当てはまります。つまり、絶えず変化し、複雑化しているため、更新や改善が必要です。
修正、更新、およびメンテナンス活動について優先順位を設定することは、重要かつ継続的な取り組みです。
レガシーコードは、引き続き多くの企業の環境で重要な役割を担っています。セキュリティチームは、このコードをスキャンして、修正に優先順位を設定する必要があります。旧式のコードは、最先端のアプリケーションコードに比べて魅力的でないため、興味を持つ人は少ないとはいえ、セキュリティに関する慎重な配慮が必要です。
多くの場合、最新のセキュリティツールは、レガシーコードを処理するためのライセンスを取得していません。コードがメンテナンスされず、セキュリティが確保されていないと、時間とともに問題が蓄積していきます。
サードパーティおよびオープンソースの脆弱性
サードパーティやオープンソースのライブラリが広く使用されているため、ハッカーにとって魅力的な攻撃ベクトルとなっています。推移的な (または間接的な) 依存関係は、 開発者が気づかないうちに脆弱なパッケージを使用している可能性があるため、特に懸念されます。
人気のある node-ipc パッケージのメンテナーによる妨害工作の事例を Snyk が発見したことで、最近この問題が注目を集めました。メンテナーは、システムの地理的位置を検出し、ロシアとベラルーシのユーザーに対してハートマークを出力する peacenotwar というモジュールを追加していました。peacenotwar は node-ipc パッケージへの依存関係として追加されるまで、実質的にまったくダウンロードされていませんでした。
このインシデント、そして npm パッケージの colors による意図的な破損は、オープンソースの依存関係についての懸念されるのは外部のハッカーだけがではないことを示しています。メンテナー自身が、悪性コードや脆弱性を含むパッケージを公開している可能性があります。
これらすべての脆弱性を手動で検出することは不可能であるため、オープンソースの依存関係のセキュリティを確保するには、何を (いつ) 更新すべきかを意識し、新しい脆弱性が発生したときにそれを検出できるツールが必要です。スキャンツールに加え、ポリシーの適用により、最初からプロジェクトにセキュリティを組み込むことができます。チームは、ベストプラクティスに従ったポリシーを策定し、そのポリシーを適用するツールを選択する必要があります。たとえば、OpenSSF フレームワークは、オープンソースソフトウェアのプロジェクトで遵守すべきルールを定めています。もし、すべての人がこのフレームワークを使えば、セキュリティツールは必要なくなるかもしれませんが、すぐにそうなるとは思えません。
DevSecOps アプローチの導入
セキュリティツールだけでなく、シフトレフトのアプローチで、開発プロセス全体にセキュリティを組み込むことが重要です。従来、スキャンはソフトウェア開発ライフサイクルの後半に行われてきました。その結果は開発チームに送られて修正されるため、セキュリティチームが他の部門のボトルネックになっていました。さらに、製品自体がこのボトルネックとなり、開発者の悩みの種になっていました。誤検知の数が多かったため、チームメンバーは問題のトリアージに多くの時間を費やしていたのです。
このレガシーアプローチは、ウォーターフォール型のソフトウェア開発を行っている企業では十分に機能しましたが、最新のソフトウェア開発においては、セキュリティ部門と開発部門との間でアジャイルな統合が求められます。開発の早い段階で問題を発見し修正することで、セキュリティチームや関係者全員が効率的にプロセスを進めることができます。
シフトレフトテストにより、CI/CD パイプラインのできるだけ早い段階で、テストのベストプラクティスが統合されます。
資格ある専門家の確保
シフトレフトに加え、セキュリティには人材の側面も重要です。資格のあるセキュリティの専門家を見つけることは最優先事項です。また、セキュリティチームもトレーニングを改善し、効率的なプロセスを開発し、製品を分析する必要があります。そして、開発者が簡単に修正を適用できるように、CI/CD パイプラインと並行してスキャンを行うなど、統合的なセキュリティアプローチに備えることができます。開発者とセキュリティ担当者の比率が 100:1 程度であることから、経験豊富なサイバーセキュリティの専門家を採用することが難しく、教育や自動化によってデベロッパーセキュリティに注力する企業が増えています。
一元管理できるツールの不足
セキュリティの専門家は、企業が取ることのできるリスクの管理を使命としています。リスクをゼロにしようとすることは、よく言えば甘い、悪く言えば非生産的な考え方です。リスクマネジメントの大きなポイントは、アプリケーションに含まれる脆弱性を評価し、いつ、どのように対処するかという優先順位を設定することです。
アプリケーションセキュリティチームは、それをサポートするツールを必要としています。アプリケーションセキュリティの状態を常にモニタリングし、評価する必要があります。セキュリティ態勢とは、アプリケーションのすべてのレベルでセキュリティの知識を組み込むことを意味しています。セキュリティチームはこの知識に基づいて、アプリケーションセキュリティのプロセスの一部として、対処すべき問題をトリアージし、バックログを作成する必要があります。
最後に、セキュリティチームはバックログの問題が正確かつタイムリーに対処されているかどうかをモニタリングし、確認する必要があります。最適なツールは、このような必要なレポートをすべて一元管理し、単一のダッシュボードで関係者に表示できます。
OWASP トップ 10 アプリケーションセキュリティ 2021 のハイライト
OWASP トップ 10 2021 は、ツール評価の基準となるさまざまな脆弱性のリストを挙げています。ここでは 2 つの重要なポイントがあります。
脅威プロファイルの変化や、脆弱性の悪用可能性と潜在的なインパクトの両方を加味する新しいリスト作成手法により、リストは前年度から大きく変わっています。アクセス制御の不具合は 5 位から 1 位へ、本人確認と認証の失敗は 2 位から 7 位になっています。これはおそらく、標準的なフレームワークが利用できるようになった結果と考えられます。
脆弱性は、安全でない設計から暗号化の失敗、データやパイプラインの整合性検証の失敗まで、多岐にわたります。このことは、セキュリティをシフトレフトするだけでなく、アプリケーションのあらゆる面でカバーする必要があることを意味しています。
OWASP トップ 10 2021 は、50 万以上のアプリケーションのデータに基づき、一般的な脆弱性とそのリスクプロファイルに関する貴重な知見を提供しています。そのため、特定のツールがどの程度包括的であるかを評価する良い出発点となります。
2021 年版の最大のリスクはアクセス制御の不具合ですが、Snyk Infrastructure as Code (Snyk IaC) ではその問題に対処できます。第 3 位はインジェクション攻撃ですが、Snyk Code はデータフロー解析によりこれを明らかにすることができます。リストの第 6 位は脆弱で古いコンポーネントですが、これは Snyk オープンソースで見つけることができます。
まとめると、Snyk は OWASP トップ 10 についてアプリケーションセキュリティテストで評価できるすべての要素に対応しています。OWASP トップ 10 についての詳細、および Snyk による分析付きの完全なリストをお読みいただけます。
アプリケーションセキュリティアーキテクチャの 3 階層
最新のアプリケーションのアーキテクチャには、3 階層があります。各階層には、それぞれ対応すべきリスクがあります。ここでは、それぞれの特徴、構成、そしてその潜在的なリスクプロファイルについて紹介します。
最上位層: クライアント
この最上位層は、Web フロントエンド、IoT フロントエンド、モバイルフロントエンドなど、ユーザーがアプリケーションとやり取りする階層になります。フロントエンド開発者は、エンドユーザーに高性能で高品質の体験を提供することを優先していますが、フロントエンドの種類によって脅威のプロファイルが異なるため、セキュリティを見落とすことはできません。インジェクション攻撃やサービス拒否攻撃など、フロントエンドの攻撃手法は多数存在します。
中間層: アプリケーション
これはユーザーから収集したデータを処理する階層です。階層型アーキテクチャでは、エンドユーザーとデータの間に一種のファイアウォールを構築することで、攻撃を防いでいます。この中間層のセキュリティ確保では、ツールを使用してきめ細かなアクセス制御を行うことが有効です。
最下層: バックエンド
これには、オペレーティングシステム、クラウドインフラ、コンテナなど、アプリケーションの実行やデータの保存に使用されるあらゆるものが含まれます。ほとんどの攻撃の目的は、この階層を突破することです。したがって、安全な設定、適切なネットワーク設定、堅牢なデータ暗号化によってバックエンドのセキュリティを確保することが重要です。
最新のアプリケーションのアーキテクチャ図
以下の図は、最新のアプリケーションのアーキテクチャを示したものです。フロントエンドを動かすのは、フロントエンドに API を公開し、クラウド (AWS、Azure、Google Cloud など) の内部で動作するビジネスロジックおよびデータレイヤーです。
左側には、クライアントとロジックを定義するソースコード、依存関係を定義するパッケージ、クラウドの仕様 (IaC を使用)、アプリケーションが実行されるコンテナの設定を示すコンテナファイルなどを示しています。
右側は、アクティブな本番環境の管理を示します。クラウド管理コンソールは、ハッカーにとって特に重要なターゲットとなります。もし誰かがクラウド管理コンソールを制御した場合、それを使ってマシンを制御し、ビットコインをマイニングするなど、不正な使い方をされる可能性があります。
レイヤー全体でセキュリティのオーケストレーションを行い、確実に管理して運用化することが重要です。そうすることで、クラウドのオーバーサブスクリプションの原因となるクリック詐欺を検出できるようになるなど、副次的な効果も期待できます。
アプリケーションセキュリティの主要な 3 本柱
効果的なアプリケーションセキュリティには、以下の 3 つの主要な柱があります。
テクノロジー (プロセスとトレーニングツールを含む)
プロセス (ポリシー、原則、制御を含む)
人材 (フィッシング対策などのためのセキュリティに関する教育とトレーニングが必要)
各セクションのビジネスにおける重要性をトリアージして、弱点を評価し、改善すべき点を見極める必要があります。さらに、これらの柱は相互に影響を及ぼします。たとえば、すべてのツールには人間的な要素があります。ツールは、使う人が訓練を受けて初めて良いものになります。そして人間は、物理的なセキュリティだけでなく、ソフトウェアセキュリティも含め、ツールについて戦略的に考えることができます。詳細な手順については、アプリケーションセキュリティのベスト プラクティスに関する 15 項目のチェックリストをご覧ください。
以下は、アプリケーションセキュリティの 3 つの柱に関するベストプラクティスです。
テクノロジー: ツールセットを見直す
統合することが可能で、リソースの能力と予算に見合ったツールの包括的なセットを明確化することから始めましょう。最高のツールは推奨を表示するツールです。その価値が最大限に発揮されるためには、人間がその推奨を実行する必要があることを忘れないようにしましょう。
入手可能な新しいツールを調べ、その機能を確認します。
ツールのロードマップを計画します。何を目指していますか。製品についてどんなビジョンがありますか?これらのツールでビジネスニーズに対応できますか?
プロセス: 明確化する
まず、アプリケーションセキュリティのプロセスを定義します。それらを書き出して、明確にしてください。
プロセスをテストします。実際に機能するでしょうか?緊急事態ではなく、テストで問題を知るようにしたいものです。
プロセスリポジトリのメンテナンスを行います。プロセスは一元的に管理するようにします。これは、オンボーディングの際にも役立ち、プロセスの重複を発見できます。
人材: 求められている役割を把握する
セキュリティチームや開発者は知識労働者です。ソフトウェアがアップグレードを必要とするのと同様、人材も「アップグレード」する必要があります。セキュリティの分野は常に変化していますが、開発コミュニティには情報、トレーニング、イベントなどが豊富に用意されています。従業員を教育し、投資して、脅威と軽減策がどのように進化しているかを従業員自身が理解できるようにします。
セキュリティのすべてのレイヤーに投資します。清掃員から CEO まで、セキュリティに関する重要性とルールを全員に認識してもらう必要があります。
些細なことでもオープンにするカルチャーを奨励します。「観察し、発言し、整理する」をモットーにします。問題について誰も話さなければ、解決することはありません。
6 種類のアプリケーションセキュリティスキャンツール
アプリケーションセキュリティの主なツールとしてスキャンツールがあります。開発者はそれを使ってアプリケーションを本番環境で実行する前にテストできます。これらのツールには、ソースコードを直接スキャンするもの、アプリケーションに入力を実行して評価するものなど、さまざまな種類があります。ここでは、一般的な 6 種類のスキャンツールをご紹介します。
静的アプリケーションセキュリティテスト (SAST):SAST はソースコードにアクセスできるホワイトボックステスト方式により、静止状態で脆弱性につながる可能性のある弱点を特定し、レポートを作成します。
対話型アプリケーションセキュリティテスト (IAST):この形式のアプリケーションセキュリティテストでは、アプリケーションを実行しながらソースコードの脆弱性をスキャンし、ユーザーが通常行うであろう操作方法をシミュレートします。
ソフトウェアコンポジション解析 (SCA) ツール: 起源分析とも呼ばれるこの方法は、すべてのソースソフトウェアコンポーネントとライブラリを分析するのに役立ちます。これらのツールを活用して既知の脆弱性を特定し、利用可能なパッチやアップデートをユーザーに通知することができます。
動的アプリケーションセキュリティテスト (DAST):DAST は、実行中のアプリケーションにさまざまな種類の攻撃を適用することで、アプリケーションのセキュリティ態勢をテストします。アプリケーションのソースコードにアクセスする必要はなく、ブラックボックステスト方式で行われます。
アプリケーションセキュリティテスティング・アズ・ア・サービス (ASTaaS):このシナリオでは、企業はアプリケーションのすべてのテストを外部の会社に委託します。ASTaaS は通常、侵入テストやアプリケーションプログミングインタフェース (API) の評価など、静的および動的なセキュリティ手法を組み合わせて使用します。
ファジング:ファジングは、ランダム化されたデータを入力してアプリケーションをテストし、潜在的なバグを発見するものです。ファジングは、IAST、DAST、SAST、およびその他の形式のテストを補完します。
Snyk のアプリケーションセキュリティへの取り組み
Snyk は、開発者の既存のワークフローに統合されたエンドツーエンドのモニタリングと軽減措置を提供する、アプリケーションセキュリティの必須テクノロジーとなっています。以下のツールが含まれます。
Snyk Code: 修正を簡単かつ効率的に行うことを目的とした開発者ファーストの SAST ツール。
Snyk Open Source: オープンソースの脆弱性を発見して優先順位を設定できるソフトウェアコンポジション解析 (SCA) ツール。
Snyk Container: 基本イメージからランタイムまでコンテナのセキュリティを確保するのに役立つツール。
Snyk IaC: 開発者が IC 設定のセキュリティを確保するのに役立つツール。
Snyk Cloud: Policy as Code を使用して開発者がクラウドセキュリティを管理するのに役立つツール。
アプリケーションセキュリティで Snyk のツールキットがにどのように役立つかを視覚的に示した図を以下に示します。
Snyk ツールの導入は、デベロッパーセキュリティの最大限の自動化に向けた次の一歩となります。Snyk は Sysdig との提携や最近の Fugue の買収により、アプリケーションのセキュリティをランタイムで確保することを目指して進化を続けています。これらのツールを組み合わせることで、開発者はアプリケーションのライフサイクルを通してアプリケーションセキュリティを確保できます。
アプリケーションセキュリティの例
Snyk を使用して開発者向けのワークフローでアプリケーションセキュリティプロセスを改善し、態勢を整えた事例については、ケーススタディをご覧ください。
「Glovo のセキュリティチームは、Snyk の使用により、依存関係やコードにおける重大な脆弱性が 78% 減少したと報告しています。さらに、平均修正時間も 40% 短縮し、全体的により安全なコードをすばやく出荷できるようになったことが示されています」。
Glovo
お勧めの記事
アプリケーションセキュリティを高める 15 のベストプラクティス 2022|Snyk
アプリケーションセキュリティの頭字語トップ 10 | Snyk
よくある質問
アプリケーションセキュリティライフサイクルとは
アプリケーションセキュリティライフサイクルは、ソフトウェア開発ライフサイクル (SDLC) と並行して実行されます。従来のセキュリティの手法では、開発が終わりに近づくまで、または本番環境で実行されるまで待ってからアプリケーションを保護していました。最新の開発手法では、これらの手法をプロセスの早い段階に移行しています。つまり、セキュリティチームと開発チームは、SDLC の初期段階からランタイム環境に至るまで、セキュリティを組み込むことが求められています。
アプリケーションのセキュリティを確保する方法とは
アプリケーションセキュリティは計画の初期段階から始まり、脅威のモデル化とセキュアバイデザインの原則によって、アプリケーションにセキュリティを確実に組み込んでいます。さらに、開発、テスト段階へと進み、スキャンツールを開発者のワークフローに統合して、セキュリティテストを自動化できます。開発者は、アプリケーションを実行するコンテナとインフラに対しても責任を負うようになっているため、開発環境のセキュリティも確保する必要があります。
アプリケーションセキュリティツールとは
アプリケーションセキュリティツールは、既知の脆弱性を探し、その結果を分類します。アプリケーション層が攻撃されシステムが不正にアクセスされるケースが多いため、アプリケーションセキュリティツールはセキュリティを改善する上で非常に重要といえます。これらのツールは、人やプロセスとともに、包括的なセキュリティ態勢に不可欠です。
アプリケーションセキュリティ制御とは
アプリケーションセキュリティ制御とは、セキュリティ基準を導入するために適用する特定の手順のことをいいます。セキュリティ階層では、企業全体の境界を示すポリシーが設定され、そのポリシーに基づく具体的なルールが基準となります。そして制御により、その基準が適用されます。 たとえば、企業のポリシーで楕円曲線暗号に基づく特定の暗号化アルゴリズムのみを使用することが決まっているとします。この基準により、そのポリシーをアプリケーションのどこに適用するかについてのルールが設定され、制御により (理想的には) その実装が自動化されます。
アプリケーションデータセキュリティとは?
アプリケーションデータセキュリティは、ソフトウェアアプリケーションによって処理・保存される機密性の高いビジネス情報や顧客データを、不正なアクセス、変更、または削除などの脅威から保護することと定義され、総合的なアプリケーションセキュリティ戦略の重要な部分となります。