Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ゲームセキュリティからみたAndroid解析/android-analysis-from-a-...
Search
Doraneko
June 20, 2020
Technology
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゲームセキュリティからみたAndroid解析/android-analysis-from-a-game-security-perspective
2020/6/20
コロナウイルス接触追跡アプリ解析(オンライン)
講師役で話した内容。
Doraneko
June 20, 2020
More Decks by Doraneko
See All by Doraneko
とあるセキュリティ技術者の奮闘録/On_client-side_game_security_techniques
doraneko
0
1.6k
Other Decks in Technology
See All in Technology
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.4k
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
340
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
110
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
130
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
570
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
260
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
610
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
3
180
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
1
290
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
930
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
230
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
KATA
mclloyd
PRO
35
15k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
The Invisible Side of Design
smashingmag
301
52k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
The Cult of Friendly URLs
andyhume
79
7k
The Limits of Empathy - UXLibs8
cassininazir
1
640
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Transcript
ゲームセキュリティからみたAndoird解析 Kenjiro Ichise 2020/6/20 ーメモリチートからカーネル改変までー
自己紹介 一瀬 健二郎(Kenjiro Ichise) 株式会社Ninjastars セキュリティエンジニア 業務内容:ソーシャルゲームの脆弱性診断、セキュリティセミナー・社内 CTFの開催など。 所属はゲームセキュリティ専門企業。チート対策などで Androidネイティブの部分に触れる事が多い。
twitter:@DoranekoSystems(猫) 日頃勉強したことや調査したことを元に、本日はお話しさせていただきます。
目次 1. ゲームのセキュリティ診断について 2. メモリチートって何だろう 3. スピードハックの原理とその対策 4. soインジェクションについて 5.
Fridaによる通信解析 6. Androidカーネル改変入門(してみた話) 7. 終わりに
1.ゲームのセキュリティ診断について 会社では主にソーシャルゲームの脆弱性診断を行っています。(Unity,Cocos2dが多いです) 私自身が診断時に良く使うツールはFrida,lldb,Ghidra,PacketProxy等。 そこまで得意ではありませんがプログラミングが好きで、社内向けの診断効率化ツール等も開発しています。 商用ゲームのリバースエンジニアリングは一つ一つの謎を解き明かしていくようで、とても面白いです。 診断期間が2週間ほどの場合、最初の1週間でチート対策の回避や通信を解析し、残り1週間で網羅的にみる感じです。 最初は苦戦してた通信解析などもツールの進歩もあり、早ければ1日以内で解析できることもあります(後述のツールで。)
環境 • AndroidStudio付属のAndroidエミュレータ(x86) • Unityのチュートリアル(SurvivalShooter)※il2cppビルド ◦ 一部説明用に機能を改造したもの。 • 自作の解析ツール(MemoryScanner) •
自作の解析ツール(Interceptor)
MemoryScanner • リモート専用のメモリ検索・解析ツール。 • Android端末内でサーバを起動し、 PC上のプログラムと 通信して解析を行う。 • サーバ側:C++(AndroidNDK) ◦
サーバ側でメモリの読み書き・検索を行う。 • PC側:C#(.NET Framework) ◦ 表示用のプログラム。
2.メモリチートって何だろう • ゲームアプリのメモリ上に保存されている ScoreやHPの数値をツールなどにより検索を行いアドレスを見つ け出し、数値を書き換えることでゲームを優位にさせるチート行為の事。
メモリチートの説明
メモリを読み書きする方法の色々 • ptraceシステムコール ◦ Read:ptrace(PTRACE_PEEKDATA…)、ptrace(PTRACE_PEEKTEXT…) ◦ Write:ptrace(PTRACE_POKEDATA…)、ptrace(PTRACE_POKETEXT…) ※32bitで4バイト毎、64bitで8バイト毎とメモリを読むのが非常に遅い。 • 仮想ファイルシステム空間経由
◦ /proc/pid/memをopenする。 ◦ lseek、read/writeを用いてメモリを読み書きする。 ◦ 速度的にはptrace経由より大分高速化する。 • process_vm_readv/process_vm_writev ◦ AndroidNDKでは標準では呼び出せない。 ◦ syscallシステムコール経由で呼び出す必要がある。 ◦ アタッチを必要とせず、対象プロセスでの一時的な停止が発生しない。
ptraceでメモリを読み書きする例 右は指定したPIDの指定アドレスを読み書きする例。 注意) PTRACE_PEEKDATAは失敗した場合-1を返す。 読み取った値と区別がつかないためerrnoを参照する。
非root端末なら安全? 基本的にはroot権限がないと他のプロセスのメモリにアクセスできない。 1. run-asコマンドの利用 apkのAndroidManifest.xmlをdebbugable=”true”に改変してadbのrun-asコマンドを利用。 2. frida-gadget等 apk改変を行いsoファイルを読み込ませ、自分自身でメモリを読み書きする。 スタンドアロン型のフッキングが可能で非常に強力。 3.
fork型 apk改変を行いsoファイルを読み込ませ、 forkで子プロセスを生成して親プロセスを解析する。
メモリ暗号化すれば安全? 単純な暗号化だと、メモリ検索を工夫することで絞り込まれてしまう。 実装した暗号化がメモリ上にどう展開されるのか、強度は充分か意識すると良い。 コマンドラインモードのメモリ解析ツール(Xorサーチ)
メモリを読み書きされることを防ぐには • アンチデバッグ ◦ forkシステムコール等で子プロセスを生成し、子プロセスから親プロセスにアタッチする。 ◦ アタッチできるのは一つのプロセスまでなので、外部からのアタッチを防止できる。 • メモリの暗号化 ◦
数値に対して乱数と xorを取るなどして生の値をメモリ上に置かない。 (強度は必要) • メモリの改竄検知 ◦ 数値に対してハッシュ値を保存し、整合性を取ることで改竄を検知する。 • 端末のroot権限の監視 ◦ root化されていたらアプリを起動終了させるなどの対応をする。 apk改変の検知などと合わせて行う。 • その他 ◦ /proc/pid/mem等のファイルオープンを監視する。
3.スピードハックの原理とその対策 プロセスメモリ改竄ツールには通常、ゲーム内時間を加速・減速させる機能が付属しています。 このような機能は一般的にスピードハック (Speed Hack)と呼ばれています。 この機能は脅威となる場合もあるため、簡単な原理の紹介と対策をご紹介いたします。
スピードハックの原理 一般的な手法では時間関連の関数を改変することで実現する。 この手法では、システムに対して経過時間を偽装することでスピードハックを実現している。 また上記を実現するために、対象プロセスに soファイルをインジェクションすることが多い。 soファイル内の偽の時間関連の関数に、実際の関数をすり替える ためである。 例えばGameGuardianはスピードハック時libN.so(Nは数値)というsoファイルをインジェクションする。 libN.soのシンボル情報を調査すると、偽の時間関連の関数が見つかる。
スピードハックの説明
スピードハックの対策例(クライアント側) 例:経過時間の不整合によるチェック 時間関連の関数を偽の関数にすり替えるが、 全ての時間関連の関数をすり換えるわけではない 。 一般的にフックされる関数とそうでない関数を調査し、経過時間の差を比較する。 Linux系OSの場合、特に以下の二つの関数はフッキングされることが多い。 clock_gettime gettimeofday
4.soインジェクションについて • soインジェクション…soファイル(共有ライブラリ)を他のプロセスに読み込ませる手法のこと。 • ptraceシステムコールを利用して、対象プロセスのメモリやレジスタの値を書き換えて soファイルを対象プ ロセスに読み込ませる。 • 例えばFridaは解析の開始時に、対象プロセスに soファイル(frida-agent)をインジェクションする。
• Android7.0以降はOSのセキュリティ機構により今回紹介する手法ではインジェクション出来ない。
soファイルを動的に読み込ませる方法1 • Android,Linux等ではdlopen関数を利用するとsoファイルを動的にロードすることが可能。 • void *dlopen(const char *pathname, int mode)
• 対象プロセスにsoファイルをインジェクションするためには、対象プロセスで dlopenを呼び出させれば良 い。 • 自プロセスでない他のプロセスで任意の関数を呼び出すということは通常は出来ないが、 ptraceシステム コールを利用すれば可能になる。 • ※端末のSELinuxがPermissiveになってる必要がある。
soファイルを動的に読み込ませる方法2 ptraceを利用し対象プロセスにアタッチが成功すると、対象プロセスは停止する。 この停止している間に以下を実行する。 1. プログラムカウンタを dlopenのアドレスに書き換える 2. dlopenの引数であるsoファイルのパスをメモリに書き込む 3. レジスタ(ARM)またはスタック上(x86)にdlopenの引数をセットする
4. 戻りアドレスを0に設定する(※ここが重要) この状態でプロセスを再開すると dlopenが実行されsoファイルがロードされた後、不正な戻りアドレスがセットさ れていたことにより制御が戻り対象プロセスは再度停止する。 ここで事前に保存して置いた最初の状態の レジスタの値をセットし、再開させることでプログラムは正常に動き 出す。
5.Fridaによる通信解析・改変 Androidに限らず、アプリケーションの通信処理を特定し解析するのは脆弱性診断時等に非常に重要。 Fridaでないと出来ない訳ではないが、 Fridaを用いることで効率的な解析が可能になる。 実現できること • 通信の暗号化/復号関数の特定や調査。 ◦ 大量の関数を同時にフッキングすることで処理の特定が容易になる。 •
フッキングによるリプレイアタック。 ◦ 通信を発生させる特定の関数を任意回数強制的に呼び出す。 • 暗号化/復号ロジックを無視した通信傍受、改変。 • 端末のプロキシ設定を無視するアプリに対する対応。 ◦ 宛先アドレスを強制的に変更する。 DNS偽装ではない別の方法。 • 通信のタイムアウト等がある場合無効化する。 etc… ※上記は全てアプリの実装や保護レベルによって不可能な場合もあります。
Interceptor • Fridaベースの通信解析・改変ツール。 • 暗号化/復号処理等をフッキングし、プロキシツール の代わりにデータ取得・改変を行う。 • 原理は違うがプロキシツール的感覚で操作できる。 • 処理さえ見つければ、暗号ロジック等の解析が不要。
GUI:python+Qt 動作OS:マルチプラットフォーム Androidに限らず、iOSでも使える!!
デモ
6.Androidカーネル改変入門(してみた話) iOSと違い、AndroidはOSSであるからソースコードを弄れば何でも出来るはず。 自分だけの最強の解析用 Androidが欲しい...。 ということでAndroidカーネルの改変とビルドに挑戦してみました。 端末:Nexus5X Androidバージョン:6.0.1 ※具体的な手法は述べません。
出来たこと • ptraceアンチデバッグの無効化 ◦ 1つのプロセスに対して複数プロセスがアタッチできない制限を撤廃。 アンチデバッグを無効化して無限にアタッチできるように !! • root権限無しで他のプロセスにアタッチ •
root権限無しで権限的に本来不可能なファイルを開く etc 少し修正するだけでも、本来有り得ない恐ろしい AndroidOSが完成する。 攻撃者が突き詰めれば、通常の Androidを前提としたセキュリティ対策は全て突破される危険性がある。 一方でマルウェア等を調査するとき、こうした手法は一定の実用性を持つかも ?
7.終わりに リバースエンジニアリングで解析していくのは、謎を解き明かすようで知的で楽しい行為だと思います。 本来の制限を回避して、自分が想定した通りに動作したときは非常に嬉しい気持ちになります。 情報セキュリティに携わる者一同、法律やルールを守って楽しくハッキングしていきましょう !! 最後にこうした場を設けていただいた日本ハッカー協会様および lumin様、誠に有難うございました。 拙いながら、本日の内容が皆様の情報セキュリティの知見にささやかでも貢献できたなら嬉しい限りです。 ご清聴ありがとうございました。