Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
とあるセキュリティ技術者の奮闘録/On_client-side_game_security_t...
Search
Doraneko
August 27, 2022
Technology
0
1.1k
とあるセキュリティ技術者の奮闘録/On_client-side_game_security_techniques
Shibuya.gamesec #2で話した内容。
Doraneko
August 27, 2022
Tweet
Share
More Decks by Doraneko
See All by Doraneko
ゲームセキュリティからみたAndroid解析/android-analysis-from-a-game-security-perspective
doraneko
0
2k
Other Decks in Technology
See All in Technology
生成AIとAWS CDKで実現! 自社ブログレビューの効率化
ymae
2
330
小規模に始めるデータメッシュとデータガバナンスの実践
kimujun
3
590
話題のGraphRAG、その可能性と課題を理解する
hide212131
4
1.5k
チームを主語にしてみる / Making "Team" the Subject
ar_tama
4
310
【若手エンジニア応援LT会】AWSで繋がり、共に成長! ~コミュニティ活動と新人教育への挑戦~
kazushi_ohata
0
180
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
15
4k
「視座」の上げ方が成人発達理論にわかりやすくまとまってた / think_ perspective_hidden_dimensions
shuzon
2
5.1k
急成長中のWINTICKETにおける品質と開発スピードと向き合ったQA戦略と今後の展望 / winticket-autify
cyberagentdevelopers
PRO
1
160
Apple/Google/Amazonの決済システムの違いを踏まえた定期購読課金システムの構築 / abema-billing-system
cyberagentdevelopers
PRO
1
220
国土交通省 データコンペ参加者向け勉強会
takehikohashimoto
0
120
プロダクト成長に対応するプラットフォーム戦略:Authleteによる共通認証基盤の移行事例 / Building an authentication platform using Authlete and AWS
kakehashi
1
150
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
290k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
Being A Developer After 40
akosma
86
590k
Producing Creativity
orderedlist
PRO
341
39k
Speed Design
sergeychernyshev
24
570
Designing for humans not robots
tammielis
249
25k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
9
680
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Transcript
shibuya.gamesec#2 Kenjiro Ichise
• 自己紹介 • とあるセキュリティ技術者の奮闘禄 • Reversing経歴 • ゲームセキュリティ診断について • Unity
il2cppの分析と対策 • 世にも不思議なAndroid端末 • スピードハックの原理と対策 • 動的解析ツールFrida • まとめ
• 名前:一瀬 健二郎 • Twitter:猫@DoranekoSystems • 職業:セキュリティ系のお仕事 • ゲームセキュリティに関する主な業務経験: •
ソーシャルゲーム、モバイルアプリの脆弱性診断(4年程) • 不正対策のためのセキュリティ製品の開発(Android/iOS/Win) • 横浜在住 • 趣味:登山、音楽 • 登壇歴:DroidKaigi 2020
Reversing経歴 1. 初めて起動した解析ツールは『Cheat Engine』。アングラな雰囲気のかなり怪しいソフト ウェアだと感じたのを今でも覚えている。 2. 『アセンブラ入門』というサイトを参考に、x86アセンブリ言語を学ぶ。 3. Win32APIの存在を知り、自分でプロセスメモり検索ツールを作るようになる。 4.
Android解析を学び、ARMアセンブリについて理解を深める。 5. 腕試しに参加した『SECCON 2017 x CEDEC CHALLENGE』で2位という結果に。 肝心な通信解析が出来ず、優勝したHarekaze様との力の差を感じる。 6. 大会をきっかけに知り合った方を通してCTFチームに加入したり勉強会に参加するように なる。情報セキュリティ企業に入社して診断員として活躍する。 7. 現在は上記とは別の企業でセキュリティ関連のお仕事をしています。
• 私自身の経験の中では、主にブラックボックス診断で本番環境とほぼ同一の状態で診断を 行ってきました。基本的に商用チート対策製品によって保護がかかっているアプリについて も、そのまま診断するというような形です。 • 診断タイトル数的には数十タイトルで日本国外のものも診断経験があります。 • 診断対象プラットフォームはWindows、Android、iOSと一通り経験しました。 • 良く使う解析ツール
• Frida、Ghidra、LLDB、PacketProxy
Unity il2cppの分析と対策① UnityはMonoビルドとil2cppビルドの2つのビルド方式がある。最近のアプリではil2cppビル ドが良く用いられる。 il2cppビルド:ILからcppに変換してビルド。C#で記述したゲームのロジックはネイティブバイ ナリとして出力され、シンボル情報がglobal-metadata.datというファイルに出力される。 Unityの人気も相まってil2cppの解析ツールは活発に開発されており、ツールを使えば比較的簡 単に解析が可能になってしまう。il2cppの解析ツールは静的解析タイプと動的解析タイプの2つ がある。 1.
静的解析タイプ:Il2CppDumper • 実行バイナリとglobal-metadata.datのファイルをパースしてシンボル取得。 2. 動的解析タイプ: • il2cppのAPIを動的に呼び出し、情報を取得。
Unity il2cppの分析と対策② 静的解析タイプの対策例: 左: Il2CppDumperでのdump結果 右: 文字列情報暗号化
Unity il2cppの分析と対策③ il2cppの動的解析タイプの原理 1. 何らかの形で処理を対象プロセスにインジェクションする。 2. dlsym関数等を用いてネイティブバイナリ内のil2cppのAPIを動的に呼び出す。 • アセンブリ列挙 •
il2cpp_domain_get_assemblies • アセンブリからイメージ取得 • Il2cpp_assembly_get_image • イメージからクラス取得 • il2cpp_image_get_class • クラスからメソッド取得 • il2cpp_class_get_methods
Unity il2cppの分析と対策④ il2cppAPIの動的解析タイプでどのような情報が取得できるか確認してみましょう。 自作ツール(非公開): Frida-Il2CppDataCollector ※既存ツールのAndroid/iOSヘの移植
Unity il2cppの分析と対策⑤ 静的解析タイプの対策例: libil2cppのソースコードを書き換えることで対策が可能。(要Unityライセンス) ※iOS:ソースコード書き換えでは対策できないが、別の方法で可能。 1. global-metadata.dat暗号化 2. 文字列情報等の暗号化 3.
il2cppの動作ロジック修正(オリジナルから可能な限り遠ざける) 動的解析タイプの対策例: =>対策が難しく、いたちごっこになりがち。 1. soインジェクション、dylibインジェクションの阻止 2. Riru、Zygisk、Frida等の解析系ツールの検知・阻止 総合的な解析対策が重要!!
脆弱性診断の中で商用チート対策製品の検知がどうしても回避できない場面がありました。方 法を幾つか考えたところ、AndroidはオープンソースなのでOS自体書き換えれば良いのではと 思いつきます。 AndroidKernelのビルドについての情報は少なく、手持ちのAndroid端末用の情報を何とか調 べ上げました。Kernelのソースコードを睨めっこしながら検知を回避できる箇所を探してX日。 ついにチート対策製品の検知を回避することに成功しました。(もちろん通常の診断業務を並行 しながらの調査) そこからはワンコマンドでroot権限を取得出来る端末など、LinuxのRootkit等を参考に作成し て調査を行っています。
「kill 99999」とコマンドを入力する とroot権限を強制的に取得できる端末。
• 通常MagiskやSuperSU等を利用して取得するRoot権限も、Kernelを改変することで容易に取 得出来る。またそもそもRoot権限不要で他のプロセスをデバッグ可能にすることも出来る。 • ファイルが存在するか等の〇〇検知系は、最終的にシステムコールに帰着される。 Kernelを改変すれば、ほぼ全ての〇〇検知系は回避することが出来る。 =>攻撃者が物凄く頑張れば、多くの解析対策は無効化される可能性がある。 あくまで物凄く頑張ればという前提で、ほとんどのチーターは物凄く頑張らない。 実際は楽してチートしたいだけの「カジュアルチーター」が大半。 AndroidKernelを改変しなければ検知を回避できない時点で、対策者側の勝利。
端末:iPhone アプリ:時計 自作ツール: SpeedHack-Tool スピードハックとは何か。 実際に体験してみましょう!
時計アプリに何が起こったのか!? SpeedHack-Toolでは時間関連の以下の二つの関数を偽の関数に置き換えています。 1. clock_gettime 2. gettimeofday システム・アプリに対して「経過時間を誤認させる」ことでスピードハックを実現している。 スピードハック計算式 start_time =
スピードハック開始時間 current_time = 現在時間 return_time = 戻り値 speed = 加速・減速率 return_time = start_time + (( curren_time – start_time ) * speed )
元の関数を偽の関数に置き換えるってどうやるの? フッキングという手法で行っています。 一般的にフッキングで関数を置き換える方法は二種類あります。 1. 関数の先頭処理をジャンプ命令に置き換える方法 • この手法は一般的にインラインフック(InlineHook)と呼ばれる。 各レジスタの値が破壊されないように複雑な手法が必要。 2. アドレステーブルにある関数のアドレスを書き換える方法
• この手法は一般的にpltHook(Windowsの場合IATHook)と呼ばれる。 AndroidのGameGuardianというアプリはこの手法を用いてフッキングしている。 フッキングを行うために、多くの解析ツールは前段階として対象プロセスに共有ライブラリを インジェクションします。元の関数をライブラリ内にある偽の関数に置き換えるためです。
スピードハックの対策方法について 多くの解析ツールは全ての時間関連の関数をフッキングする訳ではないという点は重要です。 例えばSpeedHack-Toolによる改変を検知するには、 1. gettimeofday関数による経過時間を取得する 2. sleep関数などを利用して経過時間を取得する 1と2を比較し一定以上の差異が見られた場合アプリを終了するなどの処理を組み込めば検知す ることが可能です。 また前述のように多くの解析ツールはスピードハックの前段階として共有ライブラリをイン
ジェクションします。ptraceシステムコールによるアンチデバッグを用いることでインジェク ションを防止することが可能です。
ゲームセキュリティに限らず、特にモバイルアプリの解析において現在は神器といっても過言 ではない解析ツールだと思っています。私自身は脆弱性診断において最も頻繁に使用するツー ルです。 例えば通信解析というとローカルプロキシツール等で行うイメージが強いですが、商用ゲーム の多くは通信の暗号化や固有のシグネチャが付与されておりそのままでは解析・改変すること が出来ません。 Fridaによって通信の暗号化前/復号後をキャプチャすることで、AESや独自暗号等の強固な暗 号方式を採用していても解析が可能になります。勿論これはFridaでないと出来ないという訳で はないですが、Javascriptによる記述の容易さやPython等との連携のしやすさ、ツール自体の 安定性なども相まって非常に有用なツールであると思います。
Frida検知・対策はすべきかどうか Fridaは診断員目線では非常に便利な反面、対策側としては非常に脅威な解析ツールであると思 います。 簡易的な実装だとFrida検知自体もまたFridaによって回避される危険性が高いです。またOSS 等で検知を難しくしたVersionのFridaも公開されています。 チート対策全般について、所謂『カジュアルチーター』によるチートを防止出来るか否かは重 要だと思います。診断員目線でも最終的には回避できてもFrida検知その他があると解析は煩雑 になるため、やりづらくなります。 結局の所は常に情報をキャッチアップし、より安定性と実効性のある対策を調査・研究して実 装していく必要があると思います。
まとめ 実際にチート・不正行為を対策するのは非常に難しいと思われます。 攻撃手法に関する情報交換や解析ツールの公開は日々世界中で行われており、対策側 はそういった解析者と戦って行かなければいけません。 今後も脆弱性診断などを通して、困っているゲーム会社様等の一助になれればと思っ ています。 最後になりますが、私はゲームセキュリティを通して多くの人と出会い、学びを得た と思っています。そういった方々にいつか恩返しが出来るように、どこまでも奮闘し ていく所存です。 ご清聴ありがとうございました!
おまけ