Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2021年1月28日にStefano Chiericiが投稿したブログ(https://sysdig.com/blog/cve-2021-3156-sudo-falco/)を元に日本語に翻訳・再構成した内容となっております。
sudo に最近発見された特権昇格ヒープオーバーフロー脆弱性 (CVSS 7.8) CVE-2021-3156 が発見されました。
sudo は、ほとんどすべての Unix 系 OS に組み込まれている強力なユーティリティです。これには、Ubuntu 20 (Sudo 1.8.31)、Debian 10 (Sudo 1.8.27)、Fedora 33 (Sudo 1.9.2) などの Linux ディストリビューションが含まれます。
この人気のあるツールを使うと、他のユーザー権限でコマンドを実行することができます。例えば、95% の時間を非特権ユーザとしてコンピュータを使用していて、sudo を使用して特定のプログラムをインストールするのに必要な時間だけ root 権限を取得し、その後通常のユーザに戻ることが「できる」とします。
この脆弱性は、以下のすべての sudo のバージョンに影響を与えます。
悪用に成功すると、特権を持たないユーザが脆弱なホスト上で root 化することができます。この脆弱性は特権のエスカレーション脆弱性であるため、実際に悪用するには脆弱なホスト上のローカルユーザへのアクセスが必要です。
この記事では、この脆弱性がどのようにして悪用されるのか、また、Falco を使って悪用の試みを検出する方法を学びます。
おもしろい事実は、この脆弱性は約10年前からクリアで利用できるようになっているということです。
リサーチャーのBaron Samedit氏が発見したのは:
sudoedit コマンドに関連した sudo コードのバグにより、バックスラッシュ一文字で終わるコマンドライン引数を使って、エスケープ文字を回避してヒープベースのバッファをオーバーフローさせることができます。
攻撃者の視点から見ると、このバッファオーバーフローの脆弱性により、攻撃者はバッファのサイズをコントロールし、オーバーフロー自体の内容を(必要に応じてヌルバイトを使用して)コントロールすることができます。これにより、悪意のあるユーザがroot権限でホスト上でカスタムコードを実行することが可能になります。
最近発見され、公開されたため、すでに公開されているエクスプロイトはありません。
このような古いバグであり、最近の OS バージョンにも存在しているため、脆弱性のあるマシンはたくさんあります。LinuxやUnix OSを搭載したデバイスであれば、サーバやデスクトップに限らず影響を受ける可能性があります。
sudo のバージョンが 1.8.2 から 1.8.31p2 の間、または 1.9.0 から 1.9.5p1 の間であるかどうかをチェックすることで、影響を受けているかどうかを知ることができます。
また、以下のコマンドでマシンが利用可能かどうかをテストすることも可能です。
sudoedit -s /
そのレスポンスをもとに、そのホストが脆弱かどうかを把握することができます。
この脆弱性の悪用の試みを検出することは基本的なことです。
すぐにシステムにパッチを当てることができなくても、攻撃を検知し、潜在的に防ぐことができます。脆弱性の影響を受けるシステムやコンテナをすでにアップグレードしている場合でも、悪用の試みを検知し、環境内の悪意のある活動をキャッチすることは非常に興味深いことです。
Falcoは、コンテナとKubernetesのランタイム脅威検出のためのCNCFオープンソースプロジェクトです。
Falcoの利点の1つは、その強力で柔軟なルール言語を活用することにあります。その結果、Falcoはカスタマイズ可能なルールのセットによって定義された異常な動作を発見した場合、セキュリティイベントを生成します。一方、Falcoには、一握りの既成概念にとらわれない検出ルールが付属しています。
私たちは、異常な動作をフィルタリングするための新しいFalcoルールを素早く簡単に書くことができます。例えば、以下のルールはsudoのCVE-2021-3156を悪用しようとしている人を検出します:
- rule: Sudo Potential Privilege Escalation (CVE-2021-3156) desc: Privilege escalation vulnerability affected sudo. Executing sudo using sudoedit -s or sudoedit -t command from an unprivileged user it's possible to elevate the user privileges to root. condition: spawned_process and user.uid!= 0 and proc.name=sudoedit and (proc.args contains -s or proc.args contains -i) and (proc.args contains "\ " or proc.args endswith \) output: "Detect Sudo Privilege Escalation Exploit (CVE-2021-3156) (user=%user.name %container.info parent=%proc.pname cmdline=%proc.cmdline)" priority: CRITICAL
tags: [filesystem, mitre_privilege_escalation]
ルールが悪用の試みを検出すると、Falco は通知をトリガーします。
20:34:21.211306349: Critical Detect Sudo Privilege Escalation Exploit (CVE-2021-3156) (user=ec3-user host (id=host) parent=bash cmdline=sudoedit -s 12345678901234\)
Sysdig Secureは、オープンソースのFalco検出エンジンを拡張し、Kubernetesワークロードのライフサイクル全体にわたって包括的なセキュリティを提供します。
全く同じルールをSysdig内で使用することができます:
さらに、Sysdig Secureでは以下のことが可能になります。
Sysdig Secureを使用することで、脆弱性CVE-2021-3156の影響を受けたsudoパッケージを簡単に検出し、CI/CDパイプラインやレジストリで影響を受けた新しいコンテナを新規デプロイ前にブロックし、本番環境で既に実行されているコンテナ全体でこの脆弱性を悪用しようとする試みに対応し、Kubernetesクラスタ内の悪意のあるコンテナをブロックすることができます。
CVE-2021-3156 の脆弱性は、すでにホストにローカルアクセスしている悪意のあるユーザが、その特権をエスカレートさせ、sudo で利用可能なバグコードを使って root として任意のコマンドを実行することを可能にします。
Falcoでは、ユーザーがこの種の活動をフィルタリングして検出することができます。エクスプロイト行動パターンにマッチするカスタムルールを記述し、ホストやコンテナ全体の悪意のある活動について警告を発します。
Sysdig Secure はこの機能をさらに一歩進めて、これらの攻撃に対応し、攻撃をブロックし、sudo 脆弱性を持つ影響を受けた実行中のコンテナについて報告することができます。