Unity プラットフォーム保護: 開発者向け修正ガイド

Android、Windows、macOS オペレーティングシステム向けに Unity バージョン 2017.1 以降でビルドされたゲームとアプリケーションに影響する、セキュリティ脆弱性が確認されました。脆弱性が悪用された形跡はなく、ユーザーや顧客への影響も今までありません。弊社はこの脆弱性に対処する予防的な修正プログラムを提供しており、それはすでにすべての開発者に対して利用可能になっています。ここからパッチ適用ツールをダウンロードし、詳しい説明をお読みください。

概要

Unity 2017.1 以降 でビルドされた Android、Windows、macOS 向けのすべてのゲームとアプリケーションに影響する重大なセキュリティの脆弱性が確認されました。この脆弱性により、ローカルアクセス権を持つ悪意のある攻撃者が、アプリケーションのコンテキスト内で任意のコードを実行できる場合があり、データ漏洩や特権昇格につながる可能性があります。

この脆弱性は、Unity アプリケーションで任意のコードをロードして実行することを可能にするコマンドライン引数に起因します。この脆弱性の影響は、ホストプラットフォームによって異なります。脆弱性がターゲットプラットフォームにどのように影響するかを理解するには、プラットフォーム別テクニカルノート を参照してください。

重要: プロジェクトが 2017 から現在のパッチ適用済みリリースまでのいずれかの Unity バージョンでビルドされている場合は、影響を受ける可能性があります。影響を受けるプロジェクトがあるすべての開発者が、対処する必要があります。

修正のオプション

Unity 2017.1 以降 でビルドされた Android、Windows、macOS、Linux 用のゲームとアプリケーションに影響するセキュリティの脆弱性が確認されています。脆弱性が悪用された形跡はなく、ユーザーや顧客への影響も今までありません。この脆弱性は、Unity アプリケーションでネイティブとマネージドの拡張をロードして実行することを可能にするコマンドライン引数に起因します。脆弱性がターゲットプラットフォームにどのように影響する可能性があるかを理解するには、プラットフォーム別テクニカルノート を参照してください。

重要: プロジェクトが 2017 から現在までのパッチ適用済みリリースのいずれかの Unity バージョンでビルドされている場合は、影響を受ける可能性があります。影響を受けるプロジェクトがあるすべての開発者が、対処する必要があります。

1.パッチ適用済みの Unity エディターを使用してリビルドする (推奨)

影響を受ける各 Unity エディターバージョンのパッチ適用済みリリースをダウンロードできます。パッチ適用済みの Unity エディターをダウンロードし、その後にアプリケーションをリビルドすることができます。

パッチを適用した Unity エディターバージョンを使用してアプリケーションをリビルドする手順は以下の通りです。

  1. アプリケーションのビルドに使用した Unity バージョン (例: Unity 6.1、Unity 2022.2 など) に一致する Unity エディターの最新リリースを ダウンロード します。
  2. Unity Hub
  3. Unity ダウンロードアーカイブ
  4. 更新したエディターで プロジェクトを開きます
  5. アプリケーションを リビルド し、再テスト します。
  6. 配信チャンネルに 再度公開 します。

2.ビルド済みアプリケーションにパッチを適用する

ソースからリビルドすることができない (またはアプリのリビルド中に修正プログラムを展開する) 場合は、Unity アプリケーションパッチャー を使用して既存の AndroidWindows、または macOS ビルドを更新します。

Unity アプリケーションパッチャーの使用方法は以下の通りです。

  1. Unity アプリケーションパッチャーをダウンロードします:ツールを入手
  2. ライセンス契約、利用ガイド、詳細なオプションを確認します。詳細については、パッチャーのドキュメントを参照してください。
  3. 既存のビルドに対して パッチャーツールを実行 します (Windows または macOS 向けビルドへのパッチ適用にはインターネット接続が必要)。
  4. パッチ適用後に アプリケーションをテスト し、機能することを確認します。
  5. 配信チャンネルに 再度公開 します。

