
PHP脆弱性問題にはじまり、セキュリティが重要視されてるなかで個人ゲームスタジオの運営を考える
こんにちは、よなです。
2児のパパです。育児のかたわら、個人でゲームやアプリの制作を行っています。流行だけでなく、自分が本当に面白いと思うもの、子どもたちに喜んでもらえるような作品づくりを心がけています。
2026年10月21日、プログラミング言語「PHP」に、認証不要でリモートから任意のコードを実行され、サーバーを乗っ取られるおそれのある深刻な脆弱性が2件公表されてから、10日以上が経過しました。
私が勤めているシステム会社も例に漏れずてんてこ舞いで、世の開発会社は多忙な日々を送ったのではないでしょうか。
……というわけで、今日はちょっと技術寄りなお話をします。
これまでの記事とテンション変わるかもしれませんが、中身の人間同じですからね!?今日はちょっと真面目なだけです!
さて。
私はセキュリティ専門家ではないですが、システム開発を行っているので大事なことであることは理解しています。でもセキュリティって後回しにされがちだと思うんです。
用語が難しいし、目に見えないし、セキュリティが強くなったからってサービス内容が変わるわけじゃないからです。さらに厄介なのは、われわれ守る側が常に不利だということです。
こちらが難攻不落の要塞を築いたとして、絶対敵が入らないように周囲の道を物理的に断つとします。そしたらそのなかでは安全かもしれませんが、外部の有益な情報までも遮断してしまいます。それは避けたい。
そこで、外部と行き来できる門を設置します。もちろん誰でも入れるわけではありません。頑丈な扉を設けて、鍵をかけて、門番まで配置します。
これで安心!……と思いきや。
実はその門の鍵には、設計上の欠陥がありました。ある特殊な方法を使えば、鍵を持っていなくても開けられてしまうのです。当然、守る側はそんな欠陥があるとは思っていません。
でも、明確に攻撃意思を持った人たちからしたらどうでしょうか。何千、何万という攻撃者が、門や壁に欠陥がないか日夜探しているとしたら。欠陥が発見されれば、そこから要塞に侵入されてしまうかもしれません。
もちろん、欠陥が見つかれば修理できます。でも、ほかにも欠陥がないとは限りません。しかも、門を閉鎖したままでは外部とやり取りできない。だから守る側は、門を使える状態に保ちながら、欠陥を修理し、監視し、さらに防御を強化し続けなければならないのです。いたちごっこです。
じゃあ世の中の一般的なセキュリティ対策はどうしてんの?って話ですが、悲しいことにいたちごっこを繰り返しているんです。インターネットという世界の人たちに公開されてアクセス可能な場所というのは、常に攻撃の標的になりえます。なので、セキュリティの重大な欠陥が見つかるとIPA(独立行政法人 情報処理推進機構)などがセキュリティに関する最新情報をいち早く発信してくれます。
そういうのを社内の情シスが把握してくれ、対策を講じてくれるという感じが、よくある脆弱性への対応なのかと思います。
前置きが長くなりましたが、こういったことを会社単位で対策する場合は情シスが頑張ります。いつもありがとう、わが社の情シスたち。もちろん、現場の開発者も大変です。過去の対応で関連するプログラムがないか確認し、バージョンアップ。バージョンアップしたら、ちゃんとそのソフトが動作するかテストする。繁忙期に重なったら地獄です。
幸い、私は繁忙期に重ならず、PHPのプログラムもほとんど触ったことがないので最低限で済みました。また、セキュリティの知識も、上記で説明した程度です。専門用語はてんでわかりません。でも大事。情報漏洩、ダメ絶対。
なので、個人でゲームスタジオを運営している身からすると、どう対策を取るのかというのが重要です。セキュリティの専門家でなくてもある程度の対策は取れます。
それは『自分で全部対策しようとしないこと』です!
言い換えると、「セキュリティ対策を既存サービスに任せる」です。
私が運営している「YONA GAMES」は、個人で制作したブラウザゲームを無料公開しているサイトです。
このYONA GAMESを運営するうえで、主に2つのサービスを利用しています。Cloudflare(クラウドフレア)とSupabase(スーパーベース)です。どちらもWebサービスの開発・運営を支えてくれるサービスで、無料で利用できる範囲も用意されています。
Cloudflareは、YONA GAMESのサイトやゲームをインターネット上に公開するために利用しています。サイト本体はCloudflare Pages、ゲームの配信にはCloudflare Workersなどを使っています。そしてCloudflareには、セキュリティ対策の仕組みも用意されています。
たとえば「WAF」という機能。
これはWebサイトへのアクセスを確認し、不審なリクエストを検知したり、設定に応じて遮断したりするものです。ほかにも、短時間に大量のアクセスを送りつけてサービスを停止させようとする攻撃への対策などがあります。
さらに、YONA GAMESでは「Turnstile」という、人間によるアクセスかBotによるアクセスかを判別するための仕組みも取り入れています。もちろん、Cloudflareを使えばすべての攻撃を防げるわけではありません。適切な設定も必要です。
それでも、これらを全部自分で作ろうとしたらどうでしょう。ゲームを作るどころじゃありませんよ。もはやセキュリティ対策ゲームを作っている状態です。
もうひとつのSupabaseは、ユーザーのログイン認証やゲームのセーブデータなどを管理するために利用しています。たとえば、自分のゲームデータを他人が勝手に書き換えられたら困りますよね。
そこで利用しているのが「RLS(Row Level Security)」という仕組みです。簡単にいうと、誰がどのデータを読み書きできるのか、データベース側で制限する仕組みです。
YONA GAMESでは、基本的に自分のゲームデータだけを操作できるようにしています。また、Googleなどのログイン認証も既存の仕組みを利用し、認証機能そのものをゼロから自作しないようにしています。
もちろん、Supabaseを使っていれば何も考えなくていいわけではありません。データへのアクセス権限を間違えたり、外部に公開してはいけない秘密の情報をコードに埋め込んだりすれば、情報漏洩につながる可能性があります。サービス側が守ってくれる部分と、自分で責任を持って守る部分があるわけです。ここは重要ですね。
とはいえ、自分ひとりでサーバーの構築から認証システムの開発、データベースの管理、セキュリティ対策まで全部やることに比べれば、負担は大きく減らせます。個人開発だからこそ、こうした既存サービスを活用する価値は大きいと思っています。
さて、ここまででセキュリティ対策の一部は既存サービスに任せられました。でも問題はまだあります。
新しい脆弱性が発見されたとき、どうやってそれを知るのか?
ということです。今回のPHPのような問題は、いつ、どんな技術で発見されるかわかりません。しかも、ひとつのゲームを公開するだけでも、開発に使用するプログラミング言語やライブラリ、外部サービスなど、いろいろな技術が組み合わさっています。
そのすべてについて、最新情報を毎日チェックする。
……無理無理。いや、やろうと思えばできるかもしれませんが、そんなことをしていたらゲームを作る時間がなくなってしまいます。そこで登場するのが、ChatGPTのスケジュール機能です。
ChatGPTには、あらかじめ指示した内容を定期的に実行してくれる機能があります。私はこれを使って、IPAや各技術の公式コミュニティなどから、開発に関係する重大なセキュリティ情報を定期的にチェックするようにしています。
具体的には、重要度がHigh以上の脆弱性やセキュリティ上の問題が発表されていないかを確認し、該当する情報があれば、その内容と対策方法をまとめてもらうというものです。重大な情報がなければ、それだけを簡潔に知らせてもらいます。これなら、毎日自分で複数のサイトを巡回する必要はありません。便利な時代ですねぇ。
もっとも、AIが情報を見落としたり、影響範囲を判断し間違えたりする可能性もあります。あくまで情報収集を補助する仕組みですね。それでも、一人で何もかも追いかけるよりは、ずっと現実的です。
さらにもう一歩踏み込んだ話もします。
脆弱性の情報を入手できたとして、
「〇〇に重大な脆弱性が見つかりました!」
「そうなんだ!教えてくれてありがとう!」
……で終わってしまったら意味がありません。いや、知ること自体は大切なんですけどね。実際に影響を受けるのであれば、対策しないといけません。
とはいえ、私はセキュリティの専門家ではないので、問題の内容を理解して、影響範囲を調査して、修正して、動作確認して……。これをすべて自分ひとりで行うのは、なかなか厳しいものがあります。
そこで、AIエージェントの出番です。私はChatGPTの「dots」という、能動的に仕事を進めてくれるAIエージェントにも監視を任せています。単に情報を知らせてもらうだけではなく、そこから対策までつなげるためです。このdotsを使うには、毎月100ドル払わないといけないので、プランを落としたときにdotsだけに全部任せっきりにしないようにも考えているんですけどね。
で、たとえば、ゲーム開発に使用している技術に重大な脆弱性が発見されたとします。その場合、まずはその問題が自分のゲームに関係するのかを調べます。使っていない技術なら、基本的に直接の影響はありません。
逆に、使用している技術に問題があるなら、どこに影響するのか、どう対処するのかを確認する必要があります。そして、自分のコードやライブラリを修正する必要がある場合は、AIによるプログラミング支援ツール「Codex」を使います。
Codexには、プログラムを調査して修正したり、テストを実行したりする能力があります。そこで、dotsによる監視とCodexによる開発作業を組み合わせて、問題の発見から影響調査、必要な修正と検証まで、できるだけ自動で進められる体制にしています。つまり、
セキュリティ情報の収集 → 自分のゲームへの影響調査 → 修正 → テスト
という一連の流れを、AIに担当してもらうわけです。もちろん、すべての脆弱性がプログラムの修正だけで解決するわけではありません。
CloudflareやSupabaseのサービス側で対応する問題もありますし、自分で管理画面の設定を変更しなければならない場合もあります。そして、AIが修正したから絶対に安全というわけでもありません。
特に本番環境への反映や、データベースの変更など、重大な影響がありそうな操作は、人間による確認が必要です。セキュリティを強化するはずが、AIにゲームデータを全部消されました!なんてことになったら、笑えませんからね。
とどのつまり、完全放置で何から何まで守ってくれる魔法の仕組みではありませんが、これまで人間が何時間もかけて行っていた作業を、かなり減らせる可能性があるということです。実際、だいぶ減らしてくれてます。
一人ゲームスタジオに、AIのセキュリティ担当者とプログラマーが加わったようなものです。人を雇うのとは違って給料や人事業務が発生しないのがありがたい。いや、ChatGPTの利用料金は私が払っているので、完全に無料ではないんですけど。
というわけで、これからもYONA GAMESを安全に運営できるよう、いろいろと工夫していきたいと思います。それでは、今日はちょっと文章が長くなってしまいましたが、最近のセキュリティトレンドに便乗して個人ゲームスタジオの運営について語ってみました。
個人で私と似たようなことをしている、もしくはしようとしている人の参考になれたらうれしいです。
ではまた!
PC専用ブラウザゲーム『MINECOIN Miner』絶賛公開中!
ソシャゲ風マインスイーパーで鉱石の収集・スキルで素早く盤面攻略・深層探査などのやりこみ要素もあります!ぜひプレイしてみてください。