狠狠撸

狠狠撸Share a Scribd company logo
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNA Technology Conference 2017
DeNAでのチート診断?脆弱性診断の取り組み
株式会社ディー?エヌ?エー
システム本部セキュリティ部
セキュリティ技術グループ
杉山 俊春
1
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
自己紹介
? 所属:株式会社ディー?エヌ?エー
? セキュリティ部 セキュリティ技術グループ
? 名前:杉山 俊春
? 前職:セキュリティ関連の会社
? 脆弱性診断(Web、スマートフォンアプリ)
? Web脆弱性診断ツール(VEX)開発?販売
? SaaS型Web診断サービス開発
? 技術記事執筆 など
? 入社:2012年1月
? 現在の業務:
? 脆弱性診断、社内システムセキュリティ、
セキュリティログ管理、セキュリティ設計 など
? 好きなもの:猫、デザイン?イラスト系のもの
2
星野君のWebアプリ
ほのぼの改造計画 (@IT)
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNA セキュリティ部(技術グループ)と私
3
2012
2013
2015
2013/4
セキュリティ
グループ発足
2014/4
セキュリティ部発足
?セキュリティ技術グループ←こっち
?セキュリティ推進グループ
Join!
セキュリティ部の位置づけ 技術グループの成り立ち
2017/2
現在9名
セキュリティ会社出身:2名
社内教育でメンバー育成
2014
2016
2017
:異動
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNA セキュリティ部(技術グループ)のお仕事
? リリースするアプリ?サービスのチート?脆弱性診断全般
? 本番ネットワークのセキュリティ(踏み台サーバ)
? 社内ネットワークのセキュリティ
? セキュリティ相談?設計
? 脆弱性情報調査?社内共有
? 各種セキュリティの仕組み、ツールの作成
など色々
4
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
セキュリティって?
5
皆さん セキュリティってどうしてますか?
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
セキュリティって?
「セキュリティ」と言っても幅広いので、例えば、
? スマートフォンアプリのセキュリティ
? ゲームアプリのセキュリティ
といわれて、何をしなきゃいけないかがイメージでき
ますか?
6
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
セキュリティって?
とあるゲームで
「まだリリースしていないアイテムを所持している
ユーザがいました」
この時、考えられる原因と対策は?
7
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
セキュリティって?
8
セキュリティって難しい?
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
9
出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について
http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
10
現在
情報セキュリティ人材 28.1万人
+13.2万人不足
すごく足りていない!?
出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について
http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
11
でも、ちょっと待って!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
12
現在
情報セキュリティ人材 28.1万人
IT人材 91.9万人
現時点でIT人材の約3割が
情報セキュリティ人材(というデータでの話)
出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について
http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
13
いい人材が見つかるまで待つ
セキュリティ人材を育てる
実はセキュリティ人材はたくさんいる
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足
14
セキュリティって難しい?
↓
範囲を明確にして、ひとつずつちゃんと
見ていけばそんなにややこしい話ではない!
はず…
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足 – 人材育成への取り組み
? 実際のゲームのセキュリティに近い形のサンプル
アプリ
? Cocos-2dx (C++)で作成
? (ソースコードのデコンパイルは困難)
? Android OS上で動作
? サーバへの通信は暗号化(?)されている
このアプリを利用して、セキュリティ?キャンプ等
のイベントでハンズオンの講義なども実施
http://dena.com/jp/csr/blog/cat277/2016/09/02/003185? DeNA
? チート勉強用サンプルアプリ1
15
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
情報セキュリティ人材の不足 – 人材育成への取り組み
? チート勉強用サンプルアプリ2
? チートをしないと絶対にクリアできないゲーム
? HTML + JavaScript
? ソースコードの閲覧、改変は簡単
? ブラウザ上で動作
→ CTF形式の 高校生向け セキュリティイベント用に作成
16
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
簡単なゲームでの具体的なチート例
17
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
簡単なゲームでの具体的なチート例
? 具体的な例を見てみましょう!(※勉強用のサンプルアプリです)
18
戦う相手を選んで
コマンド選択して倒す!
スタミナ回復アイテムもある
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
簡単なゲームでの具体的なチート例
19
? 大まかなシステムの図
プレイデータ
の保存
バトルの実行
処理
データ要求、結果保存
データの応答
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
簡単なゲームでの具体的なチート例
? できてしまったら困りそうなことを適当に列挙してみる
? 敵のHPを1にする
? 敵の攻撃力、防御力を-99999999にする
? ユーザのHPを99999999にする
? ユーザの攻撃力、防御力を99999999にする
? 戦闘後にもらえる経験値を99999999にする
? ユーザのレベルを99にする
? 使えないコマンドを使う
? ひたすら連続攻撃をする
? 選択できない敵と戦う
? 回復アイテムを無限に使う
? スタミナを消費しないで戦闘を行う
20
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
簡単なゲームでの具体的なチート例
21
実際にどうなるかを見てみましょう!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
提供するサービス、アプリ、ゲームでのセキュリティ
? できてしまったら困りそうなこと
? 敵のHPを1にする
? 敵の攻撃力、防御力を-99999999にする
? ユーザのHPを99999999にする
? ユーザの攻撃力、防御力を99999999にする
? 戦闘後にもらえる経験値を99999999にする
? ユーザのレベルを99にする
? 使えないコマンドを使う
? ひたすら連続攻撃をする
? 選択できない敵と戦う
? 回復アイテムを無限に使う
? スタミナを消費しないで戦闘を行う
22
できる
できるがいまいち
※0.000001とかが正解できる
できる
できる?
できる
できる
できる
できるが無効? ※expを変えるべき
できない
できない
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
提供するサービス、アプリ、ゲームでのセキュリティ
? 攻撃シナリオを雑に割り当ててみる
? 敵のHPを1にする
? ソースコードの変更、利用中の値の直接変更
? 敵の攻撃力、防御力を-99999999にする
? ソースコードの変更、利用中の値の直接変更
? ユーザのHPを99999999にする
? ソースコードの変更、利用中の値の直接変更
? ユーザの攻撃力、防御力を99999999にする
? ソースコードの変更、利用中の値の直接変更
? 戦闘後にもらえる経験値を99999999にする
? サーバに送る値の変更
? ユーザのレベルを99にする
? ソースコードの変更、利用中の値の直接変更、サーバに送る値の変更
? 使えないコマンドを使う
? ソースコードの変更、特定命令の強制実行
? ひたすら連続攻撃をする
? ソースコードの変更、特定命令の強制実行
? 選択できない敵と戦う
? ソースコードの変更、特定命令の強制実行、サーバに送る値の変更、サーバから受け取る値の変更
? 回復アイテムを無限に使う
? ソースコードの変更、サーバに送る値の変更、サーバから受け取る値の変更
? スタミナを消費しないで戦闘を行う
? ソースコードの変更、サーバに送る値の変更、サーバから受け取る値の変更
23
以下の4つくらいのパターンで分類
?ソースコード、レスポンスの変更
?利用中の値の直接変更
?特定命令の強制実行
?サーバに送る値の変更
※厳密にはここに書いてある組み合わせ
でもできると思います
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
提供するサービス、アプリ、ゲームでのセキュリティ
24
悪い人が最終的に不正として実現したいことは……
↓
サーバ上のデータを不正なものにしたい
プレイデータの保存時
に不正なデータになっ
ていることが重要
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
提供するサービス、アプリ、ゲームでのセキュリティ
25
ブラウザアプリ(JavaScript)だとチート簡単?
↓
スマホアプリも原理的には似たようなもの!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲームのシステム構成の色々
26
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ゲームのシステム構成の色々
? ローカルのみ
27
アプリダウンロード
課金処理
IAP、IAB
※IAP, IAB:In App Purchase (App Store) , In App Billing (Google Play)
App Store
Google Play
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ゲームのシステム構成の色々
? クライアントアプリ+サーバ(単純なデータの保存のみ)
28
アプリダウンロード
課金処理 App Store
Google Play
データ読み込み
データ保存
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ゲームのシステム構成の色々
? クライアントアプリ+サーバ側ロジック
29
アプリダウンロード
課金処理 App Store
Google Play
ゲームサーバ
データ読み込み、処理結果
処理実行
課金検証
各種検証、処理実行
検証結果
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ゲームのシステム構成の色々
? クライアントアプリ+サーバ側ロジック+SNS or プラットフォーム連
携
30
アプリダウンロード
課金処理 App Store
Google Play
ゲームサーバ
データ読み込み
処理結果
処理実行
課金検証
各種検証、
処理実行
検証結果
データ読み込み
処理結果
処理実行
ゲームプラットフォーム
データ読み込み
処理結果
処理実行
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲームアプリに対する攻撃
31
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
攻撃されうるポイント
32
アプリダウンロード
課金処理 App Store
Google Play
ゲームサーバ
データ読み込み、処理結果
処理実行
課金検証
検証結果
メモリ改ざん
不正な通信
(リクエスト)
データ
ファイル改ざん
アプリ改ざん
不正な通信
(レスポンス)
大半の最終的な
ターゲットはここ!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲームにおけるチート、不正行為
33
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - デモ画面
レスポンス改ざんで
使えるようにできる
34
? DeNA? DeNA
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - 通信の改ざん
リクエスト
レスポンス
普通の通信
Proxyツールを利用した改ざん
リクエスト
悪い事をする人の環境
改ざん
改ざんされた
レスポンス
改ざんされた
リクエスト
Proxy
ツール
35
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - デモ画面
? 送られてるリクエストの例
POST /sfx/get_user_info.php HTTP/1.1
Accept-Encoding: identity
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; sdk Build/MASTER)
Host: appdemo.example.com
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 80
WgMBAQ1RU1FLX1BHRwpEUlJIGwY2Gg1RQk0RDlIaERIRFEMKXUpcQB1aRFsHTxkUGB
NFUV5EXUtJDFAW
Base64っぽいけどデコードしても謎文字列
36
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - 通信の改ざん
Proxyツールを利用した再送
リクエスト
Proxy
ツール
悪い事をする人の環境
37
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - デモ画面
? バイナリ解析の様子(リクエスト暗号化?の鍵を探す)
対策をしていないと、
簡単?一般的なロジックの場合、
一瞬で復号するプログラムを
作成されてしまう場合がある
1. ?Base64?で検索
2.ロジックをちょっと追って
鍵っぽい文字列を探す
38
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - 通信の自動改ざん
リクエストを加工する例
③平文を
手動で改ざん
⑤改ざんされた
暗号文
Proxyツール
復号?再暗号化
モジュール
Intercept
①
②復号
④
悪い事をする人の環境
39
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - デモ画面
40
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - メモリ改ざん
? 端末上のメモリを改ざんする例
1. アプリを止める
2. 特定の値を持つアドレスをメモリ内で検索
3. アプリを再開し、目的の値をアプリ上で変更
4. アプリを止める
5. 手順2で見つかったアドレスのうち変更後の値になったアドレスを
検索
6. 見つかったアドレス全てを目的の値に置換
7. アプリを再開
41
A68332F3 002b 0000 0050 f91f a600 0000
000a 0000
A6833303 0000 0000 0000 3039 0000 0000
0000 0000
A6833313 0000 0000 0073 0065 0000 0000
0000 0000
A6833323 0000 0000 0000 0000 0000 0000
0000 0000
:
A68332F3 002b 0000 0050 f91f a600 0000
000a 0000
A6833303 0000 0000 0000 3011 0000 0000
0000 0000
A6833313 0000 0000 0073 0065 0000 0000
0000 0000
A6833323 0000 0000 0000 0000 0000 0000
0000 0000
:
範囲指定、変化量などで
特定する方法もあり
変化を観測可能
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
チート勉強用サンプルアプリ - 診断に使っているツール
? Proxyツール
? PacketProxy (自社ツール)
? OWASP ZAP や BurpSuite といったツールもよく利用される
? バイナリ解析ツール
? IDA Pro
? メモリ改ざんツール
? MemoryPatching (自社ツール)
? (一般的にGameGuardianなどの実際のチートに利用されるツールなども
利用されることがある)
? 上記のような専用のツールが必要となるが、使い方を習得すれば
一定程度のチート診断が可能
42
例えば、「最低限カジュアルなチートは防ぐ」などの
どのレベルのチートを想定するかなどを決めておくことが重要
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ゲームにおけるチート、不正行為 - チートは何が困るのか? -
? チートをされてしまうと起こること
? ゲームバランスが崩壊 → ゲームの寿命を著しく縮める
? ユーザの不公平感を生む
? 非チートユーザへの直接的被害
? PvP、GvGなどのプレイヤー間での戦闘など
? 課金による発生するはずの利益の損失
→特にオンラインゲームだと影響範囲や非チートユーザの関わり方が
複雑になるため致命的になりやすい
43
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
44
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
45
アプリダウンロード
課金処理 App Store
Google Play
ゲームサーバ
データ読み込み、処理結果
処理実行
課金検証
検証結果
メモリ改ざん
不正な通信
(リクエスト)
データ
ファイル改ざん
アプリ改ざん
不正な通信
(レスポンス)
? 基本的には攻撃されうるポイントを対策していけばよい
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
? チート対策の難しい部分
? 特にクライアント上の対策については、仕組み上どう頑張っても完
璧な対策が無理な場合がある。いたちごっこ状態。
? 一定は運用でカバーする、という選択肢もある
? 巧妙なチートユーザは発見が難しい
? チートなのか、単純に運がいい?上手いプレイなのかの区別がつかない
? 複製アイテムの所有者が善意の第三者の場合がある など
46
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
? 攻撃されうるポイントへの対策
? 不正な通信(リクエスト?レスポンス)
? サーバサイドでの値チェック
? 取りうる値の範囲、条件
? パラメータの形式チェック など
? 通信の保護
? 証明書Pinning
? 単純な通信のhttps化などだけではチート対策にはならない
? 通信データの独自暗号化
? 送受信データの改ざん検知 など
→仮に突破されても不正の兆候を捕らえられるようにしておくと
Good
47
Proxy
ツール
Pinning
値チェック
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
? 攻撃されうるポイントへの対策
? メモリ改ざん、データ改ざん
? 暗号化して保存する!
? 暗号ロジック、鍵がすぐに取り出せるとほとんど意味がないので、
「解析?デコンパイル対策」も頑張る
48
A68332F3 002b 0000 0050 f91f a600 0000
000a 0000
A6833303 1c80 d55b 1e6c 3658 0000 0000
0000 0000
A6833313 0000 0000 0073 0065 0000 0000
0000 0000
A6833323 0000 0000 0000 0000 0000 0000
0000 0000
:
A68332F3 002b 0000 0050 f91f a600 0000
000a 0000
A6833303 af40 0ff5 67ff a4c7 0000 0000
0000 0000
A6833313 0000 0000 0073 0065 0000 0000
0000 0000
A6833323 0000 0000 0000 0000 0000 0000
0000 0000
:
メモリ
見た目の変化とメモリ上の変化が異なる
見た目上の変化:12345 -> 12032
メモリ上の変化:1e6c 3658 -> 67ff a4c7
暗号化されて読めないデータ
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
スマホ向けゲーム開発におけるチート対策例
? 攻撃されうるポイントへの対策
? 解析?デコンパイル対策
? デコンパイルが難しい言語を使う
? 例えば、Androidの場合、重要な処理はJavaで書かず、JNI等を使っ
て別の言語で記述した処理を呼び出す など。
? できない場合は難読化を頑張る
? 暗号化などは一般的なものをそのまま使わない
? 例えば、「AESだ!」とわかったら、ロジックを解析する必要はな
く、鍵だけ探せば復号できてしまう
? Packerのような解析対策の仕組みを導入する
? バイナリ内のシンボル情報を削除する
などの対策をいれる
49
※基本的にどのくらい解析が難しくなるか、という問題
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
まとめ
? チート対策をするには、まず、『何ができるの
か』を知る事が重要
? 簡単なサンプルから始めて原理を理解できると
よい
? チートの難易度と対策?運用のコストを考えなが
らバランスよく運営をしていく必要がある
50

