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
10k
めんどうくさいゲームセキュリティ
社内勉強会にて
@tkmru
December 18, 2019
Tweet
Share
More Decks by @tkmru
See All by @tkmru
ipa-medit: Memory search and patch tool for IPA without Jailbreaking/ipa-medit-bh2022-europe
tkmru
0
270
Ipa-medit: Memory modification tool for iOS apps without Jailbreaking/ipa-medit-codeblue2022
tkmru
0
140
趣味と実益のための著名なOSSライブラリ起因の脆弱性の探求/seccamp2021-b5
tkmru
0
4.7k
Ipa-medit: Memory Search and Patch Tool for IPA Without Jailbreaking @Black Hat USA 2021 Arsenal/ipa-medit-bh2021-usa
tkmru
1
4.2k
Learn the essential way of thinking about vulnerabilities through post-exploitation on middlewares (MySQL/PostgreSQL編)/seccamp2020-b8
tkmru
3
810
apk-medit: memory search and patch tool for debuggable APK @CODE BLUE 2020 Bluebox
tkmru
0
190
apk-medit: memory search and patch tool for debuggable APK @Black Hat USA 2020 Arsenal/apk-medit-bh2020-usa
tkmru
0
4k
Linux Rootkit Internals
tkmru
1
1.9k
Unicornを用いたDead Code除去
tkmru
0
210
Other Decks in Programming
See All in Programming
Micro Frontends for Java Microservices - dev2next 2024
mraible
PRO
0
150
Assembling the Future: crafting the missing pieces of the Ruby on Wasm puzzle
skryukov
0
120
"noncopyable types" の使いどころについて考えてみた
andpad
0
110
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
4
93k
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
160
CSC509 Lecture 03
javiergs
PRO
0
110
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
1.1k
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
490
API Platform for Laravel
dunglas
1
1.1k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
3
140
NANIMACHI
naokiito
0
920
全方位強化 Python 服務可觀測性:以 FastAPI 和 Grafana Stack 為例
blueswen
1
350
Featured
See All Featured
Designing Experiences People Love
moore
138
23k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
The Cost Of JavaScript in 2023
addyosmani
43
5.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
The Illustrated Children's Guide to Kubernetes
chrisshort
47
48k
The Straight Up "How To Draw Better" Workshop
denniskardys
231
130k
Writing Fast Ruby
sferik
623
60k
Designing with Data
zakiwarfel
98
5.1k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
104
48k
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)など
まとめ • ゲームアプリの診断は他のアプリケーションの診断に比べてめ んどうくさい • 高レイヤーと低レイヤーに両方に触れられるのは面白い!! • クライアントサイド、サーバーサイド両方で対策を行う必要が あり、めんどうくさい •
多層防御が重要
おしまい