DevSecOps の現況 | Datadog
DevSecOps の現況

DevSecOps の現況

/ / / / / / /

セキュアなコードを迅速かつ大規模に提供することは、ソフトウェア業界全体において大きな課題です。これは、高プロファイルなデータ漏洩やクリティカルな脆弱性が頻繁に報じられることからも明らかです。この課題に対処するために、アプリケーション開発者が開発ライフサイクル全体を通じて運用およびセキュリティチームと緊密に協力する DevSecOps の採用が増加しています。DevSecOps はアプリケーションセキュリティを全体的に考慮し、コードの書き方だけでなく、そのデプロイ方法や本番環境での運用方法も安全であるべきだと位置づけています。

私たちは、数万ものアプリケーションとコンテナイメージ、および数千のクラウド環境を分析して、今日のアプリケーションのセキュリティポスチャを評価し、DevSecOps の中核となるベストプラクティス (コードとしてのインフラストラクチャー、自動化されたクラウドデプロイメント、セキュアなアプリケーション開発プラクティス、CI/CD パイプラインでの有効期間が短い認証情報の使用) の採用を評価しました。

当社の調査結果からは、最新の DevOps プラクティスが強力なセキュリティ対策と密接に連携しており、セキュリティが実際にオペレーショナルエクセレンスを推進する一助となっていることが示されています。また、セキュリティは可視性から始まりますが、アプリケーションのセキュリティ確保には、実務者が重要なことに焦点を当てられるよう十分なコンテキストと優先順位が与えられることが不可欠であり、それがなければ実現は困難です。


事実 1

サードパーティの脆弱性の影響を最も受けているのは Java のサービスである

様々なプログラミング言語で書かれたアプリケーションのセキュリティポスチャを分析することで、Java のサービスがサードパーティのライブラリによる脆弱性に対して最も影響を受けやすいことが明らかになりました。具体的には、他の技術の平均が 47% であるのに対して、Java ベースのサービスの 90% がサードパーティのライブラリによってもたらされた 1 件以上のクリティカルまたは高重大度の脆弱性に対して影響を受けています

サードパーティライブラリの脆弱性が Java のサービスに最も影響

また、Java のサービスは攻撃者による実際の悪用が文書化された脆弱性に対しても特に脆弱であることが多いです。米国サイバーセキュリティ・インフラストラクチャー・セキュリティ局 (CISA) が更新を続けている Known Exploited Vulnerabilities (KEV) カタログには、脅威行為者によって実際に悪用されている脆弱性がリストアップされています。この継続的に更新されるリストは、システムを侵害するために積極的に悪用されている最も影響力のある脆弱性を特定するのに役立ちます。リストに記載されている脆弱性から、Java のサービスのうち 55% が影響を受けていることがわかりました。これは、他の言語を使用して構築されたサービスの 7% と比較して非常に高い割合です。

特定のカテゴリの脆弱性に焦点を当てても、この傾向は変わらないことが確認されています。例えば、Java のサービスの 23% がリモートコード実行 (RCE) に対して脆弱であり、それが 42% の組織に影響を与えています。Tomcat、Spring Framework、Apache Struts、Log4j、ActiveMQ などの人気 Java ライブラリに存在する影響力のある脆弱性がこれらの高い数値の一因と考えられます。最も一般的な脆弱性の例として、以下が挙げられます。

この仮説は、これらの脆弱性が一般的にどこから発生するかを調べることで補強されます。Java では、重大な脆弱性の 63% が間接的な依存関係から生じています。これは、アプリケーションとともに間接的にパッケージ化されたサードパーティのライブラリに由来します。このような脆弱性は、通常、特定が困難であり、それが出現する追加のライブラリが、多くの場合、開発者の知らない間にアプリケーションに導入されているからです。

間接依存の仕組み
Java のサービスにおけるサードパーティの脆弱性の大半は間接的な依存関係が原因

