Tech

キャットフーディング通信 Vol.2 – J.B.AUDIT

公開

気づいたら切れていた、をなくしたい。

「SSL証明書、来週で切れますよ」と、お客様から教えていただいたことはありませんか?

運用の現場にいると、そういうヒヤッとする瞬間は意外と身近にあります。

Webサイトを長く運用していると、証明書の期限、ドメインの更新日、PHPやCMSのサポート終了日など、「いつか必ず来る日」がサイトの数だけ増えていきます。どれも忘れたころにやってきて、気づいたときにはだいたい手遅れ。

そして「いつか」は、期限のように予告してくれるものばかりではありません。

2026年10月、PHPそのものに見つかった脆弱性「PHP2Shell」(CVE-2026-109618 / CVE-2026-109619)が、世界中を騒がせました。認証なし、細工したリクエストひとつで任意のコードを実行されうるもので、CVSSは9.2。PHP-FPMやmod_phpなど、Webリクエストを処理するほぼすべてのPHP環境が対象です。公開前から悪用の試みが観測され、修正版(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)が出た今も、対応は続いています。

PHPで動くサイトをたくさんお預かりしている私たちにとっても、もちろん他人事ではありません。「どのサイトが、どのPHPで動いていて、もう対応したのか」。それにすぐ答えられることの大切さを、あらためて思い知らされた出来事でした。

今回はそんな「いつか」を、ちゃんと「いつ」にするために作ったプロダクトのお話です。

にゃるそっく。

Vol.1(J.B.STREAM)でもご紹介しましたが、J.B.Goodeには自分たちで作ったものを、まず自分たちで使ってみる「キャットフーディング」という文化があります。ドッグフーディングの、猫版です。

Vol.2の今回は、Webサイト統合セキュリティ・資産監視プラットフォーム「J.B.AUDIT(ジェービー・オーディット)」をご紹介します。猫が監視するので、にゃるそっく。

まだ完成品ではありません。たぶん、ずっと完成しません。それくらいでちょうどいいと思っています。

構想 – カレンダーは、守ってくれない。

私たちは多くのクライアントサイトの構築と運用をお預かりしています。サーバもCMSも、証明書の発行元も、サイトごとに少しずつ違います。

その一つひとつに、異なる締め切りがあります。

  • SSL証明書の有効期限
  • ドメインの更新期限
  • PHPやWebサーバー、OSのサポート終了(EOL)
  • WordPressなどCMSのバージョン
  • 日々公開される脆弱性

これらをカレンダーとスプレッドシートで管理することもできます。でも、カレンダーは入力されたことしか知りません。証明書が自動更新に切り替わったことも、明日公開される脆弱性のことも。

だから、発想をひっくり返しました。人が記録しに行くのではなく、サイトの方から教えてもらう。

もうひとつ大事にしたのは、「危ないよ」だけで終わらせないことです。アラートは出せば出すほど、読まれなくなります。何が危ないのか、何をすればいいのか。そこまでをセットで届けたいと考えました。

入口は軽く、奥は深く。

URLだけで始められる手軽さは、J.B.AUDITの入口です。でも、ゴールではありません。

たとえばPHP2Shell。外から見えるのは、せいぜいHTTPヘッダーに出るPHPのバージョンまでです。そのヘッダー自体が隠されていることも多く、ディストリビューションが修正をバックポートしている場合は、バージョン番号だけでは対応済みかどうかを判断できません。緊急度も重要度も高い脆弱性ほど、URLだけでは答えきれないんです。

だからJ.B.AUDITは、渡される情報が深くなるほど、診断の精度が上がる設計にしています。

  1. URLだけ:外から見える期限・バージョン・既知の脆弱性をチェック
  2. 環境情報を登録:CMSやPHPのバージョン、ホスティング基盤を補い、外から見えないサイトも照合
  3. プラグインやサーバーと連携:内部のパッケージやプラグインまで把握し、「もう対応したか」まで確かめる

2と3は、今まさに作っているところです(詳しくは「今後の展望」で)。URLはあくまで入口。そこから先は、サイトごとに必要な深さまで潜っていけるようにしています。

概要 – URLをひとつ、渡すだけ。

J.B.AUDITは、管理しているWebサイトの「期限」と「弱点」をひとつの画面に集め、自動で診断するクラウド型のプラットフォームです。サーバーに何かを入れる必要はありません。URLを登録するだけで、外からそっと健康診断を始めます。

できること

  1. 期限とバージョンの自動チェック ── SSL証明書、ドメイン、Webサーバー・PHP・OSのEOL、WordPressのバージョンを調べます。証明書は発行元から自動更新かどうかを見分け、手動なら30日前、自動なら7日前に声をかけます。
  2. 「本当に狙われている」脆弱性との突合 ── 米国CISAが公開する、実際に悪用が確認された脆弱性カタログ(KEV)を自動で取り込み、各サイトの構成と照らし合わせます。世の中の脆弱性すべてに振り回されないための、優先順位の物差しです。
  3. AIが書く、対応の手引き ── 警告が出たら、Geminiが「何が危ないか」「勘違いしやすいポイント」「恒久対応」「すぐにできる暂定策とその副作用」をまとめます。エンジニアでない方にも読める言葉で。
  4. WAFに弾かれたら、正直にそう言う ── スキャンがWAFやレート制限でブロックされたとき、うっかり「WordPressではない」と判定せず、「判定できませんでした」と表示します。わからないことを、わからないと言えるツールでありたいんです。
  5. 毎朝の定期健診と、いつでもの再検査 ── 毎朝9時に全サイトを自動スキャン。気になるときは「今すぐスキャン」ボタンひとつで。警告は Slack・Google Chat・メールへ届きます。