Unity アプリケーションパッチャーがさまざまなプラットフォームに対してどのように機能するかを理解するには、プラットフォーム別テクニカルノートを参照してください。

注意:

  • パッチャーは、一部の改ざん防止またはチート対策ソリューションによって保護されているビルドとは互換性がありません。
  • パッチ適用後は、必ずアプリケーションの完全性と機能を検証してください。
  • Unity アプリケーションパッチャーツール自体は Unity 6.0 で開発されており、このツールを実行するには、対応する Windows または macOS のシステム要件 が適用されます。

プラットフォーム別テクニカルノート

以下のセクションでは、セキュリティの脆弱性が Android/Windows/macOS アプリケーションにどのように影響するか、Unity アプリケーションパッチャーが各プラットフォームでどのように動作するかについて説明します。

コマンドライン
-xrsdk-pre-init-library
影響を受ける正式リリースバージョン
Android、Windows、Mac、Linux: Unity 2019.1+
説明
内部 Data/boot.config ファイルからロードされることを意図した引数で、Unity 起動時にネイティブライブラリをロードします。コマンドライン引数として使われることを意図したものではありません。
-dataFolder
影響を受ける正式リリースバージョン
Windows: Unity 2022.2+ Mac:Unity 2023.2+ Linux:Unity 2022.3+
説明
データフォルダーを再配置して、1 個の実行ファイルを複数のデータフォルダー間で共有することを可能にします。
-overrideMonoSearchPath
影響を受ける正式リリースバージョン
Android 32 ビット (Mono)、Windows (Mono)、Mac (Mono)、Linux (Mono): Unity 2017+
説明
Mono がアセンブリをロードするときに検索する追加のフォルダーを指定します。IL2CPP が使用されている場合、この引数には何の効果もありません。
-monoProfiler
影響を受ける正式リリースバージョン
Windows (Mono): Unity 2018.3+
説明
外部ライブラリから取得できる Mono ランタイムのプロファイラーを初期化および構成するために使用されます。IL2CPP が使用されている場合、この引数には何の効果もありません。

リリースストリームの一部のベータおよびパッチリリースが影響を受ける可能性があります。正式リリース以外のリリースで公開した場合は、影響を受けるバージョンの完全なリスト を参照してください。

注意: Google、Meta、Microsoft では、プラットフォームのセキュリティをさらに強化するために、OSレベルの対策も導入しています。それでも、Unity アプリケーションを完全に安全にするためには、パッチを適用するかリビルドする必要があります。

Android

注意: 脆弱性が悪用された証拠はなく、ユーザーやお客様に対する影響も発生していません。

Android では、その Unity アプリケーションが Unity 2019.1 以降を使ってビルドされた ものである場合は、特別な権限や設定に関係なく 対処する必要があります

さらに、アプリが Unity 2017 以降でビルドされているか、Mono ランタイム (32 ビットのみ) を使用している場合は、脆弱である可能性があります。最終リリース以外のリリースで公開した場合は、影響を受けるバージョンの完全なリスト を参照してください。

  • Android では、一般にアプリケーションは互いに分離されており、通常は脆弱性や誤った設定を悪用しなければアプリ間でコードのインジェクションはできません。
  • この脆弱性が原因で、特別に細工されたインテントと xrsdk-pre-init-library コマンドライン引数または overrideMonoSearchPath (mono でビルドされた 32 ビットアプリの場合) を使用して、デバイス上の他のアプリケーションが Unity アプリケーションを起動し、悪意のあるネイティブライブラリを挿入できる可能性があります。
  • Android アプリケーションは、datafolder または monoProfiler コマンドライン引数に対して 脆弱ではありません

Android での破壊的変更

Android でこの脆弱性に対処することに関連した破壊的変更はありません。

Android 用 Unity アプリケーションパッチャー