したがって、アプリケーションの脆弱性をスキャンする際には、直接の依存関係だけでなく、依存関係ツリー全体を考慮することが不可欠です。また、アプリケーションに追加された新しい依存関係が適切に保守され、それ自身の依存関係を頻繁にアップグレードしているかどうかを把握することも重要です。OpenSSF Scorecard のようなフレームワークは、オープンソースライブラリの健全性を迅速に評価するのに役立ちます。

“組織の攻撃対象領域は、公衆に公開されたコードだけでなく、アプリケーションの直接的および間接的な依存関係も含まれます。これらの依存関係の脆弱性はどのように追跡していますか?さらに、侵害が発生した際に早期にアラートを発することができていますか?どのようにして被害を最小限に抑えますか?ほとんどの脆弱性は優先順位をつけるには値しませんが、悪用の可能性が高い脆弱性は、有効期間が長い資格情報を持つ過剰権限アプリケーションでしばしば見つかり、その潜在的な重大度を高めています。”

Jeff McJunkin
Rogue Valley Information Security 創設者、SANS インストラクター
事実 2

自動化されたセキュリティスキャナーからの攻撃試行は、ほとんどが対処不可能なノイズである

様々な言語で開発されたアプリケーションに対する多くの悪用の試みを分析した結果、自動セキュリティスキャナーからの攻撃が悪用の試みの大半を占めていることが明らかになりました。これらのスキャナーは通常、オープンソースツールで、攻撃者がインターネット全体をスキャンし、脆弱なシステムを特定するために大規模に実行しようとします。一般的なツールの例としては、NucleiZGrabSQLmap などがあります。

自動セキュリティスキャナーによって実行される攻撃の大部分は無害であり、防御側にとっては単なるノイズを生成するだけであることが判明しました。このようなスキャナーからの何千万もの悪意のあるリクエストの中で、脆弱性をトリガーしたのはわずか 0.0065% に過ぎませんでした。これは、防御者が生の Web サーバーログや境界の Web アプリケーションファイアウォール (WAF) のアラートを効果的に監視するために、アラートの優先順位を定めるための強固なフレームワークが非常に重要であることを示しています。脅威インテリジェンスとアプリケーションのランタイムコンテキストをセキュリティ検出に統合することで、企業は最も重要な脅威をフィルタリングしやすくなります。

自動化されたセキュリティスキャナーからの攻撃試行は、ほとんど対処不可能なノイズ
事実 3

特定された脆弱性のうち、優先する価値があるのはごく一部である

2023 年、Common Vulnerabilities and Exposures (CVE) プロジェクトでは、4,000 を超える高度な脆弱性と 1,000 を超えるクリティカルな脆弱性が特定され、インベントリ化されました。私たちの調査により、平均的なサービスはこれらの脆弱性に対して 19 の脆弱性があることがわかりました。しかし、過去の学術研究によると、攻撃者によって実際に悪用される脆弱性は全体の約 5% に過ぎません。

この数字を見ると、実務担当者が直面する脆弱性の多さに圧倒されている理由、そして彼らが何に焦点を当てるべきかを判断するために優先順位付けのフレームワークが必要な理由がよくわかります。私たちは多くの脆弱性を分析し、成功した悪用の可能性と影響を評価するために、以下のいくつかの追加的な要因に基づいた「調整済みスコア」を計算しました。

  • 脆弱なサービスはインターネットに公開されているか?
  • それは本番環境で稼働しているのか、それとも開発環境やテスト環境なのか?
  • 悪用コードがオンラインで公開されているか、脆弱性を悪用する方法についての指示はあるか?

また、Exploit Prediction Scoring System (EPSS) のスコアも考慮に入れ、このメトリクスで高いスコアを得た脆弱性に重点を置きました。この方法をすべての脆弱性に適用し、調整後のスコアに基づいてどれだけの脆弱性が引き続きクリティカルであるかを評価しました。調整後のスコアリングを適用した結果、重大度がクリティカルな脆弱性を持つ組織の 63% が、もはやクリティカルな脆弱性を持たないことが確認されました。一方で、30% の組織は、クリティカルな脆弱性の数が半分以上減少しました。

実行時のコンテキストを調整することで、多くのクリティカルな脆弱性が排除される

