表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
孤島たちの城  作者: 冷やし中華はじめました


この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
1/1

―― 境界なき時代の暗闘 ――

# 孤島たちの城


### ―― 境界なき時代の暗闘 ――


> 最も堅固な城壁も、内側から開かれた一枚の扉の前では、意味を持たない。

> そして、人を孤立させて開かせたその扉は、人が再びつながったとき、ふたたび閉じる。


---


#### 目次


- 第一章 起 ―― 世界の歪みと、SOCの日常

- 第二章 承 ―― 幽霊のプロファイリングと、孤独な侵入

- 第三章 転 ―― 囮の火事と、数字のトリック

- 第四章 結 ―― 二人の最前線と、国家の三十分


---

## 第一章 起 ―― 世界の歪みと、SOCの日常


---


深夜二時の中野は、雨だった。


雑居ビルの七階、テラ・システムズSOCセキュリティ・オペレーション・センターの窓ガラスを、細かい雨粒が斜めに伝っている。眼下の中野通りは、終電を逃した人影もまばらで、濡れたアスファルトがネオンの残光を滲ませているだけだった。


桐谷健太は、その滲んだ街を背に、三台並んだモニターの中央を、ぼんやりと見つめていた。


XDRコンソール――拡張型脅威検知対応。社内のあらゆる端末、あらゆるクラウドの挙動を、一本のタイムラインに束ねた巨大な神経網。ログは、滝のように流れ続けている。ログイン、トークン発行、APIコール、ポリシー評価。一秒に何十、何百という出来事が、緑と黄色の文字になって下から上へ流れ、消えていく。その滝の中から、ほんの一滴の濁りを見つけ出すのが、健太の仕事だった。


冷めたコーヒーを口に運ぶ。苦い。三杯目だ。


部屋の片隅に置かれた古い液晶テレビが、音を絞ったまま、海外の経済専門チャンネルを流し続けていた。SOCの夜勤では、誰が決めたわけでもなく、これが点きっぱなしになっている。世界のどこかは必ず朝で、どこかは必ず修羅場だ。


そして、それを横目で眺めているのは――正直に言えば、業務上の習慣などではなかった。健太個人の、ささやかな道楽だった。


中央銀行の金利サイクル。FRBの利下げ観測。ECBの声明文の、前回からの一語の変化。ゴールド相場のトレンド。そして、原油やLNGが、世界のどこで、どの通貨で決済されているか――その答えが、ほぼ例外なく「ドル」であること。健太は、そういう「世界の血流」の動きを追うのが、昔から好きだった。経済学を学んだわけではない。ただ、巨大で、誰にも全体は見えなくて、それでいて確かに動いているこの仕組みが、深夜のSOCで一人ログの滝を見つめる感覚と、どこか似ている気がするのだ。膨大なノイズの底に、誰かの意図が、静かに脈打っている。


そして、もう一つ。健太には、職業柄しみついた、ある癖があった。いちばん大きな音のするアラートを、まず疑う。経験上、本当に危険な手は、たいてい静かだ。派手に鳴り響くものは、しばしば、別の何かから目を逸らすための囮でしかない。叫んでいるログより、黙っているログのほうが、よほど怖い――そう、彼は身体で覚えていた。


同僚には、よくからかわれた。「健太さん、また難しいニュース見てる」「それ、俺らの給料と関係あります?」と。健太は曖昧に笑って受け流す。関係ない。たぶん、何の関係もない。それでも、見てしまう。


その夜、画面の下端を、赤い相場ティッカーが右から左へ滑っていた。


『 GOLD +1.8% ―― 連日の最高値更新 』


そのすぐ上で、キャスターが深刻そうに語り、テロップが翻訳を添えていた。


『 中東・新興国ブロック、原油決済における"脱ドル"を協議か ―― ペトロダラー体制、揺らぐ 』


そして、画面の隅に小さく出ていた別のヘッドラインに、健太の目はふと吸い寄せられた。


『 来月、米国債の大量償還が集中 ―― 市場、神経質な展開に 』


二月か。その一語が、健太の胸の内で、小さく引っかかった。


健太は、ぬるくなったコーヒーのカップを、両手で包んだ。


来月――二〇二六年二月。償還の山が、ひとつの月に集中する。膨大な額の国債が一斉に満期を迎え、借り換えられる。市場が、一年で最も神経質になる時期のひとつだ。少しの不安、少しの不確実性が、普段の何倍にも増幅されて値に跳ね返る。健太はそういうカレンダーを、なんとなく頭の隅に入れておく癖があった。誰に頼まれたわけでもなく、ただの趣味として。


金が上がり、ドルが疑われ、来月は償還の山。世界中の大人たちが、いま、息を詰めているのだろう。


健太は、ふっと鼻を鳴らした。遠い国の、遠い大人たちの、遠いゲームの話だった。自分の仕事は、もっとずっと小さく、もっとずっと具体的だ。三浦さんの端末。佐藤さんのコミット。誰かの押し忘れたログアウト。世界の血流がどう流れようと、目の前のログが一滴濁れば、それを掬うのが自分だった。


そのときは、まだそう思っていた。


このちっぽけなSOCの椅子と、あの相場ティッカーと、来月のカレンダーの一点とが、一本の細い糸で繋がっているなどとは――健太は、想像すらしていなかった。彼が道楽で頭に入れていたその「二月」という一点こそが、やがて世界を救う鍵になるとは。


* * *


テラ・システムズには、もうVPNが存在しない。


三年前、経営判断で「境界防御」という概念そのものを廃止した。城壁を築いて内と外を分けるのではなく、誰であろうと、どこからであろうと、アクセスのたびに問い直す。お前は本当にお前か。その端末は本当に健全か。ゼロトラスト――信頼しない、を前提に組み上げられた世界。基盤はすべて、クラウド のエコシステムの上に築かれている。健太たちは、その思想を骨の髄まで叩き込まれてきた。


理屈の上では、美しい。城壁を破られて終わり、という古い負け方は、もうしない。


だが、その美しさの代償を、城壁の中で暮らす人間たちが日々払っていることも、健太は知っていた。経費精算をするたびに認証。資料を開くたびに認証。出張先のホテルからつなげば、見知らぬ場所からのアクセスとして条件付きアクセスに弾かれ、何度も本人確認を求められる。社内では、半ば公然と「息苦しい」という言葉が囁かれていた。


誰も信じない、という思想は、外敵には、めっぽう強い。だが、それを組織の隅々まで生きるということは、城の中の一人ひとりが、隣に座る者をも、無条件には頼れなくなる、ということでもあった。堅牢な城壁は、時として、その内側に、無数の、小さな孤島を、生む。


そして来週、その息苦しい城の天守閣に、ひとつの旗が立つ。


次世代AIスマートグリッド基盤――「Aegisイージス」。


全国の電力網をリアルタイムで最適化する、国家規模の頭脳。報道発表のたびに「日本のエネルギーインフラを十年進める」と謳われ、社内は連日、奇妙な熱に浮かされていた。リリースという名の崖が、刻一刻と近づいている。


健太自身は、Aegisの開発には直接関わっていない。だが、SOCの椅子からは、開発者には見えない景色も見える。ここ数ヶ月、Aegisは、まだ「リリース前」のはずなのに、全国の電力網から流れ込む膨大な実データを、昼も夜も呑み込み続けていた。テレメトリに刻まれるその流量は、テスト系のそれを、とうに超えている。本番前の機能が、なぜ本番さながらの実データを、ひと月もふた月も食べ続けているのか。健太は一度、それを不審に思い、運用設計のレビュー資料の片隅を覗いた。アクセス権限の都合で、全文は読めなかった。だが、その断片は、頭の隅に、小さな棘のように残った。


『 ……現行系統では並行観測シャドウモードで稼働中。本番リリース時に観測モードから実行モードへ切替カットオーバーし、蓄積された予測値を、調達・決済・国債発行原資の最適化エンジンへ一括接続する。本仕様は機密区分◯に該当し―― 』


電力の予測を、燃料の調達に。燃料の調達を、決済と、国債に。そのすべてが、いまはまだ「観測だけ」で、空回りしている。そして来週のリリースで、そのスイッチが、観測から実行へ、一斉に切り替わる。


スイッチが入った瞬間、これまで静かに溜め込まれてきた数ヶ月分の予測が、せき止められていた水のように、一気に、現実の発注と決済へと走り出す――断片は、そういう設計を匂わせていた。


電力の最適化が、なぜ国債にまで繋がるのか。健太にはわからなかった。だが、それは権限の壁の向こうの話だった。考える理由は、その夜はまだ、なかった。彼はその棘を、いつもの「テスト負荷」の引き出しに、しまい込んだ。


Aegisが「電力の頭脳」であると同時に、この国のエネルギーと財政を裏で結ぶ「血管」でもあること。その血管が、いまはまだ観測という空回りで、毒を溜めても害のない状態にあること。だが、リリースという名のスイッチが入った瞬間、数ヶ月かけて仕込まれた毒が、一滴残らず、堰を切って血流へ流れ込むこと。そして、その血流の向きが――ちょうど来月の、償還の山に向けて――変えられること。それを、健太はまだ知らない。


* * *


同じ時刻。健太の知らない、どこか遠い場所で。


男の周りに、風景は、なかった。


どこかの都市の、名前のない一室。借り上げたのか、無人のオフィスの一角なのか――それすら、意味を持たない。ブラインドは下ろされ、時刻も、季節も、外の天気も、この部屋には、入ってこない。唯一の光源は、机に扇状に並んだ、四枚のモニターだった。青白い光が、髭の伸びかけた男の横顔を、下から、照らしている。


画面の中身は、雑多で、しかし、整然としていた。一枚には、標的のクラウドへ食い込ませた攻撃インフラの、監視ダッシュボード。仕込みを配信するための、彼自身のCI/CDパイプラインの、実行ログ。もう一枚には、AIエージェントとの、対話の窓。そして――残る二枚には、標的とは何の関係もなさそうな数字が、静かに流れ続けていた。FRBの翌日物金利。レポ市場の、資金の逼迫。金と、銀の、リアルタイムチャート。米国債の、償還カレンダー。攻撃対象のトラフィックと、世界の金融指標とが、同じ一つの視界の中に、当たり前の顔で、同居していた。


手元には、とうに気の抜けた、エナジードリンクの缶。優雅さは、どこにも、なかった。どこから見ても――納期に追われ、SLAに縛られた、くたびれた一人の、リモートの技術者だった。


男に、思想はない。情熱もない。これは、ひとつの案件エンゲージメントだった。発注元があり、成果物があり、検収があり、報酬がある。そして、守るべきSLAと、動かせない納期がある。社名も、国籍も、本名も、契約書には残らない。案件上の符牒だけが要る。アヌビス。なぜその符牒なのか、男はもう、覚えていない。仕事の中身は、いたって即物的だ。組織を一つ受け取り、AIに最も薄い一点を割り出させ、そこを突く。納期までに、それを成果物として納める。それだけのことだった。


数日前、チームは、最初の成果物を確保していた。日本のあるインフラ企業の、社内コミュニケーションツールへの、静かな読み取り権限。


城壁は叩いていない。ゼロトラストは堅牢だった。叩くのは、費用対効果(ROI)に合わない。内側の人間が、何年も前に床へ落とした合鍵を、一本、拾い上げただけだ。


合鍵の先にあったのは、会話だった。金庫でも、設計図でもない。数ヶ月分の、社員のやりとり。組織の神経そのものが、検索可能なテキストとして、整然と並んでいる。攻撃の前提を組み立てるための、上質な一次データだった。


画面の分割は、几帳面だった。左の列は、標的のネットワーク。その隣は、攻撃側インフラの、デプロイ状況――ペイロードを組み上げ、配るための、彼自身のCI/CDパイプライン。緑のチェックが並び、時おり、赤が灯る。赤が灯れば、男は、小さく舌打ちをして、エラーログを追い、設定ファイルを一行、直す。標的の向こうで夜勤をしているだろうインフラエンジニアと、やっていることは、気味が悪いほど、似ていた。


右の列には、一見場違いなものが、当然のような顔で、同居していた。FRBの流動性供給の指標。レポ市場の、翌日物金利。金と、銀の、リアルタイムの相場チャート。そして、米国債の、償還カレンダー。男にとって、この案件は、テロでも、破壊工作でも、なかった。マクロ経済の、大きなうねりに乗るための――ただの、デリバティブ取引の一種だ。サイバー空間の脆さを、金融のオプションのように、静かに行使する。ただ、それだけのことだった。


判断に迷ったとき、相談する相手は、いなかった。必要も、感じなかった。彼は、盗み出したチャットログを、契約しているLLMのオーケストレーション基盤へ流し込み、プロンプトを一つ、投げるだけだ。数秒で、AIが、答えを返す。数字と、確度と、推奨アクション。男は、それを受け取り、実行する。人間を理解しているわけでは、ない。機械が弾き出した出力を、なぞっているだけだ。フィードバックをくれる唯一の同僚は、いつも、この、声のないAIだった。


男は、案件管理ツールに、短く記録を打ち込んだ。〈フェーズ1:初期アクセス確立。所要、想定内〉。攻撃面の評価は、いつも同じ結論に行き着く。組織で最も脆いのは、暗号でも、設計でもない。人間という構成要素だ。だが、それは感慨ではなく、ただの統計だった。


発注元から渡された要件は、一行だった。最終目的のみ。手段は問わない。ただし、納品条件に、厳密な指定が一つあった。作動時期。男は、指定されたカレンダー上の一点を、何度か確認した。来月の、数週間――米国債の、大量償還が集中する、あの窓。


なぜ、その時期なのか。要件定義書に、理由は書かれていない。だが、書かれていなくても、男には分かった。金融指標を並べたあの二枚のモニターが、答えを、雄弁に語っている。市場が一年で最も薄氷を踏む、その一点。そこへ、全国規模の、突発的なドル需要を、静かに、注ぎ込む。これは、破壊ではない。テロでも、ない。マクロ経済の大波に、あらかじめ張っておいた網を、合わせるだけ。仕込んだ一・五%の歪みは、その引き金。彼が行使するのは、サイバー空間の脆弱性という名の、いわば一枚の、オプションだった。ただの、巨大な、デリバティブ取引の一種。


その取引で、最終的に、誰が、何を、どれだけ掴むのか。そこだけは、男も、知らされていない。そこから先は、発注元の、領分だった。男は、詮索しない。詮索は、工数の無駄であり、契約の、範囲外だ。


急ぐ必要はない。遅れる余地もない。男は、冷めたコーヒーには、もう手をつけなかった。攻撃側パイプラインの、赤いチェックが一つ、緑へ変わるのを見届け、次のウィンドウへ、視線を移す。発注元との契約には、SLAがある。納期の遅延には、違約が、伴う。スケジュールは、オントラックだった。


