Windows SYSTEM 権限を取得する3つのテクニック:Filtering Platform の悪用方法とは?

New stealthy techniques let hackers gain Windows SYSTEM privileges

2023/08/23 BleepingComputer — セキュリティ研究者たちが、Windows Filtering Platform を利用して、Windows の最高権限レベルである SYSTEM にまで、ユーザー権限を昇格させるツール NoFilter をリリースした。このユーティリティは、感染させたデバイスにログインしている正規ユーザのアカウントを用いた、より高い権限での悪意のコード実行や、ネットワーク上での横方向への移動といった、攻撃者による悪用シナリオの追跡に有用なものとなる。

アクセス・トークンの複製

Microsoft が定義する WFP (Windows Filtering Platform) とは、「ネットワーク・フィルタリング・アプリケーションを作成するための、プラットフォームを提供す るAPI とシステム・サービスのセット」というものである。

開発者は、この WFP API を使って、ネットワーク監視ツールや、侵入検知システム、ファイアウォールに見られるような、ネットワーク・データがディスティネーションに到達する前に、フィルタリングや変更を行うためのコードを作成できる。

サイバー・セキュリティ企業 Deep Instinct の研究者たちは、Windows マシン上で特権昇格を行うための、3つの新しい攻撃方法を発見した。

1つ目の方法は、WFP を使用してアクセス・トークンを複製するものだ。このコードの断片により、スレッドやプロセスのセキュリティ・コンテキストで、ユーザーと権限が識別されることになる。

スレッドが特権タスクを実行する際には、連携するトークンが必要なアクセス・レベルを持っているかどうかが、セキュリティ識別子により検証される。

Deep Instinct のセキュリティ研究者である Ron Ben Yizhak は、NtQueryInformationProcess 関数を呼び出すことで、プロセスが保持する全てのトークンを取り込んだ、ハンドル・テーブルを取得できると説明している。

Yizhak は、「それらのトークンのハンドルは、別のプロセスを SYSTEM に権限昇格させるために複製できる」と、技術ブログへの投稿で指摘している。

この研究者は、tcpip.sys と呼ばれる Windows OS における重要なドライバーは、ステートフル・フィルタリングのための WPF ALE (Application Layer Enforcement) カーネル・モード・レイヤーへの、デバイス IO リクエストにより呼び出される可能性のある、いくつかの関数を持っていると説明している。

Ron Ben Yizhak は、「デバイス IO リクエストは、WfpAleProcessTokenReferenceを呼び出すために送信される。それはサービスのアドレス空間にアタッチされ、SYSTEM に属するサービスのトークンを複製し、ハッシュ・テーブルに格納する」と述べている。

NoFilter ツールは、このように WPF を悪用し、トークンを複製し、特権昇格を実現する。

Abusing WFP to duplicate access token
Abusing the Windows Filtering Platform to duplicate access token
source: Deep Instinct

つまり、DuplicateHandle の呼び出しを回避することで、ステルス性が高まることになる。その結果として、数多くのエンドポイント検出/対応ソリューションが、悪意のアクションを見逃す可能性が高くなると、研究者は述べている。

SYSTEMと管理者アクセストークンの取得

2つ目のテクニックは、IPSec 接続をトリガーにして Print Spooler サービスを悪用し、SYSTEM トークンをテーブルに挿入するというものだ。

 RpcOpenPrinter 関数を使用すると、プリンターのハンドルが名前で取得される。この名前を “\127.0.0.1” に変更することにより、このサービスがローカル・ホストに接続される。

RPC 呼び出しの後に、SYSTEM トークンを取得するためには、WfpAleQueryTokenById に対する複数のデバイス IO リクエストが必要になる。

Abusing Print Spooler to get SYSTEM access
Getting SYSTEM access token through Print Spooler
source: Deep Instinct

Yizhak は、IPSec ポリシーのコンフィグレーションは、一般的にネットワーク管理者などの正当な特権ユーザーが行う操作であるため、この方法は1つ目の方法よりもステルス性が高いと言う。

彼は、「このポリシーは通信を変更しないため、どのサービスも影響を受けることはなく、ネットワーク・アクティビティを監視する EDR ソリューションも、ローカル・ホストへの接続を無視する可能性が高い」と指摘している。

Yizhak の3つ目のテクニックは、侵害したシステムにログインしている他のユーザーのトークンを取得し、横方向の移動を可能にするものだ。

彼は、アクセス・トークンをハッシュ・テーブルに追加することができれば、ログインしているユーザーの権限で、プロセスを起動することが可能だという。

ログイン・ユーザーとして実行されている Remote Procedural Call (RPC) サーバを探し出し、ドメイン管理者として実行され、RPC インターフェイスを公開するプロセスを、見つけるスクリプトを実行すればよいと、彼は言う。

この研究者は、トークンを取得し、ログインユーザーの権限で任意のプロセスを起動するために、攻撃ツールの世界では珍しいコンポーネントである、OneSyncSvc サービスと SyncController.dll の悪用方法を考えだした。

検出に関するアドバイス

Microsoft Security Response Center に報告した結果、同社が「意図どおりの動作だった」と回答したことから、この3つのテクニックを、ハッカーやペンテスターが
採用する可能性は高い。また、現時点においては、修正方法や緩和策がないことを意味する

しかし、Deep Instinct は、これらの手法が高ステルス性を持つにもかかわらず、3つの攻撃パターンを検出するための、いくつかの方法を提供している。具体的には、以下のイベントを探すことを推奨している:

  • 既知のネットワーク構成と一致しない、新しい IPSec ポリシーの設定。
  • IPSec ポリシーがアクティブな状態での、Spooler/OneSyncSvc への RPC 呼び出し。
  • WfpAleQueryTokenById への複数の呼び出しによる、トークンの LUID のブルートフォース。
  • BFE サービス以外のプロセスによる、デバイス WfpAle へのデバイス IO リクエスト。

今月の初めに開催された DEF CON ハッカー・カンファレンスで、Yizhak は3つの新しいテクニックを発表した。技術的な詳細については、Deep Instinct の投稿を参照してほしい。