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
めんどうくさいゲームセキュリティ
Search
@tkmru
December 18, 2019
Programming
20
11k
めんどうくさいゲームセキュリティ
社内勉強会にて
@tkmru
December 18, 2019
Tweet
Share
More Decks by @tkmru
See All by @tkmru
Bring Your Own Container: When Containers Turn the Key to EDR Bypass/byoc-avtokyo2024
tkmru
2
1.4k
ipa-medit: Memory search and patch tool for IPA without Jailbreaking/ipa-medit-bh2022-europe
tkmru
0
330
Ipa-medit: Memory modification tool for iOS apps without Jailbreaking/ipa-medit-codeblue2022
tkmru
0
170
趣味と実益のための著名なOSSライブラリ起因の脆弱性の探求/seccamp2021-b5
tkmru
0
5.4k
Ipa-medit: Memory Search and Patch Tool for IPA Without Jailbreaking @Black Hat USA 2021 Arsenal/ipa-medit-bh2021-usa
tkmru
1
4.5k
Learn the essential way of thinking about vulnerabilities through post-exploitation on middlewares (MySQL/PostgreSQL編)/seccamp2020-b8
tkmru
3
880
apk-medit: memory search and patch tool for debuggable APK @CODE BLUE 2020 Bluebox
tkmru
0
200
apk-medit: memory search and patch tool for debuggable APK @Black Hat USA 2020 Arsenal/apk-medit-bh2020-usa
tkmru
0
4.1k
Linux Rootkit Internals
tkmru
1
2k
Other Decks in Programming
See All in Programming
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
640
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
1
220
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
120
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
470
TypeScript LSP の今までとこれから
quramy
1
480
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
21
5.8k
無関心の谷
kanayannet
0
140
Javaに鉄道指向プログラミング (Railway Oriented Pro gramming) のエッセンスを取り入れる/Bringing the Essence of Railway-Oriented Programming to Java
cocet33000
2
510
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
170
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
2
360
RubyKaigiで得られる10の価値 〜Ruby話を聞くことだけが RubyKaigiじゃない〜
tomohiko9090
0
130
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
190
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Gamification - CAS2011
davidbonilla
81
5.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
640
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
The Language of Interfaces
destraynor
158
25k
Site-Speed That Sticks
csswizardry
10
620
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Become a Pro
speakerdeck
PRO
28
5.4k
Transcript
めんどうくさい ゲームセキュリティ アカツキ セキュリティエンジニア 小竹 泰一
タイトルの元ネタ
自己紹介 • 名前: 小竹 泰一 • 入社: 2019年9月 • 職種:
セキュリティエンジニア • 脆弱性診断、ツールの検証/開発などなど
脆弱性診断とは!? • 攻撃者目線で自社サービスに対して攻撃し、脆弱性を発見する • 自社サービスのセキュリティホールを修正するために実施 • セキュリティインシデントによる被害を未然に防ぐ
いろいろな脆弱性診断
ネットワーク診断 • ミドルウェアの設定不備や、古い バージョンのソフトウェアが放置さ れていることによる脆弱性などを発 見 • 社内ネットワークにやる場合だと... • 社内ネットワークにつないだ診断員の
PCからネットワーク上の端末へ攻撃 • 脆弱性を持つ端末が放置されていると、 社内ネットワークに攻撃者が何らかの 形で侵入した場合、その端末が攻撃の 起点となる可能性
アプリケーション診断 • Webアプリケーションやスマホア プリなどに対する脆弱性診断 • XSS、SQLi、CSRF、SSRF、権限管理 の不備などを見つける • ゲームアプリの場合だとチートのしや すさという観点からも確認
• ユーザー自身が攻撃してくるので、 他のアプリケーションとは観点が 異なる
今日のお話 • ゲームアプリの診断で確認するところとチート対策について、 ざっくりお話しします • 時間の都合上、すべて網羅しているというかんじではないです
ゲーム以外のアプリケーションの診断 • プロキシツールをつかってアプリケーションとサーバーの間の 通信の詳細を見て、改ざんし脆弱性がないかチェック • プロキシツールを使うと通信内容を確認、改変しやすい サーバーの証明書 プロキシの証明書 公開鍵の証明書 公開鍵の証明書
Burp Suiteで通信内容を見る様子
ゲームアプリの診断 • 通信内容が暗号化されていることが多く、ただプロキシを使う だけでは中身を読み取れない プロキシの証明書 サーバーの証明書 公開鍵の証明書 公開鍵の証明書
Burp Suiteで通信内容を見る様子 暗号化されている
診断準備が必要 • 暗号化に使われている鍵とアルゴリズムを特定 • BurpやPacketProxyといったプロキシツールのencoderを開発 • 有償版のBurp Suiteはスキャナーがついていて便利 • PacketProxyはTCP/UDPを利用したバイナリ通信に対応していたり、
DNSサーバーが組み込まれていたりして便利
ありがちな脆弱性 • 複数のリクエストを同時に送信することで回数の制限を突破 • 例: 有料のガチャを1回分のコストで何度も引く • ガチャを引く際のリクエストをプロキシ上に保存 • 複数の同一のガチャを引くリクエストを同時に送信
• 例えば20個のリクエストを同時に送信すると9割程度のリクエストが 通るケースがある • 原因: DBでのロックの不備 • SELECT FOR UPDATEを用いて規定回数以上に処理が通らないように する
見るべきところは 通信レイヤーだけではない
クライアント上にもゲームロジックが 載っていると.... • メモリ上のデータ • apk/ipa内のバイナリ • ローカルファイル
クライアント上にもゲームロジックが 載っていると.... • メモリ上のデータ • apk/ipa内のバイナリ • ローカルファイル 攻撃可能!
メモリ改ざん • デバッガやチートツールを用いて、メモリ上の値を検索 • GDB、IDA Pro、GameGuardianなど • 見つかった値を改ざんしチート • スコアや所持金などを不正に上昇させる
• チートツールがあるので、チーターがカジュアルにチート可能 • この辺はゲーム以外のスマホアプリでも見ることもある
ありがちな脆弱性 • メモリ改ざんが有効な画面が一部だけ存在する • バトル画面は対策されていても、ショップ画面では対策されていない 場合がある • 対策: メモリ上のデータのエンコード/暗号化 •
くわしくは後ほど
バイナリの改ざん • 逆アセンブルした結果やデコンパイルした結果を元にバイナリ を解析 • パッチを当てることでチート • メモリ改ざんより難易度が高い • シンボル(関数名、変数名)が残っている、あるいはメタデー
タから復元できると容易 • Unityのglobal-metadata.datに注意
ローカルファイルの改ざん • ローカルファイル内にゲーム情報が保存されていることがある • 改ざんすることでチートができる • この辺はゲーム以外のスマホアプリでも見ることもある
チート対策方法
バイナリ改ざん対策 • シンボル情報の削除 • メタデータからも復元できないように • コード難読化 • 逆アセンブル、デコンパイルされても処理がわからないように •
コード改ざん検知 • パッチを当てられたらゲームが起動しないように • 攻撃者には無限に時間があるため、完全なリバースエンジニアリン グ対策は難しい
パケットの改ざん対策 • SSL Pinning • HTTPSで通信する際の証明書 or 公開鍵が一致するか検証 • プロキシツールの証明書を弾くことができる
• 通信内容の暗号化 • リバースエンジニアリング対策も併用 • バイナリからのシンボル情報の削除 • バイナリの難読化 多層防御が重要!
パケットの改ざん対策 • より強くするには.... • コード改ざん検知 • SSL Pinningを解除させないために • リクエスト/レスポンス改ざん検知
• 暗号化 + bodyに入っているデータのハッシュの検証でより強く • 独自暗号 • 一般的な暗号方式だと、暗号に使われている定数でバイナリをgrepされると 暗号方式がバレてしまう
メモリ改ざん対策 • メモリ上の値のエンコード/暗号化 • デバッガアタッチの検知 • GDBなどのデバッガの使用を検知 • Root化端末/Jailbreak端末の検知 •
チートツールはRoot化端末/Jailbreak端末のみで動作することが多い
ローカルファイル改ざん対策 • ゲームの進行を左右するようなファイルを置かない仕様に • 置く場合は暗号化 • リバースエンジニアリング対策も併用 • バイナリからのシンボル情報の削除 •
バイナリの難読化 多層防御が重要!
チート対策のポイント • クライアント側にロジックを載せると、100%の対策は不可能 • 時間と技術があれば理論上突破できる • 攻撃者には無限に時間がある • できるだけサーバー側にロジックを寄せるのが好ましい •
カジュアルなチートは阻止したい • 簡単にツールを使うだけでチートできるようなのは対策マスト • 他ユーザーに影響が及ぶようなチート、脆弱性は防ぎたい • 他ユーザーのアイテムの使用、サーバーが落ちる(DoS)など
まとめ • ゲームアプリの診断は他のアプリケーションの診断に比べてめ んどうくさい • 高レイヤーと低レイヤーに両方に触れられるのは面白い!! • クライアントサイド、サーバーサイド両方で対策を行う必要が あり、めんどうくさい •
多層防御が重要
おしまい