クラウドネイティブにおけるサプライチェーン攻撃について知っておくべきこと #aqua #セキュリティ #サプライチェーン攻撃 #DTA #動的解析
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2021年6月17日に公開された「 Supply Chain Attacks and Cloud Native: What You Need to Know 」の日本語翻訳です。
クラウドネイティブにおけるサプライチェーン攻撃について知っておくべきこと
ここ数年、ソフトウェアのサプライチェーンを狙った攻撃が増加しており、その最も顕著な例が Solarwinds 社への攻撃です。本番環境が何重にも保護されるようにセキュリティチームが注力するようになると、悪意ある攻撃者はアプリケーションの開発場所やその構成要素を狙うようになりました。しかし、これはクラウドネイティブにとってどのような意味を持つのでしょうか。クラウドネイティブアプリケーションは、サプライチェーン攻撃の影響を受けやすいのでしょうか。ここでは Aqua の Team Nautilus によるサイバーリサーチの結果、実際に観測された攻撃を例に、これらの疑問に答えます。
クラウドネイティブにおけるサプライチェーンの脅威
クラウドネイティブアプリケーションの開発環境には、サプライチェーンに悪意のあるコードを埋め込もうとする攻撃者にとって格好の標的となるいくつかの特徴があります。
まず、クラウドネイティブアプリケーションの開発では、オープンソースのコンポーネントが広く使用されていることが特徴で、多くの場合、これらは公開されたレジストリから入手します。多くのオープンソースプロジェクトは十分に管理され、多くの人の目で精査されていますが、中にはそうでないものもあります。そのため、攻撃者がコントリビューターになりすまし、悪意のあるコードに置き換えることが可能になります。攻撃者は、サプライチェーンの上位に行けば行くほど、自分のコードを広く普及させる可能性が高くなります。そのため、より高度な攻撃者は、さまざまなアプリケーションで再利用される可能性のある、広く使用されているパッケージを探します。
さらに、多くの開発環境は本番環境ほど綿密に精査されておらず、コンテナイメージや function、パッケージは CI/CD パイプラインを使って頻繁に更新されるため、攻撃者がプロセスにコードを埋め込む機会が何度も生じます。Team Nautilus は、CI SaaS 環境において、CI プロセス自体を悪用してクラウドの CPU タイムにアクセスする攻撃を検知・分析しました。そこから、これら CI パイプラインで構築されているアーティファクトへ、比較的短時間でアクセスできます。
攻撃ベクトルを観察
コンテナや Kubernetes 環境を標的とした攻撃を調査したところ、さまざまなレベルの巧妙な手法や回避手段が確認されました。比較的シンプルなものから、より高度なものまで、さまざまなものが見られます。
- 環境に忍び込むために、あるいは誰かに使われることを期待して、悪意のあるコンテナイメージをパブリックレジストリに公開。
- 悪意のあるコードを良心的な「バニラ」コンテナイメージの中に隠し、その中に何が潜んでいるのかを知らずに開発者が使用。
例えば、「tensorflow」ではなく「tesnorflow」のように、人気のあるコンテナイメージの名前をわざと間違えて表記する「typo-squatting(タイポスクワッティング)」という手法も見られます。 - マルウェアの静的解析を回避するために、シグネチャだけでは認識できない様々な方法で進化したマルウェアを使用したり、コンテナイメージがデプロイされてコンテナとして実行された後に追加のコンポーネントを呼び出す。
- ホスト上で直接イメージをビルドすることで、CI/CD パイプラインの制御を回避する。
- クラウドベースの CI ツールを悪用し、攻撃者が無料の SaaS サービスを利用して、アプリケーションを構築すると称してクリプトマイニングを実行。
このような攻撃の様々な段階で、悪意のある攻撃者は目的を達成するために徐々に深刻さを増していくような行動をとり、環境内での持続性を確立します。すなわち、特定のコンテナ、ホスト、あるいはクラスターを超えて攻撃を継続できるようにします。
これらに対する防衛策は?
クラウドネイティブアプリケーションには、攻撃に対する耐性を高める固有の特性があり、従来のモノリシックなアプリケーションよりも堅牢な方法で、攻撃をすり抜けた場合の被害を抑えることができます。
- パイプラインが高度に自動化されているため、サプライチェーン攻撃を検知したり、少なくとも成功させにくい制御を組み込む。
- クラウドネイティブワークロードはオーケストレーションされており、時には短命なため、攻撃を持続することが極めて困難です。Solarwinds 社への攻撃のような攻撃が発生し、どこかの Windows サーバに感染した場合、その Windows サーバは同じパーミッション、IP アドレスで稼働し、何ヶ月や何年もダウンタイムやアップグレードされていない可能性があります。これに対して、サーバーレス function は通常数秒、ほとんどのクラウド環境では最大 15 分程度しか稼働しないため、潜在的な被害を抑えることができます。
- クラウドネイティブでの観測性は圧倒的に優れています。Tracee のようなオープンソースのツールのおかげで、すべてのプロセス、すべてのネットワーク接続、すべてのイベントに関する非常に詳細なリアルタイム情報を得ることができます。異常を検知することも、プロセスレベル、function レベル、コンテナレベルで切り分けることも容易になります。
サプライチェーンへの攻撃を防ぐには?
サプライチェーン攻撃のリスクをなくすことは事実上不可能ですが、DevOps チームとセキュリティチームがそのリスクを軽減するためにできる対策があります。
公開されたレジストリやオープンソースコンポーネントへのアクセス制御
公開されているイメージやパッケージにアクセスできる人の数を制限し、ベースイメージ用に管理された内部レジストリを作成することで、リスクを低減します。信頼できるイメージのみが使用されるようなプロセスを導入しましょう。
イメージにデジタル署名を施すなどして、デバイス間のイメージの整合性を保つ
デプロイするイメージが意図したものと同じものであることを確認し、定義済みのパイプライン以外のイメージのデプロイを防ぎましょう。Aqua プラットフォームでは、スキャンされたすべてのコンテナイメージに自動的にデジタル署名を付与して追跡するため、環境に適合しない、または認識されないイメージや function の使用を検出して防止できます。
開発環境とステージング環境の分離
サプライチェーンへの侵入が成功した場合、攻撃者は本番環境をターゲットにしなくても、管理者の認証情報、機密性の高い IP、ソースコードなどを求めて、隣接する環境に忍び込もうとするかもしれません。必ずアクセスを認証し、特定の IP アドレス(またはVPN)に限定してください。Aqua プラットフォームでは、チーム間や異なる役割の間で厳密な職務分離(SoD=Strict Separation of Duties )を維持できます。また、開発環境と本番環境で異なるポリシーを適用できるよう、ポリシーに柔軟なスコープの設定が可能です。
静的解析と動的解析の両方を用いて、イメージをスキャンしてマルウェアを検出する
シグネチャやパターンベースの静的なツールを使用してイメージや function をスキャンし、マルウェアを検出することには一定の価値がありますが、最近の高度な攻撃は、攻撃を段階的に行うことでこのような手法を回避しています。つまり、イメージの中に小さな一見無害に見えるコンポーネントを埋め込み、コンテナとして実行されるときだけ、追加のマルウェアをダウンロードして実行するのです。
このような巧妙な攻撃は、静的な脆弱性スキャンやマルウェアスキャンでは見逃され、実行中のコンテナの動作を動的に分析することでのみ検出されます。Aqua DTA(Dynamic Threat Analysis)のように、安全なサンドボックス環境でイメージを実行してその挙動を観察することで、イメージ内の悪意ある要素を特定するツールを使用する必要があります。
CI/CDパイプラインにおけるセキュリティコントロールの自動化と組み込み
リリースサイクルのペースが速い現在、開発ライフサイクルに最初からセキュリティを組み込むことは非常に重要です。サプライチェーン攻撃を早期に発見するためには、パイプラインにおける予期せぬコード実行を検出できる必要があります。この目的のために、オープンソースのランタイムセキュリティツールである Tracee を使用可能です。Tracee は、ビルド中の悪意のあるアクティビティも特定できるため、開発ライフサイクルの早い段階でアプリケーションのセキュリティを確保するのに役立ちます。
ランタイム環境の監視
上記のような対策を講じたにもかかわらず、サプライチェーンに侵入された場合、最終的には本番環境の異常な活動として現れます。リアルタイムのランタイム保護は、サプライチェーンへの攻撃だけでなく、本番環境のインフラストラクチャやアプリケーションへの「通常の」攻撃からも保護するための重要な要素です。
まとめ
クラウドネイティブソフトウェアのサプライチェーンの現実は、企業がサードパーティのコードに大きく依存し、脆弱でリスクのあるコンポーネントをアプリケーションに導入する可能性があることです。この現実は、攻撃者がサードパーティを通じて正規のソフトウェアを標的とし、開発プロセスに悪意のあるコードを組み込む機会を数多く提供しています。サプライチェーン攻撃は今後も継続して進化していくため、組織はセキュリティ対策を調整して、それらを検知・特定・軽減する必要があります。
Aqua DTA がどのようにしてサプライチェーン攻撃から保護するのかをご覧ください。