AIが出力した解析結果が、画面に並んでいた。組織図ではない。職位順でもない。心理的脆弱性の、スコア順。その最上位に、一つの名前が、静かに確定しつつあった。


成果物は、予定どおり、組み上がりつつある。納期の針は、来月の一点を指していた。


それを知る者は、いまのところ、この一人の男と――この物語を読む者だけだ。


* * *


健太のSOCに、最初の小さな波紋が立ったのは、午前三時を回った頃だった。


ヘルプデスク連携のチャットに、一件の苦情が流れてきた。広報部の三浦からだった。


> 広報・三浦:すみません、こんな時間に。経費精算のSaaSから、スマホにログイン承認の通知が、さっきから何度も来るんですけど。鳴りやまなくて。寝かせてもらえないので、もう一回押したら止まるかなと思って「承認」押したら、止まりました。お騒がせしました


健太は、伸ばしかけたマウスから、手を離した。


文面を、もう一度読む。


何度も来て、鳴りやまず、止めたくて押す。その並びが、健太の中で、嫌な像を結んだ。


胸の底で、冷たいものが、ゆっくりと頭をもたげた。


これは、「うっかり」ではない。三浦は、自分が何をしたかを分かっていない。彼女から見えていたのは、ただ深夜に鳴りやまない通知という「迷惑」だけだ。だが、その迷惑の正体を、健太は名前で知っていた。MFA Fatigue。多要素認証の承認要求を、執拗に、執拗に送りつける。十回、二十回。相手が苛立ち、疲れ果て、ただこの煩わしさを終わらせたい一心で、つい「承認」を押してしまう、その一瞬を待つ。人間の根気そのものを標的にした、原始的で、恐ろしく効率的な攻撃だ。


承認要求が送れるということは。


誰かがもう、三浦のIDとパスワードを、握っている。


健太の指が、キーボードの上を走り始めた。三浦のアカウントの認証ログを、時間を遡って引き出す。果たして――そこにあった。深夜にかけて、海外のデータセンターらしきIPから、十数回。赤い「拒否」「拒否」「拒否」が並び、そして、最後のたった一回だけが、緑色の「成功」を、ぽつんと灯していた。


三浦が「お騒がせしました」と頭を下げた、まさにその瞬間が、城壁に最初の人影が滑り込んだ瞬間だった。


「やられてる……」


健太は呟き、すぐに三浦のセッションを強制的に切断した。アカウントをロックし、パスワードの強制リセットをかける。手は速かった。教科書通りの初動だ。これで、奪われたアカウントは無力化された。


だが――。


健太は、画面を見つめたまま、動きを止めた。


三浦の権限では、開発環境にも、Aegisにも、重要システムのどこにも触れない。事実、奪われたアカウントは、社内のいくつかのページを覗き、過去のチャットログを少し検索しただけで、すぐにおとなしくなっていた。何も盗めず、何もできず、退散したように見える。


収穫ゼロで引き下がった、ように見える。


健太は、冷めたコーヒーの最後の一口を、飲み干した。苦さだけが、舌に残った。


ここまでやって、収穫ゼロで引き下がる馬鹿が、どこにいる。


その違和感を、彼は当直記録に書き留めた。「広報アカウントへのMFA Fatigue攻撃を確認。初動対応済。ただし侵入の目的が不明。要追跡」。我ながら、しつこい性分だと思う。だが、この「目的が不明」という四文字こそが、後に世界を救うことになる糸口だとは、このときの健太は知る由もなかった。


彼が見ていたのは、扉の前の、雨に濡れた足跡だけだった。本物の侵入者の狙いは、三浦の権限ではない。三浦のアカウントで漁った検索履歴の奥に、誰かが何年も前に貼り付けたまま消し忘れた、一本の合鍵――古い外部連携用のAPIトークンが、埋もれていた。とっくに使われなくなった、チャット検索ボットの認証情報。なのに、全社の会話を読む権限だけが、失効されないまま、生きていた。


そして、こういう「機械の鍵」には、人間を何度も呼び止めるMFAも、条件付きアクセスも、効かない。ゼロトラストが守っていたのは「人」の扉であって、何年も開けっ放しの、機械用の通用口ではなかった。攻撃者は、三浦の足跡をわざと残し、その音のしない通用口から、会社の「会話」のすべてへ――佐藤のいる開発チャットも含めて――とっくに、滑り込んでいた。


健太が初動を完璧にこなして安堵したその夜、敵はもう、社内チャットのソファに深く腰を下ろし、佐藤という名前を、天秤に載せ始めていた。


* * *


健太が、その違和感を一人で抱えきれず、声に出したのは、翌朝のことだった。


定例の引き継ぎミーティング。健太は、たまたま会議室の前を通りかかったシニア・アーキテクトの佐藤を、半ば衝動的に呼び止めた。


佐藤のことは、噂でしか知らなかった。三年前、ゼロトラストへ移行したあの年。彼が設計を担った旧基幹システムが、深夜に大規模障害を起こし、広域のサービスが、丸一日近く、止まった。復旧の陣頭に立ち続けたのも、原因のすべてを一人で背負ったのも、佐藤だったという。社内で半ば伝説のように語り継がれる、あの一件の、当事者。


伝説には、たいてい、語られない後日談がある。彼を変えたのは、障害そのものよりも、そのあとに続いた、長い数ヶ月のほうだった、と囁く者もいた。無数の視線。「佐藤さんの設計が」という、悪意のない、それゆえに深く刺さる声。詫びて、詫びて、詫び続ける日々。――やがて彼は、誰にも弱みを見せなくなった。助けを求めることを、恥だと思うようになった。一人で、完璧に、抱え込んでいれば、少なくとも、二度と、あんなふうに衆目に晒されずに済む。そうやって彼は、自分の周りに、一枚、また一枚と、誰も越えられない壁を、築いていったのだという。


「佐藤さん、すみません、SOCの桐谷です。昨夜、広報のアカウントが一件、乗っ取られかけまして。初動は済んでるんですが、攻撃者の目的が読めないんです。Aegis周りで、最近、何か妙なアクセスや、見覚えのないコミットに、心当たりは――」


佐藤は、立ち止まりはした。だが、健太を見る目には、明らかな煩わしさが滲んでいた。三年前の障害以来、彼が「監視」という言葉に対して張りつめさせる、あの硬い壁。


「広報のアカウント?」佐藤は、薄く笑った。疲れた、皮肉な笑い方だった。「それで、Aegisのコアに何の関係が? 君らSOCは、アラートが一つ鳴るたびに、開発を止めにくる。こっちはリリースまで一週間、一秒も無駄にできないんだ」


「ノイズかどうかを、確かめたいんです。目的が不明なのが、引っかかって――」


「引っかかる、ね」佐藤は、もう歩き出していた。「君の"勘"で、こっちのスケジュールを止められちゃ困る。何か"確かな"ものを掴んだら、正式なチケットで上げてくれ。それまでは、現場を知らない人間が、外から騒がないでほしい」


そう言い残して、佐藤は背を向けた。


歩き去りながら、佐藤は、ほんのわずかに、眉を寄せた。広報のアカウントが一つ、乗っ取られかけた。普通のSOCなら、初動を済ませ、「対応済み」の判子を押して、それで終いにする案件だ。なのに、あの若い男は、わざわざアーキテクトを廊下で捕まえてまで、「目的が読めない」と食い下がってきた。答えの出た問いには、興味がない。答えの出ていない、小さな濁り一つを、しつこく気に病む。厄介なタイプだ、と佐藤は思った。――そして、心のどこか、三年前に置き忘れてきたはずの場所で、何かが、ごく小さく、疼いた。かつての自分も、たしか、そういう男だった。だが佐藤は、その疼きに蓋をして、足を速めた。いまは、リリースが、すべてだった。


会議室の硝子に映った佐藤の横顔は、健太が思っていたより、ずっと張りつめていた。あれは傲慢ではなく、何かに追い詰められた人間の顔だ――健太は漠然とそう感じたが、言葉にはできなかった。二人のあいだには、見えない勾配があった。アーキテクトと、監視員。守られる側と、守る側。その勾配を、このときの二人は、当然のものとして受け入れていた。


* * *


それから数日は、何も起きなかった。


正確には、何も「見える形では」起きなかった。


健太は、いつも通りの日常に戻った。クラウドの監視ダッシュボードと睨めっこをし、ネットワークセキュリティグループ――のルールを、一行ずつ見直してチューニングする。不要に開いたままのポート。誰も使っていないのに残された、古い許可ルール。条件付きアクセスのポリシーを微調整し、サインインログの異常スコアを眺め、誤検知を一つずつ潰していく。地味で、終わりのない、けれど誰かがやらねばならない仕事だ。


その途中、一度だけ、妙なものが、目の端をかすめた。深夜の決まった時刻に、ごく少量。Aegis関連のセグメントから、社内のどの正規サービスにも一致しない、見慣れない外部ドメインへ向けて、小さな通信が、ぽつりと出ている。健太は、一瞬、手を止めた。だが、量はあまりに微々たるもので、宛先も、それらしい体裁を取り繕っていた。テストのノイズか、よくある誤検知だろう。健太は、低リスクのキューへ、それを放り込んだ。確かめるのは、また今度。そう思って、次のルールへ移った。


その「また今度」が、何だったのかを思い知るのは、もっと、後のことだ。


その合間に、健太は時々、「目的が不明」の四文字を思い出した。気になって、自分の権限で見える範囲だけ、Aegis関連のテレメトリをこっそり覗いてみたりもした。だが、SOCの権限では、コアの深部までは見通せない。どこまでが正常で、どこからが異常なのか、判断する物差しが、自分にはない。


これが本当に異常なのか、正常なのか、自分には判断がつかない。


健太は、そこで初めて、漠然と思った。もし本当に何かがAegisのコアで起きているなら、それを読み解けるのは、あの設計を隅々まで知る人間――佐藤のような人間だけだ。自分一人の目では、絶対に足りない領域がある。それは、敗北感に似た、しかし正直な気づきだった。


健太は知らない。彼がネットワークセキュリティグループのルールを几帳面に整えているその同じ時間、遠い一室の、モニターの前では、もっと几帳面な作業が、進んでいたことを。


アヌビスのLLMは、佐藤の発言を、年単位で遡って処理し続けていた。「俺が見る」「俺が直す」「とにかく俺に回してくれ」。短い言葉の連なりの底から、三年前の傷を、機械が掘り出していく。障害。停止。責任。そして、それ以降、彼が一度も「助けてくれ」と書いていないという事実。


完璧主義者は、最も堅牢な金庫に見えて、最も孤独な扉でもある。誰にも相談できないということは、誰にも止めてもらえないということだ。


男は、その出力を、感慨なく読んだ。素体は、申し分ない。あとは、対象が一人になる夜を待つ。最も恐れる言葉を、最も信頼する声で再生すればいい。声の準備は、ほぼ整っていた。公開された講演動画から抽出した、提携先CEOの声紋。来月の窓へ向けて、工程は静かに噛み合っていた。


爆弾は、机の下で、規則正しく時を刻んでいた。社内の誰一人、その音を聞いていない。


* * *


夜勤が明けたのは、五日後の朝だった。


健太は、雑居ビルを出て、朝の中野の街に、ひとつ大きく伸びをした。


夜のあいだに雨は上がっていた。早朝の中野は、世界経済とも、ゼロトラストとも、サイバー傭兵とも、何の関係もない顔をして、いつも通りそこにあった。シャッターを半分だけ上げた中野ブロードウェイ。煮干しの匂いを漂わせ始めた、立ち食いそばの湯気。ゴミ収集車の単調な唸り。コンビニの前で缶コーヒーを片手に煙草をふかす、夜勤明けらしい作業着の男。始発を待つ列に並ぶ、化粧の崩れた女性と、まだ酔いの残るスーツ姿。


雑多で、泥臭くて、少しもドラマチックではない、ただの生活の景色だった。


健太は、その景色を、しばらく眺めていた。


ゆうべも、海の向こうでは金の値が吊り上がり、来月には国債の山が満期を迎え、どこかの大人たちが基軸通貨の覇権を巡って息を詰めている。天文学的な数字が、目に見えない場所で、轟々と流れている。


そして、その同じ世界の片隅で、立ち食いそばの親父が、今日も律儀に出汁をひいている。


結局のところ、自分が守っているのは、こういうものなのだ。健太はぼんやりと悟った。基軸通貨の覇権でも、国家のエネルギー安全保障でもない。この、取るに足らない、煮干しの匂いのする朝だ。始発を待つ誰かの、平凡な一日。それが、無数に積み重なってできている、この街。それを、目に見えないサイバー空間のどこかで、誰かが守らなければ、ある朝あっけなく消えてしまう。たぶん、自分の仕事は、そういう仕事なのだ。


健太は、立ち食いそばの暖簾をくぐった。かけそば一杯。湯気が、寝不足の顔を、温かく撫でた。


その温かさが、これから始まる十数日のあいだに、世界の血流ごと奪われかけることになるとは――かけそばを啜る健太は、もちろん、知らない。


二月は、もう、すぐそこまで来ていた。


*―― 第一章 了 ――*


## 第二章 承 ―― 幽霊のプロファイリングと、孤独な侵入


---


アヌビスは、急がない。


潜伏してからの数日、彼は「攻撃」と呼べることを、何ひとつしなかった。読んだ。正確には、読ませた。傍らのLLMに、盗み出した数ヶ月分の社内チャットを、機械的に投入し続けた。


人間は、一日では割れない。だが、一年かけて書き散らした言葉を、一晩で処理させれば、輪郭は出る。その輪郭の中から、最も薄い一点を特定する。それが、工程だった。


モニター上で、解析結果が更新されていく。組織図ではない。職位順でもない。心理的脆弱性のヒートマップ。赤く点灯した領域が、組織内で最も折れやすい個体を示す。


その最上位に、ひとつの名前が、揺るぎなく座っていた。


佐藤。シニア・アーキテクト。Aegisのコア設計責任者。


アヌビスは、AIに問うた。なぜ、この個体が最弱点なのか。


返答は、簡潔だった。対象の発言ログを、三年前まで遡れ、と。


* * *


三年前の、ある時期を境に、佐藤の言葉は変質している。


それ以前の佐藤は、よく喋った。同僚に設計を相談し、若手に冗談を飛ばし、迷いを率直に書いた。「ここ、自信ないんだよね」「誰か見てくれない?」。健康な弱音が、いくらでも記録されている。


ある一週間を境に、その種の言葉が、消える。


AIは、その一週間を、断片から再構成した。広域の、長時間のサービス障害。深夜まで続いた復旧ログ。飛び交う謝罪。責任の所在を巡る、刺々しいやりとり。中心に、佐藤の名があった。


以後の佐藤は、別の個体だった。


「俺が見る」「俺が直す」「とにかく俺に回してくれ」。言葉は短く、硬く、一人称に固定された。相談しない。迷いを書かない。「自信がない」も「見てくれ」も、三年分のログのどこにも出てこない。


AIは、それを、要約した。


> 行動ログ解析(直近三年)。発信のうち、助言・確認を他者に求める文の比率は、三年前のある一週間を境に、約一二%から〇・三%へ低下。以後、横ばい。「自信がない」「見てくれ」等の語の出現頻度――実質ゼロ。一人称単数による単独決定の表明(「俺が」「俺の責任で」)――同期間に、三・五倍。協調的なタスク配分の発話――消失。

> 攻撃シナリオ上の含意:危機下において、対象が外部へ相談を経由する可能性は、低い。単独で判断し、単独で実行する。


アヌビスは、その一文を、二度読んだ。


アヌビスは、その一文を、案件メモへコピーした。〈対象の援助要請:実質ゼロ。危機下の単独決定:確率・極めて高〉。攻撃シナリオの、最大の前提条件が、これで埋まった。感慨は、ない。チェックリストの一項目が、緑に変わっただけだ。


完璧主義者は、外形上、最も堅牢な金庫に見える。鍵は厳重で、隙がない。だが、誰にも相談しない個体は、誰にも止められない個体でもある。一人で背負う者は、止める手を、隣に持たない。それは、防御ではなく、欠陥だった。


佐藤の孤独は、鎧であり、同時に、外から狙えば一点しかない急所だった。


男は、発注元のポータルに、進捗を更新した。〈フェーズ2完了。対象特定。心理的脆弱性スコア、九八。攻撃シナリオのROI、規定値クリア〉。送信。返信は、来ない。この種の取引に、励ましの言葉はない。あるのは、検収と、入金だけだ。


* * *


アヌビスは、最後の工程にかかった。


公開された講演動画。決算説明の録音。インタビュー。それらをAIに投入する。数時間後、CEOの声が複製された。抑揚も、訛りも、息継ぎの癖も含めて。テキストを与えれば、本人と区別のつかない声が、任意の言葉を発する。


声の幽霊が、できあがった。


次は、台本だ。佐藤の心理プロファイルを参照させ、AIに組ませた。最も逆らえない権威。最も恐れる言葉。最も判断を急がされる状況。すべて、三年分の本人の言葉から、逆算された。


残る変数は、ひとつ。時だった。


画面の隅に、相場のウィジェットが開いてある。金。原油。各国の国債利回り。男がそれを見るのは、相場師だからではない。要件定義書が、作動の時期を、その一点に固定しているからだ。来月。二月。それ以上のことは、知らされていない。


発注元からの指示は、いつも通り簡潔だった。手段は問わない。ただし、仕掛けた歪みが効き始めるのは、必ずあの窓に合わせること。納品条件の、第一項だった。


なぜ、その時期でなければならないか――市場の理屈なら、男にも、分かっていた。あの二枚のモニターが、答えだ。分からないのは、その先――最終的に、誰が、何を掴むのか、だけ。だが、それは、彼の領分ではない。彼が握っているのは、設計と、納期。それだけで、仕事は、回る。


あとは、対象が一人になる夜を待つだけだ。スケジュール上の、最後の依存タスクだった。


男は、対象が一人になる夜を待った。また一つ納期に追われ、また一つ、誰にも相談できない判断を、単独で背負わされる夜を。


それは、そう長く待つまでもなかった。


* * *


その同じ数日を、健太は、まるで違う温度で過ごしていた。


「目的が不明」――自分で書いたあの四文字が、喉に刺さった小骨のように、消えてくれなかった。


日中、彼はいつも通りの仕事をこなした。クラウドの監視ダッシュボードを睨み、ネットワークセキュリティグループのルールを一行ずつ見直し、不要に開いたポートを閉じ、誰も使っていない古い許可ルールを削る。条件付きアクセスのポリシーを微調整し、サインインログの異常スコアを眺め、誤検知を一つずつ潰していく。地味で、終わりのない、平和な作業だ。


日付が、一つずつ過ぎていった。何も起きない、という事実そのものが、健太の神経を、少しずつ逆撫でした。インシデントは、たいてい、嵐のように来る。アラートが束で鳴り、ログが赤く染まり、誰かが叫ぶ。だが、今回は違った。あの夜のMFA Fatigue以来、社内は不気味なほど静かだった。攻撃者は、確かに一度、扉の前に立った。なのに、その後の足音が、ぷつりと途絶えている。撤退したのか。それとも――もう、家の中に入って、息を殺しているのか。静けさは、安心の顔をして、健太の背中を、冷たく舐め続けた。


その合間に、健太は何度か、自分の権限で見える範囲で、Aegis関連のテレメトリをこっそり覗いた。CI/CDパイプラインの実行履歴。コンテナの挙動。コミットの頻度。


だが、見れば見るほど、健太は自分の限界に突き当たった。


これは正常なのか、それとも、おかしいのか。


判断する物差しが、自分にはなかった。Aegisのコアは、あまりに巨大で、あまりに専門的で、SOCの外側からの視点では、どこまでが設計通りの挙動で、どこからが異常なのか、見分けがつかない。数字は流れている。だが、その数字が「健康」なのか「病気」なのかを読めるのは、その身体を設計した人間だけだ。


自分ひとりの目では、絶対に足りない領域が、ここにある。


それは、敗北感に似た、しかし正直な気づきだった。本当に何かを掴むには、あの設計を隅々まで知る誰か――佐藤のような人間の目が、どうしても要る。だが、その佐藤には、「現場を知らない人間が外から騒ぐな」と、すでに突き返されている。


健太は、ため息をついた。見えるのに、読めない。読める人間には、聞いてもらえない。会社という大きな建物の中で、知識と権限が、別々の部屋に鍵をかけてしまわれている。その分断こそが、いちばんの穴かもしれないのに――そんなことを、健太はぼんやりと思った。


思っただけだった。彼はまだ、その分断の向こう側で、佐藤がどれほど孤独な夜を過ごしているかを、知らない。


その数日、海の向こうの、ブラインドを下ろした一室では、アヌビスが、ただ、待っていた。新たな侵入も、新たな操作も、彼はしなかった。佐藤という対象が一人になる夜を、納品条件のカレンダーと照らし合わせ、淡々と見積もっていた。健太が静けさに苛立っていた、まさにその同じ時間。敵もまた、同じ静けさの中にいた。一方は、嵐の不在に怯えながら。もう一方は、嵐を放つ最適な一点を、感情ぬきで見定めながら。


* * *


一度だけ、健太は、その孤独を遠くから見た。


ある晩、忘れ物を取りに開発フロアへ立ち寄ると、消灯した広いフロアの奥で、一つのデスクだけに、青白い光が灯っていた。


佐藤だった。


誰もいないフロアの奥で、彼は背を丸め、二つのモニターに食い入っていた。机には、空になったコーヒーのカップが、いくつも並んでいる。


そのとき、エレベーターのほうから、若手の社員が一人、戻ってきた。残業の帰りらしい。彼は佐藤のデスクへ歩み寄ると、ノートパソコンを開いて見せながら、何か小声で切り出した。レビューの相談か、判断を仰ぎたいのか。


佐藤は、画面から目を離さなかった。「いい。それ、俺に回して」短く、それだけだった。若手が、なおも何か言いかける。「いいから。俺が見る」取りつく島もない声だった。若手は、二、三秒、立ち尽くし、それから小さく頭を下げて、自分の席へ戻っていった。佐藤は、最後まで、その顔を、見なかった。


一人になると、佐藤は、机の引き出しを開けた。錠剤のシートを一つ取り出し、一錠を、水もなく口に放り込む。胃薬だった。ぬるくなったコーヒーで流し込み、また、モニターへ戻っていく。何事も、なかったように。


健太は、声をかけそびれた。


さっきの「俺が見る」は、たぶん、これまで何百回も、繰り返されてきた言葉なのだろう。助けを断る言葉。仕事を引き取る言葉。一人で抱える言葉。その一つひとつが、彼の周りに、誰も入れない壁を、少しずつ積み上げてきた。胃薬を水もなく飲み下す、あの丸まった背中は、その壁の、いちばん内側にいるように見えた。


そして、と健太は思った。これは、佐藤一人の癖では、ない。


このフロアの空気そのものが、そう、できている。担当は、担当が守り切る。「分かりません」は、無能の告白。「手伝ってください」は、負けの宣言。だから誰もが、自分の持ち場を、一人で、抱える。SOCと開発のあいだには、目に見えない壁があって、アラートを一つ上げるだけで、縄張りを荒らすな、という顔をされる。縦に、細かく、硬く、区切られた組織。その区画の一つひとつで、みんなが、少しずつ、一人だった。佐藤は、その行き着いた果てに、いるだけだ。


誰にも、悪気はない。ただ、そういうふうに、できているだけ。――そういう組織の壁は、外から見れば、どんなに堅牢でも。内側からなら、たった一人を、そっと押すだけで、開いてしまう。


あの人は、誰かに頼るということを、しないのだろうか。


その背中から、健太は、なぜか、目を逸らせなかった。前の現場での、ある夜のことを、思い出していた。まだ駆け出しの頃。おかしいと気づいた異常を、「自分の手で確かめてからにしよう」と、誰にも言わず、一人で抱え込んだ。相談すれば、未熟だと思われる。そう怖くて、黙っていた。確かめ終えたときには、もう、手遅れだった。止められたはずの小さな綻びが、ひと晩で、大きな被害に育っていた。あのとき骨身に染みたのは、技術ではない。「一人で抱える」が、いちばん危ない、ということだった。


だから、佐藤のあの背中が、他人とは、思えなかった。あれは、かつての自分が、もう何年か凝り固まって、もっと深く一人になった、その先の姿のようにも、見えた。


健太は、なぜかその夜、佐藤を「煩わしいアーキテクト」としてではなく、「一人で立っている人間」として見た。だが、それだけだった。彼は忘れ物を拾い、フロアを出た。佐藤の背中に、声をかけることは、しなかった。


もし、あのとき声をかけていたら――後に健太は、何度もそう思うことになる。あの夜、誰か一人が佐藤の肩に手を置いて、「手伝うよ」と言っていたら。たぶん、すべては違っていた。


孤立を狙う敵に対して、最も効く防御は、隣に立つ誰か一人だ。だが、そのことを、このときの会社の誰も、制度としては持っていなかった。


* * *


その夜が、来た。


佐藤は、また一人だった。


夕方、Aegisのコアモジュールに、また一つ、想定外の不具合が見つかっていた。リリースまで、あと一週間。スケジュールは、もう一日たりとも余白がない。佐藤は、夜の開発フロアに最後まで残り、それから――結局、家にも帰らず、近くのコワーキングスペースに移って、なお一人で、コードと睨み合っていた。


深夜零時を回った中野の街は、雨上がりの匂いがした。窓の外、駅前の灯はまだいくつか起きていて、酔客の笑い声が遠く滲んでいる。佐藤は、その生活の音から切り離されたガラスの内側で、ただ一人、画面の冷たい光に照らされていた。


間に合うのか。その問いだけが、佐藤の頭の中で、空転していた。


胸の奥で、三年前の亡霊が、また頭をもたげる。あの障害の夜の、鳴り止まない電話。自分を見る、無数の目。「佐藤さんの設計が」という囁き。あれを、二度と繰り返すわけにはいかない。繰り返したら、今度こそ、自分という人間が終わる。


誰かに相談すれば、少しは楽になるのかもしれない。頭のどこかで、まともな声がそう囁く。だが、別の声が、即座にそれを握り潰した。


相談して、何を言う。また佐藤は一人で抱えきれなかった、と言われるのか。三年前のように。やはりあいつに任せるべきではなかった、と。


弱さを見せることは、敗北だった。助けを求めることは、三年前の自分に逆戻りすることだった。だから、佐藤は、誰にも告げなかった。一人で、闇の中で、それを抱えていた。


息が、いつのまにか荒くなっていた。


そのとき、デスクに置いたスマートフォンに、一通のメッセージが点った。


* * *


> 緊急。Aegisのコアモジュールに、リリース前に当てておくべき重大な不具合が見つかった。放置すれば本番で再現する。下記の手順で至急、修正ツールを適用し、検証してほしい。本国の朝までに必要だ。


差出人は、海外の提携先企業の――CEO。


佐藤の指が、止まった。


CEOから、直接? しかも、こんな時間に、なぜ自分に? 訝しさが、疲れた頭の片隅で、かすかに警鐘を鳴らした。手順を見れば、正規のレビューを通していない、変則的なものだ。本来なら、こんなものを直接適用してはいけない。


その逡巡の、まさに上から覆い被さるように――スマホが、震えた。


電話だった。表示は、知らない海外番号。


佐藤は、半ば吸い寄せられるように、出た。


「……はい、佐藤です」


「サトウさん」


聞き覚えのある声だった。流暢だが、わずかに訛りのある日本語。何度かオンライン会議で聞いた、あの低い響き。提携先のCEO。間違いない――と、佐藤の脳は判断した。


いや。判断した、というより、そう信じたかったのかもしれない。三年間、誰にも本音を明かさず、ただ一人で塹壕を掘り続けてきた男のもとへ、深夜、名の知れた相手が、直々に、電話をかけてきた。「サトウさん」と、名指しで。頼られている。まだ、必要とされている。――その響きは、渇いた土に落ちる雨のように、彼の警戒心の、いちばん柔らかいところへ、音もなく染み込んでいった。孤独な人間ほど、自分を求める声には、脆い。守りの堅い城ほど、内側から差し出される鍵に、弱いように。


「メッセージは、見たか」


「は、はい。ですが、この手順は正規のレビューを通していませんし、本来であれば――」


「時間がないんだ」声が、静かに、しかし有無を言わさず、覆いかぶさってきた。「リリースまで、もう一週間もない。ここでこの不具合を見逃せば、本番環境で大規模な障害になる。全国の電力網に影響が出る。……サトウさん。君なら、分かるだろう」


佐藤の喉が、ごくりと鳴った。


「もう一度、あんなことを――三年前のような事態を、起こすわけには、いかないはずだ」


世界が、一瞬、白くなった。


あんなこと。三年前。


その言葉が、氷の手で、佐藤の心臓を、直接、掴み上げた。三年前が、そっくりそのまま、噴き上がってくる。暗い対策本部。鳴り止まない電話。自分の背中に突き刺さる、無数の視線。「佐藤さんの設計が」という、あの囁き。詫びて、詫びて、それでも足りなかった、あの数ヶ月。傷はふさがってなどいなかった。ただ、分厚い瘡蓋の下で、三年間、膿み続けていただけだ。その瘡蓋を、いま、見えない指が、ためらいなく、めくった。


なぜ、この男が、それを知っている? いや――提携先のトップなら、過去の障害くらい把握していて、当然か。混乱した頭は、そう自分を、無理やり納得させた。疑うことより、信じることのほうが、いまは、ずっと、楽だった。傷ついた人間は、自分をさらに傷つける声すら、正しいものとして、受け入れてしまう。


だが、本当のところ、その声は、佐藤の傷の在り処を、正確に知っていた。数ヶ月分の彼の言葉を読み尽くしたAIが、彼が最も恐れる一点を、台本に書き込んでいたのだ。声は、人間ですらなかった。佐藤のためだけに最適化された言葉を吐く、声だけの幽霊だった。そして幽霊は、ためらいなく、三年前の傷口に、指を押し当ててきた。


頭の片隅で、まともな声が、最後の抵抗を試みた。誰かに相談すべきだ、と。せめて健太か、誰か、もう一人の目を借りるべきだ。これは、おかしい。


――その逡巡は、海の向こうから、見られていた。


四枚のモニターの前で、アヌビスは、わずかに、眉を寄せた。手元のタイマーが、想定の対応時間を、過ぎていく。プロファイルは、この対象なら数秒で折れると弾いていた。なのに、沈黙が、その倍を、超えた。対象が、抵抗している。


想定外、ではない。だが、ゼロでも、なかった。彼は、コンマ数秒の、舌打ちのような間を置き、台本の分岐を、一つ繰り上げた。AIへ、短く指示を送る。〈もう一押し。三年前の障害を、もう一度、名指しで〉。電話の声が、間を置かず、続けた。あのとき、君が一人で抱え込んだから、皆が、困ったんだ――と。


万能では、なかった。ただ、相手より、ほんの少しだけ、手数が、多かった。


だが、その声は、か細かった。そして、いつもの声が、それを、いとも簡単に、握り潰した。


相談? 誰に。こんな時間に、何を、どう説明する。「提携先のCEOから緊急の連絡が来たが、自分ひとりでは判断がつかない」――そう口にした瞬間、自分がどう見られるか、佐藤には、手に取るように分かった。ああ、また、あいつは一人で決められない。また、佐藤の判断は当てにならない。三年前、「一人で抱え込んだ」と責められた、あの同じ口が、今度は「一人では決められない」と嗤う。抱えれば、責められる。頼れば、蔑まれる。どちらに転んでも、裁かれるのは、自分だった。


ならば、と、疲れ果てた思考が、いちばん抵抗の少ない坂道を、転がり落ちていく。ならば、自分一人で、片をつけたほうがいい。誰にも見せず、誰にも相談せず、静かに処理して、何事もなかった顔をすればいい。それが、この三年間、彼を辛うじて立たせてきた、唯一のやり方だった。そして、それこそが、いま、彼の首に、音もなく巻きついていく、縄だった。


アヌビスは、佐藤の鍵を、破ろうとはしなかった。佐藤自身に、内側から、開けさせた。それだけのことだった。


佐藤は、荒い息を、ひとつ、吐いた。抵抗をやめた瞬間、奇妙なことに、ほんの少しだけ、楽になった。もう、考えなくていい。迷わなくていい。ただ、言われたとおりに、手を動かせばいい。それは、服従の、楽さだった。三年間、自分で自分を追い詰め続けてきた男が、命令という檻の中へ、逃げ込む瞬間だった。檻は、狭い。だが、狭さは、ときに、安心に似ている。


「……分かりました」佐藤は、掠れた声で言った。「今すぐ、適用します」


電話の向こうで、声が、満足げに何かを言った。だが、佐藤の耳には、もう入っていなかった。彼は、震える指で、メッセージのリンクを開き、その「修正ツール」を、自らの開発端末で、実行した。


* * *


何も、起きなかった。


ツールは、数秒走り、「正常に完了しました」とだけ表示して、静かに閉じた。


佐藤は、長い息を吐いた。全身から、力が抜けていく。間に合った。これでいい。彼は、自分にそう言い聞かせた。窓の外で、酔客の笑い声が、また遠く滲んだ。生活の音が、ガラス一枚向こうで、何事もなく続いていた。


佐藤は、知らなかった。


彼の端末で、たった今、何が起きたのかを。


そのツールは、何も「修正」しなかった。代わりに、端末の奥深くに、音もなく潜り込んだ。そして、攻撃者にとって本当に価値のあるものを、探し当てた。


その朝、佐藤が正規の手順で――Windows Helloの生体認証で、正しくログインし、いまもなお生きている、認証済みのセッショントークン。


ここが、アヌビスの最も冷徹な一手だった。


テラ・システムズの認証は、FIDO2の生体認証で固められている。偽のサイトに指紋を打たせようとしても、ブラウザがドメインの不一致を見抜き、認証そのものが成立しない。フィッシングに強い、堅牢な扉。その扉は、破れない。


だから、アヌビスは、扉を破ろうとしなかった。


扉を破る代わりに、佐藤が、その扉を正しく開けた「後」を狙った。認証を終えた正規ユーザーの手元に残る、通行証そのもの――生きたセッショントークンを、感染した端末から、そっと抜き取った。Pass-the-Cookie。


盗まれた通行証は、誰が掲げても、通行証として機能する。再びの認証は、求められない。すでに「本人確認は済んでいる」ことになっているのだから。アヌビスは、その通行証を掲げ、佐藤の正規の権限を完全にまとって、クラウドの奥へと、何食わぬ顔で歩み入った。


クラウドの認証ログには、異常は刻まれなかった。EDRも、何も咎めなかった。当然だ。見えているのは、「正規ユーザーが、正規の通行証で、正規の作業をしている」という、どこまでも健康な絵だ。咎める理由が、どこにもない。FIDO2は、何ひとつ破られていない。ただ、扉を開けた人間の机の上から、通行証が一枚、消えただけだった。


こうしてアヌビスは、Aegisのソースコードが生み出される、心臓部――クラウド上のCI/CDパイプラインへと、静かに到達した。


* * *


アヌビスは、画面の前で、息を一つ、吐いた。


目の前に、Aegisのコアのソースツリーが開かれている。用意してきた「ごく小さな狂い」を、その奥深くへ、慎重に滑り込ませる。全系統を止める、派手なものではない。需給予測を、ほんのわずか――気づかれない幅で、狂わせるだけのもの。レビューを何度すり抜けても見抜けないよう、正常なロジックに溶かし込んでいく。


その狂いが、来月の薄氷の上で何を起こすのか。アヌビスは、その全体像を、知らない。知る必要もない。彼の工程は、最も孤独な個体を見つけ、その孤独を鍵に扉を開け、針を一本、置くこと。それだけだった。


画面の隅では、金の値が、静かに吊り上がり続けている。カレンダーが、来月の一点へ向けて、一日ずつ、近づいていく。


針は、置かれた。


あとは、その針が、最も薄い氷を選んで、世界を貫くのを待つだけだった。


中野の街は、何も知らずに、眠っていた。立ち食いそばの仕込みが始まる、朝まで、あと数時間。


そして、その平凡な朝を守るはずの男――桐谷健太は、まだ、自分の書いた「目的が不明」という四文字の、本当の重さを、知らないでいた。


*―― 第二章 了 ――*


## 第三章 転 ―― 囮の火事と、数字のトリック


---


異変は、けたたましく始まった。


その朝、出社した社員たちが端末を開くと、社内のあちこちで、システムが、悲鳴を上げ始めていた。Aegisの連携・監視系が、見たこともない量の致命的エラーを吐き出し、次々と機能を停止していく。さらに、ほぼ時を同じくして、グループの一子会社の基幹システムまでもが、ダウンした。すべてが、たった一つのことを指し示すように、仕組まれていた――何者かが、来週のAegis本番リリースそのものを、潰しにかかっている、と。派手で、わかりやすく、そして、誰の目にも「これは国家的な緊急事態だ」と映る、攻撃だった。


社内は、瞬く間に大混乱に陥った。


経営陣は緊急対策本部を立ち上げ、業務の何割かが停止した。共有ドライブが開けない。過去の資料が引けない。営業も、総務も、開発の一部までもが、手を止めて右往左往し始めた。フロアのあちこちで電話が鳴り、怒号と困惑が飛び交う。


そして、混乱は、社内だけでは収まらなかった。


テラ・システムズは、ただの一企業ではない。来週、国家規模のスマートグリッド基盤「Aegis」をリリースしようとしている、重要インフラの担い手だ。その会社が、リリース直前に何者かの攻撃を受け、システムを次々と落とされている――その報は、午前のうちに、然るべき場所へ伝わっていた。


昼前には、経済産業省から問い合わせが入った。Aegisの納期に影響はあるのか。電力インフラへの波及はないのか。午後には、金融庁からの照会まで届いた。重要インフラ事業者のインシデントとして、報告義務の範囲はどこまでか。顧客情報の漏洩はあったのか――。


対策本部は、その対応だけで、半ば麻痺した。


「経産省にどう報告する」「金融庁の様式はどれだ」「広報、プレスはどうする」「リリースは、延期するのか」「延期したら、それこそ敵の思う壺だろう」――役員たちは、落ちていくシステムと、官庁からの電話と、リリースの可否との間で、声を荒らげて押し合っていた。SOCチームには、上層部からの問い合わせと、復旧要求が、津波のように押し寄せた。


対策本部の壁には、いつのまにか、二つのカウントダウンが貼り出されていた。一つは、落ちたシステムの復旧見込み。もう一つは、金融庁への一次報告の、提出期限。どちらも、刻一刻と、容赦なく減っていく。法務は犯行声明への対応方針を役員判断へ投げ、役員は世間体を気にしてプレス対応に時間を溶かし、広報は官庁向けの様式と報道向けの文面の、二正面で溺れていた。誰もが忙しく、誰もが何かを待っていた。そして、その忙しさの総和が、組織の目を、たった一つの方向――いちばん大きな炎――に、釘付けにしていた。


組織という生き物は、火事の前で、こうもたやすく我を失う。誰もが、目の前で燃え盛る、いちばん大きな炎だけを見ていた。


健太を除いて。


* * *


健太は、その喧騒の真ん中で、奇妙な静けさに包まれていた。


XDRコンソールの前で、彼は、その障害の広がり方を、もう何度目かわからないほど、追い直していた。追えば追うほど、胸の底の違和感が、はっきりと形を持っていく。出来すぎているのだ。


この攻撃者は、ゼロトラストの城壁を、正面からではなく、APIトークンという落とし物一本で掻い潜った。数ヶ月かけて社内に潜伏し、誰にも気づかれなかった。FIDO2すら、破るのではなく「迂回」する冷徹さと、忍耐を持っていた。その同じ攻撃者が、最後の最後で、これほど派手に、自分の存在を世界中に喧伝するだろうか。しかも、よりにもよって、いちばん人目を引く「Aegisリリースへの妨害」という、最大の見世物の形で。それに――よく見れば、この障害は、派手な見た目のわりに、本当に取り返しのつかないものは、何ひとつ、壊していない。あれほど静かに動けた者が、なぜ、いきなり、こんなにも目立つ真似をするのか。まるで、こちらの目を、わざと、一箇所に引きつけるためだけに、緻密に設計されているかのようだった。


囮だ。健太は、そう直感した。


この障害騒ぎは、スモークスクリーン――煙幕にすぎない。SOCの全神経を、「Aegisが攻撃されている」という、これ以上ないほど派手な火事に縛りつけておくための、目くらまし。本当の狙いは、この煙の向こう側で、誰にも見られないまま、静かに進行している。火事を見ている場合では、なかった。火を点けた人間が、本当は何をしたいのかを、見なければならない。


だが、と健太は思い直した。これほど周到な相手が、わざわざ自分から派手な火事を起こすのには、火事なりの理屈がある。ただの陽動ではない。隠したい何かが、それ自体、隠しきれないほどの物音を立てる作業だからだ。本来なら監視に引っかかる、大がかりで、致命的な一手。その悲鳴を、もっと大きな悲鳴で覆い隠してしまえば、誰も気づかない。派手な障害の絶叫の陰で、本命の、静かな一撃が、淡々と進む。火事は、自己主張ではなかった。冷たく計算された、目隠しだった。そしてそれは、囮が焚かれたいま、本命がもう、動き出しているということでもある。


国内最大手インフラ企業のSOCである。重大インシデントの発生とともに、CSIRTの緊急ブリッジ――専用のWeb会議と、War Roomと呼ばれる緊急チャットが、すでに立ち上がっていた。インシデントコマンダーの指揮下、関係部門が一斉に投入され、障害の封じ込めと、システムの復旧、そして経産省・金融庁への報告対応に、全リソースが注ぎ込まれている。


健太は、そのWar Roomに、自分の見立てを書き込んだ。


> 桐谷(SOC):この障害は囮の可能性。本命は別にある。AegisのCI/CDパイプラインに、リリース直前の不審なコミットを確認。至急、配信の凍結と、コアの精査を要請します。


返ってきたのは、沈黙――ではなく、ノイズだった。


> コマンダー(IC):桐谷、見立ては受け取った。だが、いまの最優先はSEV1――この障害の封じ込めと、官庁への報告期限だ。手順上、ここは外せない。そのコミットの件は、SEV2でチケットを切ってくれ。封じ込めの目処がつき次第、別チームをアサインする。

> 復旧班:共有ドライブの復旧優先順位、誰が決める?

> 広報:金融庁向けの一次報告ドラフト、誰か巻き取って。

> 法務:犯行声明への対応方針、役員判断待ち。至急。


コマンダーの判断は、間違っていなかった。むしろ、教科書どおりだった。目の前で燃えているSEV1を措いて、まだ確証のないSEV2の追跡へ主力を割けば、それこそ統制を失う。正しい優先順位。正しい手順。健太の一行は、その「正しさ」の濁流の中へ、たちまち押し流され、SEV2のチケットとして、静かに積まれた。


そして、敵が突いていたのは、まさにそこだった。組織が正しく動けば動くほど、いちばん大きな炎へ、全力を注ぐ。その対応の、わずかな時間差。本命の静かな一手は、その隙間を、滑り抜ける。無能では、なかった。有能な組織が、有能であるがゆえに嵌まる、時間差の罠だった。


知識と、権限と、注意とが、それぞれ別々の部屋に鍵をかけてしまわれている。その分断こそが、敵が突いた、もう一つの脆弱性だった。佐藤という一人の人間が抱えた孤独と、組織という生き物が陥った孤立は、同じ綻びの、表と裏だった。攻撃者は、たぶん、それすらも織り込んでいた。一発の派手な囮を投げ込めば、巨大で、正しく動こうとする組織ほど、いちばん大きな音のするほうへ、全力で殺到する。本当の刃から、目を逸らして。


届かないなら、自分で確かめるしかない。健太は、War Roomのタブを閉じ、喧騒に背を向けた。皆が、落ちたシステムを見ているなら、自分は、誰も見ていない場所を見る。クラウド上のCI/CDパイプラインの実行履歴と、コンテナの挙動を、一つずつ、手で掘り起こし始めた。


たった一人で。それは、明白な独断だった。だが、組織が分断によって目を塞がれているいま、誰かが、その独断を、引き受けるしかなかった。


* * *


そして、見つけた。


数日前――佐藤の端末が「修正ツール」を実行した、あの夜の時刻に。CI/CDパイプライン上で、Aegisのコアのソースコードに対し、一件のコミットが行われていた。


コミットの主は、佐藤だった。正規のアカウント。正規の権限。何の警告も、何のアラートも発さずに。


佐藤が、リリース直前に、コアをいじった――?


健太の頭に、最初に浮かんだのは、不審ではなく、あの「目的が不明」の四文字だった。広報のアカウントが奪われた、あの夜。攻撃者の本当の狙いが読めなかった、あの違和感。それが、一本の線で、いま、佐藤の名前と繋がろうとしていた。


健太は、そのコミットの差分を開いた。


そして、息を呑んだ。


リリース直前のAegisのコアに、極めて巧妙な、何かが――一見すると、ごく正常なコードにしか見えない、何かが、埋め込まれていた。


レビューを何度すり抜けても気づけないよう、既存のロジックに、丁寧に溶け込ませてある。だが、SOCで毎晩、ログの滝の中から一滴の濁りを探し続けてきた健太の目は、その不自然な「静けさ」を、捉えた。コードのその一画だけが、妙に、出来すぎていた。


健太は、その仕込みのロジックを、一行ずつ、目で追った。だが、何重にも難読化された処理は、人間の目だけでは、底が知れない。彼は、その一画をまるごと選択し、SOCのコード解析AIに、放り込んだ。


――数秒。解析結果が、返ってくる。


AIは、その「一見、正常なコード」が、実際には何をするのかを、平らな言葉に翻訳してみせた。〈需給予測の出力値に対し、恒常的に、約マイナス一・五%の補正を加算。特定条件下でのみ作動し、レビューおよび自動検査を回避する構造〉。


健太の視線が、その一行に、貼りついた。マイナス、一・五%。


そして――彼は、戸惑った。


* * *


それは、彼が覚悟していたものとは、まるで違った。


健太が恐れていたのは、「キルスイッチ」だった。ある日、ある時刻に、全国のスマートグリッドを一斉に停止させる――そういう、わかりやすいテロの仕掛け。電力網を人質に取る、破壊の引き金。


だが、このコードは、そうではなかった。


このバックドアがやることは、たった一つ。Aegisの需給予測の出力を、常に、ほんのわずかだけ、低く見せること。


数字を、追った。歪みの幅は――マイナス、一・五パーセント。


一・五パーセント。健太は、画面の前で、固まった。


一・五%。それは、あまりにも、小さい。全国の電力需要予測を、たった一・五%だけ過小評価させる。それだけの仕掛けのために、これほどの労力を? 数ヶ月の潜伏。AIによる人間のプロファイリング。ディープフェイク。FIDO2の迂回。サプライチェーンへの侵入。そのすべての果てに、仕込んだのが、「需要を一・五%低く見せる」という、ただそれだけの、微細な狂い?


意味が、わからなかった。一・五パーセントずれたところで、いったい何が起きるというのか。


健太の指が、止まる。停電すら、起こせない。系統が即座に倒れるわけでもない。一・五%など、日々の予測の誤差のうちに、いくらでも紛れてしまう。統計のノイズに、溶けてしまう数字だ。誰も、気づかない。


気づかない。――そこで、健太の中の、何かが、引っかかった。


誰も、気づかない。そんなに小さいから。そんなに小さいのに、毎日、全国で、積み上がっていく。


需要を、低く見せる。だとしたら――その通りに調達計画を立てれば、燃料が、足りなくなる。


足りない分は、どうする。その日の時価で――スポット市場から、緊急に、買い足すしかない。


その答えが頭をよぎった瞬間、健太の頭の片隅で、何かが、点いた。


* * *


権限の壁の向こうで、一度だけ見た、Aegisの「真の仕様」の断片が、蘇った。あのとき、不審に思いながらも「テスト負荷」の引き出しにしまい込んだ、小さな棘。


『 ……本番リリース時に観測モードから実行モードへ切替カットオーバーし、蓄積された予測値を、調達・決済・国債発行原資の最適化エンジンへ一括接続する―― 』


電力の需給予測が、燃料の調達計画に、決済に、国債に、直結している。そして、いまはまだ「観測だけ」で空回りしているそれが、リリースの瞬間に、実行へと切り替わる。


需要が一・五%低く見積もられれば、長期契約での計画的な調達が、その分、足りなくなる。不足分は、毎日、その日の時価で――スポット市場で、緊急に買い足さざるを得ない。慌てて買えば、高くつく。一・五%は小さくても、全国の、毎日の、燃料調達。それが積み上がれば、緊急調達の額は、天文学的に膨れ上がる。


そして、それだけでは、なかった。


健太は、コードから、ログへ、視点を移した。インシデントレスポンスの、基本だ。仕込みが「何をするか」は、AIが教えてくれた。なら次は、それが過去、実際に「何をしたか」を、ログの足跡から、拾う。


彼は、仕込みが作動する条件――コードに埋められた、特定の日付フラグ――を手がかりに、関連するAPI通信のログを、時系列で、引き出した。タイムスタンプを、揃える。送信先のアドレスを、一つずつ、名前解決にかける。


点が、浮かび上がってきた。


数週間前から、深夜の決まった時刻に、ごく少量ずつ。Aegisの調達・決済モジュールから、見慣れない外部の決済系APIへ向けて、テストのような小さな呼び出しが、断続的に、打たれていた。送信先のドメインは、社内のどの正規サービスとも、一致しない。


――見覚えが、あった。


いつかの夜。ネットワークセキュリティグループのルールを見直していて、目の端をかすめ、「また今度」と低リスクのキューへ放り込んだ、あの小さなノイズ。深夜の、決まった時刻。一致しない、宛先。


誤検知では、なかったのだ。あれは、本番のための、決済ルートのリハーサル。誰の目にも留まらないよう、ごく少量で、何週間もかけて、こっそり試し撃ちされていた、足跡だった。見送った自分の指先の感触を思い出し、健太の首の後ろが、ひやりと、冷えた。


点と、点が、線になる。歪んだ予測の出力は、調達計画だけでなく、その先の、決済処理にまで、配線されていた。そして配信の瞬間、その配線を通って、膨れ上がった支払いが、この見知らぬ外部の流れへと、一斉に、押し出される。


莫大な金が、この国のインフラを通り抜けて、どこかへ、流れ出す。配信が走り出した、その瞬間から。


健太の視線が、ふらりと、部屋の片隅の、古い液晶テレビへ向いた。


夜勤のたびに、彼が道楽で眺めてきた、あの画面。いまも、音を絞ったまま、点いている。下端を、赤い相場ティッカーが、いつも通り滑っていく。


『 GOLD ―― 連日の最高値更新 』

『 新興国ブロック、原油決済の"脱ドル"を協議 ―― ペトロダラー体制、揺らぐ 』


そして、その隅に、小さく。


『 来月、米国債の大量償還が集中 ―― 市場、神経質な展開に 』


画面の中の言葉が、いま自分が掘り当てたものと、どこかで繋がっている――そんな気が、ちらりと、した。脱ドル。金の最高値。来月の、国債の山。


点と、点が。国債。通貨。その向こうで蠢く、誰かの、途方もない意志。一本の、巨大な線が、繋がりかける。背筋に、得体の知れない悪意の気配が、走った。


――だが。


健太は、両手で、自分の頬を、ぱん、と張った。やめろ。考えるな。その糸の先は、いまの自分が、手繰るものじゃない。彼は、テレビから、強引に、視線を、引き剥がした。


* * *


健太の背骨を、警告灯の赤が、下から上へ、いっせいに、駆け上がった。カスケード障害。一つの異常が、隣を巻き込み、また隣を巻き込んで、監視ボードを、端から、真っ赤に染めていく――あの光景が、いま、画面の中ではなく、健太自身の、背中の内側で、起きていた。


これは、テロでは、ない。


健太は、インフラ企業のSOCだ。基礎的な、ドメイン知識がある。電力系統には、常に、周波数を保つための「予備力」が、積んである。需要予測が一・五%ずれた程度で、全国の電気が止まったり、系統が物理的に焼け落ちたりは、しない。系統は、その程度の誤差なら、平然と、吸収する。


つまり――「電力網を破壊する」というシナリオは、そもそも、成立しない。派手な破壊は、起こらない。起こす気も、ない。これは、もっと静かで、もっと深いところを狙った、手だ。


停電なんて、起きない。システムは、何ひとつ止まらず、正常に、動き続ける。ダッシュボードのランプは、すべて、緑のまま。ただ――その正常な顔の、すぐ裏側で、金だけが、毎日、目に見えない速さで、吸い出されていく。


これは、破壊じゃ、ない。インフラの自動化を、まるごと乗っ取った――前代未聞の、横領だ。この会社の資金くらい、一晩で溶ける。いや、会社どころでは、ない。この国のエネルギー調達そのものが、誰にも気づかれないまま、内側から、静かに、干上がらされる。電力網を爆破するより、ずっと地味で、ずっと、致命的に。


相手が、国家だろうが、テロリストだろうが、どこかの投資ファンドだろうが――知ったことか。俺は、名探偵でも、世界を救うヒーローでもない。ただの、SOCだ。わかっているのは、たった一つ。あと数十分で、自分たちの会社のサーバーが、その会社を破産させる「金庫破りの道具」に、される。それだけだ。


それだけで、十分だった。世界の血流が、どこへ向かおうと、知るか。俺は、ただ、目の前の、この胸糞の悪いログの濁りを、潰す。


一・五%。ほんの一・五%。日々の誤差に紛れる、誰も気づかない、微細な狂い。それが、最も薄い氷の上で、何倍にも増幅されて――世界の血流の、向きを変える。


そして、健太は、もう一つの事実に思い当たって、指を、止めた。実行待ちのキューに、決して走らせてはならない一件が、静かに積まれている――それに気づいてしまった夜勤明けの、あの、底冷えの感覚だった。


Aegisは、まだ「観測モード」なのだ。仕込まれた一・五%の毒は、いまはまだ、空回りする予測の中で、害なく溜め込まれているだけ。数ヶ月のあいだ、シャドウモードで全国の実データを呑み込みながら、その歪んだ予測を、ただ静かに、蓄積し続けている。


だが――いま、大画面でカウントされている、あの自動デプロイ。あれは、ただコードを配るのではない。観測から実行へ、スイッチを切り替える、本番接続カットオーバーだ。スイッチが入った瞬間、数ヶ月ぶん溜め込まれた予測の歪みが、堰を切ったように、一斉に、現実の緊急調達と決済の発注へと走り出す。リリースから市場が動くのを、何週間も待つ必要などない。蓄積されたぶんが、最初の一瞬で、まとめて、現実の発注へと変わる。何週間も、待つ必要などない。観測という空回りが、実害へと、切り替わる。いま、この瞬間に。


配信は、ただの配信ではなかった。これは、起爆だ。そしてその引き金が、いま、引かれようとしている。


止めるのに、全貌は、いらなかった。


中野の、立ち食いそばの湯気。始発を待つ列。彼が守りたかった、あの取るに足らない、煮干しの匂いのする朝。その朝が、いま、この会社のサーバーの中に仕込まれた一・五%を通じて、足元から、崩されようとしている。


「……噓だろ」


健太の声が、震えた。喧騒の中で、誰も、彼を見ていなかった。その途方もない一手の輪郭に、組織の中でただ一人、指先だけ触れてしまった男は、燃え盛る囮の炎の陰で、たった一人、戦慄していた。わかっているのは、止めなければならない、ということだけだった。配信を止める。いまの彼にできるのは、それだけだった。


* * *


その読みを、無慈悲に裏づけるように。


対策本部の大画面に、攻撃者からの、新たなメッセージが、表示された。今度こそ、彼らの「真の要求」だった。


> Aegisのサプライチェーンは、すでに掌握した。リリースを強行すれば、その瞬間、全国の系統に何が起きるかは、保証しない。

>

> そして、もう一つ。すでにAegisのコードは汚染されている。これを全国のインフラ企業へ配信すれば、日本のエネルギーと電力網は、いつでも我々が思うがままだ。配信を阻止したくば、追加で支払え。


役員たちが、どよめいた。だが、彼らの誰も、その「サプライチェーン」という言葉が、本当は何を意味するのかを、理解していなかった。彼らに見えていたのは、システムが落ちるという火事と、リリースを潰されるという脅しだけだ。その向こうで、世界の決済システムに楔が打たれようとしていることなど、想像もできない。


派手なシステム障害と、サプライチェーンを人質に取るという脅し。二つの刃を組み合わせた、最悪の揺さぶり。リリースを止めれば、国家事業が頓挫する。強行すれば、何が起きるかわからない。どちらに転んでも、相手の手のひらの上――そう、思わされていた。だが、その二枚の刃さえ、本命を隠すための、影にすぎなかった。


そして、画面の隅に、無慈悲なカウントが、刻まれ始めた。


汚染されたAegisの、自動デプロイ――全国配信の開始まで。


残り、三十分。


* * *


「……止めないと」


健太は、立ち上がった。膝が、震えていた。


止めなければならない。この三十分のうちに、汚染されたAegisが全国へ配信されれば、一・五%の毒は、もう、誰にも止められなくなる。


だが、健太の頭の片隅に、もう一つ、刺さったままの棘があった。


あのコミット。汚染されたコードを、コアに埋め込んだ、あのコミットの主。


正規のアカウント。正規の権限。佐藤。


健太は、振り返った。対策本部の隅に、いつのまにか、その男が、立っていた。


障害騒ぎで呼び出されたのだろう。佐藤は、対策本部の大画面に映る「犯行声明」と、その隅で動き始めたカウントダウンを、蒼白な顔で、見つめていた。


その顔から、見る間に、血の気が引いていく。


健太には、わかった。佐藤も、いま、気づき始めている。あの夜、自分が「修正ツール」を実行したこと。誰にも相談せず、一人で、闇の中で開いた、あのリンク。それが――この、すべての、始まりだったということに。


佐藤の唇が、声にならない言葉を、震わせた。


三年前の、あの障害の夜が。広域の停止が。鳴り止まない電話が。自分を見る、無数の目が。そっくりそのまま、いま、桁違いの規模になって、戻ってこようとしていた。


カウントダウンの数字が、また一つ、減った。


残り、二十九分。


二人の最前線が、始まろうとしていた。


*―― 第三章 了 ――*


## 第四章 結 ―― 二人の最前線と、国家の三十分


---


「配信を止めろ! パイプラインを今すぐ凍結するんだ!」


対策本部に、怒号が飛んだ。健太は、隣のエンジニア数人とともに、クラウドの管理画面へと殺到した。汚染されたAegisが全国へ配信される前に、デプロイを止める。それさえできれば、一・五%の毒は、全国へは、放たれない。


ブラウザに、クラウドポータルを開く。サインイン。指紋。


――拒否。


「は?」


もう一度。サインイン。指紋。


『 アクセスが拒否されました。 』


赤い文字が、画面いっぱいに灯った。健太だけではなかった。隣で、その隣で、エンジニアたちが次々と、同じ赤い壁に弾かれていく。管理者アカウントが、一人、また一人と、クラウドから締め出されていった。


「ロックアウトされてる……!」


攻撃者は、佐藤のセッションを奪った後、ただ潜んでいたのではなかった。すでに、IdP――ID管理の特権ロールの割り当てそのものを、書き換えていた。防衛側がクラウドを支配する、その大元の蛇口を、敵が先に閉めてしまったのだ。クラウドの管理プレーンへの制御権を、テラ・システムズは、まるごと失った。


そして、いまになって健太は悟った。これほど大がかりな特権の書き換えは、本来なら、監視に派手な警報を上げる類いの操作だ。だが、その悲鳴は――確かに鳴っていたはずのその警報は――障害対応の喧騒の中に、とうに溶けて、消えていた。囮は、まさにこの瞬間のために、焚かれていた。いちばんうるさい火事で、いちばん危険な一手を、覆い隠すために。敵は、何も間違えていなかった。


「噓だろ……手も足も出ないのか」


誰かが、呻いた。対策本部を、黒い絶望が塗りつぶしていく。攻撃者は、防衛側がいる城の天守閣そのものを、外から鍵をかけて封鎖してしまった。もはや、portalからは、ボタン一つ押せない。


大画面の隅で、カウントダウンが、また一つ、減った。


残り、二十六分。


* * *


健太の指が、キーボードの上で、止まった。


管理プレーンは、奪われた。クラウドを"運用する"権限は、根こそぎ持っていかれた。だが――。


頭の中を、猛烈な速さで、可能性が走り抜けた。


奴らが奪ったのは、ID管理の特権ロール――クラウドを"操作する"権限だ。では、クラウドを"組み立てる"設計図、コードそのものへの権限は、どうだ。


テラ・システムズのインフラは、すべてがコードで管理されている。IaC――Infrastructure as Code。サーバーも、ネットワークも、そして配信を司るパイプラインの一挙手一投足までもが、クラウドDevOpsのリポジトリの中に、テキストとして定義されている。攻撃者が奪ったのは、ID管理の特権ロール――クラウドの管理プレーンだ。ソース管理は、それとは、別の認証の世界。敵は、まだ、片方しか握っていない。


だが、健太自身に、その世界を書き換える資格は、ない。当然だった。監視する者と、本番を作り変える者を、同じ手に委ねない――職務分掌(SoD)。ゼロトラストを標榜する会社が、そこを緩めるはずがなかった。SOCのアカウントに、本番パイプラインへのpush権限など、最初から、与えられていない。見ることはできる。だが、触ることは、できない。


だが、一つだけ、扉がある。


重大インシデント――SEV1が宣言されているいま、当直のインシデント対応担当には、封印された緊急変更の権限が、開く。普段は固く閉ざされ、使えば全操作が記録され、事後に一行残らず監査される、IR専用のブレークグラス。生きた攻撃の最中、悠長に通常の変更承認を待っていては、間に合わずに陥落する――その「待てない」を見越して、用意された、最後の鍵だ。封じ込めのための変更だけが、ごく短い時間、例外的に許される。


封印を破れば、後で必ず、説明を求められる。SOCの人間が、本番のパイプラインに、手を入れた――その事実は、被害を防いだかどうかとは別に、残る。手順違反。最悪の場合は、懲戒。下手をすれば、この職を、失う。


健太の指が、一瞬、止まった。だが、止まったのは、一瞬だけだった。


彼は、緊急対応ログに、一行だけ、書き残した。


〈To: CISO / 本措置の全責任を負います。事後監査には全面的に協力します。被害拡大防止のため、IRブレークグラスにより緊急の封じ込めを実行します。 ―― SOC 桐谷〉


書いてしまえば、もう、後戻りはできない。それで、よかった。


「……これを、使う」


健太は、その封印を、破った。緊急対応者の資格で、一時的な認証が、ターミナルに通る。やっていいのは、ただ一つ。被害を、止めること。それだけだ。


普段、本番への自動デプロイは、誰の手も介さず、パイプラインの定義通りに、粛々と進む。ならば――その定義そのものを、書き換えればいい。


健太は、配信を司るパイプラインのYAMLを開いた。本番ステージの、直前。そこへ、数行を、緊急で割り込ませる。本番Environmentへの、手動承認チェック。人間が「承認」を押すまで、パイプラインをその場で待たせる、強制的なゲート。


焦りで、指が滑った。インデントが、一段ずれる。YAMLは、インデント一つで壊れる。健太は舌打ちし、直し、もう一度見直した。全角スペースが紛れ込んでいないか。一文字でも狂えば、パイプラインはエラーで止まる――が、それでは「意図して停止させた」ことにならず、攻撃者に異変を悟られる。あくまで、正規の承認待ちとして、自然に止めなければ。


`git commit`。`git push`。


エンターを叩いた指先が、冷たかった。


数秒後。


全国配信へ向け、最終ステージへ進もうとしていたパイプラインが、書き換えられたばかりの定義を読み込み――本番ステージの、一歩手前で、ぴたりと、止まった。


> Waiting for approval(承認待ち)


「……止まった」


健太は、ひとつ、息を吐いた。だが、安堵する暇は、なかった。これは、延命にすぎない。攻撃者がこの承認ゲートに気づけば、奪った権限で「承認」を押すか、定義をもう一度書き換えるだけだ。クラウドの管理プレーンを取り返さない限り、根本的な解決には、ならない。


そして、その管理プレーンは、固く封じられたままだった。


残り、二十二分。


* * *


管理プレーンを、取り返す。


その方法が、一つだけ、あるはずだった。健太は、それを口にしながら、振り返った。


「Break-Glass Account――緊急時用の、特権アカウント。あれが、まだ生きてるはずなんです」


「……なぜ、そう言える」対策本部長が、すがるように問うた。「IdPは、奴らに書き換えられてるんだろう」


「だからこそ、です」健太は、早口で言った。「あのアカウントは、ふだんのディレクトリ同期から、完全に切り離された、クラウド専用アカウントだ。社内の人事ディレクトリには、存在しない。奴らが書き換えたのは、同期されたディレクトリの方――Break-Glassは、その地図に載っていない。だから、書き換えようがない」


「だが、奴らがそのアカウントの存在に気づいたら――」


「気づいても、ログインできません」健太は、断言した。「あのアカウントには、条件付きアクセスがかかってる。特定の物理的な送信元――この建物の、地下の金庫室にある、専用端末からしか、認証を受け付けない。海の向こうからは、何をどうやっても、通せない。あの鍵を回せるのは、いま、この建物の中に、体ごといる人間だけなんです」


ソフトウェアの世界を、攻撃者がどれだけ書き換えようと、その手は、現実の金庫室までは、届かない。


「誰か、地下へ――」


そこで、健太の言葉が、止まった。


金庫室の場所も、専用端末の操作も、Break-Glassの手順も。それを正確に把握しているのは、SOCの自分ではない。Aegisの基盤を、地下の物理層から設計まで、隅々まで知り尽くした人間――。


健太の視線が、対策本部の隅で、立ち尽くしている男へ向いた。


佐藤だった。


* * *


佐藤は、動けなかった。


彼の目は、大画面のカウントダウンに、釘付けになっていた。だが、彼が見ていたのは、その数字ではなかった。三年前の、あの夜だった。広域の停止。鳴り止まない電話。自分を見る、無数の目。「佐藤さんの設計が」という囁き。あれが、いま、桁違いの規模になって、戻ってきていた。しかも今度は、設計の不運ではない。自分が、自分の指で、リンクを開いた。自分が、招き入れた。


「……俺だ」佐藤の声は、掠れて、ほとんど聞き取れなかった。「俺が、あの夜、あの修正ツールを実行した。俺の指紋が、奴らを、中に入れた。全部……全部、俺のせいだ」


膝が、崩れかけた。また、繰り返した。また、自分が。一人で抱えて、一人で、落ちた。今度こそ、本当に、終わりだ。世界中が、自分を見ている――。


「佐藤さん」


健太の声が、その崩落を、ぎりぎりで受け止めた。


「自分を責めるのは、あとにしてください。いくらでも、あとで責めればいい。今だけは――それを、脇に置いてほしいんです。いま治れとは、言いません。立ち直れとも、言わない。ただ、一つだけ、やってほしいことがある。あなたに、しかできないことが」


佐藤が、のろのろと、顔を上げた。虚ろな目だった。


「金庫室の場所も、専用端末の操作も、Break-Glassの認証手順も、俺は知らない。SOCの権限じゃ、そこまで触れない。あれを回せるのは、基盤を隅々まで知ってる、あなただけなんだ」


「……俺、なんかが」


「あなた"が"、なんですよ」健太は、まっすぐに、佐藤を見た。「いいですか。奴らは、インフラを壊す気なんて、ない。このまま配信されたら、俺たちの会社のサーバーが、毎晩、とんでもない額の金を、ひとりでに外へ垂れ流す仕掛けに、変わるんです。世界がどうとか、国がどうとか――そんな、でかい話じゃない。今日、俺たちのこの現場を、守るために。あなたが、要るんだ。


俺は今から、ネットワークをいじって、攻撃者のセッションを、数秒だけ閉じ込める。でも、俺はAegisの基盤の深いところを、知らない。どのルートを触れば安全で、どこを触ったら本番ごと巻き添えにするのか――それを知ってるのは、設計したあなただけだ。あなたの頭がないと、俺は、一手も、動かせない」


健太は、ターミナルを睨んだまま、ひとつだけ、絞り出すように、付け加えた。


「……俺も昔、一人で抱えて、しくじった。だから、今だけは。二人で、抱えさせてください」


佐藤の、虚ろだった目の奥で、何かが、揺れた。


三年間、彼は、誰にも頼らなかった。頼ることは、敗北だった。助けを求めることは、三年前の弱い自分に戻ることだった。だから、すべてを一人で抱え、一人で背負い――そして、その孤独を、敵に、鍵にされた。


だが、いま。目の前のこの男は、自分を責めていなかった。許してもいなかった。ただ、必要としていた。佐藤の知識を。佐藤の頭を。佐藤という人間を。


そして、同時に、こう言っていた。お前一人では、足りない、と。俺も、お前なしでは、一手も動けない、と。


そして佐藤は、気づいた。この男も、一人で英雄になろうとはしていない。肩書きを、盾にも鎧にもしていない。自分にできないことを、できないと認めて、ただ、差し出している。SOCも、アーキテクトもなかった。巨大なシステムの前に、ただ、二人の不完全な人間が、立っているだけだった。


佐藤は、もう一度、大画面を見た。乗っ取られた管理プレーン。締め出された管理者たち。三年間、命より大事に守ってきた「一人で、完璧に、システムを維持する」という鎧は、いま、完膚なきまでに、破られていた。守りきれなかった。一人では、どうにも、できなかった。


それを認めた瞬間、何かが、折れたのではなかった。溶け落ちた。


三年間、奥歯を噛みしめるように握り続けてきた見えない何かが、指のあいだから、するりと、抜けていく。同時に、奇妙な感覚が、胸の底から立ちのぼった。絶望のはずだった。なのに、それは、安堵に、似ていた。――ああ、もう、一人で背負わなくて、いいのか。三年間、一度も深く吐けなかった息が、いま、初めて、肺の底から、ゆっくりと、出ていった。張り詰めていた肩が、わずかに、落ちた。


委ねて、いいのか。三年ぶりに、その問いが、佐藤の中に浮かんだ。だが、それは、いま答えの出る問いではなかった。三年の傷が、健太の数言で癒えるわけが、ない。胸の底では、いつもの声が、まだ叫んでいた。お前にできるものか。また失敗する。また皆を巻き込む――。


そして、もう一つの恐怖が、せり上がる。いま、自分の手に負えないと認めれば。完璧なはずだった自分の設計が、内側から破られたと、この若いSOCの前に、さらけ出せば。――三年前と、同じだ。また、糾弾される。また、あの目で、見られる。一人で抱えてさえいれば、少なくとも、無様な姿を、誰にも見せずに済む。


だが、と佐藤は思った。その見栄を守って、いま、何になる。一人で抱えたまま、目の前で、すべてが燃え落ちるのを、また、指をくわえて見ているのか。


弱さを晒せば、裁かれるかもしれない。それでも――この被害を止めるには、もう、自分の無力を、この男の前に丸ごと差し出して、信じるしか、ない。


三年間、一度も傾かなかったほうへ、天秤が、ゆっくりと、傾いた。


それでも。


佐藤は、その叫びを、消そうとはしなかった。消せないことは、わかっていた。ただ、もう、その声に従う理由が、なくなっていた。守るべき「完璧」は、すでに、壊れている。守れなかった自分を、抱えたまま――それでも、震える膝の上に、立てる。傷と向き合うのは、あとでいい。いまは、目の前の、たった一つの動作だけを、やればいい。地下へ走って、鍵を、回す。それだけなら――こんな自分にも、できる。


「……分かった」


膝の震えは、止まっていなかった。それでも佐藤は、一歩を、踏み出した。


「俺が、金庫室へ走る。手順は、頭に入ってる。お前は――ネットワークを頼む。攻撃者を、閉じ込めろ。タイミングは、俺が地下から、無線で合わせる」


「やります」


「ルートのことは」佐藤は、早口で言った。三年分、誰にも見せなかった設計図を、いま、初めて他人へ開くように。「いいか、本番の系統に絡む経路は、絶対に触るな。隔離に使うなら、検疫用に切ってあるVNetがある。ネットワークセキュリティグループとVirtual WANのルートで、そこへ流し込め。`-target`で、そのリソースだけを狙え。間違っても、全体に`apply`を打つなよ。ステートが、いま、まともじゃない」


その一言が、健太を、芯から、粟立たせた。


ステートが、まともじゃない。


* * *


健太は、ターミナルに向き直り、Terraformを走らせた。攻撃者のセッションを隔離するための、ネットワークセキュリティグループとVirtual WANのルート変更。それを、コードで、打ち込んでいく。


`terraform plan`。


返ってきた差分を見た瞬間、健太の心臓が、ひとつ、大きく跳ねた。喉が、ひゅっと鳴る。キーに置いた指が、そのまま、こわばった。


画面に、緑色の `+`(作成)に混じって、無数の、赤い `-` が、並んでいた。


`-`。`destroy`。破壊。


ずれていたのだ。Terraformが手元に持っている「設計図」と、いま実際に建っている「建物」とが。攻撃者が裏で本番を直接いじった、その余波だった。図面と、現実が、食い違っている。


そして、この機械は、馬鹿正直だった。図面と現実が違えば、現実のほうを、図面に合わせて、作り直そうとする。いま全体に実行(`apply`)を打てば、Terraformは、この無数の赤い `-` を――「図面にない」とみなした本番の建物を――一階ずつ、片端から、取り壊しにかかる。攻撃者を止めるどころか、自分の手で、Aegisの基盤を、全国の電力網ごと、更地にしてしまう。


たった一度の実行ボタンの向こうに、その地獄が、口を開けて待っていた。


佐藤の言葉が、なぜあれほど切迫していたのか、健太は、骨で理解した。


全体に打てば、終わる。佐藤の言った、検疫用のVNetだけを――`-target`で、ピンポイントに狙う。


`terraform apply -target=`。佐藤が指定した、検疫用のリソース。そのワンブロックだけを、狙う。


打ち込む指が、震えた。一文字でも、ターゲットの指定を間違えれば、隣の本番リソースを巻き込む。健太は、息を止めて、リソース名を、一字一字、確かめた。


エンター。


`Error: Error acquiring the state lock`


「……っ、ロックが!」


ロックが、競合していた。


喩えるなら、こうだ。たった一人しか入れない管理室の、すぐ前まで来た。なのに、ドアが、開かない。中から、つっかえ棒が、かかっている。棒をかけた当人は、もうどこにもいない――ロックを掴んだプロセスは、とっくに死んでいる。なのに、棒だけが、残っていた。攻撃者が本番を触った、その置き土産だ。このままでは、ドアは開かず、隔離の一手は、一行も、打てない。


選択肢は、二つ。棒を無視して、力ずくでドアを蹴破るか(`-lock=false`)。だが、こじ開け方を誤れば、管理室そのものが――ステートの整合性が――壊れる。そうなれば、もう二度と、誰も、この部屋には入れない。復旧は、不能。健太の額に、汗が、にじんだ。どちらに転んでも、薄氷だった。


無線が、鳴った。地下へ駆け下りた、佐藤の、荒い息。だが、その声は、焦っていた。


『健太! 金庫室の、電子錠が……障害の余波だ! 認証パネルが、死んでる! 開かない!』


論理層を攻撃者が焼いた、その余波は、物理層の入退室管理にまで、回り込んでいた。社員証をかざせば音もなく開くはずのドアが、いま、沈黙している。サイバーの暴力が、ついに、現実の鉄の扉までも、内側から、ロックしていた。


無線の向こうで、激しい音。佐藤が、非常用のキーボックスを叩き割り、機械式のシリンダーへ、物理のマスターキーを、ねじ込んでいる。最後の数センチは、コードでは、開かない。人間の指と、肩と、体重で、こじ開けるしか、なかった。


重い、金属の、軋み。


『……開いた! 入った! 専用端末、立ち上げてる! そっちは!?』


「ドアが、開きません! 中から、つっかえ棒だ! 隔離が、打てない!」


一瞬の、沈黙。返ってきたのは、もう、怯えた声では、なかった。


『その棒は、残骸だ! かけた奴は、もう死んでる! 叩き壊せ、桐谷!』


「しくじったら、本番ごと、二度と戻りませんよ!」


『俺が責任を持つ! やれ!』


「責任は、二人で持ちます! ――やります!」


健太は、息を、止めた。


`terraform force-unlock`。ロックIDを、叩き込む。佐藤を信じて、つっかえ棒を、外から断ち切る。一度断てば、もう、戻せない。


エンター。


――解放。


ドアが、開いた。


アーキテクトの指示を、SOCの指が、実行する。指示する側も、される側も、もう、なかった。縦の勾配は、とうに、降りていた。回線の両端に残っていたのは、互いの無力を相手に預けた、二人の人間だけだった。


もう一度、`apply -target=`。


だが、緑は、灯らなかった。


`Error: Cycle:` ――真っ赤なエラーが、吐き出される。攻撃者が管理プレーンを直接いじった爪痕で、リソースの依存関係が、ありえない形に、こじれていた。まっとうな手順では、もう、通らない。


「くそっ……依存が、ねじれてる!」


残り時間が、頭の隅で、ちりちりと、焼けた。だが、ここで行の順番をいじっても、意味はない。Terraformは、コードの上下ではなく、リソース同士の参照から、依存の地図を組み立てる。攻撃者は、そこに細工をしていた。本来あるはずのない参照を一本、どこかのリソースに絡みつかせ、依存の輪を、閉じてしまっていたのだ。蛇が、自分の尾を、噛んでいる。これでは、どう順番を変えても、永遠に、回り続ける。


断ち切るには、その「一本」を見つけて、抜くしかない。だが――エンタープライズのステートには、何百ものリソースが、複雑に絡み合っている。その中から、敵が紛れ込ませた、たった一本の偽の参照を。初見で。この、数分で。健太の指が、宙で、固まった。無理だ。一人では、どこを探せばいいのかすら、わからない。


「佐藤さん!」健太は、無線に、叫んだ。「Cycleだ! 循環依存で、applyが、弾かれる! どこに、細工された!?」


専用端末を立ち上げながら、佐藤が、即座に、答えた。設計を、その身体にまで刻み込んだ男の、声だった。


『検疫用のVNetだ! あれは設計上、本番系統を絶対に参照しない! そこに参照タグが生えてたら、それが、敵の仕込みだ! そいつを、切れ!』


その一言が、霧を、裂いた。健太の指が、飛ぶ。検疫用VNetの、定義へ。あった――本来あるはずのない、本番系統への、参照タグ。敵は、ここに、輪の結び目を、隠していた。佐藤がいなければ、一人では、永遠に辿り着けなかった、一点。


`terraform state rm`は、劇薬だった。時限爆弾の配線から、正しい一本だけを選んで、切る。合っていれば、止まる。一文字でも間違えれば――本番の、生きたリソースが、管理の手から永遠にこぼれ落ち、二度と、戻らない。赤の線か、青の線か。やり直しは、利かない。


健太は、佐藤が指し示したアドレスを、二度、三度、目でなぞった。爪が、手のひらに、食い込む。そして――息を止めて、引き抜いた。結び目が、外れる。続けて、敵が仕込んだ`depends_on`の一行を、削る。輪が、ほどけた。まだ、爆発は、していない。


もう一度、エンター。


緑色のプログレスが、今度こそ、進み始めた。健太は、詰めていた息を、ほんの少しだけ、緩めた。


* * *


ブラインドを下ろした一室では、アヌビスが、四枚のモニターの一枚――攻撃インフラのCI/CDの、進捗バーを、静かに、見ていた。すぐ隣の画面では、金のチャートが、いつも通り、細かく上下している。


最終フェーズ。あとは、配信が、走り出すだけだった。彼にとって、それは「納品物」にすぎない。歪んだ予測が、この国の調達を、決済を、ほんの少しだけ、傾ける。その先で、渇いたドル資金の市場に、どれほどの亀裂が走るか――それは、隣で瞬く金のチャートが、やがて、答えを出すだろう。彼の取引の、結果として。ただ、その亀裂から、最終的に、誰が、いちばん大きな果実をもぎ取るのか。そこだけは、彼も、知らされていない。積まれた報酬の桁だけが、この「ほんの少し」の向こうに横たわるものの大きさを、静かに、語っていた。世界のどこかで、長いあいだ準備されてきた、一つの窓。それが、いま、ひらこうとしている。


進捗バーが、九八%を、指す。


――だが、そこで、彼の眉が、わずかに、寄った。最終フェーズに、想定にない、遅延。配信を待つはずのプロセスが、起動しない。権限の系統の奥に、説明のつかない、抵抗の気配があった。


彼の指が、キーボードの上で、速くなった。プロセスを、叩き直す。ログを、洗う。奪った権限を、握り直そうとする。だが、掴んだそばから、指のあいだを、こぼれていく。まるで、二つの手が、内と外から、同じ一枚の扉を、同時に、押さえているかのように。


おかしい。スコアは、完璧だったはずだ。対象は、単独で動く。誰にも、相談しない。それが、AIの弾き出した、答えだった。なのに――なぜ。誰が、この男の、隣にいる。


ほんの一瞬だけ、この冷えきった作業者の喉の奥から、舌打ちにも、呻きにもならない、乾いた音が、漏れた。


万能では、なかった。納品物は、窓の、すぐ手前で。彼は、気の抜けたエナジードリンクの缶へ伸ばしかけた指を、宙で、止めた。画面を、見つめたまま。


* * *


残り、四分。


無線の向こうで、佐藤が、最後の手順にかかっていた。


『Break-Glass、認証画面、出た! ハードウェアキー、挿す! ……生体、通せ!』


健太は、ターミナルを睨んだまま、叫んだ。


「佐藤さん、まだです! 今、攻撃者のセッション、生きてる! あなたが管理プレーンに入った瞬間、奴らもまだそこにいたら、権限の取り合いになる! 俺が、奴らを閉じ込める。閉じ込めた、その数秒で、一気に通してください!」


『分かった! 合図を!』


健太の`apply`が、完了した。ネットワークセキュリティグループの拒否ルールと、Virtual WANのルート変更が、実環境に、適用される。攻撃者の生きたセッションの、その戻りの経路が――書き換わる。本来の管理プレーンへ戻るはずだった通信が、健太の仕込んだルートに乗って、検疫用のVNetへ、AVDの閉域環境へと、吸い込まれていく。出口のない、隔離された箱の中へ。


大画面のログで、攻撃者の操作――承認ゲートを破ろうとしていた、その手が、ふっと、宙を掻いた。経路を失い、管理プレーンから、切り離された。


ほんの、数秒。


長くは、もたない。攻撃者は、すぐに別の経路を探す。だが、いまだけは。この数秒だけは。


「佐藤さん、今です! 通して!」


『通す!』


無線の向こうで、ハードウェアキーが、挿し込まれる音。そして――


『……弾かれた! 通らない!』佐藤の声が、裏返った。汗で滑ったのか、焦りで震えたのか。生体認証が、一度、彼を、拒んだ。


「もう一回! 落ち着いて、ゆっくりで、いい!」健太の心臓が、喉まで、せり上がる。この数秒の隙が、閉じれば、すべてが、振り出しだ。


『くそっ――』シャツの裾で、指を、ぐいと拭う音。もう一度。


今度は――ハードウェアキーと、生体認証が、複合で、通った。


ディレクトリ同期から切り離された、地図に載らないアカウント。金庫室の専用端末という、物理の送信元からしか、認証を受け付けない条件付きアクセス。攻撃者が海の向こうから決して通せなかったその扉が、いま、その場所に体ごといる人間の手によって、開いた。


クラウドの中枢権限が、防衛側の手に、奪い返された。


『健太! 取り返した! 管理プレーン、こっちに戻ってる!』


「――もらった!」


* * *


健太の指が、動いた。


中枢権限が戻った、その刹那。


――その指が、強制終了のコマンドの上で、一瞬、止まった。


これが走り出せば。俺たちの会社のサーバーが、毎晩、この国のエネルギー予算を、内側から外へ吸い出す――そういう道具に、変わる。その蛇口が、いま、開く寸前だった。


その奥に、もっと底の知れない何かがあることを、健太は、もう、考えなかった。考えるのは、自分の役目じゃない。いまの自分の仕事は、ただ一つ。この蛇口を、閉じることだ。


健太は、奥歯を噛み、承認待ちで凍りついていたCI/CDパイプラインのプロセスを、根元から、強制終了した。配信は、起動する機会すら、与えられなかった。


止まった。間に合った。


だが、手は、止めない。


汚染されたコンテナイメージを、クラウド上のレジストリから、一つ残らず、消去する。一・五%の針を仕込まれた、あのコードごと。続けて、攻撃者が握っているすべての既存セッションを、強制的に、無効化した。横からかすめ取った佐藤の通行証も、書き換えられた特権設定も、その瞬間に、すべて、ただの紙切れになる。


検疫VNetの箱の中で出口を探していた攻撃者は、その箱ごと、インフラから、完全に締め出された。


大画面のカウントダウンが、残り、一分十二秒で――凍りつき、そして、消えた。


ゼロを刻むことは、なかった。


針は、二月の薄氷に、届かなかった。


――だが、無傷では、なかった。


強引なステートの切除も、封印を破っての緊急変更も、ただでは済まない。本番系統から検疫用VNetを引き剥がした、その荒っぽい手術の巻き添えで、いくつかの周辺システムが、飛んだ。監視系の一部。非重要な連携バッチ。皮肉にも、あの囮の火事で最初に落とされた子会社の、復旧作業そのもの。失われたデータも、あった。原状回復には、これから、何日もかかるだろう。


爆弾処理に、無傷はない。守り切れなかったものの、その上に、辛うじて、コアだけを、守り切った。健太は、その事実を、奥歯で噛み締めた。勝った、とは、とても言えなかった。ただ、最悪だけは、防いだ。いまは、それで、十分だった。


* * *


遠い、名もない一室で。


アヌビスは、ノートパソコンの画面の中で、生きていたはずのセッションが、次々と無言で落ちていくのを、見ていた。経路が断たれた。セッションが無効化された。レジストリから、仕込みが消えた。すべてが、数分のうちに、起きた。


男は、缶を、静かに、机に置いた。表情は、変わらない。画面の隅のカレンダー――二月の窓を、一度だけ、見た。


窓は、逃した。


最も薄い氷を選んで刺すはずの針は、刺さる前に抜かれた。次の二月は、一年後だ。その頃の市場は、別の顔をしている。同じ仕掛けは、もう効かない。


作動時期は、動かせなかった。二月の窓は、一年に一度しか、開かない。だから、最後まで静かに、というわけには、いかなかった。派手な火を焚き、強引に押し通すしかなかった。それは、彼の流儀に反する、荒い一手だった。――そして、その荒さを、たった一人、見逃さなかった者がいた。広報のアカウント一つに「目的が読めない」と食い下がった、あの、しつこいSOC。答えの出ない小さな濁りを、どうしても放っておけない、男。あの一匹の犬にさえ、嗅ぎつけられなければ。すべては、静かに、終わっていたはずだった。


