SteelSeries のサブアプリケーションメカニズムを悪用した権限昇格
エグゼクティブサマリー
Akamai のセキュリティリサーチャーである Tomer Peled は先日、SteelSeries のアプリケーションに 2 つの脆弱性を発見しました。
SteelSeries はコンピューター周辺機器を製造するハードウェア企業であり、世界中に 900 万人以上の顧客を抱えています。
発見された脆弱性には、CVE-2023-31461 と CVE-2023-31462 の番号が割り当てられました。SteelSeries は迅速に対応し、2023 年 5 月にこれらの脆弱性にパッチを適用しました。
これらの脆弱性により、攻撃者は最初に取得した権限よりも高い権限(場合によっては管理者権限)でコードを実行することができます。これらの脆弱性を悪用するためには、攻撃者は 2 つのローカルパケットをリスニング IPC サーバーに送信する必要があります。そうすると、サーバーは昇格した権限で攻撃者のペイロードを実行します。
これらの脆弱性の根本的な原因は、このサービスの IPC リスナーにおいて安全でない権限処理が行われることと、パストラバーサルに対する防御が欠如していることです。
Akamai Security Intelligence Group(SIG)は責任を持って、この脆弱性を SteelSeries のサポートチームとエンジニアリングチームに開示し、MITRE に CVE の割り当てを要請しました。
SIG は、当社が監視している複数のデータセンターでこの脆弱性の影響を受けるサービスを発見し、顧客にリスクとその緩和方法を通知しました。
- 当社は、悪用の PoC と、脆弱性のあるサービスを利用しているマシンを検知する osquery を提供しています。
はじめに
SteelSeries は、キーボード、マウス、ヘッドフォンなどのコンピューター周辺機器を専門とするハードウェア企業です。これらのデバイスをカスタマイズするために、SteelSeries は Web サイトからダウンロードできるアプリケーション、SteelSeries GG をユーザーに提供しています。
メインの SteelSeries GG モジュールと複数のサブアプリケーションで構成されるこのアプリケーションは、SteelSeries がユーザー体験を向上させるために使用しているメカニズムです。
Akamai の調査では、 当社独自のサブアプリケーションを登録して、実行するコードを指定する方法が 2 つ見つかりました。これにより、より高い権限でコードが実行される可能性があります。このブログ記事では、その脆弱性に関する技術的な詳細情報と、悪用の PoC について説明します。
技術詳細
SteelSeries GG は、デフォルトでは中程度の整合性レベル(通常は管理者レベル)で実行されます。状況によっては、より高い整合性レベルで実行される場合もあります。この情報に加え、SteelSeries GG がリスニングプロセスであるという事実(図 1)を考慮すれば、SteelSeries GG は脆弱性調査のターゲットとしてうってつけです。
サブアプリケーションメカニズムとプロセス間通信 API
サブアプリケーションメカニズムは、SteelSeries のオプション機能を管理し、ユーザー体験を向上させるために使用されます。このようなサブアプリケーションの一例として、Sonar があげられます。SteelSeries の定義によると、Sonar は「ゲーム用の高度なオーディオ・ソフトウェア・ツールであり、ゲーム内のサウンド、チームチャット、マイクを個別に調整できます」。サブアプリケーションはバックグラウンドで実行され、プロセス間通信(IPC)API を介してアプリケーションのメインモジュールと通信します。
SteelSeries GG の IPC API は、ユーザーが要求できる複数のタイプの操作(構成の変更、管理アクション、ユーザープロファイルの編集など)を公開します。さらに興味深いのは、この API がサブアプリケーションを管理(作成、削除、有効化、無効化)するためのインターフェースを公開することです。
API ルーティング機能(つまり、各 API リクエストの処理方法)は、 gorilla/mux オープン・ソース・ライブラリを使用して実行されます。これを知っていれば、アタックサーフェスをより簡単に調査することができます。ルーティング機能自体は非常に大きいですが、基本的には使用可能な各 API オプションの if ステートメントの集合です(図 2)。
これらの API コールは、リスニングサーバー("SteelSeriesGG.exe")との接続を開始するすべてのユーザーが使用でき、認証を必要としません。
筆者は、サブアプリケーションのイベントハンドラーに集中することにしました。なぜなら、サブアプリケーションのイベントハンドラーが影響している可能性が最も高いからです。分解されたコードを IDA で再編成したところ、サブアプリケーションのルーティングハンドラーにプロトタイプ(図 3)があることがわかりました。
サブアプリケーションメカニズムの悪用
実行可能な API コールの 1 つは、新しいサブアプリケーションの作成です。このプロセスは、いくつかのパラメーターを含む JSON ペイロードと共に POST リクエストを /subApps ルートに送信することで実行されます。そのパラメーターのうち興味深いのは、"name"、"executableName"、"isEnabled"、"shouldAutoStart" の 4 つです。
これらのフィールドを使用することで、非特権ユーザーとして新しいサブアプリケーションを作成したり、非特権ロケーションにある実行可能ファイルに向けたり、アプリケーションを起動するたびにそのスケジュールを設定したりできます。
SteelSeries GG は、次のようにサブアプリケーションの実行可能ファイルへのフルパスを構築します。
<StellSeriesGG install location>\Apps\<name>\<executableName>.exe
「name」フィールドと「executableName」フィールドはこのように連結されているため、パストラバーサル攻撃を試みることができると推定されます。図 4 のとおり、SteelSeries GG はパストラバーサルへの耐性がなく、パスの前に「../../../..」を付けることが許されていました。
サブアプリケーションが作成されると、その情報は SteelSeries GG のデータベースに格納されます。このデータベースを使用してサブアプリケーションを制御する別の方法はあるのでしょうか?確かに、データベースは安全でない場所に配置されています。つまり、サブアプリケーション API にアクセスできなくても、サブアプリケーションをデータベースに直接追加できる可能性があります。しかし、攻撃者はこの設計上の欠陥を悪用するためには脆弱性を発見する必要があります。そして、この脆弱性はそれだけで悪用することはできないため、すぐにリスクをもたらすことはありません。
制御された場所にサブアプリケーションを作成すれば、(そして、そのパスからバイナリを実行すれば)権限を昇格できると思うかもしれませんが、それを試みたところ、証明書の検証という別の制限があることがわかりました。当然ながら、SteelSeries は実行可能ファイルが署名および承認されていることを確認します。独自のペイロードを実行するためには、検証プロセスを回避する必要があります。
検証機能は WinVerifyTrust 関数を呼び出し、次に WinAPI 関数のチェーンを呼び出して、証明書内の特定のフィールドをアプリケーション内のハードコーディングされた文字列と比較します。
この検証を回避するのはやや困難ですが、次の 2 つの方法で行うことができます。
DLL ハイジャック
TOCTOU(time-of-check to time-of-use)
DLL ハイジャックベクトル
DLL ハイジャックの手法では、SteelSeries がいくつかの既存のバイナリを信頼するという事実を利用できます。その 1 つは SteelSeriesEngine.exe であり、これは SSEDEVICE.dllライブラリをロードします。同じ名前の独自のライブラリをコンパイルすると、元の SSEDEVICE DLL の代わりに独自のライブラリがロードされます。エクスポートされた独自の DLL の関数は、本物の DLL の関数を呼び出します。
しかし、独自の DLL のロード時に呼び出される関数は、悪性のロジックを実行します(図 5)。この手法については、itm4n の DLL プロキシングに関する ブログ記事で詳しく説明されています。
図 6 のアニメーションは、昇格した権限で攻撃者ペイロードを実行する(この場合は cmd インスタンスを開く)ために最初のパケットを送信するプロセスを示しています。
TOCTOU ベクトル
この場合、証明書の検証と実際のバイナリ実行の間の時間差を利用します(図 7)。つまり、James Forshaw の BaitAndSwitch ツールを使用して正当なファイルを悪性のファイルにすばやく切り替えることにより、競合状態に勝利することを試みます。証明書の検証の直後に置き換えるのが望ましいです。そうすると、検証は正当なファイルに対して行われますが、その後悪性の未検証ファイルが実行されます。
設計上は、競合状態を利用できることは保証されていません。したがって、この悪用を安定させるためには、置き換えのためにより多くの時間を確保し、機会を広げることを試みます。
注目すべきは、証明書の検証が、WinVerifyTrust の呼び出しと、証明書内の複数のフィールドとアプリケーション内のハードコーディングされた文字列の間の照合という 2 つのテストに依存していることです。独自の実行可能ファイルには、これらの正確な値を含む証明書を埋め込みます。このエンハンスメントにより、2 つのテストの間でスイッチが発生した場合でも、攻撃者は競合状態に勝利することができます。これは、悪性のバイナリが 2 つ目のテストのすべての基準を満たしているためです。
図 8 のアニメーションは、BaitAndSwitch を使用した検証プロセスの開始を待機している状態から、攻撃者のバイナリ(この場合は cmd.exe)を実行するまでのプロセスを示しています。
検知と緩和
ネットワーク内の脆弱性のある資産の検知を支援するために、Akamai は SteelSeries GG のインスタンスと現在インストールされているバージョンを検索する次の osquery を提供しています。
SELECT name,version from programs where name LIKE '%SteelSeries%' |
Akamai Guardicore Segmentation のお客様は、このクエリと Insight を使用して、パッチを適用する必要のあるアプリケーションを見つけることができます。
SteelSeries は、新しいパッチごとにアプリケーションを更新します。そのため、デバイスがこれらの脆弱性の影響を受ける可能性は低くなりますが、Akamai は SteelSeries のバージョンを 39 以降のバージョンにアップグレードすることを推奨しています。
結論
SteelSeries は、世界中に 900 万人以上ものユーザーを抱える大企業です。同社の製品に脆弱性があると、必然的に大きな影響が生じます。これらの脆弱性の悪用のしやすさとマシンへの影響を考慮すると、その結果は深刻であり、管理者権限でバイナリが実行される可能性があります。
影響の範囲は、ユーザーのマシンに限定されず、エンタープライズにまで及ぶ恐れがあります。従業員のラップトップが脆弱なデバイスに接続したり脆弱なアプリケーションを実行したりした後に、エンタープライズネットワークに接続し、組織にリスクを「輸入」することが考えられます。そのため、エンタープライズは BYOD(Bring Your Own Device)に関するポリシーの導入を検討し、そのようなデバイスを使用することの危険性について従業員を教育することが重要です。
Akamai は、自社のお客様のネットワークをスキャンして脆弱なアプリケーションのインスタンスを検索し、関連するお客様に情報を提供しました。
Akamai は、お客様とコミュニティーを保護するための継続的な取り組みの一環として、パッチやその他のシステムの脆弱性を分析し続けます。Akamai の最新のセキュリティ調査について最新の状況を把握するためには、 Twitter で Akamai をフォローしてください。
開示のタイムライン
2023/4/27 — CVE リクエストを MITRE に送信
2023/5/1 — SteelSeries のカスタマーサポートに E メールを送信
2023/5/2 - MITRE が CVE を割り当て
2023/5/3 – 2023/6/4 — SteelSeries エンジニアリングチームとの話し合い
2023/5/31 — 修正を公開
2023/7/17 — SteelSeries がブログ原稿をレビュー
2023/7/18 — ブログ記事を公開