DockerとKubernetesにおける ‘Leaky Vessels’ エクスプロイトの検出

By 清水 孝郎 - FEBRUARY 4, 2024

SHARE:

本文の内容は、2024年2月1日にMICHAEL CLARK が投稿したブログ(https://sysdig.com/blog/exploitation-in-docker-and-kubernetes/)を元に日本語に翻訳・再構成した内容となっております。

SnykがDockerとKubernetesに関わる4つの新たな脆弱性を発表。FalcoとSysdig Secureでこれらの悪用を検出。

サマリー

2024 年 1 月 31 日、Snyk は、Kubernetes と Docker に 4 つの脆弱性が発見されたと発表しました。 

Kubernetesの場合、脆弱性はrunc CRIに特有のものです。悪用に成功すると、攻撃者はコンテナからエスケープし、ホストのオペレーティングシステムにアクセスできるようになります。これらの脆弱性を悪用するには、攻撃者がコンテナをビルドする際にDockerfileをコントロールする必要があります。

この4つの脆弱性はすべて、特別に細工された Dockerfile が関係し、予期しない順序でコマンドが実行されるレースコンディションを引き起こします。この投稿では、各問題について簡単に説明し、敵対者が上記のCVEを悪用するかどうかを検出するためのFalcoルールを提供します。

CVE-2024-21626

この脆弱性には、WORKDIRコマンドの処理方法に欠陥があります。Dockerfileがビルドされ、コンテナが実行されると、ファイル記述子が実際にクローズされる前にWORKDIRコマンドが実行されます。閉じた状態でもファイル記述子へのアクセスを維持するフォルダを追加することは可能です。攻撃者が /sys/fs/ グループに関連するファイル記述子を傍受すると、ホスト上で直接ファイルを作成できるようになります。

以下の Falco ルールは、影響を受けるコンテナランタイムがディレクトリを proc ファイル記述子に変更しようとしていることを検知します。 このルールは実験的なものと考えるべきであり、カスタムルールとして OSS Falco および Sysdig Secure で使用することができます。

- rule: Suspicious Chdir Event Detected
  desc: Detects a process changing a directory using a proc-based file descriptor.  
  condition: >
    evt.type=chdir and evt.dir=< and evt.rawres=0 and evt.arg.path startswith "/proc/self/fd/" 
  output: >
    Suspicious Chdir event detected, executed by process %proc.name with cmdline %proc.cmdline under user %user.name (details=%evt.args proc.cmdline=%proc.cmdline evt.type=%evt.type evt.res=%evt.res fd=%evt.arg.fd nstype=%evt.arg.nstype proc.pid=%proc.pid proc.cwd=%proc.cwd proc.pname=%proc.pname proc.ppid=%proc.ppid proc.pcmdline=%proc.pcmdline proc.sid=%proc.sid proc.exepath=%proc.exepath user.name=%user.name user.loginuid=%user.loginuid user.uid=%user.uid user.loginname=%user.loginname group.gid=%group.gid group.name=%group.name container.id=%container.id container_name=%container.name image=%container.image.repository:%container.image.tag)
  priority: WARNING
  tags: [host, container]Code language: HTML, XML (xml)

CVE-2024-23651

この CVE は、マウントおよびシンボリックリンクコマンドを悪用して競合状態を引き起こすことにより、ビルド時に Docker に影響を与えます。より具体的には、このクラスの脆弱性は Time of Check Time of Use (TOCTOU) と呼ばれます。Docker が値の正常性またはセキュリティをチェックする場合、その値が使用されるまでに時間がかかり、その間の時間が攻撃者によって状態を変更される可能性があります。 

悪用に成功すると、攻撃者に基盤となるホスト OS への書き込みアクセスが許可されます。その後、複数の方法 (通常は変更された cron エントリとして見られる) を介してホスト上で悪意のあるコマンドを起動する可能性があります。以下の「Create Symlink Over Sensitive Files Falco」ルールを使用すると、この脆弱性の悪用の成功を検出できます。

CVE-2024-23652

この Docker の脆弱性は、コンテナのビルド段階で RUN コマンドを悪用して、マウントとシンボリックリンクの実行時に競合状態を引き起こすことによって悪用されます。この問題を悪用すると、攻撃者がホスト OS 上の任意のファイルを削除できる可能性があります。このエクスプロイトによって追加のアクセスが提供されることはありませんが、重要なシステム ファイルが削除されることにより、サービス拒否 (DoS) 攻撃が可能になる可能性があります。 

Falco は、ホスト OS 上の機密性の高い場所へのシンボリックリンクを作成する CRI を検索することで、CVE-2024-23651 および CVE-2024-23652 の悪用を検出できます。次の Falco ルールは、脅威アクターがホスト OS 上の機密ディレクトリへのシンボリックリンクを作成することで脆弱性を悪用した場合にイベントをトリガーします。以下の Falco ルールは、OSS Falco および Sysdig Secure で利用できます。

- macro: create_symlink
  condition: evt.type in (symlink, symlinkat) and evt.dir=<

- list: sensitive_file_names
  items: [/etc/shadow, /etc/sudoers, /etc/pam.conf, /etc/security/pwquality.conf]

- list: sensitive_directory_names
  items: [/, /etc, /etc/, /root, /root/]

- rule: Create Symlink Over Sensitive Files
  desc: Detect symlink created over sensitive files
  condition: >
    create_symlink and
    (evt.arg.target in (sensitive_file_names) or evt.arg.target in (sensitive_directory_names) or evt.arg.target contains "/var/spool/cron" or evt.arg.target contains "/var/cron" or evt.arg.target contains "/etc/cron" or evt.arg.target contains "/etc/security" or evt.arg.target contains "/usr/lib/cron") 
  output: >
    Symlinks created over sensitive files by process %proc.name with parent %proc.pname under user %user.name with cmdline %proc.cmdline executed on %container.name (user.name=%user.name user.loginuid=%user.loginuid proc.cmdline=%proc.cmdline target=%evt.arg.target linkpath=%evt.arg.linkpath evt.type=%evt.type evt.res=%evt.res proc.name=%proc.name proc.pname=%proc.pname proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.pcmdline=%proc.pcmdline user.uid=%user.uid user.loginname=%user.loginname container.id=%container.id container.name=%container.name image=%container.image.repository:%container.image.tag)
  priority: WARNING
  tags: [host,container]Code language: JavaScript (javascript)

CVE-2024-23653

この脆弱性により、攻撃者はコンテナを特権として起動することができます。これは、コンテナのビルド時の Buildkit の検証ルーチンの問題が原因で発生します。攻撃者が Dockerfile を変更してカスタム Buildkit LLB ディレクティブを Dockerfile に追加すると、特権アクセスの取得を妨げる特定のセキュリティチェックをバイパスさせる可能性があります。攻撃者が特権コンテナ内に入ると、さまざまな方法で簡単にホスト OS にエスケープすることができます。

CVE-2024-23653 は、環境内で起動されている特権コンテナを監視することで検出できます。信頼できるイメージは許可リストに登録する必要があります。これにより、異常値がすぐに明らかになります。以下の Falco ルールは、OSS Falco および Sysdig Secure で利用できます。

- macro: container
  condition: (container.id != host)

- macro: container_started
  condition: >
    ((evt.type = container or
     (spawned_process and proc.vpid=1)) and
     container.image.repository != incomplete)

- rule: Launch Privileged Container
  desc: Detect the initial process started in a privileged container. Exceptions are made for known trusted images.
  condition: >
    container_started and container and container.privileged=true
  output: Privileged container %container.name with image %container.image.repository started (user.name=%user.name user.loginuid=%user.loginuid proc.cmdline=%proc.cmdline %container.info evt.type=%evt.type evt.res=%evt.res proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.pcmdline=%proc.pcmdline proc.sid=%proc.sid proc.exepath=%proc.exepath user.uid=%user.uid user.loginname=%user.loginname group.gid=%group.gid group.name=%group.name container.id=%container.id container.name=%container.name image=%container.image.repository:%container.image.tag)
  priority: WARNING
  tags: [container]Code language: JavaScript (javascript)

end-to-endの検出で今すぐクラウドを保護しましょう

Sysdig Secureの中核にはFalcoの統合検知エンジンがあります。この最先端のエンジンは、リアルタイムの振る舞いに関する洞察と脅威インテリジェンスを活用して、多層的なインフラストラクチャーを継続的に監視し、潜在的なセキュリティ侵害を特定します。コンテナの異常な振る舞い、不正アクセスの試み、サプライチェーンの脆弱性、アイデンティティに基づく脅威など、Sysdigは組織が進化する脅威に対して統合的かつプロアクティブな防御を行うことを確実にします。

Sysdig が AWS、GCP、Azure 全体で継続的なクラウド セキュリティをどのように提供しているかを詳しく見てみましょう。

まとめ

Snyk によって発見された 4 つの脆弱性により、Docker および Kubernetes に対するサプライ チェーン攻撃が可能になる可能性があります。 

攻撃者がパブリックリポジトリまたはプライベートリポジトリを通じて Dockerfile にアクセスすると、これらの脆弱性を悪用してホスト OS への書き込みアクセスを取得したり、ホスト自体に対してサービス妨害を引き起こしたりする可能性があります。Docker は攻撃者にワークステーションへのアクセスを与え、ネットワーク上で足場を築く可能性がある脆弱なアプリケーションであるため、ユーザー、特に開発者がターゲットになる可能性があります。

Docker および Kubernetes ソフトウェアは重大度が高いため、できるだけ早くアップグレードすることをお勧めします。脆弱性管理は継続中ですが、この記事で提供されている Falco ルールにより、脆弱性が悪用された場合に検出を行うことができます。