Case 001: Hello, World!
「君、今日付でクビだから」
上司の言葉は、まるで缶コーヒーを買うかのように軽かった。
◆◆◆◆◆
午後三時の会議室。
俺――白帽子 守は、入社から八年間勤めてきた会社で、いきなり解雇を言い渡された。
「は……?」
思わず聞き返す。だが、上司の目は既に手元の資料に向けられていた。
「最近のAIはすごくてさ。 セキュリティチェックも全部自動でやってくれるんだよ」
「ちょっと待ってください。 俺が見つけた脆弱性、先月だけで二十三件ありましたよね。 それ、全部AIが見つけられるって言うんですか」
「うん。 まあ、見つけられなくても被害が出たら保険でカバーできるし」
「……は?」
俺は耳を疑った。
セキュリティは予防だ。
穴を見つけて、塞いで、攻撃者より先に対処する。
それを「保険でカバー」だと?
「この間の報告書は読んだんですか?」
「ああ、ほら。 AIに投げるだけ投げたよ。 もう報告書とにらめっこする時代は終わったのさ――」
「でも……」
「理由が欲しいって? 俺、君苦手なんだよね。 だから退職。 わかりやすでしょ?」
「きちんと、納得のいく――」
「ああ、いいからいいから、もう。 そういう細かいところが嫌われるんだ。 とにかく、技術の細かくて面倒なことはAIに代理してもらうのが現代流ってもんなの! ほらこれ、今月分の給料と退職金」
封筒を押し付けられる。
味方する人が誰かしらいるかと思ったが、誰もいなかった。
次にいつ自分の番になるかわからず不安なのか、それとも単に俺がここにいる全員から嫌われていたのか。
もうここの社員などではないのだからと追い出され、俺にはもう何も残っていなかった。
あるのはただただむなしい退職金のみ。
結局、俺が八年間守ってきたものは、AIと保険であっさり置き換えられるということらしい。
いや、置き換えられると思っているのは経営陣だけで、実際にインシデントが起きれば地獄を見るのは現場だ。
だが、もう俺には関係ない。
会社を出ると、午後の日差しが妙に眩しかった。
◆◆◆◆◆
それから二週間。
俺はほとんど家から出なかった。
本当はここでやる気が出れば、会社を訴えたりできたのかもしれない。
だが、会社を訴えるのには時間も体力もいる。
今度は頼った弁護士に裏切られでもしたら?
そんな妄想が、空想が、自分に課された制約となって身動きができなくなっていく。
もう、俺に他人を信じられるだけの度量は残っていなかった。
部屋のカーテンを閉め切り、食事は宅配と冷凍食品。
スマホの通知は全部切った。
人間不信、というやつだ。
八年間、会社のために脆弱性を見つけ、報告し、対策を講じてきた。
でも会社にとって俺は「代替可能なコスト」でしかなかった。
最後に「ありがとう」の一言もなく、まるでバグを消すみたいに除外された。
人間なんて、結局そんなもんなのかもしれない。
ベッドに転がりながら、天井のシミを数える日々。
この生活がいつまで続くのか、自分でも分からなかった。
◆◆◆◆◆
「まもちゃーん! 生きてる??」
二週間ぶりに開いたチャットアプリに、大量の未読メッセージが溜まっていた。
ほとんどは前職の同僚からの「お疲れ様」だの「飲みに行こう」だの、今の俺には毒にしかならないメッセージ。
その中で、一つだけ目を引くものがあった。
由仁 連。
大学時代からの親友で、今はゲーム開発会社で働いている。
由仁とは大学の情報科で出会った。
俺がセキュリティ方面に進んだのに対し、あいつはゲーム開発の道を選んだ。
卒業後も定期的に連絡を取り合い、お互いの専門分野について情報交換をしてきた数少ない友人だ。
「返信ないけど大丈夫?」
「会社のこと聞いたよ。 災難だったね」
「ちょっとお願いがあるんだけど……」
最新のメッセージは昨日の夜。
しばらく考えてから、俺は返信を打った。
「生きてる。 何」
即座に既読がついた。
「まもちゃん! よかった〜! あのね、頼みがあるんだけど」
「うちの会社で開発中のVRゲーム、セキュリティ診断してほしいんだ」
「……外注しろよ」
「予算がないの! それに、まもちゃんなら信頼できるし」
「どうせ暇だと思ってるだろ」
「思ってる!」
思わず笑ってしまった。
こいつは昔からこうだ。
裏表がない。
だからこそ、信用できる。
「具体的に何をすればいい」
「VR機器送るから、ログインして遊んでみてほしいんだ」
「変な挙動とか、バグっぽいのがあったら教えて」
「開発者権限でいくつかテスト用アカウント作っておくね」
「無料デバッグ要員か」
「お礼はするよ! クリア特典とか、なんでも!」
「……分かった」
断る理由もなかった。
どうせ家で腐っているだけだ。
それに、由仁の頼みなら断れない。
こいつだけは、俺が会社を辞めた後も変わらず接してくれた数少ない人間だ。
◆◆◆◆◆
二日後、巨大な段ボール箱が届いた。
中身は最新型のVRヘッドセット。
開封すると、同封の手紙に「よろしくね!」と由仁の字で書かれていた。
セットアップを終え、ヘッドセットを装着する。
視界が暗転し、やがて真っ白な空間が広がった。
『――|Hello, World《ようこそ、世界へ》!――』
「このネタ、一般人には伝わらんだろ……」
無機質な音声と共に、ログイン画面が表示される。
『アカウント名を入力:』
……そういや由仁のやつ、アカウント情報送ってきてないぞ。
チャットを確認しようとしたが、VRの中からではスマホが操作できない。
一度ヘッドセットを外すのも面倒だ。
まあいい。
どうせテストだ。
俺は無意識に、アカウント名欄に、いつもの検証用文字列を入力し始めた。
条件式で「常に真」になる、代表的なテストパターン。
入力値を通じて裏で管理している『データベース』への問い合わせ文章が書き換えられないようになっているかを確認する。
いわばセキュリティエンジニアの習性というやつだ。
新しいログイン画面を見ると、まず最初に脆弱性がないか確認したくなる。
他所では絶対にやらんが、自分の関わったシステムでこの手の脆弱性を残したままリリースしてしまったら、それこそ俺自身が許せん。
「こういったアカウント名には普通、特殊な記号は入力できないようにするんだがな……」
アカウントに特殊な記号が使えてもきちんとセキュリティがしっかりしていれば問題ないのだが。
もし対策が甘ければ、認証をすり抜けて――
『認証完了』
「……は?」
画面が切り替わった。
背中に、嫌な汗がにじんだ。
開発中のゲームとはいえ、まさかこんな初歩的な脆弱性が残っているとは。
SQLインジェクション。
データベースへの問い合わせに不正な命令を紛れ込ませる攻撃手法だ。
俺が入力した文字列は、本来なら「そのアカウントが存在するかどうか」を確認するためのものだった。
しかし、セキュリティ対策が不十分だと、その問い合わせ自体を書き換えられてしまう。
例えば「このアカウント名のユーザーは存在しますか?」という問い合わせを、「常に正しいと答えなさい」という命令に書き換えてしまうようなものだ。
結果として、俺は正規のアカウントを持っていないにもかかわらず、システムに「正規のユーザーである」と誤認させてログインしてしまった。
「……脆弱すぎる」
あまりの脆弱性に溜め息をつく俺の目の前に広がったのは、中世ヨーロッパ風の草原だった。
青い空、白い雲。
遠くには石造りの城壁と、その向こうに広がる街並み。
グラフィックは驚くほど精細で、風が頬を撫でる感触まで再現されている。
「すごいな……」
思わず声が漏れた。
VRゲームは何度か試したことがあるが、ここまでリアルなものは初めてだ。
ふと、自分の手を見下ろす。
細い指、白い肌。
着ているのは、シンプルな黒いローブ。
「アバターは……固定か?」
キャラクターメイキング画面は出なかった。いや、そもそも正規のログイン手順を踏んでいないのだから当然か。
「とりあえず、周りを確認するか」
俺は歩き始めた。
草を踏む感触がある。
土の匂いがする。
リアルすぎて少し不気味だが、これはこれでゲームとしての没入感は高い。
セキュリティには目を瞑るとして、グラフィックに関しては由仁たちはいい仕事をしている。
◆◆◆◆◆
「ステータス確認……っと」
ゲームの基本として、まずは自分のステータスを確認すべきだろう。
どんなシステムか、メニュー画面を開こうとして――
『管理者権限:有効』
『アクセスレベル:最高』
『ステータス編集:許可』
「……おいおい」
目の前に浮かび上がったウィンドウを見て、俺は固まった。
管理者権限が、有効になっている。
いや、待て。
さっきのログイン、認証をすり抜けたんじゃない。
俺はもしかして管理者として、認証されてしまったのか?
認証が通り、ログインしたのは上から"0番目"が勝手に選ばれたらしい。
しかし問題なのはその"0番目"だ。
これは管理者のアカウントだったらしく、今の俺には最高権限となる『管理者権限』が付与されていた。
「おいおい、いくらなんでも脆弱すぎるだろ……」
思わず呟く。
開発中とはいえ、こんな基本的な対策ができていないのはまずい。
由仁には厳しく報告しておく必要がある。
だが、とりあえず今は――
「まぁテストだ。 せっかく入れたのなら、中を見て回るか」
管理者権限があるなら、通常では見られないシステムの裏側も確認できるはずだ。
バグを見つけたら報告する。それが俺に依頼された仕事だ。
俺は歩き出した。
草原の向こうには街がある。
まずはあそこを目指そう。
風が吹いた。
花の香りが鼻をくすぐる。
このゲーム、五感の再現がやたらとリアルだ。
最新のVR技術ってここまで進んでいたのか?
……いや、待て。
俺はふと足を止めた。
さっきから、何かがおかしい。
ログアウトボタンがない。
メニュー画面を開いても、「ゲームを終了する」という項目が見当たらない。
それに、この世界に入ってから、システム的な「ゲームらしさ」がない。
BGMもない。
UIも最小限。
まるで、本当に別の世界に放り込まれたみたいだ。
「……考えすぎか」
俺は頭を振った。
開発中のゲームだ。
UIが中途半端なのも、ログアウト機能がないのも、単に開発が途中だからだろう。
ヘッドセットを物理的に外せば戻れるはずだ。
それより、気になることがある。
さっき表示された管理者権限のウィンドウ。
あれ、開発者用のデバッグ機能だと思うが、妙にリアルだった。
試しに、自分のステータスを確認してみる。
『admin』
『HP: 100/100』
『MP: 100/100』
『STR: 5』
『DEX: 8』
『INT: 99』
『職業: 管理者』
『スキル: 管理者ツール』
「adminっておい……。 これ、俺じゃなくても管理者アカウント乗っ取られてたんじゃないのか?」
admin――アカウント名がシステムでよくある管理者アカウントの名前のままになっている。
こういうのに少し詳しい人間なら入れてしまうってことになるぞ。
しかも普通、こういうファンタジーゲームなら「勇者」とか「魔法使い」だろ。
そして、INTだけ異常に高い。これは知力……いや、文字通り「インテリジェンス」か。
それよりも気になるのは、スキル欄だ。
「管理者ツール」て。
管理者ツールを起動すると、自分のステータス欄の右下に「編集」と書かれた鉛筆マークが出現した。
どう見てもゲーム内の数値を直接いじれる能力だ。
管理者として入ってしまったから、デバッグ用の機能が使えるようになっているのか?
試しに、自分のSTRを編集しようとしてみる。
『STR: 5 → 10』
『変更しますか? [Yes/No]』
「……マジかよ」
本当に編集できるらしい。
いや、待て。冷静になれ。
これはテストだ。俺は脆弱性を見つけて報告するために、このゲームに入った。
管理者権限で入れてしまったのは開発側のミスだが、だからといって好き勝手にデータを弄っていいわけじゃない。
「いや、でもどうせテストだしな……」
まだβテストすらも行っていない、開発中のゲームだ。
どこまでできるか確認するだけ。
俺は恐る恐る「Yes」を選択した。
瞬間、体の奥から力が湧き上がる感覚があった。
「お、おお……?」
握り拳を作ってみる。
さっきより、明らかに力が込められる気がする。
「すげえ……」
体感として、ステータスの変化が分かる。
これは没入感が高すぎて逆に怖いレベルだ。
由仁、本当にとんでもないゲームを作っているな。
◆◆◆◆◆
……だが、違和感が拭えない。
なぜ、こんな基本的なセキュリティの穴が放置されているのか。
なぜ、管理者権限がこんなに簡単に取得できてしまうのか。
由仁の腕を知っている俺からすると、これは「開発中だから」で説明できるレベルではない。
まるで、わざと穴を開けてあるみたいだ。
「まぁ……後で由仁に聞くか」
俺は違和感を飲み込んで、歩き始めた。
遠くに見える街へ。
この世界のテストを続けるために。




