Web担当に異動してからの数々の功績によって、星野君はすっかり「社内のセキュリティ何でも屋さん」状態だ。いままでに発見し対処してきた脆弱性は、SQLインジェクションにクロスサイトスクリプティングなど有名どころを一通り。今日はひさびさの休日。飼い猫たちとのんびり、ゴロゴロしていると……。
今日は日曜日。星野君は自宅でゴロゴロしていた。山下君が家にやってくる予定なのだが、約束の時間まであと1時間くらいある。特にすることもないので、飼っている猫のクロとシロと遊んでいた。
クロはやんちゃで自由奔放、シロはおとなしくかなりの甘えん坊と、まったく正反対の性格の猫だ。星野君がシロと遊んでいると、クロが邪魔をしてくる。「そうかそうかこっちもかまってやらねば」と思ってクロの方に注意を向けると、途端に「興味なんてないもんね」といっているかのようにそっぽを向いてしまう。そんないつもの光景だった。
「ピンポーン」
玄関でインターホンが鳴ると、クロは玄関に向かって走っていった。玄関を開けると、山下君が立っていた。
星野君 「お、早かったね」
山下君 「うん。ちょっと寄り道して買い物するつもりだったんだけど、定休日だったみたいで」
星野君 「ま、取りあえず上がってよ」
山下君はクロをひょいっと抱えると部屋に入っていく。
星野君 「昨日、新しくFlashゲーム完成させたんだけどやってみない?」
山下君 「おっ。いいねぇ。どんなの?」
星野君 「ま、カンタンなやつなんだけどさ。まずね……」
星野君は山下君にゲームの内容の説明を始めた。ルールは至って簡単なものだ。プレーヤーは自分のキャラクターに対して能力を設定し、敵と戦闘する。戦闘を重ねて経験値がたまるとレベルが1つずつ上がっていく。敵には、デフォルトで用意されている敵データと、ほかのユーザーが登録したデータとの2種類がある。これらの敵との戦闘に勝利していくことで自分のランクが上がっていくというものだ。
山下君 「へぇ〜。また凝ったもの作ったね。ちょっとだけやってみる〜。クロ、おいで〜」
山下君は、クロをひざに乗せると星野君が作ったゲームをやり始めた。クロはなぜだか山下君にとてもなついている。飼い主である星野君にはいまだにまったくなついてくれず、ひざの上に乗ってきたことなど一度もない。あそこまでべったりなついていると、飼い主としてなんだかやるせない気持ちになってしまう。なんとか、クロの気を引こうと頑張ってみるものの、クロは山下君にご執心で、星野君のことなどまったく気にも留めないようだった。
山下君 「これって、昨日作ったゲームっていってたよね!?」
星野君 「え?うん。そうだけど……?」
山下君 「そうなんだぁ。それにしちゃ、上位ランクの人たちがあり得ない数字たたき出してるみたいだけど……」
星野君 「え?うっそ??」
星野君がランキングデータを確認してみると、レベルが1000を超えているデータが上位にランクインしていた。いくら頑張っても、1日で50までレベルを上げるのがやっとのはずだ。しかも、ランキング1位のキャラクターには、レベル1000の強豪たちを凌いでレベル1のキャラクターが君臨している。
星野君 「えぇっ!これ絶対何かおかしい……」
山下君 「データを書き込む部分にバグがあるんじゃない?」
星野君 「その部分は、前に作ったゲームで使ってたやつをそのまま持ってきてるだけだから、特に新たなバグがあるとは思えないんだけどなぁ……」
山下君 「じゃあ、どこかで書き換えられてるとかじゃない?」
星野君 「Flashの中でデータをやりとりしてるから、外からは見えないと思うんだけどなぁ」
山下君 「パケットとか眺めてれば見えちゃうんじゃない?ねー、クロ♪」
クロ 「にゃにゃー」
山下君はクロと戯れ始め、星野君の話を半分しか聞いていないふうであった。だが、この一言で星野君は気が付いた。
星野君 「(そうか……。これもWebアプリケーションなんだから、検査補助ツールを使えば通信内容を見られるのかも……)」
Flashを利用していると忘れがちだがHTTPで通信を行っているので、ほかのコンテンツと同様、検査補助ツールで通信をインターセプトすることが可能である。
サーバ側のWebアプリケーションはだいぶ昔に作ったものだ。新しくFlashでゲームを作るときも、昔に作ったFlashから流用しているだけ。当然、サーバ側のWebアプリケーションは汎用的に作られているのだが、汎用的な分、セキュリティをまったく考えてない作りになっていたような記憶が微かにあった。
Copyright © ITmedia, Inc. All Rights Reserved.