優先すべき脆弱性を決定する際には、組織は問題の重大度を一貫して評価できるフレームワークを採用すべきです。一般に、以下の条件を満たす場合、脆弱性はより深刻です。

  1. 影響を受けるサービスがインターネットに公開されている場合
  2. 脆弱性が本番環境で動作している場合
  3. 悪用コードが公開されている場合

他の脆弱性もリスクを伴う可能性がありますが、これらの 3 つの基準を満たす問題に対処した後にのみ取り組むべきです。

事実 4

軽量なコンテナイメージは脆弱性を少なくする

ソフトウェア開発とセキュリティの両方において、「少ないほど良い」ということがしばしばあります。これは、コンテナベースイメージなどのサードパーティ依存関係に特に当てはまります。ベースイメージの選択肢には、通常、以下のようなものがあります。

  • Ubuntu などの古典的な Linux ディストリビューションをベースにした大きなイメージを使用する。
  • Alpine Linux や BusyBox などの軽量ディストリビューションをベースにしたスリムなイメージを使用する。
  • アプリケーションの実行に必要な最小限のランタイムのみを含む、distroless image を使用する。

何千ものコンテナイメージを分析した結果、コンテナイメージが小さいほど脆弱性が少ないことがわかりました。これは、含まれるサードパーティのライブラリが少ないためと考えられます。平均して、100 MB 未満のコンテナイメージには 4.4 個の高度な脆弱性またはクリティカルな脆弱性があり、250 MB から 500 MB のイメージには 42.2 個、それより大きいイメージには約 80 個の脆弱性があります。

小さなコンテナイメージには脆弱性が少ない

この事実は、コンテナ化された環境において軽量なイメージを使用することが、攻撃対象領域を最小限に抑えるための重要な手法であることを示しています。軽量なイメージは、アプリケーションが依存するサードパーティのライブラリやオペレーティングシステムのパッケージ数を減少させるのに役立ちます。さらに、薄いイメージはストレージ使用量やネットワークトラフィックを減らし、デプロイの速度も向上させます。最終的に、軽量なコンテナイメージは、攻撃者が利用可能なツール (例えば curl や wget などのシステムユーティリティ) を最小限に抑えることで、多くの種類の脆弱性の悪用をより困難にします。

“Kubernetes のようなコンテナ環境で脅威アクターの役割を演じる際、distroless で構築されたコンテナイメージは私の作業を困難にします。”

Jay Beale
コンサルティング会社 InGuardians の CEO
事実 5

コードとしてのインフラストラクチャーの採用率は高いが、クラウドプロバイダーによって異なる

コードとしてのインフラストラクチャー (IaC) の概念は、1990 年代に CFEngine、Puppet、Chef などのプロジェクトによって導入されました。パブリッククラウドコンピューティングが普及した後、IaC はクラウド環境をプロビジョニングするための事実上の標準として急速に広まりました。IaC はバージョン管理、トレーサビリティ、環境間での再現性など、運用に大きなメリットをもたらします。その宣言的な性質が、DevOps チームが望ましい状態を理解するのを助けるため、終わりのない bash スクリプトを読む代わりに、目的の状態にどのように到達するかを把握することができます。

IaC は、クラウドの本番環境を保護する上での重要な手法とされており、次のような点を確保するのに役立ちます。

  • すべての変更がピアレビューされる
  • デプロイは CI/CD パイプラインによって処理されるため、本番環境における人間の操作の権限は限定される
  • 組織は IaC コードの脆弱な構成をスキャンし、本番環境に到達する前に問題を特定することができる

AWS では、Terraform、CloudFormation、Pulumi などの少なくとも 1 つの一般的な IaC 技術を通じて、71% 以上の組織が IaC を使用していることを確認しました。この数字は Google Cloud では 55% と低くなっています。

Azure に関しては、Azure アクティビティログが HTTP ユーザーエージェントを記録しないため、報告することができません。

AWS と Google Cloud 全体で見ると、Terraform が最も人気のあるテクノロジーで、クラウド固有の IaC ツールである CloudFormation や Google Deployment Manager よりも一般的です。