Android では、Unity アプリケーションパッチャーは、APK または AAB を解凍し、脆弱なコードパスをブロックするために libunity.soboot.config をローカルで変更してから、APK または AAB の再パッケージと再署名を行います。

Unity アプリケーションパッチャーは、libunity.soboot.config の両方でxrsdk-pre-init-library 文字列を8rsdk-pre-init-library に変更し、脆弱性のあるコードパスをブロックします。これにより、コマンドライン引数 (または Android の intent extra) として使用できなくなります (理由は引数の解析方法による)。boot.config 設定としては引き続き機能するため、boot.config ファイル内でのすべての使用に対してもパッチが適用されます。

また、Unity アプリケーションパッチャーは、libunity.so 内の overrideMonoSearchPath 文字列の先頭文字を無効な Unicode 文字 0xC0 に置き換えることによって、32 ビットビルドの overrideMonoSearchPath 引数を Mono で無効にします。

Windows

注意: 脆弱性が悪用された証拠はなく、ユーザーやお客様に対する影響も発生していません。

Windows のようなデスクトッププラットフォームでは、実行中のプロセスにコードを挿入するさまざまな方法があります。ただし、それらの方法は通常、システムの特権レベルとセキュリティ境界によって制限されています。ほとんどの場合、自分で開始したプロセスにのみコードを挿入することができ、それを行っても、自分のプロセスがすでに持っている機能以上の追加機能は許可されません。

ただし、この状況では、Unity アプリケーションが カスタム URL スキーマハンドラーとして登録された場合、特権昇格に対して 脆弱である可能性があります。この登録は、自分のアプリケーションによって (ディープリンクやブラウザーからの起動をサポートするなどのために)、または他のアプリケーション (サードパーティのゲームランチャーやストアフロントなど) によって実行される可能性があります。

サードパーティのアプリケーションによって自分のアプリケーションがスキーマハンドラーとして登録されることを防ぐ方法はなく、それを検出する方法もないため、Unity では、予防策として Windows のすべての Unity アプリケーションにパッチを適用すること を推奨します。

  • 登録された URL スキームを使用すると、より低い整合性レベル (サンドボックス化されたプロセスや権限の低いプロセスなど) でコードを実行している攻撃者が、Unity のこの脆弱性を悪用してアプリケーションを起動し、DLL を挿入して、攻撃者が用意したコードをアプリケーションに通常よりも高い権限で実行させることができます。
  • インジェクションは、前述した脆弱なコマンドライン引数のいずれかを介して発生する可能性があります。

Windows での破壊的変更

  • アプリケーションで データフォルダー を再配置するために -datafolder コマンドライン引数を使用している場合、代わりにカスタムデータフォルダーを 2 番目の引数として UnityMain 関数に渡す必要があります。
    • int UnityMain(HINSTANCE hInst, LPCWSTR customDataFolder, LPWSTR szCmdLine, int nCmdShow)
  • アプリケーションで、XR プロバイダーの切り替えのために xrsdk-pre-init-library をコマンドライン引数として使用する場合は、OpenXR を使用するか、個別のビルドを用意することを推奨します。
  • overrideMonoSearchPath は削除されます。個別のアプリケーションをビルドするか、すべてのスクリプトを同じビルドに入れることを推奨します。

Windows 用 Unity アプリケーションパッチャー

Windows 向けビルドの場合、Unity アプリケーションパッチャーツールは、Unity のバージョンに適したパッチ適用済みの UnityPlayer.dll (または、Unity 2017.1 でビルドされたアプリケーションの場合は .exe) をダウンロードし、ビルド済みアプリケーションの脆弱なファイルの代わりとして置き換えます。

注意: Unity アプリケーションパッチャーによって、Unity のサーバーからパッチ適用済みのバイナリが取得されるため、受け取る前にテストと検証が行われていることが確実になります。

UnityPlayer.dll は、脆弱性のあるコマンドラインパラメーターをスキップするように修正されました。

xrsdk-pre-init-library は、boot.config 設定として引き続き機能します。

