(レポート) 内製ツールを使ったチート診断・脆弱性診断 #denatechcon

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本ブログは2018年2月7日(水)に開催されたDeNA TECH CONFERENCE 2018のセッション、「内製ツールを使ったチート診断・脆弱性診断」のレポートです。

スピーカーは株式会社DeNAの汐田 徹也さん。

レポート

自己紹介

セキュリティエンジニア。
ミッション。
 ほぼ全てのサービスの脆弱性診断。
  オンラインモバイルゲーム、ゲームプラットフォーム、ECサイト、エンタメ系、オートモーティブ、コミュニティ、ヘルスケア...
 設計のセキュリティ面のレビュー。

DeNAの脆弱性診断について

セキュリティ部セキュリティ技術グループ。
 エンジニアだけの組織、10人弱。
 ほぼ全てのサービスの脆弱性診断を実施。
 新規のゲームがリリースされる時には2周間程度貼り付け。
 ネットワーク診断も実施。
診断チームと開発者の関わり方。
 内製ならではの大きなメリット。
  スケジュールを柔軟に設定可能。
  社内特有のフレームワークを理解して診断できる。
  診断経験を活かした設計のレビューや相談の対応が可能に。
設計レビュー、開発相談対応、脆弱性診断による検証、リリース後の情報収集。
診断対象はサーバサイドもクライアントサイドも対象。
主な診断対象。
 インジェクション、CSRF、権限、認証、チート等。
手法。
 ブラックボックス診断。
  開発環境/検証環境を使って診断。
  変な結果が出たらソースコードをもらって確認。
  権限や認証のような複雑な処理もソースコードをもらって確認。
 通信の改ざん、アプリやメモリの改ざん。
ツール。
 Burp Suite Professional,VEX、PacketProxy(内製)、IDA Pro、MemoryPatching(内製)
インジェクション系/CSRFの診断。
 自動で見れるところはスキャナ等のツールを使って自動化。
 その他はマニュアルで診断。
権限周りの診断。
 通信改ざんで本来出来ない操作ができないかを確認。
 自動化しづらいため手動で実施。
  ゲーム性によって脆弱性なのか仕様なのか違う。
 他人のメッセージが読める、他人のトレードが承認できる、他人のプレゼントボックスが受け取れる→致命的。
認証周りの診断。
 ログイン機能、SNSログイン、e.t.c.
 診断で見つけたくない、設計レビューで落としたい脆弱性。
  修正が大変。
 ありがちなパターンが存在。
  SNSのIDだけでトークンを利用していない、等。
チート系の診断。
 防げるチート。
  サーバ側のゲームロジックの実装不備。
  ゲーム特有で、結構観点出しが難しい。
   例えば、鎧を頭に装備出来てしまうとか。
   典型的なゲーム脆弱性リストを作っておくと良い。
   バリデーションミスで個数にマイナスを設定出来るとか。
 防げないチート。
  ゲームのアーキテクチャに依存。
   クライアント側にゲームロジックが存在するため。
   メモリ改ざんやバイナリ改ざん等。
   改ざんしたのか上手にプレイしたのかが区別できない。
 チート対策はいたちごっこ。
  完璧なチート対策は無い。
   最近のゲームではある程度クライアント側にロジックをもたせざるを得ない。
   諦めずに数を減らすことが重要。
    遊んでいてチーターがいるとUXが下がる。対応することがUX向上に繋がる。
  複合的に対策を導入することで改ざんを防いでいく。
 「チートはできる」ので「されにくく」する。
  されにくさって?
   攻撃の前提を上げていくこと。
   防げる攻撃者の技術レベルを仮定する。
    このレベルなら防げないけどこのレベルまでは防げる、のように。
  認証や権限管理は「されにくさ」で守るべきではない。
   アカウントの乗っ取りや他人のセーブデータを破壊することは絶対に守るべき。
   ゲームの進捗や成績の偽装、いたずらは「されにくさ」で守って良い。
 リスクコントロール。
  技術力のある攻撃者が最大限解析したら何が出来るのか、を把握する。
  人気のあるゲームは攻撃されやすい。
  リリースする国によっても変わる。
  診断者は、攻撃者が出来る攻撃を効率よく再現出来る必要がある。
 高度な攻撃者は何が出来るのか?
  サーバ側APIのパラメタを自由に設定して送信すること。
  通信上で表現できること=クライアントを解析した攻撃者が出来ること。
 高度な攻撃者を再現する。
  クライアント上での攻撃の結果は、全て通信上のパラメタで再現できる。

内製診断ツールについて

PacketProxy。
 高度な攻撃者として診断する準備。
  暗号化/難読化が解かれていること。
  各パラメタの意味がわかること。
  各パラメタを自由に改ざんできること。
  通信を自由に再送できること。
 それらを出来るようにするために作ったツール。
 HTTP以外の解析・改ざんに強い。
  TCP/UDPの通信をキャプチャ・改ざん可能。
 スマートホンの通信をProxyするためにDNSサーバを内包。
 ゲームに特化した機能。
  連射機能等。
TCP/UDPのための機能。
 ペイドードの分割・デコード・エンコードをプラグインとして実装可能。
 あらゆる通信をHTTPのように読める。
 一度誰かがプラグインを書けば他の人が引き継ぎ出来る、解析の属人性が排除出来る。
プラグイン処理の流れ。
 TCP/UDP通信を分割、デコード、エンコードする。
  意味を持つ単位でパケットを分割。
  パケットをJSON等の可読文字に変換。
  可読文字から元のプロトコルに戻す。

まとめ

DeNAでは脆弱性診断を内製で行っている。
チート対策は「されにくく」することが重要。
「されにくくする」対策を解除することで、高度な攻撃者を想定してリスクを洗い出す。
 対策を解除することが今後の対策へのフィードバックになる。
通信改ざんで様々な独自プロトコルに対応するためにPacketProxyを内製。
 実際に診断でメインに活用。  

さいごに

とても興味深い発表でした。チート対策についてはゲームのノウハウが詰まっていて面白かったです。