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
250
Ipa-medit: Memory modification tool for iOS apps without Jailbreaking/ipa-medit-codeblue2022
tkmru
0
120
趣味と実益のための著名なOSSライブラリ起因の脆弱性の探求/seccamp2021-b5
tkmru
0
4.5k
Ipa-medit: Memory Search and Patch Tool for IPA Without Jailbreaking @Black Hat USA 2021 Arsenal/ipa-medit-bh2021-usa
tkmru
1
4k
Learn the essential way of thinking about vulnerabilities through post-exploitation on middlewares (MySQL/PostgreSQL編)/seccamp2020-b8
tkmru
3
760
apk-medit: memory search and patch tool for debuggable APK @CODE BLUE 2020 Bluebox
tkmru
0
180
apk-medit: memory search and patch tool for debuggable APK @Black Hat USA 2020 Arsenal/apk-medit-bh2020-usa
tkmru
0
3.9k
Linux Rootkit Internals
tkmru
1
1.8k
Unicornを用いたDead Code除去
tkmru
0
200
Other Decks in Programming
See All in Programming
Anthropic Cookbook のおすすめレシピ
schroneko
7
1.1k
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
200
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
120
Site Reliability Engineering for GMO
pyama86
8
1.1k
新宿ダンジョンを可視化してみた
satoshi7190
3
370
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
380
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.2k
ゆるい個人開発のススメ
kuroppe1819
10
1k
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
120
Node.js v22 で変わること
yosuke_furukawa
PRO
11
3.9k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
74
5.2k
Happy Clients
brianwarren
92
6.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
13
8.3k
Statistics for Hackers
jakevdp
790
220k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
A better future with KSS
kneath
231
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Embracing the Ebb and Flow
colly
80
4.2k
Testing 201, or: Great Expectations
jmmastey
29
6.4k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
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)など
まとめ • ゲームアプリの診断は他のアプリケーションの診断に比べてめ んどうくさい • 高レイヤーと低レイヤーに両方に触れられるのは面白い!! • クライアントサイド、サーバーサイド両方で対策を行う必要が あり、めんどうくさい •
多層防御が重要
おしまい