ブログ

Falcoを使ってsudoのCVE-2021-3156を検出する方法

Falcoを使ってsudoのCVE-2021-3156を検出する方法

本文の内容は、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 のバージョンに影響を与えます。

  • 1.8.2 から 1.8.31p2 までのすべてのレガシーバージョン
  • 1.9.0 から 1.9.5p1 までのすべてのstable版

悪用に成功すると、特権を持たないユーザが脆弱なホスト上で root 化することができます。この脆弱性は特権のエスカレーション脆弱性であるため、実際に悪用するには脆弱なホスト上のローカルユーザへのアクセスが必要です。

この記事では、この脆弱性がどのようにして悪用されるのか、また、Falco を使って悪用の試みを検出する方法を学びます。

CVE-2021-3156 の問題

おもしろい事実は、この脆弱性は約10年前からクリアで利用できるようになっているということです。

リサーチャーのBaron Samedit氏が発見したのは:

  1. "シェル"モードでsudoを実行する (shell -c command)
  2. sudoedit コマンドに -s (MODE_SHELL flag) または -i (MODE_SHELL および MODE_LOGIN_SHELL flag) を指定して使用します。
  3. コマンドの引数の特殊文字を最後にバックスラッシュを使ってエスケープすることができます。

sudoedit コマンドに関連した sudo コードのバグにより、バックスラッシュ一文字で終わるコマンドライン引数を使って、エスケープ文字を回避してヒープベースのバッファをオーバーフローさせることができます。

攻撃者の視点から見ると、このバッファオーバーフローの脆弱性により、攻撃者はバッファのサイズをコントロールし、オーバーフロー自体の内容を(必要に応じてヌルバイトを使用して)コントロールすることができます。これにより、悪意のあるユーザがroot権限でホスト上でカスタムコードを実行することが可能になります。

CVE-2021-3156の影響

最近発見され、公開されたため、すでに公開されているエクスプロイトはありません。

このような古いバグであり、最近の OS バージョンにも存在しているため、脆弱性のあるマシンはたくさんあります。LinuxやUnix OSを搭載したデバイスであれば、サーバやデスクトップに限らず影響を受ける可能性があります。

sudo のバージョンが 1.8.2 から 1.8.31p2 の間、または 1.9.0 から 1.9.5p1 の間であるかどうかをチェックすることで、影響を受けているかどうかを知ることができます。

また、以下のコマンドでマシンが利用可能かどうかをテストすることも可能です。

sudoedit -s /

そのレスポンスをもとに、そのホストが脆弱かどうかを把握することができます。

  • sudoedit: で始まるエラーが返ってきた場合は脆弱である
  • usage: で始まるエラーが返ってきた場合は脆弱性なし、またはパッチを適用している

検出方法:Falcoを用いたCVE-2021-3156の検出

この脆弱性の悪用の試みを検出することは基本的なことです。

すぐにシステムにパッチを当てることができなくても、攻撃を検知し、潜在的に防ぐことができます。脆弱性の影響を受けるシステムやコンテナをすでにアップグレードしている場合でも、悪用の試みを検知し、環境内の悪意のある活動をキャッチすることは非常に興味深いことです。

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内で使用することができます:

January3_001.png

さらに、Sysdig Secureでは以下のことが可能になります。

  • レスポンスを伴うFalcoの検知機能を拡張して脅威をブロックする。
  • 自動プロファイリング、柔軟なポリシーエディタ、集中管理により、実行時のFalcoポリシーの作成と更新の負担を軽減します。
  • セキュリティモニタリングに加え、イメージスキャン、フォレンジック/インシデント対応、監査により、DevOpsプロセス全体にセキュリティを組み込みます。
  • すぐに使えるチェック機能と、コンプライアンス基準に対応したランタイムポリシーを使用して、コンプライアンスを検証します。

Sysdig Secureを使用することで、脆弱性CVE-2021-3156の影響を受けたsudoパッケージを簡単に検出し、CI/CDパイプラインやレジストリで影響を受けた新しいコンテナを新規デプロイ前にブロックし、本番環境で既に実行されているコンテナ全体でこの脆弱性を悪用しようとする試みに対応し、Kubernetesクラスタ内の悪意のあるコンテナをブロックすることができます。

まとめ

CVE-2021-3156 の脆弱性は、すでにホストにローカルアクセスしている悪意のあるユーザが、その特権をエスカレートさせ、sudo で利用可能なバグコードを使って root として任意のコマンドを実行することを可能にします。

Falcoでは、ユーザーがこの種の活動をフィルタリングして検出することができます。エクスプロイト行動パターンにマッチするカスタムルールを記述し、ホストやコンテナ全体の悪意のある活動について警告を発します。

Sysdig Secure はこの機能をさらに一歩進めて、これらの攻撃に対応し、攻撃をブロックし、sudo 脆弱性を持つ影響を受けた実行中のコンテナについて報告することができます。

ご質問・お問い合わせはこちら

top