Unityのモバイルゲーム向けセキュリティ関連覚書
免責事項
リリースされているアプリやゲーム、ソフトウェア利用許諾契約(EULA)やアプリケーション利用規約などでリバースエンジニアリングは禁止されています。
実際に試す場合は、自分で開発しているアプリやゲームや脆弱性確認用でリリースされているアプリやゲームを使いましょう。
はじめに
ハック(攻撃)と対策(防御)は表裏一体です。どのようなハックが行われるのかを知らないと対策は行えません。
ハックする側の方が、時間や対応者の人数など基本有利です。
日々新たな問題が発生しています。最新の情報を常に確認する必要があります。
リンクは、すべて目は通していますが、すべてを試しているわけではありません。
上手くいかない、よくわからないなどはキーワードをピックアップして検索してみると良いでしょう。
オンラインゲームセキュリティ(株式会社データハウス)([ad]Amazon)という本が出ている。
これだけでは足りなけれども。用語や知ったり、いろいろな問題が書かれているので取っ掛かりとして参考になる。
追記
「Unityのモバイルゲーム向けクラッキングが行われるポイントを整理してみた」として対応する場所ををまとめてみました。
Unity
手法解説
- ゲームでよくされるチート手法とその対策 〜アプリケーションハッキング編〜 - Qiita
- スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
- スマホゲームのチート対策について | 株式会社オーツー|スタッフブログ
- めんどうくさいゲームセキュリティ - Speaker Deck
- 【Unity】Unity 製の PC ゲームにおける逆コンパイル・改造の方法と難読化による対策を紹介 - コガネブログ
- スマートフォンゲームのチート事情
- Line
-
CEDEC2020: ゲームエンジニアだからこそ実現できるプロダクト特化型チート対策
- CEDiLに資料が上がったらリンクを差し替える
-
Android Republic - Android Game Mods
- 手法ではなくクラックされたapkが取得できる。どんな攻撃があるか参考にできる
- ダウンロードして使用することは推奨しません。
- ネットワークゲームとチートについて|黒河優介|note
-
Valve アンチチート (VAC) とゲーム禁止 (Steamworks ドキュメント)
- そのままでは適応できない箇所もあるが参考になる。
-
Cheating in online games - Wikipedia
- チート手法まとめ
- [CEDEC+KYUSHU]ポールトゥウィンの森島健斗氏による「ゲームセキュリティ白書2022 ~チート対策の最前線~」講演レポート
- Unity製アプリに対するよくある不正行為とその対策 - Qiita
-
DeNAでのセキュリティチェックから分かるゲーム開発で作りがちなチートの穴 | BLOG - DeNA Engineering
- クライアント・サーバ通信、メモリ改ざん、その他に関しての解説
リバースエンジニアリング
- Perfare/Il2CppDumper: Unity il2cpp reverse engineer
- 0xd4d/dnSpy: .NET debugger and assembly editor
- BepInEx/BepInEx: Unity / XNA game patcher and plugin framework
- Visual Studioの C#で開発した .Netアプリを逆コンパイルして、中身の実装を覗き見る方法 (C#で開発した .Netアプリは比較的簡単に元のソースコードに戻せます)
- GNU Project Debugger の代替および類似のソフトウェア - ProgSoft.net
- djkaty/Il2CppInspector: Powerful automated tool for reverse engineering Unity IL2CPP binaries
- 【Android】APKをデコンパイルしてみる - Qiita
- dnSpyEx/dnSpy: Unofficial revival of the well known .NET debugger and assembly editor, dnSpy
-
sinai-dev/UnityExplorer: An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games.
- 開発終了している。↓Forkして開発継続をしている人がいる
- Forks · sinai-dev/UnityExplorer
AssetBundle
標準で暗号化されていない。
ネットワーク経由でダウンロードされたり、ストレージに保存されているデータを取り出し。
ツールを使って内容を確認できる。
- AssetBundleの解析手法とその対策について - Qiita
- 某スマホゲーのデータを抽出する方法 | のんのんぶろぐ
- UnityEX - Вскрытие игровых ресурсов - Zone of Games Forum
- mafaca/UtinyRipper: GUI and API library to work with Engine assets, serialized and bundle files
- 【Unity】Scripted Importerを使ってUnityが対応していない拡張子のファイルに対応する(テキスト暗号化も) - はなちるのマイノート
- K0lb3/UnityPy: UnityPy is python module that makes it possible to extract/unpack and edit Unity assets
通信
- [Unity/C#]WWW/HttpWebRequestにおける中間者攻撃の危険性を考慮した通信プログラムまとめ - Qiita
- Networking.UnityWebRequest-certificateHandler - Unity スクリプトリファレンス
対策
実装
プログラム保護
- Unityにおける、Androidアプリの改変防止コード|TAM@レトロゲーム制作|note
- Obfuscator Pro | Utilities Tools | Unity Asset Store
- Anti-Cheat Toolkit 2024 | Utilities Tools | Unity Asset Store
-
Android Emulator Detector Unity Compatible.
- Androidエミュレータチェックライブラリ
- スマホアプリの難読化/堅牢化について - Qiita
- プログラムの難読化 セキュリティごった煮ブログ: タグリスト
- 改造apk(MOD)の作り方 & その対策
- Unityのil2cppバイナリを簡易静的解析して対策してみる
- ookii-tsuki/SafeValues: A simple Unity library for cheating prevention
- GitHub - TinyPlay/Pixel-Anticheat: This is a simple and open-source anti-cheat toolkit for your games on Unity. This toolkit developed by TinyPlay for Pixel Incubator.
- 【Unity C#】お手軽メモリ改ざんチート対策 任意のstructをXORするジェネリック #C# - Qiita
- ByteProtector: Mobile Anti-Cheat | Utilities Tools | Unity Asset Store
データ保護
- Easy Save - The Complete Save & Load Asset | 入出力管理 | Unity Asset Store
-
💾 SqlCipher made easy for Unity3d
- SQLiteの内容を暗号化するSQLCipher付きでライブラリ化されているもの。バイナリしかないので何か変なものが入っていないかの確認とライセンスに関しては確認が必要。
-
UnityにSQLCipherを導入して暗号化DBを使う
- セルフビルドでSQLCipherを準備する方法
- Unity で iOS/Android アプリの設定値をセキュアに扱う方法
- Unity製アプリにおいてアセットを暗号化する手法 | QualiArtsエンジニアブログ
- AWSのアクセスキーをハードコードする - Qiita
- Unityの資産を死守するための暗号化と難読化のやりすぎテクニック #C# - Qiita
- mao-test-h/SeekableAesAssetBundle: 暗号化済みAssetBundleをLoadFromStreamで復号しつつロードするテスト
独自対応
CrackProof
- CrackProofについて | DNPハイパーテック
- モバイルゲームのチート対策――チーターの動機と手法:CEDEC2019
- 【CEDEC2019】リバースエンジニアリングとチート事例から学ぶセキュリティ対策 - YouTube
- リバースエンジニアリングとチート事例から学ぶセキュリティ対策(cedil登録するとダウンロードできる。整理されていてわかりやすいです。)
- 【CEDEC2018】セキュリティ会社のエンジニアが 2018年のチート事情について伝えてきました | Technology Note
- PC・モバイルゲームアプリへの攻撃と対策ポイント( Android / iOS / Windows )
- クラッキング対策ツール「CrackProof」とは何か?人気アプリにも数多く採用されるツールの現状を、開発元に訊いた - AUTOMATON
その他のセキュリティサービス
- DxShield |スマホアプリ開発者向けセキュリティサービス
- Denuvo - Irdeto
- Secure your world | Byfron Technologies
- nProtect GameGuard for Mobile
- NHN AppGuard | モバイルアプリセキュリティソリューション
クライアント(端末)
リバースエンジニアリング
総合
いろいろな手法がまとめられています。
-
Introduction - owasp-mstg-ja
- 手っ取り早く何やればいいかは、Androidのアンチリバース防御、iOSのアンチリバース防御を見る。
- テストツール→脆弱なアプリケーションのリンクがある。これで試すことができそう。
- 株式会社Ninjastars 技術研究部 「もっと楽しく安全なゲームの世界を創る」
- 『Androidアプリのセキュア設計・セキュアコーディングガイド』2019年9月1日版の一部変更、同英語版公開しました。 | JSSEC
- アプリ セキュリティに関するベスト プラクティス | Android デベロッパー | Android Developers
- スマホアプリの脆弱性診断って何するの?(iOS編) - STORES Product Blog
メモリ改ざん
- 脆弱性診断用に非ルート化端末でも動作するCUIのメモリ改ざんツール「apk-medit」を作った話 - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)
- Android向けのツール:apk-medit Watch Star
- プログラムがメモリをどう使うかを理解する (1) / (2) / (3)
- 攻撃手法ではないがメモリに関して理解できる内容が書かれている
再パッケージ
Android
-
Android の改竄とリバースエンジニアリング - owasp-mstg-ja
- リリースアプリのデバッグ→再パッケージ化
iOS
実端末チェック
Android
-
SafetyNet によるセキュリティ上の脅威からの保護 | Android デベロッパー | Android Developers
- SafetyNet Attestation API が、アプリを実行しているデバイスが Android 互換性テストに合格しているかどうかを判断するためのサービスを、どのように提供しているかを学びます。
-
SafetyNet Attestation APIでRoot化チェック【基本的な検証編】 | RE:ENGINES
- 1日1万リクエストまでの制限があるため増やす場合は申請する必要がある
- SafetyNet Attestation API -- 割り当てリクエスト - Play Console ヘルプ
- Play Integrity API の概要 | Google Play | Android Developers
iOS
-
新しいApp Attest APIでAppの健全性を検証 - ニュース - Apple Developer
- iOS14から使用できるAPI
-
DeviceCheck | Apple Developer Documentation
- 端末からAppleのサーバへ問い合わせレスポンスを自サーバに送り。自サーバでチェックすることでAppleに登録された端末か確認することができる。
- iOS11で追加されたDeviceCheckについて - Qiita
- iOS 11からのDeviceCheck #とは
- [iOS 11] 初回起動判定などに使える DeviceCheck フレームワークとは #WWDC17 | Developers.IO
- ios - DeviceCheck API-iOSデバイスの一意の識別子? - ITツールウェブ
- App Attest APIの概要 - Qiita
Firebase
-
Firebaseアプリのチェック | Firebase App Check
- AppleプラットフォームでのDeviceCheckまたはAppAttest
- AndroidでIntegrityまたはSafetyNet(非推奨)
エミューレータ
Android
- 最高のアンドロイド エミュ - ブルースタックス アンドロイド エミュ
- NoxPlayer
- LDPlayer - ゲーマー向けの最高のPC Android エミュレーター
- MEmu-一番軽い無料Androidエミュレータ
-
Android Developers Blog: Run ARM apps on the Android Emulator
- Android11から純正エミュレータの性能が上がるようです?
ネットワーク
物理
- おうち LTE ネットワーク構築レシピ
- LANケーブルをニッパーで切断し5秒でネットワークへ侵入・盗聴できるか実験してみました - DARK MATTER
- Wi-Fi通信を盗み見る脆弱性「Kr00K」が発見。MacやiPhone、Raspberry Piなど多くのデバイスが対象に - PC Watch
テスト環境作成
マックを使えばあまり難しいことを考えずに設定できます。
ルーター化
Wifi+Lanの構成でルーター構築可能です。
macで通信内容の解析ツールを動かすして確認しやすいです。
macにLanポート2つ使用してLan+Lanでも構成できます。
帯域制限
- できるだけかんたんに Windows / macOS / iOS / Android を低速な回線(帯域制限)状態にする方法 - Qiita
- 便利すぎる!iOSアプリでネットワークテストをNetwork link Conditionerを使って行う - Kekeの日記
攻撃(解析)
https(http)
mitmproxyがそこそこ使いやすいです。
すべてのプロトコル
https以外もみたい場合は、tcpdumpやWiresharkなどを使用しましょう。
TLS(SSL)
- PFSなTLS通信を復号する
- joernheissler/SslMasterKey: Retrieve the Master Key and Client Random from an ssl.SSLSocket
- SSLKEYLOGFILE - Everything curl
環境設定
Android
iOS
生成
一般的なプロトコル生成
httpやhttpsなどを生成できます。
-
curl/curl: A command line tool and library for transferring data with URL syntax
- HTTP, HTTPS, FTP, FTPS, GOPHER, TFTP, SCP, SFTP, SMB, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP
- Introduction - Everything curl
- RESTful Web APIを扱う時の基本手法のまとめ(cURLコマンド利用) - acokikoy's notes
- curlコマンドでapiを叩く - Qiita
- 【PDF版】curlコマンド完全に理解する - noranecoわーるど@graneed支店 - BOOTH
パケット生成
パケットを自由に生成できます。
位置情報
Android
デベロッパー機能で位置偽造ができます。
- Androidで現在地の位置情報を偽装する方法! スマホのGPSを仮の擬似ロケーションへ変更しよう
- gps - Android mock location on device? - Stack Overflow
APIでmock locationが使用されているかのチェックはできます。
-
android - Disable / Check for Mock Location (prevent gps spoofing) - Stack Overflow
- isFromMockProvider:Location | Android デベロッパー | Android Developers
iOS
デベロッパーモードにしてツールを使用すると位置情報が偽造できます。
サーバ
- セキュリティエンジニアになり、そこから2年間分の勉強内容と参考になった資料とか - ぶるーたるごぶりん
- オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
- セキュリティ入門 - Speaker Deck
- 【CEDEC 2018】Google Playのスマホゲームで不正返金や改変、チート等に対するセキュリティーを高めるための対策とポイント | Social Game Info
- /dev: LoL(および他タイトル)からチーターを追放 - リーグ・オブ・レジェンド
- グランブルーファンタジーのステージング環境について|anzu chang|note
-
A-Liaison BLOG: セキュリティを一切考慮しないMMORPGを開発するとどうなるか
- 対策しないとこうなるという話
Discussion