Slide 1

Slide 1 text

WFS認証基盤SDKのセキュリティに関する取り組み 株式会社WFS エンジニア 秦 泳

Slide 2

Slide 2 text

• 名前:秦 泳(シン エイ) • 所属:株式会社WFS     WFSゲームプラットフォームチーム • 担当:WFS認証基盤Gamelib SDKの開発、サポート 自己紹介 2

Slide 3

Slide 3 text

•WFS認証基盤とは •WFS基盤SDKのセキュリティ取り組み、対策 •まとめ 目次 3

Slide 4

Slide 4 text

• WFS自社開発、正式名称はGameLibrary • 課金などに対して共通なAPI機能を提供 • 様々なOS、プラットフォーム、ゲームエンジンをサポート • Android / iOS / Windows • GooglePlay / AppStore / AmazonStore / Steam • Cocos2d-x / Unity / UE4 ネイティブゲーム向けの認証、課金、SNS連携などの共通基盤機能を提 供するAPIサービスとSDKの総称 WFS認証基盤とは 4

Slide 5

Slide 5 text

• API通信データの不正改ざん • ゲーム内不正課金 • 実行中ゲームデータを改ざん • ゲームの解析、改造(Repackaging) • など 様々なセキュリティ問題を直面 モバイルゲームのセキュリティ課題 5

Slide 6

Slide 6 text

•SDKとサーバー間のAPI通信を守る対策 •不正課金を防止する対策 •リバースエンジニアリングチート行為の対策 Gamelib基盤SDKに認証、課金など機能を安全に行えるため、様々な セキュリティ対策が講じた 基盤SDKのセキュリティ取り組み 6

Slide 7

Slide 7 text

•コードの解析ツール • Android:APKTOOL、Xposed • iOS:IDA、Cycript •コードの不正改造、Repackaging • Android:APKTOOL、smali • iOS:insert_dylib ゲームの解析、改造を目的とするリバースエンジニアリングツールが存在 リバースエンジニアリング 7

Slide 8

Slide 8 text

Gamelibには様々な対策を取っている!

Slide 9

Slide 9 text

•JARの難読化 •APK不正改造の検知 •実行環境の検知 •SafetyNetの実装 Gamelib SDKでリバースエンジニアリング不正行為に取った対策は リバースエンジニアリング対策 9

Slide 10

Slide 10 text

•SDKのJARをDecompileで内部の実装を解読可能 •Proguardで内部実装を難読化 JARの難読化でGamelib Android SDKの内部実装ロジックを解読しに くくなる 難読化 10

Slide 11

Slide 11 text

Gamelib Android SDK JAR難読化 JAR難読化

Slide 12

Slide 12 text

•getAppSignature API • APKに添付される証明書Signatureを取得 • 開発元でないSignatureの場合、改造APKと判定 ゲームAPKは改造されたものかを検知 APK不正改造の検知 12

Slide 13

Slide 13 text

getAppSignature API 開発元 証明書 Game APK 改造者 開発証 明書 改造Game APK 開発元証 明書 Signature 改造者開 発証明書 Signature ≠ getAppSignature() 一致しない場合、APKが 改造された可能性!

Slide 14

Slide 14 text

● VerifyDevice API • ROOT化や脱獄の検知 • エミュレータの検知 • Debug状態の検知 • インストーラーの検知 ゲームが正常な端末環境中に実行するのか 実行環境を検知 14

Slide 15

Slide 15 text

● 特に問題があったのは • ROOT化や脱獄の検知 • エミュレータの検知 ● 検知アルゴリズム ● ROOT化や脱獄の検知BYPASSツールが存在 検知結果100%正確とは限らない 検知の精度問題 15

Slide 16

Slide 16 text

GamelibにGoogle SafetyNetを実装

Slide 17

Slide 17 text

•Google SafetyNet Attestation APIを利用 • Google Play Service API • 正規Android デバイスか、正規のアプリかを評価するAPI • 収集したデバイス、アプリ情報のJSON(JWS)を返却 Root化、エミュレータの検知に一定の信頼性を求める場合 Google SafetyNet APIを使用 SafetyNet Attestation API 17

Slide 18

Slide 18 text

{ "timestampMs": 9860437986543, "nonce": "R2Rra24fVm5xa2Mg", "apkPackageName": "com.package.name.of.requesting.app", "apkCertificateDigestSha256": ["base64 encoded, SHA-256 hash of the certificate used to sign requesting app"], "ctsProfileMatch": true, "basicIntegrity": true } SafetyNet Attestation APIの返却JWSのPayload SafetyNetのデータ 18 Google認証された正規Androidデバイスであれば、「ctsProfileMatch」と 「basicIntegrity」の値はともに「true」になる

Slide 19

Slide 19 text

しかし、このデータを本当に信用できる?

Slide 20

Slide 20 text

•SafetyNet Attestation APIで返却した JWS(JsonWebSignature)をGamelibサーバーに送信 •JWSの署名を検証、評価 • 本当にGoogle発行したものか? • 異常ユーザーか? GamelibはセキュアなSafetyNet実装を採用 SafetyNetの実装 20

Slide 21

Slide 21 text

Gamelib SafetyNet実装の構成 Gamelib Server JWS検証 Gamelib SDK Google Play Service Google Server Game Server Game App ②Attestation API With Nonce ①Nonce ③JWS 異常ユーザー 取得API

Slide 22

Slide 22 text

Gamelibは高い精度でROOT化を検知できる!

Slide 23

Slide 23 text

•DeviceVerify APIで取集した端末実行環境情報を Gamelibサーバーで評価 •異常と判断した場合、異常ユーザーとしてDBに記録 •GamelibはBANしない •ゲームサーバーにAPIを提供、検索可能 不正を検知した場合、Gamelibは異常ユーザーとして記録 異常ユーザー 23

Slide 24

Slide 24 text

Gamelib SafetyNet実装の構成 Gamelib Server JWS検証 Gamelib SDK Google Play Service Google Server Game Server Game App ②Attestation API With Nonce ①Nonce ③JWS 異常ユーザー 取得API

Slide 25

Slide 25 text

•Gamelib SDKにはリバースエンジニアリング不正を検知 APIを提供 •Gamelib SDKのSafetyNet実装で高い精度でROOT化 を検知 • 不正を行った異常ユーザーをゲームに提供するAPI まとめ 25

Slide 26

Slide 26 text

Happy Hacking

Slide 27

Slide 27 text

No content