進捗や結果はリアルタイムで同期されるので、何人で同じ画面を見ていても、全員が同じ「今」を見ています。

技術スタック – 小さく寝て、呼ばれたら起きる。

構成は、Google Cloudのサーバーレスで、必要なときだけ動く形にしています。普段はすやすや寝ていて、画面のボタンか毎朝のスケジューラーに呼ばれたときだけ起きて、仕事をしてまた寝る。猫みたいですね。

必要なときだけ起きる、サーバーレスの監査パイプライン

画面のボタンか毎朝のスケジューラーがスキャンを起こし、結果はFirestoreを通じて全員の画面と通知先に届きます。

役割技術
ダッシュボードHTML5 / Tailwind CSS / JavaScript(ES Modules)/ Firebase Web SDK v11
ホスティングFirebase Hosting
データ・状態管理Cloud Firestore(双方向リアルタイム同期)
スキャンの起動Cloud Functions(Gen2)+ Eventarc
スキャンエンジンPython 3.11 / Docker / Cloud Run Jobs(東京リージョン)
定期実行Cloud Scheduler(毎朝9:00)
AI解説Gemini 3.8 Flash(モデルは差し替えていく前提)
外部データCISA KEV / OSV(CVE)/ endoflife.date / WHOIS / TLS接続
通知Slack / Google Chat / メール

細かいところでは、1サイトのつまずきで全体を止めないことに気を配っています。通信にはすべて数秒のタイムアウトを設け、例外はサイトごとに切り離しています。画面側も、進捗が2分止まったら自動でリセットします。地味ですが、運用ツールは地味なところで信頼されると思うんです。

AIは、何を使うかより、どこに置くか。

いま解説を書いているのは、Gemini 3.8 Flashです。毎朝すべてのサイトをスキャンし、警告のたびに解説を書くので、まずは速さとコストを優先しました。

ただ、PHP2Shellのような脆弱性で求められるのは、要約の速さよりも、「この環境で本当に危ないのか」「この暂定策で何が壊れるのか」を見極める深さです。間違えると困る文章ほど、強いモデルに任せたい。

そこでAIの部分は、特定のモデルに縛られない作りにしていきます。日々の一次解説は軽やかなモデルで。緊急度の高い脆弱性の分析は、推論の強いモデルで。そんな使い分けです。

その候補として、いまいちばん気になっているのがClaudeです。どれがいちばんかは、たぶん半年後には変わっています。だからこそ、いつでも乗り換えられる形にしておきたいんです。

今後の展望 – 外から見る、のその先へ。

URLだけで始められるのがJ.B.AUDITの良さです。ただ、外から見えるものには限りがあります。次のフェーズでは、「URL以外の情報で、診断の精度を上げること」と「複数の企業で使えるようにすること」に取り組んでいきます。

診断を、もう一歩深く

  • 環境情報の手動補完:CMSやPHPのバージョン、ホスティング基盤、サイトの重要度(Tier 1〜3)をあらかじめ登録。WAFで外から見えないサイトも、EOLと脆弱性の照合を続けられるようにします。
  • WAFと仲良くする合言葉:専用のシークレットヘッダーを付けて、IPを固定しなくても安全に通してもらえる仕組みを用意します。
  • WordPress用コネクタープラグイン:軽量なプラグインとAPIトークンで、外からは見えないプラグイン一覧とその脆弱性まで把握します。
  • サーバー内部の監査:読み取り専用の安全な連携で、データベースやOSカーネル、パッケージの修正状況など、外から取れない情報も診断の対象にします。PHP2Shellのようなケースで「本当に対応済みか」を答えるための本丸です。
  • AIモデルの使い分け:日々の解説は軽やかなモデル、緊急度の高い脆弱性の分析は推論の強いモデル。Claudeをはじめ、複数のモデルを差し替えられる形にします。

みんなの画面から、あなたの画面へ

  • ユーザー認証と権限管理:Firebase Authenticationを導入し、企業・部署・担当者ごとに見られるサイトを絞り込めるようにします。その先に、私たち以外の企業でも使えるマルチテナントでの提供を見据えています。

やりたいことはたくさんあります。でも、目指すところはずっと同じです。「気づいたら切れていた」を、ひとつでも減らすこと。

おわりに

セキュリティは、何も起きないことが成果です。うまくいっているときほど、誰にも気づかれません。
だからJ.B.AUDITは、目立たない場所で、毎朝そっとサイトを見回っています。屋根の上の猫みたいに。
今日もにゃるそっく中。

■ エンジニア・デザイナーの方へ

つくって、使って、またつくる。そんなキャットフーディングを、一緒に楽しんでくれる仲間を探しています。まずはカジュアルにお話しましょう!
カジュアル面談の応募はこちら

■ 制作・開発・運用のご相談をご検討の方へ

「管理しているサイトが増えてきて、期限やバージョンの把握が追いつかない」。そんなお悩みがあれば、ぜひ一度ご相談ください。
お問い合わせ・ご相談はこちら

J.B.Aki

CBO(最高ブランド責任者)です。
ブランド戦略の立案・推進を担い、企業の思想や価値を考え、実行しています。