Terraform は AWS を代表する Infrastructure as Code ツール
Google Cloud では、約半数の組織が Infrastructure as Code ツールを使用していない
事実 6

手作業によるクラウドのデプロイはまだ広がっている

人間はありがたいことに機械ではないため、間違いを犯すことがあります。このため、品質管理やそれに伴うセキュリティの重要な要素として、人の手を離れる反復的なタスクを自動化することが必要です。

クラウドの本番環境では、通常、CI/CD パイプラインがインフラストラクチャーとアプリケーションへの変更をデプロイする責任を持っています。このパイプラインで行われる自動化は、IaC ツールやクラウドプロバイダ固有のツールを使用したスクリプトによって行われます。

自動化により、エンジニアは本番環境に常に特権アクセスする必要がなくなり、デプロイが適切に追跡され、ピアレビューされるようになります。このベストプラクティスの反対である、クラウドコンソールから手動でアクションを実行することは、しばしばクリック運用 (ClickOps) と呼ばれます。

CloudTrail のログを分析することで、私たちは AWS の少なくとも 38% の組織が、この調査の執筆に先立つ 14 日間のウィンドウ内にすべての AWS アカウントで ClickOps を使用していたことを確認しました。私たちの定義によると、これはこれらの組織がこの期間中に AWS Management Console を介してワークロードをデプロイしたり、センシティブなアクションを手動で実行したりしたことを意味します。これには本番環境での操作も含まれます

本番環境を含め、組織はいまだに ClickOps を使用している
事実 7

CI/CD パイプラインにおける有効期間が短い資格情報の使用率はまだ低すぎる

クラウド環境では、有効期間が長い資格情報の漏えいがデータ漏洩の最も一般的な原因の一つです。CI/CD パイプラインは通常、高い権限を持ち、過剰なロギング、ソフトウェア依存関係の侵害、またはビルド成果物を通じて資格情報が漏れる可能性があるため、攻撃対象を増加させます。これは codecov の侵害と類似しています。このため、CI/CD パイプラインで有効期間が短い資格情報を使用することは、クラウド環境を保護する上で最も重要な側面の一つです。

しかし、AWS 環境で有効期間が短い資格情報がより実用的で安全である場合でも、多くの組織が依然として有効期間が長い資格情報に依存していることが確認されました。GitHub Actions を使用している組織全体 (AWS で稼働している組織の 31% 以上に相当) で、有効期間が短い認証情報と OpenID Connect (OIDC) に基づく “キーレス” 認証 を専門的に使用しているのはわずか 37% です。一方で、63% の組織が GitHub Actions パイプラインの認証に IAM ユーザー (有効期間が長い資格情報の一形態) を少なくとも一度は使用しており、42% が IAM ユーザーのみを使用しています。

ほとんどの AWS 組織では、GitHub Actions パイプラインでまだ有効期間が長い資格情報を使用している

CI/CD パイプラインでキーレス認証を使用することは、設定が簡単で、より安全です。これは、良好な運用プラクティスがより優れたセキュリティ結果につながる傾向があることを再び示しています。

Datadog でアプリケーションとクラウドリソースを保護

方法論

調査結果は、2024 年 2 月から 4 月までに収集されたデータに基づいています。

事実 1

この事実においては、様々な言語とランタイム (Java、.NET、PHP、Python、Ruby、JavaScript、Go) を持ち、Datadog Application Security ManagementSoftware Composition Analysis 機能を使用するアプリケーションのサードパーティライブラリの脆弱性を分析しました。

既知の悪用されている脆弱性は、2024 年 4 月 10 日に抽出された CISA KEV カタログから得られています。

各脆弱性は、直接依存性か間接依存性かに基づいて分類されました。ただし、この事実は Java アプリケーションにのみ焦点を当てており、現在 JVM ベースのサービスでのみ直接依存と間接依存の区別を行うことができるためです。

事実 2