More Related Content

顿别狈础冲罢别肠丑肠辞苍2017冲顿别狈础でのチート?脆弱性诊断への取り组み

  • 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeNA Technology Conference 2017 DeNAでのチート診断?脆弱性診断の取り組み 株式会社ディー?エヌ?エー システム本部セキュリティ部 セキュリティ技術グループ 杉山 俊春 1
  • 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 ? 所属:株式会社ディー?エヌ?エー ? セキュリティ部 セキュリティ技術グループ ? 名前:杉山 俊春 ? 前職:セキュリティ関連の会社 ? 脆弱性診断(Web、スマートフォンアプリ) ? Web脆弱性診断ツール(VEX)開発?販売 ? SaaS型Web診断サービス開発 ? 技術記事執筆 など ? 入社:2012年1月 ? 現在の業務: ? 脆弱性診断、社内システムセキュリティ、 セキュリティログ管理、セキュリティ設計 など ? 好きなもの:猫、デザイン?イラスト系のもの 2 星野君のWebアプリ ほのぼの改造計画 (@IT)
  • 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeNA セキュリティ部(技術グループ)と私 3 2012 2013 2015 2013/4 セキュリティ グループ発足 2014/4 セキュリティ部発足 ?セキュリティ技術グループ←こっち ?セキュリティ推進グループ Join! セキュリティ部の位置づけ 技術グループの成り立ち 2017/2 現在9名 セキュリティ会社出身:2名 社内教育でメンバー育成 2014 2016 2017 :異動
  • 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeNA セキュリティ部(技術グループ)のお仕事 ? リリースするアプリ?サービスのチート?脆弱性診断全般 ? 本番ネットワークのセキュリティ(踏み台サーバ) ? 社内ネットワークのセキュリティ ? セキュリティ相談?設計 ? 脆弱性情報調査?社内共有 ? 各種セキュリティの仕組み、ツールの作成 など色々 4
  • 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティって? 5 皆さん セキュリティってどうしてますか?
  • 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティって? 「セキュリティ」と言っても幅広いので、例えば、 ? スマートフォンアプリのセキュリティ ? ゲームアプリのセキュリティ といわれて、何をしなきゃいけないかがイメージでき ますか? 6
  • 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティって? とあるゲームで 「まだリリースしていないアイテムを所持している ユーザがいました」 この時、考えられる原因と対策は? 7
  • 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティって? 8 セキュリティって難しい?
  • 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 9 出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
  • 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 10 現在 情報セキュリティ人材 28.1万人 +13.2万人不足 すごく足りていない!? 出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
  • 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 11 でも、ちょっと待って!
  • 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 12 現在 情報セキュリティ人材 28.1万人 IT人材 91.9万人 現時点でIT人材の約3割が 情報セキュリティ人材(というデータでの話) 出典:経済産業省 IT人材の最新動向と将来推計に関する調査結果について http://www.meti.go.jp/policy/it_policy/jinzai/27FY_report.html
  • 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 13 いい人材が見つかるまで待つ セキュリティ人材を育てる 実はセキュリティ人材はたくさんいる
  • 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 14 セキュリティって難しい? ↓ 範囲を明確にして、ひとつずつちゃんと 見ていけばそんなにややこしい話ではない! はず…
  • 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 – 人材育成への取り組み ? 実際のゲームのセキュリティに近い形のサンプル アプリ ? Cocos-2dx (C++)で作成 ? (ソースコードのデコンパイルは困難) ? Android OS上で動作 ? サーバへの通信は暗号化(?)されている このアプリを利用して、セキュリティ?キャンプ等 のイベントでハンズオンの講義なども実施 http://dena.com/jp/csr/blog/cat277/2016/09/02/003185? DeNA ? チート勉強用サンプルアプリ1 15
  • 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 情報セキュリティ人材の不足 – 人材育成への取り組み ? チート勉強用サンプルアプリ2 ? チートをしないと絶対にクリアできないゲーム ? HTML + JavaScript ? ソースコードの閲覧、改変は簡単 ? ブラウザ上で動作 → CTF形式の 高校生向け セキュリティイベント用に作成 16
  • 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 簡単なゲームでの具体的なチート例 17
  • 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 簡単なゲームでの具体的なチート例 ? 具体的な例を見てみましょう!(※勉強用のサンプルアプリです) 18 戦う相手を選んで コマンド選択して倒す! スタミナ回復アイテムもある
  • 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 簡単なゲームでの具体的なチート例 19 ? 大まかなシステムの図 プレイデータ の保存 バトルの実行 処理 データ要求、結果保存 データの応答
  • 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 簡単なゲームでの具体的なチート例 ? できてしまったら困りそうなことを適当に列挙してみる ? 敵のHPを1にする ? 敵の攻撃力、防御力を-99999999にする ? ユーザのHPを99999999にする ? ユーザの攻撃力、防御力を99999999にする ? 戦闘後にもらえる経験値を99999999にする ? ユーザのレベルを99にする ? 使えないコマンドを使う ? ひたすら連続攻撃をする ? 選択できない敵と戦う ? 回復アイテムを無限に使う ? スタミナを消費しないで戦闘を行う 20
  • 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 簡単なゲームでの具体的なチート例 21 実際にどうなるかを見てみましょう!
  • 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 提供するサービス、アプリ、ゲームでのセキュリティ ? できてしまったら困りそうなこと ? 敵のHPを1にする ? 敵の攻撃力、防御力を-99999999にする ? ユーザのHPを99999999にする ? ユーザの攻撃力、防御力を99999999にする ? 戦闘後にもらえる経験値を99999999にする ? ユーザのレベルを99にする ? 使えないコマンドを使う ? ひたすら連続攻撃をする ? 選択できない敵と戦う ? 回復アイテムを無限に使う ? スタミナを消費しないで戦闘を行う 22 できる できるがいまいち ※0.000001とかが正解できる できる できる? できる できる できる できるが無効? ※expを変えるべき できない できない
  • 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 提供するサービス、アプリ、ゲームでのセキュリティ ? 攻撃シナリオを雑に割り当ててみる ? 敵のHPを1にする ? ソースコードの変更、利用中の値の直接変更 ? 敵の攻撃力、防御力を-99999999にする ? ソースコードの変更、利用中の値の直接変更 ? ユーザのHPを99999999にする ? ソースコードの変更、利用中の値の直接変更 ? ユーザの攻撃力、防御力を99999999にする ? ソースコードの変更、利用中の値の直接変更 ? 戦闘後にもらえる経験値を99999999にする ? サーバに送る値の変更 ? ユーザのレベルを99にする ? ソースコードの変更、利用中の値の直接変更、サーバに送る値の変更 ? 使えないコマンドを使う ? ソースコードの変更、特定命令の強制実行 ? ひたすら連続攻撃をする ? ソースコードの変更、特定命令の強制実行 ? 選択できない敵と戦う ? ソースコードの変更、特定命令の強制実行、サーバに送る値の変更、サーバから受け取る値の変更 ? 回復アイテムを無限に使う ? ソースコードの変更、サーバに送る値の変更、サーバから受け取る値の変更 ? スタミナを消費しないで戦闘を行う ? ソースコードの変更、サーバに送る値の変更、サーバから受け取る値の変更 23 以下の4つくらいのパターンで分類 ?ソースコード、レスポンスの変更 ?利用中の値の直接変更 ?特定命令の強制実行 ?サーバに送る値の変更 ※厳密にはここに書いてある組み合わせ でもできると思います
  • 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 提供するサービス、アプリ、ゲームでのセキュリティ 24 悪い人が最終的に不正として実現したいことは…… ↓ サーバ上のデータを不正なものにしたい プレイデータの保存時 に不正なデータになっ ていることが重要
  • 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 提供するサービス、アプリ、ゲームでのセキュリティ 25 ブラウザアプリ(JavaScript)だとチート簡単? ↓ スマホアプリも原理的には似たようなもの!
  • 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲームのシステム構成の色々 26
  • 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームのシステム構成の色々 ? ローカルのみ 27 アプリダウンロード 課金処理 IAP、IAB ※IAP, IAB:In App Purchase (App Store) , In App Billing (Google Play) App Store Google Play
  • 28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームのシステム構成の色々 ? クライアントアプリ+サーバ(単純なデータの保存のみ) 28 アプリダウンロード 課金処理 App Store Google Play データ読み込み データ保存
  • 29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームのシステム構成の色々 ? クライアントアプリ+サーバ側ロジック 29 アプリダウンロード 課金処理 App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金検証 各種検証、処理実行 検証結果
  • 30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームのシステム構成の色々 ? クライアントアプリ+サーバ側ロジック+SNS or プラットフォーム連 携 30 アプリダウンロード 課金処理 App Store Google Play ゲームサーバ データ読み込み 処理結果 処理実行 課金検証 各種検証、 処理実行 検証結果 データ読み込み 処理結果 処理実行 ゲームプラットフォーム データ読み込み 処理結果 処理実行
  • 31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲームアプリに対する攻撃 31
  • 32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 32 アプリダウンロード 課金処理 App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金検証 検証結果 メモリ改ざん 不正な通信 (リクエスト) データ ファイル改ざん アプリ改ざん 不正な通信 (レスポンス) 大半の最終的な ターゲットはここ!
  • 33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲームにおけるチート、不正行為 33
  • 34. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - デモ画面 レスポンス改ざんで 使えるようにできる 34 ? DeNA? DeNA
  • 35. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - 通信の改ざん リクエスト レスポンス 普通の通信 Proxyツールを利用した改ざん リクエスト 悪い事をする人の環境 改ざん 改ざんされた レスポンス 改ざんされた リクエスト Proxy ツール 35
  • 36. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - デモ画面 ? 送られてるリクエストの例 POST /sfx/get_user_info.php HTTP/1.1 Accept-Encoding: identity User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; sdk Build/MASTER) Host: appdemo.example.com Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded Content-Length: 80 WgMBAQ1RU1FLX1BHRwpEUlJIGwY2Gg1RQk0RDlIaERIRFEMKXUpcQB1aRFsHTxkUGB NFUV5EXUtJDFAW Base64っぽいけどデコードしても謎文字列 36
  • 37. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - 通信の改ざん Proxyツールを利用した再送 リクエスト Proxy ツール 悪い事をする人の環境 37
  • 38. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - デモ画面 ? バイナリ解析の様子(リクエスト暗号化?の鍵を探す) 対策をしていないと、 簡単?一般的なロジックの場合、 一瞬で復号するプログラムを 作成されてしまう場合がある 1. ?Base64?で検索 2.ロジックをちょっと追って 鍵っぽい文字列を探す 38
  • 39. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - 通信の自動改ざん リクエストを加工する例 ③平文を 手動で改ざん ⑤改ざんされた 暗号文 Proxyツール 復号?再暗号化 モジュール Intercept ① ②復号 ④ 悪い事をする人の環境 39
  • 40. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - デモ画面 40
  • 41. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - メモリ改ざん ? 端末上のメモリを改ざんする例 1. アプリを止める 2. 特定の値を持つアドレスをメモリ内で検索 3. アプリを再開し、目的の値をアプリ上で変更 4. アプリを止める 5. 手順2で見つかったアドレスのうち変更後の値になったアドレスを 検索 6. 見つかったアドレス全てを目的の値に置換 7. アプリを再開 41 A68332F3 002b 0000 0050 f91f a600 0000 000a 0000 A6833303 0000 0000 0000 3039 0000 0000 0000 0000 A6833313 0000 0000 0073 0065 0000 0000 0000 0000 A6833323 0000 0000 0000 0000 0000 0000 0000 0000 : A68332F3 002b 0000 0050 f91f a600 0000 000a 0000 A6833303 0000 0000 0000 3011 0000 0000 0000 0000 A6833313 0000 0000 0073 0065 0000 0000 0000 0000 A6833323 0000 0000 0000 0000 0000 0000 0000 0000 : 範囲指定、変化量などで 特定する方法もあり 変化を観測可能
  • 42. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. チート勉強用サンプルアプリ - 診断に使っているツール ? Proxyツール ? PacketProxy (自社ツール) ? OWASP ZAP や BurpSuite といったツールもよく利用される ? バイナリ解析ツール ? IDA Pro ? メモリ改ざんツール ? MemoryPatching (自社ツール) ? (一般的にGameGuardianなどの実際のチートに利用されるツールなども 利用されることがある) ? 上記のような専用のツールが必要となるが、使い方を習得すれば 一定程度のチート診断が可能 42 例えば、「最低限カジュアルなチートは防ぐ」などの どのレベルのチートを想定するかなどを決めておくことが重要
  • 43. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - チートは何が困るのか? - ? チートをされてしまうと起こること ? ゲームバランスが崩壊 → ゲームの寿命を著しく縮める ? ユーザの不公平感を生む ? 非チートユーザへの直接的被害 ? PvP、GvGなどのプレイヤー間での戦闘など ? 課金による発生するはずの利益の損失 →特にオンラインゲームだと影響範囲や非チートユーザの関わり方が 複雑になるため致命的になりやすい 43
  • 44. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 44
  • 45. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 45 アプリダウンロード 課金処理 App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金検証 検証結果 メモリ改ざん 不正な通信 (リクエスト) データ ファイル改ざん アプリ改ざん 不正な通信 (レスポンス) ? 基本的には攻撃されうるポイントを対策していけばよい
  • 46. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 ? チート対策の難しい部分 ? 特にクライアント上の対策については、仕組み上どう頑張っても完 璧な対策が無理な場合がある。いたちごっこ状態。 ? 一定は運用でカバーする、という選択肢もある ? 巧妙なチートユーザは発見が難しい ? チートなのか、単純に運がいい?上手いプレイなのかの区別がつかない ? 複製アイテムの所有者が善意の第三者の場合がある など 46
  • 47. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 ? 攻撃されうるポイントへの対策 ? 不正な通信(リクエスト?レスポンス) ? サーバサイドでの値チェック ? 取りうる値の範囲、条件 ? パラメータの形式チェック など ? 通信の保護 ? 証明書Pinning ? 単純な通信のhttps化などだけではチート対策にはならない ? 通信データの独自暗号化 ? 送受信データの改ざん検知 など →仮に突破されても不正の兆候を捕らえられるようにしておくと Good 47 Proxy ツール Pinning 値チェック
  • 48. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 ? 攻撃されうるポイントへの対策 ? メモリ改ざん、データ改ざん ? 暗号化して保存する! ? 暗号ロジック、鍵がすぐに取り出せるとほとんど意味がないので、 「解析?デコンパイル対策」も頑張る 48 A68332F3 002b 0000 0050 f91f a600 0000 000a 0000 A6833303 1c80 d55b 1e6c 3658 0000 0000 0000 0000 A6833313 0000 0000 0073 0065 0000 0000 0000 0000 A6833323 0000 0000 0000 0000 0000 0000 0000 0000 : A68332F3 002b 0000 0050 f91f a600 0000 000a 0000 A6833303 af40 0ff5 67ff a4c7 0000 0000 0000 0000 A6833313 0000 0000 0073 0065 0000 0000 0000 0000 A6833323 0000 0000 0000 0000 0000 0000 0000 0000 : メモリ 見た目の変化とメモリ上の変化が異なる 見た目上の変化:12345 -> 12032 メモリ上の変化:1e6c 3658 -> 67ff a4c7 暗号化されて読めないデータ
  • 49. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマホ向けゲーム開発におけるチート対策例 ? 攻撃されうるポイントへの対策 ? 解析?デコンパイル対策 ? デコンパイルが難しい言語を使う ? 例えば、Androidの場合、重要な処理はJavaで書かず、JNI等を使っ て別の言語で記述した処理を呼び出す など。 ? できない場合は難読化を頑張る ? 暗号化などは一般的なものをそのまま使わない ? 例えば、「AESだ!」とわかったら、ロジックを解析する必要はな く、鍵だけ探せば復号できてしまう ? Packerのような解析対策の仕組みを導入する ? バイナリ内のシンボル情報を削除する などの対策をいれる 49 ※基本的にどのくらい解析が難しくなるか、という問題
  • 50. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ ? チート対策をするには、まず、『何ができるの か』を知る事が重要 ? 簡単なサンプルから始めて原理を理解できると よい ? チートの難易度と対策?運用のコストを考えなが らバランスよく運営をしていく必要がある 50