/var/log/Sawada.log

SAINO中毒患者の備忘録。

Defense against Game Hack with Ghidra へ参加してきました

はじめに

株式会社NinjastarsさんによるGhidraのハンズオンへ参加してきました.

f:id:takuzoo3868:20190416232413g:plain
https://www.gizmodo.jp/2018/09/tunnel-tokyo-sega-summy-co-working-space.html

品川でのお仕事を終えてから会場へGO.

会場は大崎にあるSEGA SAMMYグループのTUNNEL TOKYO.おしゃれ😳

f:id:takuzoo3868:20190416233242p:plain

目次です.今回は三部構成でした.

Game Securityの課題 by 高橋さん

近年のスマホゲーム・eSPORTsの発展により,市場の成長が大きいゲーム産業.
しかし,対策コストと被害額の相関が特にゲームは見えにくく,チート対策専門のエンジニアを雇うにはそれなりの規模をもった会社でないと厳しいのが現状というお話.ゲームのチート行為と言えば,

  • 内部メモリの書き換えによるアイテム取得・ステータス改ざん
  • 自動Botを活用したアカウントのRMT行為
  • より普及の為に改造ツールの流通

が昨今の問題例として挙げられます.1つ目については小中の頃にGame Shark(PAR)とか流行ったよなぁと思い出しました.

ゲーム業界で想定される最悪のケースとして,チートツールのカジュアル化により若年層のユーザーがチーターへ変化,対策として予定になかったメンテの増加,世界観崩壊によるプレイヤーの減少が流れとして示されていました.チート技術に明るくなくても,チート行為ができてしまうことをカジュアルチートと呼ぶのは初めて知りました.企業としたら開発投資を回収できないまま,折角作ったゲームが倒れてしまうと困るわけです.

だからこそ,ゲームアプリの脆弱性診断が重要になってきます.それに相反するようにGame Securityは 普通のソフトウェアと仕組みが異なるため,

  • 脆弱性調査も専門性が更に高く,中々人材育成の機会に恵まれていない
  • 被害額などリスクが不透明で可視化しにくい
  • ゲームセキュリティはガイドラインが定まっていない

といった課題が生じているとの事でした. 事例にAndroid Republicが出てきたり,可視化ツールPacifistaを開発中と聞いた時は突っ込んだ内容かな...と思いましたが,セールストークが多めで残念. それでも,Game Securityを専門とするNinjastarsさんは尖ってて面白い会社だなと思いました.インターンとかやらないかなぁ...

Traing Ghidraで脆弱性診断 by 齊藤さん

github.com

NSAが公開したGhidraを使ったハンズオン.
eagle0wl氏のcrackme問題集から01と04を扱い,Ghidraの機能を知ってみようという感じでした.最初の注意にもありましたが,著作権利者の許可なくリバースエンジニアリングをする行為は

等々に抵触する恐れがありますので,興味本位で他人のソフトウェアをREしてはいけません.

f:id:takuzoo3868:20190417022502p:plain
お題のcrackme01

f:id:takuzoo3868:20190417020901p:plain
ghidraを使ってCALL GetWindowTextAの該当箇所から,関数のフローを解析

IDA proには劣りますが,アセンブリデコンパイル内容をひと目で確認でき,グラフもtrue/falseがはっきり色分けされているのでわかりやすいと思いました.コードブロックの表示内容を編集できるなど,かゆいところに手が届いている印象を受けました.Ghidraを使った問題の解説については,Ninjastarsさんのブログにもある内容です.自分も大変勉強になりました.ハンズオンでは消化不足になってしまった部分について,読んで内容を吸収しつつ,crackme01~10の解説をブログに書きたいです.

www.ninjastars-net.com

www.ninjastars-net.com

Practice Cheater VS Ninjastars by 猫さん(@DoranekoSystems)

CEDEC CHALLENGE 2017の課題に単身で挑んで準優勝するなどプロの方.
twitterではお知り合いだったのですが,今回はじめてお会いすることができました.

チート行為についていくつかの具体例とその対策に関する講義形式でした.猫さんの作成した,ゆるふわ系(?)じゃんけん対戦ゲームを実例に使い解説がなされました.具体的なチート手法やツールについては,内容が内容なので記載を控えようと思います.

Memory hack

メモリに記録されているスコアを書き換え,ステータスmaxやステージ飛び,ワンパンなど古くから常套手段となっているチート行為です*1.実演では,倒せないはずの大変かわいい宇宙人をメモリ改ざんによりボコボコにしていました.

対策としては,各種パラメータの暗号化復号化を徹底すること.また,開発者以外がデバッグできないようWindowsならWindows APIのIsDebuggerPresent()やCheckRemoteDebuggerPresent()を使うこと.これについては,スマホネイティブデータにおける個人情報漏洩の危険回避から考えても大事なことだと思いました.

Datafile hack

ゲームソフトウェアをデコンパイルされ疑似ソースコードから一連の処理を把握されると,実行ファイルの書き換えられ意図しないゲーム動作を行う場合もあります.実演では,Cthulhuっぽい見た目の相手になっていました.HPデータを暗号化,更にはメモリを改ざんされた場合には検知し異常終了する様になりました.しかし,デコンパイルでゲーム処理を変更してあっさりと勝ちました...神話生物やぞ...

対策としては,とにかく耐タンパー性を上げること.具体的にはパッカーなどを利用して難読化すること.Unityならil2cppでビルドする.ファイルの改ざん検知.不要なシンボル情報を削除し,関数名などは難読化すること.

other

この他にもオンラインゲームの場合にはサーバ側との通信に仕掛けを行うPacket hack等が挙げられます.また実例では,別のアプローチからHP99999でイキっているドラゴンをボコボコにしていました.

おわりに

f:id:takuzoo3868:20190417032322j:plain

感想ですが,ちょっとセールスプッシュが強かったのと,どのセクションも駆け足でスライドが流れるように切り替わってしまったので,勉強としてインプットしたい僕としては少し残念だったかなぁと思いました.それでも,Game Securityとしてチート対策を考えたり,ghidraを使ったリバースエンジニアリングはとても楽しかったです.次回もあればまた勉強しに行きたいと思います.ではでは.

*1:完全オフラインなゲームソフトで個人の範囲で行う分には保証外の自己責任ですが,オンライン対戦などネットワークを通じて他のプレイヤーや運営とつながるゲーム形態では違法行為です.駄目です.