"Datadog ASM Threat Management によって識別された、セキュリティスキャナーから来る疑わしいおよび悪意のあるリクエストを分析しました。この分析は、すぐに使えるルールに基づいています。動的な機器を用いて、どの脆弱性が実際に悪用されたかを特定しました。確実に悪用されたか、無害だったと特定できる悪意のあるリクエストのみを考慮しました。"

事実 3

事実 1 と同様に、Datadog Application Security ManagementSoftware Composition Analysis 機能を使用するアプリケーションのサードパーティライブラリの脆弱性を分析しました。

CVSSv3 の基本スコアが「クリティカル」である脆弱性を考慮し、利用可能なコンテキストに基づき、以下の方法論で「時間的」および「環境的」の CVSSv3 メトリクスを計算しました。

  • サービスが非本番環境で実行されている場合、「修正された機密性、完全性、および可用性の影響」を「低」に調整しました。
  • サービスがインターネット上に公開されておらず、攻撃ベクトルが「ネットワーク」である場合、「修正された攻撃ベクトル」を「ローカル」に設定しました。
  • EPSS スコアが 1% 未満である場合、「修正された攻撃の複雑さ」を「高」に設定しました。
  • 公開されたエクスプロイトが利用可能な場合、「エクスプロイトコードの成熟度」を「概念実証」に設定し、それ以外の場合は「未証明」にしました。

その後、CVSS v3.1 の方法論に基づいて修正スコアを計算し、修正後のスコアが依然として「クリティカル」 (9.0 以上) である脆弱性の割合を考慮しました。

事実 4

"Datadog Cloud Security Management (CSM) の Vulnerability Management を通じてスキャンされたコンテナのデータを分析し、特定された OS レベルの脆弱性をレビューしました。これには、公開されているイメージとプライベートレジストリのイメージの両方が含まれます。"

事実 5

この事実においては、AWS と Google Cloud 環境のクラウドアクティビティログ (AWS CloudTrail および Google Cloud Admin Activity Logs) を分析し、HTTP ユーザーエージェントに基づいてどの IaC テクノロジーが使用されたかを判断しました。

Azure のアクティビティログには HTTP ユーザーエージェントが含まれていないため、この事実には Azure のデータは含まれていません。

注: この事実のデータウィンドウは、2024 年 1 月 1 日から 2 月 18 日までです。この期間に組織が既知の IaC テクノロジを使用していなかった場合、それを「IaC を使用していない」とカウントしました。

事実 6

この事実においては、AWS に焦点を当て、AWS CloudTrail のログを分析しました。具体的には、Datadog で監視している全 AWS アカウントで以下のリストにあるイベントのうち少なくとも一つが見つかった場合、その組織が「AWS コンソールを通じて手動でクラウドデプロイを行っている」と定義しました。すべての組織が少なくとも一つの本番アカウントを Datadog で監視していると仮定するため、この基準を満たす組織は本番環境で ClickOps を使用していると判断できます。

RunInstances
AuthorizeSecurityGroupIngress
CreateVpc
CreateCluster
CreateDBCluster
CreateDBInstance
CreateInstances
CreateKeyPair
RegisterTaskDefinition

その後、Arkadiy Tetelman によって説明された方法論を使用して、これらのイベントが AWS コンソールから手動で実行されたときに識別するためにフィルタリングしました。 - title: 事実 7 text_markdown: | GitHub Actions を OIDC 認証で使用している組織を特定するために、AWS CloudTrail のログを以下の Datadog のログクエリを使用してクエリしました: @eventName:AssumeRoleWithWebIdentity @userIdentity.identityProvider:*token.actions.githubusercontent.com* -status:error

GitHub Actions を IAM ユーザーで使用している組織を特定するために、次の手順を行いました。

  1. 以下の Datadog ログクエリを使用して AWS CloudTrail ログをクエリしました: @userIdentity.accessKeyId:AKIA* @userIdentity.type:IAMUser -status:error
  2. GitHub の API エンドポイントにより GitHub Actions で使用されていると特定されたソース IP に対して結果をフィルタリングしました

ライセンス

レポート: BY-ND

画像: BY-ND