Episodes[3] // Erasing
「ナノマシンを再プログラムして、ホシの記憶チップにバイパス回路を設ける。コアシステムをシャットダウンした状態で、そのバイパス回路を通じてデータにアクセスすることは可能なはず」
忠志は、ナノマシン制御言語でコードを記述する。
バイパス回路程度であればライブラリにある基本構成パーツを組み合わせるだけで構成できる。新たに敷設した伝送路を、汎用入出力ポートに直結し、データを抽出すれば良い。
「ただ、そのデータが暗号化されています。その暗号鍵はセキュリティチップ内部に安全に保管されていて、取り出せない」
つまり、ひとたびセキュリティチップがリセットされてしまえば、もう打つ手はない。NNGPAは無事でも、記憶喪失になる。しかし、ナノマシンを使ったとしても、セキュリティチップから暗号鍵を取り出すことはできない。高度な耐タンパー性が確保されているからである。セキュリティインシデントへの対処が、本来のセキュリティ機能に妨げられるとは皮肉である。
アカネは融けてしまった氷嚢を交換しながら忠志に言った。
「実際にストレージを暗号化している鍵は、セキュリティチップ内部の鍵とは異なるはずです」
「何だって……?」
「セキュリティチップから暗号鍵を取り出せないなら、どうやって復号しているんです?」
「……確かに」
すると、ツバメが加勢する。
「NebulAIのセキュリティチップは、パーティション内のメタデータ領域に記録されたFull Volume Encryption Keyを復号するためにしか使ってないですよ。実際にストレージの暗号化に使われているのは、セキュリティチップ内のVolume Master Keyではなく、Full Volume Encryption Keyなので、セキュリティチップを使ってこれを復号すれば良いだけ、です!」
捲し立てるツバメに、忠志は困惑した。
「ごめんなさい、何の事かさっぱり……」
「とにかく、暗号化ストレージの解読はウチらの専門、です! 暗号鍵の確保は我々に任せて、とっととデータを吸い出すです」
「……ありがとうございます」
「他に問題は?」
「コアシステムをシャットダウンしている間しか、バイパス回路を使えません。その間は心臓を含めすべての臓器が機能を停止する。三十分程度しかもたない」
NebulAIの体組織は基本的に酸素の供給がなければ三十分程度で回復不可能なダメージを受けてしまう。特にNNGPAがダメージを受ければ取り返しが付かない。
ふと目に飛び込んだのはビーカーに放置されたコアモジュールのシミュレーターだった。
「そうだ、シミュレーターです。これと同じものを体内の制御用ネットワークに接続すれば、臓器の制御ぐらいはできるはずだ。祝園さんTofuoを持ってきてください」
ナノマシン溶液にTofuoを浸け、コアモジュールのシミュレーターを作製する。一方で、忠志はホシの体内情報ネットワークの回路にも、汎用入出力ポートへのバイパス回路を設けた。
全ての準備が整った後、忠志はコンソールで痛覚を無効化するコマンドを打ち込んだ。
「ホシさん、申し訳ない」
そう言って、忠志はレーザーメスでホシの額、中央より左寄りの部分の皮膚を十円玉サイズの円形に切り抜いた。その部分に汎用入出力ポートがあるからだ。薄い軟骨を剥がすと格子状に並んだ丸ピンソケットが現れた。
忠志はホシの右肩の付け根を八秒間強く掴み、コアシステムをシャットダウンした。
ホシの心臓は停止する。
忠志の額には汗が滲んだ。
ビーカーの中のコアモジュールから伸びる管の一つを、ブレッドボード用の端子付きケーブルを介してホシの汎用入出力ポートに接続する。シミュレーターの電源が入ると、臓器への制御コマンドが送信される。
しばらくして、ホシの心臓は再び動き出した。
ホシの頸動脈の脈拍を確認し、ほっとする。
しかし、勝負はここからだ。
忠志は汎用入出力ポートを介して、ホシのストレージをノートパソコンのストレージインターフェースに接続した。ddコマンドで、ホシのストレージ内のすべてのデータを複製し、ディスクイメージファイルに保存する。
ノイズ対策をしていない回路を経由するため、通常の転送速度よりは低速となってしまう。ホシのストレージを完全に複製するには半時間ほどかかりそうだった。
並行してアカネとツバメが暗号鍵の確保を行う。さすが技術復興省の職員と言うべきか、彼女らの手際は良く、あっという間に暗号鍵を取得できてしまった。その間、忠志は言われるがままにセキュリティチップへのバイパス回路を構成しただけであった。
データの転送も残りあと少しとなった。
この状態なら、コアモジュールが完全に停止しているため、脳内温度が上昇することはない。最初からこの方法で時間を稼げば良かったのだ。
しかし、突然、シミュレーターのコンソールにエラーが表示された。ホシの各臓器からの悲鳴であった。元々他人の頭で臓器を動かしているような状態だ。パラメーターの不整合で臓器に負荷が掛かっている。不調になるのも当然だった。
やむなく、忠志は心臓を除きすべての臓器の機能を停止させた。この状態では長くはもたない。
「データパーティションの復号は?」
忠志が尋ねると、アカネは頷いた。
「OKです。マウント成功、ファイルも平文で見えています」
「プライバシーの問題があるので、あまり中身は見ないようにお願いします」
データ転送が完了したところで、忠志はシミュレーターを切り離し、ホシの両肩の付け根を八秒間強く掴んだ。
すると、ホシのコアモジュールが起動し、コンソールに『RECOVERY MODE』と出力された。
「では、システムパーティションに最新のシステムイメージを書き込みます」
忠志の指は震えていた。
これから書き込むシステムイメージは、ツバメのシステムパーティションの内容と一致することは既に確認済である。そして、ホシのシステムバージョンがツバメと同じであることも確認している。
忠志は意を決してエンターキーを押した。
システムイメージ書込みが開始される。
忠志は固唾を呑んで進捗を見守った。
――Verifying update image: 10%
――Verifying update image: 40%
――Verifying update image: 80%
――Verifying update image: 100%
――Update image is successfully verified.
――Digital signature is valid.
――Stating update...
――Erasing boot partition: 10%
――Erasing boot partition: 50%
――Erasing boot partition: 100%
――Flashing boot image: 10%
――Flashing boot image: 50%
――Flashing boot image: 100%
――Erasing system partition: 10%
システムパーティションの消去が始まった。
もう後戻りはできない。忠志は滝のように冷や汗を流しながら、唾を飲み込んだ。
――Erasing system partition: 40%
――Erasing system partition: 90%
――Erasing system partition: 100%
―― Generating new full volume encryption key.
――Flashing system image: 10%
――Flashing system image: 20%
――Flashing system image: 30%
――Flashing system image: 40%
――Flashing system image: 50%
――Flashing system image: 60%
――Flashing system image: 70%
――Flashing system image: 80%
――Flashing system image: 90%
――Flashing system image: 100%
――Verifying: 10%
――Verifying: 20%
――Verifying: 30%
――Error: Verification failed
「な……!」
忠志は目の前が真っ白になった。
「検証に失敗? ……なぜ」
「冷静に。とりあえず、もう一度試すんです」
忠志はアカネの提案に従った。
――Verifying update image: 10%
――Verifying update image: 40%
――Verifying update image: 80%
――Verifying update image: 100%
――Update image is successfully verified.
――Digital signature is valid.
――Stating update...
――Erasing boot partition: 10%
――Erasing boot partition: 50%
――Erasing boot partition: 100%
――Flashing boot image: 10%
――Flashing boot image: 50%
――Flashing boot image: 100%
――Erasing system partition: 10%
――Erasing system partition: 40%
――Erasing system partition: 90%
――Erasing system partition: 100%
―― Generating new full volume encryption key.
――Flashing system image: 10%
――Flashing system image: 20%
――Flashing system image: 30%
――Flashing system image: 40%
――Flashing system image: 50%
――Flashing system image: 60%
――Flashing system image: 70%
――Flashing system image: 80%
――Flashing system image: 90%
――Flashing system image: 100%
――Verifying: 10%
――Verifying: 20%
――Verifying: 30%
――Verifying: 40%
――Verifying: 50%
――Verifying: 60%
――Verifying: 70%
――Verifying: 80%
――Verifying: 90%
――Verifying: 100%
――Verification completed successfully.
――Rebooting....
「よし!」
忠志はほっとした。
ホシのコアシステムの起動プロセスが開始された。
システムの起動ログがコンソールに流れる。ここまでは正常だ。忠志は固唾を呑んで見守った。
しかし、突如としてその流れが止まる。
――Kernel panic
カーネルモジュールの一つが正常にロードできないというエラーが表示されていた。
再起動を試みるが、結果は同じであった。
とにかく起動しなければ、ホシの心臓は動かない。
しかし、試行錯誤をしているうちにタイムリミットは残り十分を切っていた。
忠志は、机を叩いた。
「どうして起動しない……!」
「……ストレージがハードウェア的に壊れているのかも?」
アカネはカーネルログを眺めてそう言った。
「とすれば、シミュレーターの不揮発性メモリチップが流用できるはず……」
忠志はシミュレーターの不揮発性メモリチップに、ホシのバックアップデータを書き込んだ。新たなバイパス回路を構成し、ホシのストレージインターフェースに接続した。
「よし、再起動してみよう」
ホシの起動プロセスは正常に進行した。
コンソールにはログインプロンプトが表示された。
そして、ホシは大きく息を吸った。
呼吸が止まっていた約二十分間分の酸素を取り戻そうとするかのように、しゃっくりのような激しい呼吸を繰り返す。やがて血中酸素濃度が安定し、ようやく呼吸が落ち着いた。
「よし……あとは意識の回復を待って、このメモリチップをどうやって交換するか――」
突然ホシは苦しそうに呻き声を上げ、上体を仰け反らした。
忠志は自分の身のように苦しかった。思わずホシの右肩の付け根を掴んで、コアシステムを強制終了させた。
忠志は呆然とする。
「一体何が……」
「最後のカーネルログを見ると、一部のカーネルモジュールが異常動作をしているようでした」
アカネは、さらにもう少し長くシステムを立ち上げておけばもう少しはっきりしたことが言えただろうと補足したが、即座にシステムを強制終了した忠志の行動には理解を示した。
忠志は意を決して、ホシのコアシステムを再び立ち上げるが、今度は起動段階でカーネルパニックが発生し、異常停止した。
「……さっきは立ち上がったのに、まるでランダムに発生するバグだ」
忠志は頭を抱えた。
こんなバグほどタチの悪い物はない。
「ランダム……ランダム……」
アカネも考え込む。しばらくして、ツバメに言った。
「そうだ、KASLR! ツバメさん、あなたのシステムでKASLRは有効ですか?」
「何言ってるですか、NebulAIなら普通有効になってるですよ」
「今どうなっていますか?」
「ほわっ、無効になってる、です!」
「それって、なんですか、そのKAS……」
「Tulaxカーネルのセキュリティ機能の一つで、カーネル・アドレス・スペース・レイアウト・ランダマイゼーションの略です」
ツバメが鼻高々に説明を引き継ぐ。
「例えば、カーネル空間のコードがメモリ上のどこに配置されるかをランダム化するです。そうすると、攻撃対象のコードがどこにあるか予測しづらくなるですよ」
「それが、ホシさんは有効になっているのでは」
何度かの再起動の末、奇跡的にホシのシステムが正常に起動する。確かに、アカネの指摘通り、ホシのシステムではKASLRが有効になっていた。
「とりあえず無効にします」
アカネは忠志からキーボードを奪うと、ブートローダーの設定を変更し、KASLRを無効化する設定を起動時オプションに追記した。
ホシのコアシステムを再起動する。
そして、正常に起動が完了した。
だが、CPU使用率は百パーセントとなっている。ハリマ熱病の典型的な症状だった。
しかし、今はsudoが使える。
忠志はnebulai-visiondサービスを停止した。
ホシは微かに呻いたが、CPU使用率は平常通りとなった。
絶望的な状況は脱したことになる。
忠志は額の汗を拭った。
「つまり、ハリマ熱病ウイルスは、そのKASなんとかを無効化し、どこかのタイミングでカーネル空間の特定のアドレスに位置しているコードを攻撃している……そう考えられるわけですか」
アカネは頷く。
「おそらく。そして、KASLRが有効になっていると、ウィルスの作者が想定していないコードを攻撃してしまうのでしょう」
忠志は、未だ苦悶の表情を浮かべているホシの頭をそっと撫でた。
「でも、なぜ感染したのだろう。なぜ今発症したんだろう」
処置台の横にパイプ椅子を置き、忠志は倒れ込むように座った。
アカネは既にソファーに倒れ込んでいる。
「嵯峨さん、あなたはホシさんのシステムに何かしませんでしたか?」
「確か……そうだ、ホシさんには睡眠機能に異常があって自力で覚醒できなかったんです」
「覚醒……これが! オイラの
ツバメが突然奇声を上げたので、アカネは彼女の頭を軽くチョップした。
「その覚醒ではないのです。で、カーネルモジュールを修復した、と」
「その通り。いくつかのファイルを修復して、正常に読み込まれていなかったカーネルモジュールに関しては、insmodコマンドでインストールしたんです」
「そうすると、カーネルモジュールの読み込み順が本来とは異なることになります」
ツバメはアカネの頭に倍返しのチョップをしながら、補足する。
「攻撃対象のコード、例えばFPGAのドライバーのコードが、想定したメモリ上のアドレスに存在しないってことになるですよ」
忠志は思考を巡らす。
「だからファイルを修復した後もしばらくは発症しなかった。でも、その修復が原因で、睡眠中の定期再起動が正常に実施されるようになった。再起動したときに、本来の読み込み順でカーネルモジュールが読み込まれ、攻撃対象のコードが特定のメモリアドレスに存在するようになった」
「ビンゴ。こう考えると、辻褄が合います」
そう言って、アカネはツバメの頭にチョップする。
「じゃあ、ホシさんがこれまで発症しなかったのは、カーネルモジュールが壊れていたからってことですか」
「恐らく。ブートパーティションのバックアップを取得するのを失念していたので、確証はありませんが……」
アカネとチョップの応報に飽きた様子のツバメが、退屈そうに指摘する。
「だとすると、ホシさんは相当前に感染していた可能性すらあるですよ」
「まさか、いつから……」
忠志はつぶやくように言った。
ツバメが耳をピクリと動かす。
「事情を知ってそうな人が来たですよ」
ツバメの小声に、ピンと空気が張り詰めた。
忠志はホシのホルスターから銃を抜いた。
光線銃の使い方など知らないが、威嚇ぐらいには使えるだろう。
「――三十七年前だ」
その、しわがれ声には聞き覚えがあった。
影から姿を現したのは白髪の男性医師――ハカリだった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます