S03-P01 異世界SLA99.99% ~元SEは今日も魔法インフラを落とさない~

第40話: 入力経路から注入されてる

第3アーク · 3,432文字 · revised

認証トークンの導入から五日後。攻撃者は沈黙していた。

「静かすぎますね」

エルナが監視結晶石を眺めながら呟いた。

「嵐の前の静けさ、ってやつですか」

ミーナが帳簿に数字を書き込みながら言った。工房の日常業務は続いている。王都の定期メンテ、各区画の巡回点検、手順書の更新、やることは山積みだ。

「たぶん、次の手を考えてるんでしょう」

リオンは資料を整理しながら答えた。

「なりすまし攻撃が防がれたことは向こうも気づいている。次はもっと巧妙な」

その瞬間、監視結晶石の一つが激しく点滅した。

「第七区画、異常検知!」

リオンが立ち上がる。エルナがすぐに通信魔法陣に手をかけた。

「何が起きてます!?」

「農地魔法陣が、暴走してます! 土壌の魔力が異常上昇、作物が枯れ始めて」

通信の向こうから、悲鳴が聞こえた。

「すぐに行きます!」


第七区画の農地に到着したとき、光景は悲惨だった。

畑一面の作物が、黒く変色して枯れている。土壌からは異常な魔力が噴き出し、空気が歪んで見えるほどだ。農民たちは遠巻きに畑を囲み、呆然と立ち尽くしている。

「これは……」

エルナが息を呑んだ。

リオンは農地魔法陣の中心に駆け寄り、【診断】を発動した。

魔力の流れが——おかしい。入力パスから異常な魔力パターンが流れ込み、本来の土壌調整術式を書き換えている。

「これ、インジェクションです」

「インジェクション……?」

「魔法陣の入力パスに、不正な術式を注入されてます。SQLインジェクションと同じ——入力値として送られた命令が、そのまま実行されている」

アルヴィスが駆けつけた。

「何が起きている」

「魔法陣への攻撃です。入力パスから不正術式を注入されて、暴走しています」

「止められるのか」

「今すぐ魔力供給を遮断してください!」

アルヴィスが手をかざし、農地魔法陣への魔力供給を強制的に切断した。魔法陣が停止し、土壌からの魔力噴出が収まる。

静寂が戻った。

だが、畑は——もう手遅れだった。一面の作物が枯れ、土壌は汚染されている。

「今年の収穫が……」

農民の一人が膝をついた。


リオンは農地魔法陣の刻印を【診断】で詳細に調べた。

「入力パスに、不正な術式が埋め込まれています。これは」

「外部から送り込まれたのか」

「そうです。農地魔法陣には『土壌の状態を外部から入力して調整する』機能があります。本来は魔術師が定期的に土壌データを入力して、最適な魔力配分を調整するためのものですが」

リオンは刻印の一部を指差した。

「入力値の検証が甘いんです。『これは土壌データだ』と信じて、そのまま魔力パターンとして受け入れている。だから、不正な術式を『土壌データのふり』をして送り込めば」

「実行されてしまう、ということか」

「その通りです」

エルナが震える声で言った。

「じゃあ、他の農地魔法陣も……」

「危険です。同じ脆弱性を持っているはずです」

アルヴィスの顔が険しくなった。

「王都には農地魔法陣が十二ヶ所ある。すべてが狙われる可能性があるということか」

「はい。それに、」

リオンは地図を広げた。

「農地だけじゃありません。水浄化魔法陣、灯火魔法陣、通信魔法陣——外部入力を受け付けるすべての魔法陣が、理論上は攻撃対象です」

「……全部か」

「全部です」


工房に戻り、緊急会議が開かれた。カティアも駆けつけた。

「第七区画の被害状況は?」

「今年の収穫は全滅です。土壌の浄化には最低でも半年かかります」

カティアの表情が曇った。

「民への補償が必要ですね……」

「殿下」

リオンが資料を広げた。

「問題は補償だけではありません。この攻撃が他の区画にも波及すれば、王都の食料供給が破綻します」

「対策は?」

「入力値の検証機構——サニタイズ層を、すべての魔法陣に実装します」

「さにたいず……?」

「『浄化』です。外部から入力された魔力パターンを、実行前に検証する。正常なデータ形式か、不正な術式が含まれていないか、厳密にチェックします。不正と判断されたものは、実行前に弾く」

エルナが図を見ながら言った。

「つまり、入ってくるものを全部疑うんですね」

「その通り。ユーザー入力は常に悪意があると想定しろ——セキュリティの鉄則です」

カティアが頷いた。

「分かりました。必要な人員と予算は確保します。——どれくらいで実装できますか?」

「設計に二日。王都全域への展開に一週間」

「早く」

「これ以上は無理です。手順を省略すれば、別の障害を引き起こします」

カティアはリオンを見た。その眼には焦りと、同時に——信頼があった。

「分かりました。では、その計画で進めてください」


リオンは二日間、ほとんど眠らずに設計を続けた。

サニタイズ層の設計は、慎重に慎重を重ねる必要がある。厳しすぎれば正常な入力まで弾いてしまい、緩すぎれば不正術式を通してしまう。

「リオンさん、また寝てないでしょう」

エルナが差し入れを持ってきた。

「あと少しで設計が終わります」

「それ、昨日も聞きました」

「……すみません」

エルナは溜息をついて、リオンの隣に座った。

「手伝います。何をすればいいですか」

「テストケースの作成を手伝ってください。正常な入力パターンと、異常な入力パターンのサンプルを用意して、サニタイズ層が正しく判定できるか検証します」

「分かりました」

二人は並んで作業を続けた。

深夜。ミーナが毛布を持ってきた。

「二人とも、徹夜はダメですよ」

「でも」

「分かってます。だから、せめて毛布を」

ミーナが二人の肩に毛布をかける。その優しさに、リオンは少しだけ罪悪感を覚えた。

「……ありがとう、ミーナ」

「お礼はいいから、終わったらちゃんと寝てくださいね」


二日後、サニタイズ層の設計が完成した。

リオンはアルヴィスに設計書を渡した。

「入力値の魔力パターンを三段階で検証します。第一段階は形式チェック——データ形式が正しいか。第二段階は範囲チェック——魔力の出力値が想定範囲内か。第三段階は術式チェック——実行命令が含まれていないか」

「三段階……面倒だな」

「面倒です。でも、これをやらないと——また暴走します」

アルヴィスは設計書を読み込んだ。やがて、小さく頷いた。

「……悔しいが、理に適っている。これで進めろ」

「ありがとうございます」

「だが、実装は私も手伝う」

「え?」

「お前一人では一週間かかると言っただろう。私が加われば——五日で終わる」

リオンは一瞬、言葉を失った。

アルヴィスが——協力してくれる。あれほど「我々のやり方に口を出すな」と言っていた局長が、今は自ら手を動かそうとしている。

「……お願いします」


王都全域へのサニタイズ層展開が始まった。

リオン、エルナ、アルヴィス、そして魔術局の技師たちが総動員され、各区画の魔法陣に浄化フィルタを実装していく。

農地魔法陣から始まり、水浄化、灯火、通信。すべての外部入力を持つ魔法陣に、一つ一つサニタイズ層を追加していく。

「第三区画、完了しました!」

「第五区画、テスト成功!」

報告が次々と上がる。

リオンは各区画を巡回し、実装を確認していく。【診断】で魔法陣を見ると、新しく追加されたサニタイズ層が正しく動作しているのが分かる。

「よし、これで入力パスからのインジェクション攻撃は防げます」

「本当に大丈夫か?」

「完璧ではありません。でも、少なくとも今回と同じ攻撃は防げます」

エルナが疲れた顔で笑った。

「リオンさんらしい答えですね」

「完璧なセキュリティなんて存在しませんから」


五日目の夕暮れ。

最後の区画——第十二区画の農地魔法陣へのサニタイズ層実装が完了した。

「全区画、展開完了!」

報告を受けて、リオンは深く息を吐いた。

「……終わった」

「お疲れ様です、リオンさん」

エルナが肩を叩いた。アルヴィスも、珍しく疲れた顔で椅子に座っている。

「これで、また一つ——攻撃を防げるようになった」

「ああ。だが」

アルヴィスが窓の外を見た。

「相手は必ず次の手を打ってくる」

「……はい」

リオンは監視結晶石を見上げた。すべて正常に明滅している。

だが、この静けさが。いつまで続くのか。

「次は何を仕掛けてくるか……」

リオンは手順書を開いた。サニタイズ層の運用手順、障害時の切り戻し手順、定期点検の項目。すべてを記録する。

次の攻撃に備えて。

この戦いは——まだ終わらない。


【あとがき】
第40話「入力経路から注入されてる」でした。インジェクション攻撃との戦い。入力値を信用しない、というセキュリティの鉄則が異世界でも活きます。

文字数: 3,432