Episodes[7] // コアモジュールのシミュレーター
いつもの朝食の風景だ。
けれども今日は少し違う。すべての皿が空にになった。忠志はついにTofuoをヒトの味覚に合せることに成功したのである。名付けてTofuoの蒲焼きである。
だが、忠志の目元には隈がくっきりと浮かんでいた。なぜならば、夜中の間、何度も遠隔治療要請が忠志のもとに舞い込んで来たからである。ついに眠れなくなった忠志は、要請の合間にTofuoの調理法を開発してしまったというわけだ。寝ぼけ頭は発明の王である。
「死ぬ……。昔は徹夜なんてどうってことはなかったのに」
しかし、十歳以上年上であり、一睡もしていないはずのホシは、むしろ顔色がいつもより良いように見える。理由を問うと、ホシはすまし顔で答えた。
「訓練を受けていますので」
アカネは、ストレッチャーに横たわるツバメに目をやった。
「そろそろ、ツバメさんを助ける方法を考えませんか?」
「……そうですね。僕が死ぬ前に」
ホシはタブレット端末を触っている。
「なるべく首都時間の日中に、緊急性の高い患者のみ使用するよう通知を送りました」
「ありがたい……」
忠志は旧式のノートパソコンで資料を開き、目を通した。
「さて、ツバメさんを助けるとしても、実験を繰り返してウィルスの動作原理を解明する必要があると思います」
しかしアカネは肩をすぼめた。
「正直ツバメさんで実験するのは、怖いです」
「シミュレーターを用意しましょう」
忠志は食料庫に向かった。
段ボール箱が所狭しと積み上げられている。足元には既に開封された段ボール箱があった。今朝忠志が開封したものだ。中には、真空パックに入ったTofuoがぎっしりと詰まっている。
「ん? 何か少ない気がするな」
確かに今朝は、いつもより多くのTofuoを料理に使用した。
だが、明らかに減っているように見えた。
「気のせいか」
忠志はTofuo五個を抱え、研究室に戻った。
ホシとアカネが見守るなか、忠志はビーカーにTofuoを投入した。その白い直方体は、ビーカーの底で僅かに跳ね返り、身を震わせながらビーカーの壁にもたれかかった。
続いてナノマシンを溶いた生理食塩水を投入する。すると、Tofuoはみるみるうちに形を失い、水の中に溶け去った。豆乳のように乳白色に濁った水溶液は、しばらくして再び透き通りはじめる。やがて、ビーカーの底に、透明の樹脂の塊や管がいくつか形成された。それぞれ中には電子回路やチップが封じ込められている。一見、失敗したレジンアクセサリーを紐で結び合わせたかのようである。
忠志がビーカーにチューブを二本差し込み、循環装置に接続する。装置にはブドウ糖液を供給するパックと、酸素を供給するエアーポンプが接続されていた。
忠志はピンセットで樹脂の塊から伸びる一つの管を取り出し、その皮膜を少し剥がした。中の導電体をバラし、診断用の端末のシリアルポートから伸びるケーブルと蓑虫クリップで結線する。しばらくすると、樹脂の塊の一つにステータスランプが点灯した。診断用端末のコンソール上に、目にもとまらぬ速さで起動ログが流れた後、ログインユーザー名を問うプロンプトが表示された。
「NebulAIのコアモジュールのシミュレーターを用意しました」
忠志はそう言って、他のメンバーを手で招いた。
「シミュレーターですか? まるで本物ですが」
ホシは眉をひそめて尋ねる。
「本物といえば本物です。NNGPAはダミーですが」
「これで、気兼ねなく遊べますね」
アカネは、いち早くキーボードを触りたいとうずうずしている様子だ。
「……遊ぶ?」
そのホシの冷淡な問いに、アカネは直ちに青ざめる。見かねた忠志は助け船を出す。
「技術者のスラングです。システムの概要を理解するために機能を試験的に試すことを、遊ぶといいます」
「……釈然としませ」
「ふぉーーーぁ! 私も遊ぶぞいー!」
ツバメが割り込んだ。そして即座に気を失う。
「わかりました」
ホシは諦めたように、ため息をついた。
忠志はいくつかコマンドを打ち込み、シミュレーターのシステムバージョンがツバメのそれと一致していることを確認した。ツバメにインストールされていた独自アプリケーションも、すべて同じバージョンをインストールする。
「それでは、まず、感染させてみますか」
「その前に、万が一を考えて、電波が遠くに飛ばないようにする必要があると思います」
「確かに」
忠志は、アカネの提案に従い、シミュレーターのLPWANインターフェースの設定を変更した。電波出力は最小限、テスト用のPSK(事前共有鍵)を設定する。そしてツバメにも同様の措置を施す。
「完全な電波暗室にはなりませんが、フォースフィールドを張れば外部との通信を遮断できると思います」
ホシの提案に忠志は頷いた。
「お願いします」
ホシは腕時計型の装置を操作する。すると彼女を中心とした半径五メートルに球形のフォースフィールドが展開された。風に吹かれると、何もない場所に砂嵐のようなノイズ走る。ホログラム技術の応用だろうか。
「あくまでも緊急時の護身用ですので、あまり長時間は展開できません」
「分かりました」
忠志はコマンドを打ち込み、シミュレーターの無線機能を有効にした。そして、キーボードをアカネに譲った。
「tcpdumpを仕込みます」
「はい」
「ホシさんお願いします」
ホシはツバメに接続したコンソールに無線機能を有効するコマンドを打ち込んだ。もしアカネの証言が正しければ、直ちに感染し、発症するはずである。
「tcpdumpはどうです?」
「ツバメさんのリンクローカルIPv6アドレスからの通信が到達しています。メッシュ型ネットワークへの参加リクエスト受理、コネクションを確立しました」
「CPUは?」
「特に異常はありません」
「おかしいな……」
「あ、待ってください。エコーバックしなくなりました」
コンソールに大量のメッセージが流れる。起動ログである。やがて、ユーザー名の入力を促すプロンプトが表示された。
「再起動した」
「はい」
「CPUを見てください」
しかし、CPU使用率は百パーセントどころか数パーセントで推移していた。
「なんでだろう、同じ症状が出ない……」
「発症条件を満たしていないんでしょうか」
そういって、アカネはコンソールに流れるログを眺めた。
もしここで発症すれば色々な実験を行える。
しかし、発症すらしないのは予想外だった。
忠志は頭を抱えた。寝不足の頭では良いアイデアが思いつかない。
だが、モヤモヤとした疑問が脳裏に浮かんだ。何かがおかしい。
「あ、ちょっと今、思ったのですが……。このウィルスの犯人って、本当に命を奪うことが目的だったんでしょうか?」
忠志の問いに、ホシは首をかしげる。
「というと?」
「いや、今ふと思ったんです。感染したら再起動する。命を奪うつもりなら、そのまま再起動できなくすれば良いんです。起動している間しか心臓は動かない。酸素が供給できなければNNGPA内のニューラルネットワークは崩壊します。そうでしょう?」
「はい。三十分ほどで」
「なんでCPUを百パーセントにして、その熱でジワジワと命を奪おうなんて回りくどい方法を……何か変なこと言ってます?」
すると、ホシは顎に手を当てた。
「つまり、このウィルスの作者にとっては、対象者が即死しては困る理由があったということですか」
一方、アカネはキーボードで何かを打ち込みながら忠志に言った。
「もしかして、CPUを占有するのは偶然の産物なのかも? ……そもそも本当にカーネルモードでウィルスが動作しているんでしょうか?」
「でも確かにツバメさんはkworkerがCPUを占有していますが」
「例えば、ちょっと良いですか? これが何もしない基本的なカーネルモジュールです」
===================================================
#include <tulax/kernel.h>
#include <tulax/module.h>
MODULE_LICENSE("MIT");
static int __init test_init(void) {
return 0;
}
static void __exit test_exit(void) {
}
module_init(test_init);
module_exit(test_exit);
===================================================
「ここに無限ループの処理を一行追加します」
===================================================
【ソースコード省略】
※このソースコードは情報処理安全確保支援士の正当業務行為として、自らの電子計算機上で技術的検証を行うことを目的として作成したものですが、2018年現在の動向を踏まえると、刑法 第168条の2(不正指令電磁的記録に関する罪)を根拠に処罰される可能性が否定できないことから、ソースコードの公開を自粛します。以降、同様とします。
===================================================
「そして、コンパイル」
===================================================
maint@nebulai-test:~$ make
make -c /lib/modules/10.1.2-102-generic/build SUBDIRS=/home/maint KBUILD_VERBOSE=0 modules
make[1]: Entering directory '/usr/src/tulax-headers-10.1.2-102-generic'
CC [M] /home/maint/test.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/maint/test.mod.o
LD [M] /home/maint/test.ko
make[1]: Leaving directory '/usr/src/tulax-headers-10.1.2-102-generic'
===================================================
「そして、出来上がったカーネルモジュールをインストールしますね」
===================================================
maint@nebulai-test:~$ sudo insmod test.ko
===================================================
「システムが応答しなくなりました。何を入力してもエコーバックしません」
アカネがキーボードを叩くが、画面には何も表示されなかった。フリーズ状態である。
「本当だ……」
そして、循環装置にセットした温度計が、液温が徐々に上昇していることを示していた。つまり、システムはフリーズしていても、CPUは動作している。
「こんなプログラミング初心者でも書けるコードで……」
「カーネル空間で動作するプログラムは、システム全体に深刻な影響を与えられるわけです。もっとも、カーネルモジュールのインストールには管理者権限が必要ですが」
すると、ホシが冷たい眼差しで尋ねた。
「しかし、なぜそれをご存じなのですか?」
「大学生の時、履歴書を量産するために、研究室にあったXYテーブルを制御するドライバーを書いたのです。もっとも、それはTulaxではなく、Linuxでしたが」
雲行きが怪しい。険悪なムードになりそうだ。忠志は冷や汗を流しながら、笑顔を努めた。
「そうすると、普通はCPUを占有してしまわないよう、なんというか、譲歩するよう組まれてるってことですか?」
「はい。ワークキューとかを使って適切にスケジューリングします。例えば、ワークキューではスリープが使えるので、こんな風にすれば……」
アカネは、再びキーボードでコードを打ち込んだ。今度はコード量もやや多い。忠志はすべての意味を理解できたわけではなかったが、workqueueという単語がそこらかしこに登場する。
===================================================
【ソースコード省略】
===================================================
「それでは、コンパイルしてインストールします」
===================================================
maint@nebulai-test:~$ sudo insmod test.ko
maint@nebulai-test:~$
===================================================
すると、今度は、システムが応答不能に陥ることはなかった。
アカネは、続いてtopコマンドを実行する。するとkworkerが並ぶ、どこかで見たような絵面がそこにはあった。
「あ、kworkerがCPUを……」
とはいえ、kworkerの後の数字は異なっている。全く同じ事象というわけではないようだ。
ホシは画面を覗き込みながら尋ねた。
「つまり、ウィルスは完全にCPUを占有してしまわないよう、わざと譲歩しているということですか?」
「おそらく。殺害を目的としたウィルスが、そんなことします? 私も殺害が目的のウィルスではない説を推します」
アカネはそう言って忠志を見上げた。
「そう思います。あえて、反論するなら……そう、感染を拡大するためにしばらく生かしておかなければならなかったのかも」
するとホシが即座に否定した。
「だとすれば、CPUの使用率を高めるような目立つようなことをするのは筋が通りません」
それにアカネが加勢した。
「カーネル空間で暴走しているのは、実はウィルスではなく正当なプログラムだったとすれば……」
「ウィルスの影響で意図せず暴走している!?」
事態は思わぬ方向に進みそうだった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます