Upgrade to Pro — share decks privately, control downloads, hide ads and more …

めんどうくさいゲームセキュリティ

@tkmru
December 18, 2019

 めんどうくさいゲームセキュリティ

社内勉強会にて

@tkmru

December 18, 2019
Tweet

More Decks by @tkmru

Other Decks in Programming

Transcript

  1. めんどうくさい
    ゲームセキュリティ
    アカツキ
    セキュリティエンジニア
    小竹 泰一

    View full-size slide

  2. タイトルの元ネタ

    View full-size slide

  3. 自己紹介
    • 名前: 小竹 泰一
    • 入社: 2019年9月
    • 職種: セキュリティエンジニア
    • 脆弱性診断、ツールの検証/開発などなど

    View full-size slide

  4. 脆弱性診断とは!?
    • 攻撃者目線で自社サービスに対して攻撃し、脆弱性を発見する
    • 自社サービスのセキュリティホールを修正するために実施
    • セキュリティインシデントによる被害を未然に防ぐ

    View full-size slide

  5. いろいろな脆弱性診断

    View full-size slide

  6. ネットワーク診断
    • ミドルウェアの設定不備や、古い
    バージョンのソフトウェアが放置さ
    れていることによる脆弱性などを発

    • 社内ネットワークにやる場合だと...
    • 社内ネットワークにつないだ診断員の
    PCからネットワーク上の端末へ攻撃
    • 脆弱性を持つ端末が放置されていると、
    社内ネットワークに攻撃者が何らかの
    形で侵入した場合、その端末が攻撃の
    起点となる可能性

    View full-size slide

  7. アプリケーション診断
    • Webアプリケーションやスマホア
    プリなどに対する脆弱性診断
    • XSS、SQLi、CSRF、SSRF、権限管理
    の不備などを見つける
    • ゲームアプリの場合だとチートのしや
    すさという観点からも確認
    • ユーザー自身が攻撃してくるので、
    他のアプリケーションとは観点が
    異なる

    View full-size slide

  8. 今日のお話
    • ゲームアプリの診断で確認するところとチート対策について、
    ざっくりお話しします
    • 時間の都合上、すべて網羅しているというかんじではないです

    View full-size slide

  9. ゲーム以外のアプリケーションの診断
    • プロキシツールをつかってアプリケーションとサーバーの間の
    通信の詳細を見て、改ざんし脆弱性がないかチェック
    • プロキシツールを使うと通信内容を確認、改変しやすい
    サーバーの証明書
    プロキシの証明書
    公開鍵の証明書 公開鍵の証明書

    View full-size slide

  10. Burp Suiteで通信内容を見る様子

    View full-size slide

  11. ゲームアプリの診断
    • 通信内容が暗号化されていることが多く、ただプロキシを使う
    だけでは中身を読み取れない
    プロキシの証明書 サーバーの証明書
    公開鍵の証明書 公開鍵の証明書

    View full-size slide

  12. Burp Suiteで通信内容を見る様子
    暗号化されている

    View full-size slide

  13. 診断準備が必要
    • 暗号化に使われている鍵とアルゴリズムを特定
    • BurpやPacketProxyといったプロキシツールのencoderを開発
    • 有償版のBurp Suiteはスキャナーがついていて便利
    • PacketProxyはTCP/UDPを利用したバイナリ通信に対応していたり、
    DNSサーバーが組み込まれていたりして便利

    View full-size slide

  14. ありがちな脆弱性
    • 複数のリクエストを同時に送信することで回数の制限を突破
    • 例: 有料のガチャを1回分のコストで何度も引く
    • ガチャを引く際のリクエストをプロキシ上に保存
    • 複数の同一のガチャを引くリクエストを同時に送信
    • 例えば20個のリクエストを同時に送信すると9割程度のリクエストが
    通るケースがある
    • 原因: DBでのロックの不備
    • SELECT FOR UPDATEを用いて規定回数以上に処理が通らないように
    する

    View full-size slide

  15. 見るべきところは
    通信レイヤーだけではない

    View full-size slide

  16. クライアント上にもゲームロジックが
    載っていると....
    • メモリ上のデータ
    • apk/ipa内のバイナリ
    • ローカルファイル

    View full-size slide

  17. クライアント上にもゲームロジックが
    載っていると....
    • メモリ上のデータ
    • apk/ipa内のバイナリ
    • ローカルファイル
    攻撃可能!

    View full-size slide

  18. メモリ改ざん
    • デバッガやチートツールを用いて、メモリ上の値を検索
    • GDB、IDA Pro、GameGuardianなど
    • 見つかった値を改ざんしチート
    • スコアや所持金などを不正に上昇させる
    • チートツールがあるので、チーターがカジュアルにチート可能
    • この辺はゲーム以外のスマホアプリでも見ることもある

    View full-size slide

  19. ありがちな脆弱性
    • メモリ改ざんが有効な画面が一部だけ存在する
    • バトル画面は対策されていても、ショップ画面では対策されていない
    場合がある
    • 対策: メモリ上のデータのエンコード/暗号化
    • くわしくは後ほど

    View full-size slide

  20. バイナリの改ざん
    • 逆アセンブルした結果やデコンパイルした結果を元にバイナリ
    を解析
    • パッチを当てることでチート
    • メモリ改ざんより難易度が高い
    • シンボル(関数名、変数名)が残っている、あるいはメタデー
    タから復元できると容易
    • Unityのglobal-metadata.datに注意

    View full-size slide

  21. ローカルファイルの改ざん
    • ローカルファイル内にゲーム情報が保存されていることがある
    • 改ざんすることでチートができる
    • この辺はゲーム以外のスマホアプリでも見ることもある

    View full-size slide

  22. チート対策方法

    View full-size slide

  23. バイナリ改ざん対策
    • シンボル情報の削除
    • メタデータからも復元できないように
    • コード難読化
    • 逆アセンブル、デコンパイルされても処理がわからないように
    • コード改ざん検知
    • パッチを当てられたらゲームが起動しないように
    • 攻撃者には無限に時間があるため、完全なリバースエンジニアリン
    グ対策は難しい

    View full-size slide

  24. パケットの改ざん対策
    • SSL Pinning
    • HTTPSで通信する際の証明書 or 公開鍵が一致するか検証
    • プロキシツールの証明書を弾くことができる
    • 通信内容の暗号化
    • リバースエンジニアリング対策も併用
    • バイナリからのシンボル情報の削除
    • バイナリの難読化 多層防御が重要!

    View full-size slide

  25. パケットの改ざん対策
    • より強くするには....
    • コード改ざん検知
    • SSL Pinningを解除させないために
    • リクエスト/レスポンス改ざん検知
    • 暗号化 + bodyに入っているデータのハッシュの検証でより強く
    • 独自暗号
    • 一般的な暗号方式だと、暗号に使われている定数でバイナリをgrepされると
    暗号方式がバレてしまう

    View full-size slide

  26. メモリ改ざん対策
    • メモリ上の値のエンコード/暗号化
    • デバッガアタッチの検知
    • GDBなどのデバッガの使用を検知
    • Root化端末/Jailbreak端末の検知
    • チートツールはRoot化端末/Jailbreak端末のみで動作することが多い

    View full-size slide

  27. ローカルファイル改ざん対策
    • ゲームの進行を左右するようなファイルを置かない仕様に
    • 置く場合は暗号化
    • リバースエンジニアリング対策も併用
    • バイナリからのシンボル情報の削除
    • バイナリの難読化 多層防御が重要!

    View full-size slide

  28. チート対策のポイント
    • クライアント側にロジックを載せると、100%の対策は不可能
    • 時間と技術があれば理論上突破できる
    • 攻撃者には無限に時間がある
    • できるだけサーバー側にロジックを寄せるのが好ましい
    • カジュアルなチートは阻止したい
    • 簡単にツールを使うだけでチートできるようなのは対策マスト
    • 他ユーザーに影響が及ぶようなチート、脆弱性は防ぎたい
    • 他ユーザーのアイテムの使用、サーバーが落ちる(DoS)など

    View full-size slide

  29. まとめ
    • ゲームアプリの診断は他のアプリケーションの診断に比べてめ
    んどうくさい
    • 高レイヤーと低レイヤーに両方に触れられるのは面白い!!
    • クライアントサイド、サーバーサイド両方で対策を行う必要が
    あり、めんどうくさい
    • 多層防御が重要

    View full-size slide

  30. おしまい

    View full-size slide