せきゅぽろ 14

まずは、昨年、シマンテック社主催で開催された高校生向けの CTF、「シマンテック サイバーセキュリティチャレンジ」に参加した札幌国際情報高校の「もやしーず」と、ネットエージェントの松田和樹さんのパネルディスカッション、だったんですが、全編オフレコという事で、内容に関してはなにも書けません。

う〜ん、どうなんだろう。オフレコにしなきゃいけない程の事だったんですかねぇ >シマンテックさん。

で、後半は松田和樹さんによる、「オンラインゲームにおけるセキュアコーディング」ということで、ゲームの「チート」(「ズル」の類)をテーマにしたセキュリティのお話しでした。

チート自体は、かつては、国内でのゲームが専用ゲーム機に偏っていた事もあって、PC でのゲームが盛んだった海外に比べると少なかったのが、最近は急激にカジュアル化しているそうです。

で、典型的なチートの例として、ニセのハイスコアをたたき出す、という話で、URL のパラメータにスコアそのものがあったり、json のデータに埋め込まれていたり、といった、「改ざんして下さい」と言わんばかりの例もあったり、じゃぁ、そういった事を防ぐために具体的にどんな方策があるのか、といった話から始まりました。

で、改ざん防止にリプレイデータを、と思っても、「で、そのリプレイデータって本物?」ということで、例えば、人脈を駆使して本当にうまい人にやってもらう、といったソーシャルハッキング(?)もあれば、Bot による自動操作や、自動操作が難しいゲームに関しては、プログラムのメモリ空間を監視や、API のフックを使ったツールを作って、プレイの補助をさせる、といった事まであるそうです。そこまでがんばれば、そのハイスコアも努力の結果と言えなくもないですが...

で、オンラインゲームに求められるセキュリティ、という事になるのですが、実は、個々の必要な対策はゲーム固有のものでは無い、といった印象でした。それを如実に表している言葉が「クライアントからの通信は一切信用してはいけない」。

ゲームに限らず、ネットワークに関連するプログラムなら、当然の前提です。昨今だと、通信に限らず、データファイルを読み込む時でも、矛盾のあるデータが入っているかもしれない、という事を意識しておかないと、単なるバグのつもりがセキュリティ上の脆弱性となるご時世です。入力データが正しいかどうか、矛盾する通信や、あり得ない手順の通信に対してきちんとブロックできるか、トランザクション処理のように排他が必要な処理を適切行っているか、といった、セキュアプログラミングの基本とも言えるお話でした。

ただ、これらが、特にオンラインゲーム業界できちんと出来ていない事には、ちょっと業界特有の事情もあるようです。

元々、専用ゲーム機でゲームを作っていたようなところから、オンラインゲームの世界に入ってくると、必要なスキルが違ってきます。例えば、

  • クライアント/サーバ型のシステム
  • ネットワーク・通信
  • データベース
  • 運用管理

といったスキルが必要になってきますが、これらの技術は元々、セキュリティ問題が普通に存在する分野です。自分はゲームの開発は全く無縁で、サーバの構築・運用が仕事としては多いですが、そこから見ると当然気にするポイントの事が、「ゲームを作る」とこから始まっている人には、なかなか理解されていない、という現実があるようです。まぁ、これはゲーム業界に限らず、例えば組み込み業界も、同様の問題があったり、多かれ少なかれ、「開発者」はセキュリティに無頓着、というのはありますね。

あと、オンラインゲームの場合は、サービス・インがスタートラインで、しかも、定期的に人を惹きつけるためのイベントを打ったり、と、充分にセキュリティに時間・コストをかけられない、という業界の事情もあるようです。

ということで、セキュアコーディングの基本が大切、というのを再認識するお話しでした。

時間が足りなくなって、ちょっと尻切れトンボになったのが残念でしたが、セキュアコーディングの基本を押さえたスライド資料だったので、公開できる範囲で公開してもらえると、教科書として良さそう、と思いました。

途中、ネタとして登場した、「ポケットモンスター ピカチュウバージョン」にある、任意の Z80 バイナリが実行できる脆弱性はすごかった。これ、CVE 番号とか、JVNDB 番号とか付かないんですかね(^^;