男は、発注主への、短い報告文を打った。「標的の防衛により、作戦は失敗。原因は、対象の孤立を突いた侵入経路が、最終局面で"連携"によって遮断されたこと」。


打ち終えて、男は、「連携」という単語の上で、指を止めた。


完璧にスコアリングしたはずの、最も孤独な個体。誰にも相談しないはずの、最弱点。その個体が、最後に、誰かと組んだ。一人で背負うのを、やめた。要件定義のどこにも、織り込みようのなかった変数だった。


男は、数えきれないほどの組織を、内側から、崩してきた。そのたびに突いてきたのは、いつも同じ、人間の孤立という、一点だ。孤立は、裏切らない。孤立は、金で買えるどんなゼロデイよりも、確実だった。――だが。人間が、その孤立を、自ら手放すとき。二人の、弱い人間が、互いの弱さを開いて見せて、手を取るとき。そこに生まれる何かを、彼のモデルは、ただの一度も、値付けできたことが、なかった。買えない変数。売り物にならない変数。それが、初めて、彼を、負かした。


男は、案件の振り返り(ポストモーテム)に、本来なら書く必要のない一行を、書き加えた。〈教訓:孤立は、最も確実な攻撃面である。ただし――対象がそれをやめたとき、この限りではない〉。


打ち終えて、彼は、めずらしく、モニターから、目を、上げた。下ろしたブラインドの、細い隙間から、外の光が、一筋だけ、床に落ちていた。彼が何時間も――いや、何日も、忘れていた、昼の光だった。


胸の底で、統計には決して分類できない何かが、ほんの一瞬、疼いた。悔しさ、と呼ぶには、静かすぎた。もっと寒い、もっと空虚な、名前のつかない感情。――彼が生涯をかけて突いてきた、その孤立の、いちばん奥には。ひょっとすると、ずっと、彼自身が、たった一人で、座っていたのかもしれなかった。誰とも組まず、何も信じず、案件から、案件へ。彼のやり方こそが、この世でいちばん、完成された孤立だった。


男は、まばたきを、ひとつ、した。それで、その感情は、消えた。あるいは、いつものように、丁寧に、蓋をされた。


ちょうど、受信箱に、次の案件の打診が、届いたところだった。男は、迷わず、それを、開いた。次の孤島を、探すために。それが、彼に唯一できる、蓋の閉じ方だった。


床に落ちた、一筋の光は、いつのまにか、消えていた。外では、陽が、まだ高いのかもしれない。だが、この部屋には、もう、届いていなかった。


* * *


対策本部に、誰も、声を上げなかった。


歓声よりも先に来たのは、深い、深い脱力だった。やがて、地下から駆け上がってきた佐藤が、ドアの前で、立ち止まった。汗だくで、肩で息をして、その手には、まだ、ハードウェアキーが、握られていた。


健太は、椅子から、ゆっくりと立ち上がった。二人は、対策本部の喧騒の真ん中で、しばらく、ただ、向かい合っていた。


「……俺の、せいだ」佐藤が、また、言った。声が、震えていた。「俺が、一人で、抱え込まなかったら。あの夜、誰かに、一言、相談してたら。こんなことに――」


「佐藤さん」健太は、首を振った。そして、天井を見上げて、息を吐いた。「俺だって、最初のMFAの通知、危うく見逃すところだったんですよ。三浦さんの苦情、『またか』で、流しかけた。深夜の三時に、面倒くさいなって。……誰だって、一人で見てたら、いつか、何かを見落とす」


健太は、佐藤を、見た。


「あなたが金庫室まで走らなかったら、俺は、中枢を取り返せなかった。俺が承認ゲートをねじ込まなかったら、あなたは、間に合わなかった。あなたがルートを教えてくれなかったら、俺は、本番ごと、全部、ぶっ壊してた。……どっちか一人じゃ、終わってたんです。今日、勝てたのは、誰かが完璧だったからじゃない。二人、だったからだ」


佐藤は、何も、言わなかった。


ただ、握りしめていたハードウェアキーを、ゆっくりと、開いた手のひらの上に、載せた。三年間、彼を縛り続けてきた「一人で背負う」という重さが、その手から、ほんの少しだけ――爪の先ほど――軽くなったように、見えた。


硬さが、ほどけたわけではない。三年の傷は、まだ、そこにある。たぶん、これからも、長く。ただ佐藤は、その夜、初めて、その重さを、一人ではない誰かの前で、下ろしてみせた。それは、回復ではなかった。回復の、ほんの入り口だった。


* * *


事件は、ぎりぎりのところで、食い止められた。汚染は、外へ漏れなかった。Aegisは、無事に、しかし一週間遅れて、リリースされた。一・五%の針は、誰の目にも触れないまま、抜き取られ、廃棄された。


世界の相場は、二月の窓を、何事もなく、通り過ぎた。金は、やがて落ち着き、ペトロダラーは、揺らぎながらも、その夜は、保たれた。


残された断片から、その設計の全体を描き出せた者は、各国の当局と、執念深い、ごく一握りの調査者だけだった。そして、彼らでさえ、それを、決して公にはしなかった。あまりに静かで、あまりに、巨大すぎたからだ。健太が指先で触れたのは、その途方もない引き金の、ほんの、先端に、すぎなかった。


そのことを、知る者は、ほとんどいなかった。経済ニュースのどこにも、「日本のあるインフラ企業のSOCアナリストと、一人のアーキテクトが、世界の決済システムを救った」とは、書かれなかった。健太たちが守ったものの大きさは、守られたがゆえに、誰の目にも、見えなかった。それで、よかった。


だが、社内では、健太の独断は、見過ごされなかった。封印されたブレークグラスを、現場のSOCアナリストが、独断で破った。被害を防げたかどうかは、別の話だ。手順違反は、手順違反だった。事件の数日後、健太は、セキュリティ監査と、懲戒委員会の席へ、呼ばれた。


委員会の空気は、温かくなかった。情報セキュリティ部門の責任者が、最初に口を開いた。


「結果的に被害が防げた。それは、認めます。だが――」彼は、テーブルの上の緊急ログを、指の背で、こつ、と叩いた。「だからこそ、危険なんです。『正しい理由さえあれば、現場の一存で封印を破ってよい』。それを一度でも認めれば、我々の統制は、根こそぎ崩れる。我々がゼロトラストでやってきたのは、まさにその逆だ。誰の判断も、無条件には信じない。役職も、善意も、実績も、関係ない。手順だけを、信じる。あなたがやったのは、その大前提を、たった一人で、覆すことだった」


正論だった。反論しようのない、正しさだった。健太は、言葉を、返せなかった。実際、彼が破った封印は、まさにそのために、存在していた。


そのとき、佐藤が、立ち上がった。


「一つだけ、言わせてください」声は、硬かった。だが、もう、逃げてはいなかった。「今回、敵が突いたのは、どこだったか。FIDO2でも、暗号でもありません。私です。三年間、誰にも相談せず、何もかも一人で抱え込んできた、私の孤立です。敵は、それを鍵にして、内側から、扉を開けさせた」


佐藤は、部屋を、ゆっくりと、見回した。


「あの夜、私たちを救ったのは、手順では、ありません」佐藤は、健太を見た。「手順を、二人で、破ったことです。肩書きの壁を越えて、互いの無力を、預け合った。……機械は、ゼロトラストでいい。けれど、人間まで、互いをゼロトラストにしたら――次に内側から開く扉を、もう誰も、閉じられなくなる」


部屋は、しばらく、静まり返っていた。


結局、健太に下されたのは、始末書一枚だった。懲戒は、見送られた。手順は、確かに破られた。だが、その破り方は、正しく記録され、正しく責任を引き受けていた。そして何より――組織が、学ぶべきものを、突きつけていた。健太は、現場に残った。そして、彼が破ってまで守ろうとしたその手順は、佐藤のその言葉をきっかけに、のちに、書き換えられることになる。


後に残されたのは、勝利の余韻ではなく、一つの、答えるべき問いだった。二度と、内側から扉を開けさせないために、何を、変えればいいのか。組織は、その問いに、言葉ではなく、仕組みで、答えることにした。


事件後、テラ・システムズは、新たな確認プロセスを、導入した。


本番への重大な変更や、緊急を装った依頼に直面したとき、決して、一人では実行させない。必ず、もう一人の人間が、隣で確認する。二人一組での承認。


それは、精神論でも、努力目標でも、なかった。彼らは、それを、システムそのものに、刻み込んだ。クラウド PIM――特権ID管理の承認フローを、作り直したのだ。いかなる特権ロールの有効化も、必ず、別の部署のピア(同僚)による、意図的な承認を、必須とする。一人の人間が、どれだけ焦っても、「自分一人で完璧にやれる」とどれだけ思い込んでも、システムが、それを許さない。特権は、二人の人間が、意図して手を取り合わなければ、構造上、二度と、一人では起動しない。


そして、それは、ただの技術的な統制でも、なかった。役職の上下を持ち込まない、フラットな二人。アーキテクトも、SOCも、新人も、ベテランも、その瞬間だけは、対等に、肩を並べて、一つの判断を、共に下す。


完璧な個人を、増やすのではなく。不完全な人間が、支え合える隙間を、用意する。それは、あの夜、健太と佐藤を救ったものの、制度版だった。一人の人間が、孤独から、ほんの一歩だけ踏み出した――その小さな出来事が、組織の設計思想に、なった。


* * *


夜勤が明けた朝、健太は、雑居ビルを出た。


雨上がりの中野は、あの夜勤明けの朝と、何ひとつ変わらない顔をしていた。同じ煮干しの匂い。同じ湯気。同じ、始発を待つ列。


世界の血流が、ゆうべ、その向きを変えかけたことなど、この街は、何ひとつ、知らなかった。立ち食いそばの親父は、今日も律儀に、出汁をひいていた。


結局、自分が守っていたのは、こういう朝なのだ。健太は、また、そう思った。あの夜と、同じ景色。同じ思い。けれど、たった一つだけ、違っていた。


「桐谷」


声に振り返ると、佐藤が、立っていた。彼も、結局、一睡もしていない顔だった。


「……飯でも、どうだ」佐藤は、ぶっきらぼうに、立ち食いそばの暖簾を、顎で指した。「一人で食うのも、なんだしな」


健太は、少し、笑った。三年間、誰とも食事をしなかったかもしれない男の、その一言の重さを、たぶん、健太は、半分くらいは、分かっていた。


「いいですね。おごりですか?」


「図々しいやつだな」


二人は、暖簾を、くぐった。かけそば、二杯。湯気が、寝不足の二つの顔を、温かく、撫でた。


出汁を啜りながら、佐藤が、ぽつりと言った。「……まさか、自分が、あんなリンクを踏むとはな」


自嘲でも、懺悔でもなかった。ただ、起きたことを、起きたこととして、湯気の中に、そっと置くような言い方だった。三年間、口が裂けても言えなかった「失敗した」を、彼は、いま、何でもないことのように、口にしていた。


「俺だって」と健太は、そばを噛みながら応じた。「人のこと、言えませんよ。ぜんぜん」


そして、少し、間を置いてから、続けた。あの極限の数分では、絞り出すようにしか言えなかったことを。


「さっき、しくじったことがあるって、言ったでしょう。……前の現場で。駆け出しの頃です。おかしいと思った異常を、相談したら未熟だと思われると思って、一人で黙って抱え込んで。確かめ終えたときには、もう手遅れで。止められたはずのものが、ひと晩で、でかい被害になってた」健太は、そばの湯気を、見つめた。「あのとき、わかったんです。一人で抱えるのが、いちばん危ないって。……なのに、それでも、つい、一人でやろうとしちゃう。人間って、そういうふうに、できてるみたいで」


佐藤は、何も言わなかった。ただ、汁を、ひとくち、啜った。その沈黙は、突き放すものでは、なかった。同じ穴の底を知っている者の、沈黙だった。


どちらからともなく、少しだけ、笑った。完璧な人間など、どこにもいない。誰もが、いつか何かを見落とし、どこかで間違える。それを、裁くでもなく、慰めるでもなく、ただ、二人で、湯気の向こうに、並べて眺める。


「二度と間違えない」とは、どちらも、言わなかった。そんな誓いは、きっと、また人を一人にする。代わりに残ったのは、もっと頼りなくて、もっと確かなものだった。――明日もまた、不完全なまま、一日、なんとかやっていく。それだけ。それで、よかった。


箸を置いて、健太は、なんとなく、スマホを、開いた。夜勤明けの癖で、経済ニュースの見出しを、目が、勝手に追う。


『短期金融市場、一時、ドル資金に逼迫の兆し』

『金相場、早朝に不可解な乱高下 ―― 要因は特定されず』


どちらも、小さな、ベタ記事だった。専門家が首をかしげて、明日には忘れる程度の、さざ波。世界は、何も起きなかったと思っている。実際、何も、起きなかったのだ。


だが、その見出しの上で、健太の指が、止まった。鳴るべきアラートが、一つも、鳴らない――夜勤でいちばん嫌う、あの種類の静けさ。何かが、とてつもなく、おかしいのに、システムは、何食わぬ顔をしている。その静けさに、そっくりな悪寒が、健太の首の裏を、撫でていった。この、ニュースにもならないさざ波が。ゆうべの、あの数十分の、向こう側にあったものの――ほんの、切れ端。自分たちが指先で押し戻したものの、本当の大きさを、健太は、いま、初めて、背中で、うっすらと、感じた。それが何なのかは、やはり、分からない。分からないままで、いい。ただ、その気配の、途方もない大きさだけが、湯気の中で、ぞっとするほど、確かだった。


健太は、スマホを、ポケットに、しまった。そして、まだ温かいそばを、もう一口、啜った。いまは、この一杯のほうが、ずっと確かで、ずっと、大事だった。


境界は、もう、ない。城壁の中に立て籠もる戦いの時代は、終わった。一人ひとりが、最前線だ。


だが、それで、よかった。


最前線に、一人で立つ必要は、もう、ないのだから。


健太と佐藤は、その境界なき荒野で、肩を並べて、姿なき敵と、戦い続ける。


敵が最後にこじ開けようとしたのは、システムの穴では、なかった。人と人のあいだに、いつのまにか空いていた、ひとすじの隙間だった。かつて、その隙間から、一枚の扉が、内側へと開いた。


いま、その隙間には、もう一人が、隣にいる。扉は、閉じている。


立ち食いそばの湯気の向こうで、中野の朝が、いつも通り、明けていった。


*―― 第四章 了 ――*


*―― 完 ――*


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