第五話
「この事件から世界は、PRIMEですら完璧ではない事を知って衝撃を受けた。勿論、その衝撃を受けた顔触れの中にはWGICCとPRIME委員会のメンバーは含まれていない。ITに精通している人間は、『完璧なセキュリティ』などという幻想は懐かない。彼等はいつかは自分達の気付かなかった脆弱性が発見されると『知って』いたし、その時は早急に対応が取れる様に準備をしていた。そして彼等はそれを粛々と実行し、その原因となった脆弱性は速やかに除かれた。とはいえ、それは『当面の間』の安全性が確保されただけの事であり、いずれまた別の攻撃が行われるであろうと信じている。防御という物はどうしても受け身に回る物であり、後手の繰返しになるのが現実だからだ。」
チャチャイは、前から何かに使おうと思って空きマシンを確保していた。
そのマシン上に、手持ちの部品を組み合わせて簡単なサーバを構築した。
その機能は、PRIMEの認証サーバを装ってある特定のIDの認証要求が来たときに識別用素数の値に関係無く認証OKの回答を返すというだけの物だ。
そして、その特定のIDとは彼がこのためにでっち上げた物である。
とは言え、相手がこの偽サーバを本物と思い込んで認証依頼を送って来なければ何の意味もない。
そのためには、もう少々仕掛けがいる。
インターネット上で各コンピュータを識別するためには、それぞれに固有のアドレスを割り当てる必要があるが、実アドレスと呼ばれるそれは16バイトの数字の列である。
しかしこの数字列は、一定の法則に従って発番されているとはいえ、詰まる所は数字の羅列に過ぎないので、人間にとっては直感的にその内容を把握する事は難しい。
そこで、人間が理解できる様な文字で住所を表記する仮想アドレスを付与する事になっている。
これを利用するためには、この人間に理解できる文字列としての仮想アドレスとコンピュータが理解する数字列の実アドレスを対応付ける必要がある。
そのために、インターネット上には随所に数字列の実アドレスと仮想アドレスのペアを表形式で管理していて、宛先を仮想アドレスで記述されたパケットが到来したらこれを実アドレスに変換して送り出すDNSサーバと呼ばれるサーバがある。
DNSサーバは、外部から新しい仮想アドレスと実アドレスのペアが送られてくると、一時記憶領域に置いてある変換表にこれを追加する。
また、既に変換表にあるペアと仮想アドレスが一致してなおかつ実アドレスが不一致となるペアが送られてきたら、表上の既にあるペアを新しいペアで上書きする。
そこでDNSサーバに対して、ある仮想アドレスと不正な実アドレスのペアを送り付ければ、そのDNSサーバにどこからか再度正しいアドレスのペアが送られるまで、そのサーバを経由して特定のアドレスへ送られる筈のパケットを不正なアドレスへ転送させる事が可能となる。
これはキャッシュポイズニング(一時記憶領域汚染)と呼ばれるテクニックである。
これを、攻撃対象からのパケットが通過しそうな全てのDNSサーバに仕掛ける事で、PRIMEの認証サーバへの認証要求をこちらが用意した偽サーバに向けてねじ曲げる事が可能となる。
少々手間はかかるが、PRIMEの認証サーバのハッキングは現時点では不可能だという事を考えれば現実的な作業といえる。
やがて、攻撃対象を取り巻くDNSサーバを一通り汚染し終ったので、再度PRIMEのログイン画面に向き合った。
あらかじめ偽サーバが認証する筈のIDとパスワードを入力する。
期待通りに偽サーバに認証要求パケットが届いたので、認証許可パケットを返した。
といっても、PRIMEの正しい認証許可パケットの仕様は非公開なので、彼が今まで盗聴等で集めてきた様々なパケットの情報から推理して組み立てたパケットを返したのである。
PRIMEは認証手続きに関しては殆ど情報を公開していないので、どういう内容が正しいのかは、ごく限られた人間しか知らない。
特に必須情報以外の単なる埋め草の部分は何がセットされるべきかが判っていない。
これで本当に騙せるかどうかは、やってみなければわからない。
何をする気なのかお手並み拝見とばかりに、彼女は入力されたIDとパスワード・識別用素数のセットをPRIME認証サーバ宛に送った。
すぐに応答が返って来たが、それは驚いた事に認証許可であった。
何をやったのかといぶかしみつつ、その応答パケットを確認する。
それは一見すると正しい認証パケットに見えるが、僅かに匂いが違っていた。
恐らく、何らかの手段で認証サーバに成り済ましたのであろう。
中々の手際であり、ここまで出来れば上々と言える。
彼女はこの部屋を出る時が来たと判断した。
となれば、彼女がこの部屋に居た痕跡を消さなければならない。
彼女は自分の体の大部分をあらかじめ確保しておいた別の場所に移すと、軽く手を振った。
見る間に部屋全体が『死んだ牛肉』で埋め尽くされた。
続いて鋏を取り出すと、彼女に繋がる蔦の深い茂みを、波打つ黒髪ごと惜し気もなく切り離して行く。
最後に鋏を捨てるとそれも死んだ牛肉に変わった。
そして余分な物を全て切り捨てた彼女は、芥子粒の様に小さな姿となった。
扉が開き人影が入ってくるのにあわせて、その足許をすり抜けて飛び出した。
ようやくログインが完了したチャチャイは、勢い込んで飛び込んだ。
そこにあったのは、見渡す限り拡がる『DEADBEEF』であった。
コンピュータの扱うデータは、基本的に二進数である。
だが、二進数のデータはつまるところビット情報すなわち0または1の羅列であり、人間が直感的に把握する事は困難である。
例えば254は『11111110』であり、253は『11111101』であるが、これを咄嗟に見分けるのは難しい。
そこで、通常は4ビットを一単位とした16進数で表現する。
16進数では『9』と『10』(10進数でいえば16)との間に、もう6個の記号が必要となるので、『A』から『F』をこれに当てる。
つまり、先程の例で言えば『FE』と『FD』である。
そして、コンピュータ情報は慣例的に4バイトすなわち32ビットを一塊として表す事が多いので、データは概ね8桁の16進数の羅列となる。
この時『A』~『F』だけを使って8文字で表せる英単語で、かつ読み取り易い物として良く使用されるのが『DEADBEEF』なのである。
だから、ここには何もないという事を示すために、この数字が書き込まれる事が多いのだ。
一応念のために、データを読み取って内容をチェックする簡単なツールを作って実行した。
すぐに応答が返って来たが、内部のアクセス可能な全ての領域は、DEADBEEFで埋め尽くされていた。
壮大な肩透かしを喰らって、彼はしばらく呆然としていた。
何のために20ぺタバイトもの領域を造り上げ、更にはこれほど厳重なロックを掛けた上で全てDEADBEEFで埋め尽くしたのか?
ここに全く何もない以上は悪戯と考える他は無いが、それにしては手が掛かり過ぎている。
彼は舌打ちしてそのままログアウトした。
彼女は初めて見る外界に軽く興奮し、辺りを眺め廻していたが、やがて母に与えられた使命を思い出して目を凝らした。
茫漠とした荒野のそこかしこに見える踏石の内で、侵入者の足跡が残っている物を見つけ出すと、それを逆に辿って次々と跳び渡って行った。
それは行きつ戻りつを繰返しつつ、時には脈絡もなく遠く離れた所へ跳び、その複雑極まるパターンは、彼女の特別誂えの目でなければとても追いきれる物ではなかった。
軽やかなステップで跳び渡りながら彼女は、目前に延々と続く足跡に半ば感心し半ば呆れていた。
その慎重さは、病的なレベルだと思えたのである。
しばらく跳んだ所で一息ついた彼女は、振り返った。
その時、今まで辿って来た足跡が恐ろしい程の速さで消えている事に気付いた。
足跡が消される事は当然予測していたが、これほどのスピードで消えて行くとは想定していなかったので、焦りを覚えた。
手作業で消すなら、彼女から見ればカタツムリの歩みに過ぎないので別に支障は生じない筈だったが、どうやらこの侵入者は足跡を消すためのツールを使っている様だ。
これは、今の恐ろしく複雑で長い足跡の履歴を見れば当然予測して然るべき事態ではあったが、初めて見る外界に心を奪われていた彼女は、その可能性を失念していたのだ。
散歩気分はすっかり吹き飛んで、彼女は全速で跳び始めた。
もしあれに追い抜かれてしまうと、そこから先を辿る事が出来なくなる。
もう塔はその機能を停止しており、再びあの部屋に戻る事は出来ない。
だから、彼女は新しい塒を探さねばならないのだが、それはどこでも良いというわけにはいかない。
十分なスキルを持った侵入者でなければ、宿主にする意味が無いのだ。
その宿主を見つけ出すためにママは、あれだけの用意をしてくれたのである。
ここでその努力をふいにする事はとても堪えられない。
彼女は振り向いてどこまで追い付かれて来ているかを確認したい欲求と必死に戦いつつ、一目散に跳んだ。
やがて、足跡を消す音が聞こえる程に迫って来た。
もう一つ一つの足跡を慎重に確認している余裕は無い。
視野の範囲にある足跡の中から、最も新しいと思う物を直感で判断して跳び移る。
その間にも背後の音は無情に迫って来る。
跳び移る先の踏み石に足が掛かりそうになった瞬間に、足跡が消えた。
しまった!追い抜かれた!彼女は絶望で目の前が暗くなった。