重要: アプリケーションで データフォルダー (Unity 2022.2 で導入) を再配置するために -datafolder コマンドライン引数を使用している場合、"Windows での破壊的変更" セクションに示されている新しいパターンを採用する必要があります。

macOS

注意: 脆弱性が悪用された証拠はなく、ユーザーやお客様に対する影響も発生していません。

macOS では、カメラやユーザーのドキュメントフォルダーへのアクセスなど、多くの権限がアプリケーションごとに管理されています。権限の不正使用を防ぐため、macOS には Hardened Runtime 機能を含む複数のメカニズムが実装されています。Hardened Runtime を使用してビルドされたアプリケーションでは、署名されていない、または異なる署名を持つコードをロードすることがデフォルトでブロックされます。Hardened Runtime を使用することは、公証および Mac App Store での配布の要件です。

ただし、アプリケーションが Unity 2017.1 以降 (Mono スクリプティングバックエンドを使用) または Unity 2019.1 以降 (任意のスクリプティングバックエンドを使用) でビルドされている場合、Hardened Runtime を使用してビルドされている場合、およびコードインジェクション保護を弱める 特定のランタイム例外 が有効になっている場合、対処する必要があります。アプリケーションを脆弱にする例外は以下の通りです。

  • ライブラリ検証の無効化 (com.apple.security.cs.disable-library-validation) — 署名されていない、または異なる署名を持つプラグインやフレームワークをロードすることが可能になります。これにより、xrsdk-pre-init-library または datafolder 引数の使用時に、悪意のあるネイティブの .dylib ファイルがロードされる可能性があります。
  • JIT コンパイルされたコードの実行を許可する (com.apple.security.cs.allow-jit) — datafolder または overrideMonoSearchPath 引数が悪用されると、悪意のあるマネージコードの実行が可能になる場合があります。この例外を許可することは、Mono スクリプトバックエンドのすべての使用の条件であることに注意してください。
  • 署名されていない実行可能メモリを許可する (com.apple.security.cs.allow-unsigned-executable-memory) — 同様に、datafolder 引数が悪用された場合、悪意のあるマネージドコードの実行が可能になることがあります。

Hardened Runtime は通常、一般的なコードインジェクション方法をブロックし、そのような攻撃からアプリケーションを保護します。影響される Unity アプリケーションで上記のいずれかの例外が有効になっている場合、攻撃者は xrsdk-pre-init-library,datafolder、または overrideMonoSearchPath コマンドライン引数を介してコードを挿入できる可能性があります。

これにより、攻撃者がプロセス内に悪意のある .dylib またはマネージアセンブリを挿入できる可能性があります。アプリケーション自体にない権限へのアクセスを許可することはできません。

macOS での破壊的変更

  • アプリケーションで データフォルダー を再配置するために -datafolder コマンドライン引数を使用する場合、代わりにシンボリックリンクを使用することを推奨します。
  • overrideMonoSearchPath は削除されます。個別のアプリケーションをビルドするか、すべてのスクリプトを同じビルドに入れることを推奨します。

macOS 用 Unity アプリケーションパッチャー

macOS プロジェクトの場合、Unity アプリケーションパッチャーツールは、Unity のバージョンに適したパッチ適用済みの UnityPlayer.dylib をダウンロードし、ビルドされたアプリケーションの脆弱なファイルと置き換えます。boot.config 変数 xrsdk-pre-init-library8rsdk-pre-init-library に変更されました。これにより、コマンドライン引数として使用できなくなります (理由は引数の解析方法による)。これは引き続き boot.config 設定として機能するため、boot.config 内で使用されている場合にもパッチを適用します。

重要: アプリケーションで データフォルダー (macOS 用 Unity 2023.2 で導入) を再配置するために -datafolder コマンドライン引数を使用している場合、"macOS での破壊的変更" セクションで説明されている新しいパターンを採用する必要があります。

パッチャーは、アドホック署名を使用して .app に再署名し、ローカルに実行できるようにします。アプリケーションが以前に開発者 ID 証明書で署名され、Apple による公証を得ている場合、パッチプロセスによってその公証は無効化されます。ソフトウェア配布に関する Apple の推奨事項 に従ってアプリケーションをリリースしてください。

Linux

注意: 脆弱性が悪用された証拠はなく、ユーザーやお客様に対する影響も発生していません。

Linux では、Unity の脆弱なコマンドライン引数は LD_PRELOAD メカニズムと同様に機能します。Linux の標準的なセキュリティモデルのもとでは、これらの引数は権限の境界を超えることはなく、したがって、LD_PRELOAD で可能なことに比べて追加のリスクをもたらすことはありません。

AppArmor、Bubblewrap、Firejail、SELinux などの環境では、制限されたプロセスがその制限を超えて Unity アプリケーションを起動できる場合、すでに任意のコード実行が可能であり、この脆弱性によってさらにリスクが増加することはありません。特定の SELinux または AppArmor の設定では、一般的なインジェクション方法 (LD_PRELOADptrace) はブロックされる可能性がありますが、任意の引数を使用して Unity を起動することは可能です。この場合、脆弱な引数がポリシー制限を回避し、有効な攻撃経路となる可能性があります。

軽減策

リスクプロファイルが低いことから、Unity では Unity アプリケーションパッチャーの Linux バージョンはリリースして いません。必要に応じて、特にアクセス制御ポリシーが厳格な環境では、脆弱なコードパスを取り除くために、パッチ適用済みの Unity エディターを使用して Linux アプリケーションをリビルドしてください。

その他のプラットフォーム (iOS、コンソールなど)

iOS を含む他のすべての Unity 対応プラットフォームでは、この脆弱性が悪用可能であることを示す知見はありません。セキュリティを最大限に高めるために、Unity では、パッチを適用した最新の Unity エディターを使用してアプリケーションをリビルドすることを推奨します。

リソース

アプリケーションを保護し、ユーザーを保護するために、対処する必要があります。ご質問やサポートについては、Unityサポート までご連絡ください。


FAQ

深刻度や緊急度はどのように評価すれば良いですか?

+

CVE とは何ですか?

+

深刻度を評価するための詳細情報は、どこで見つけることができますか?

+

Steam のゲームを対象にした保護策は導入されていますか?

+

iOS (visionOS および tvOS を含む)、Xbox、Nintendo Switch、Sony PlayStation、UWP、Quest、WebGL に脆弱性はありますか?

+

プロジェクトが複数のプラットフォームを対象にしており、一部は影響を受けない場合は、どのようにすることが推奨されますか?

+

他のウイルス対策プロバイダーと連携していますか?

+

どのように脆弱性が見つかったのですか?

+

脆弱性が悪用された場合、エンドユーザーにはどのような影響やリスクがありますか?

+

脆弱性が判明した後、Unity はどう対処しましたか?

+

何も対処しないことを選んだら、どうなりますか?

+

今後、脆弱性を Unity に報告するときの手続きを教えてください

+

今後の類似した脆弱性を防止するために、どのような対策が取られていますか?

+

アップデートしないとアプリケーションはストアから削除されますか?

+

顧客にどう伝えればいいでしょうか?

+

パッチ適用ツールはゲームに対して何を行いますか?

+

修正は破壊的変更になりますか?

+

Android SDK と Google Play のバージョンをターゲットにしたゲームで、アプリのアップデートを Play ストアに提出できません。再提出したら、アップデートは受け入れられますか?

+

脆弱性は 2017.1 にさかのぼって影響するのに、なぜエディターバージョン 2019.1 以降のアップデートしかリリースしなかったのですか?

+

Linux に利用できるパッチ適用ツールがないのは、なぜですか?

+

Pico デバイスにゲームを配布する場合はどのようにすれば良いですか?

+

ユーザーを確実に保護するために、ゲームやアプリケーションをプラットフォームから削除する必要がありますか?

+