ふつーのプログラマです。主に企業内Webシステムの要件定義から保守まで何でもやってる、ふつーのプログラマです。

鼠と竜のゲーム(6) 接見、謎のコード、実況見分

»

 裁判所で裁判官と面接するまで、タカシはまだ希望を捨て去ってはいなかった。検察が勾留請求を行ったとしても、裁判官にきちんと主張すれば、もしくは警察で自分の作成したプログラムの解析が完了すれば、T市立図書館へのアクセスに一片の害意もなかったことは、すぐに理解してもらえるだろうと考えていたのだ。

 しかし、タカシがそのような甘い幻想に浸っている間も、法の手続きは粛々と進められた。検察の勾留請求はあっさり認められ、タカシの身柄は速やかにT署に戻された。そして元の房に入れられ、冷たい鉄格子によって外界と遮断されたその時になって初めて、タカシにとっては、いや普通にWebアプリケーションを作成したことがあるプログラマであれば自明の理である事実を、司法関係者の誰1人として理解してくれなかったことを思い知らされたのだった。

 二度と戻ってきたくなかった場所で、タカシは不安な夜を過ごした。

 翌日の午後、当番弁護士との接見があった。タカシの当番弁護士になったのは、石田という名の、タカシと同年代、あるいは少し上の年代の弁護士だった。川崎市内に事務所を構えているという。いつも笑っているような顔だが、単に目が細いので、そう見えるだけのようだった。

 「遅くなってすまないね」石田弁護士は丁寧にわびた。「昨日のうちに来るはずだったんだけど、ちょっと別件で用事が重なってしまって」

 その口調は真面目そうで、少なくとも投げやりな様子ではなかった。タカシはひとまず、当番弁護士に対する偏見を捨てることにして、問われるままに、一連の出来事を石田弁護士に話した。

 石田弁護士はメモを取りながら聞いていたが、タカシが事件の流れをひととおり話し終えると、「ふーむ」と唸った。

 「いや、ぼくもこういう事件は初めてなんだけど。まあ、それにしても、偽計業務妨害にしたって被害額が具体的に出ているわけでもないのに、いきなり逮捕ってのは、ちょっとやり過ぎな気がするなあ」

 「そうですよね」タカシは嬉しくなった。「別に悪意があったわけじゃないのに」

 「あなたの話をまとめると、あなたのプログラムはリクエスト数って言うんだっけ? その数は多いけど、頻度は少なく、1秒に1回程度でしかないってことだね。これは普通の人が普通にホームページにアクセスするのと同程度の頻度でしかないと」

 「はい」

 「で、あなたは、図書館のシステム側にこそ、問題があるんじゃないかと考えているわけだ」石田弁護士は、ペンで手帳をトントンと叩いた。「それ、警察か検察官に言った?」

 「はい、検察官の方に説明しましたけど」

 「ふーん。まあ、これは私見だけど、不起訴って線が濃いんじゃないかな」

 タカシの心の中に希望が沸き起こった。

 「本当ですか!」

 「私見だよ、あくまでも。でも、最初、話を聞いたときは不正指令電磁的記録作成罪かと思ったけど、そういうわけじゃないんでしょう?」

 「その、不正何とかって……」

 「ああ、いわゆるウィルス作成罪。2011年に成立したやつ。そっちだとちょっと厄介かなって思ってね。ほら、あまり適用例がないから、警察が実績を作る目的で逮捕した可能性もあるわけで、そうなると、警察もメンツがあるから、何が何でも有罪に持ってこうとするだろうし」

 「なるほど」

 タカシもウィルス作成罪の話は聞いたことがあったが、さすがにスクレイピング目的のプログラムを、ウィルスと呼ぶのは無理がある。現に、これまで話をした警察、司法関係者の誰からも、そのような言葉は出ていない。

 「まあ、あなたは自分の問題がわかってるようだし、検察の方にもちゃんと正確に主張してるんだよね。だったら、もう私がやれることは、ほとんどないね」

 石田弁護士はそう言うと、手帳を閉じてカバンにしまったので、タカシは少し慌てた。

 「え、終わりですか」

 「うん。ぼくは、別にネット犯罪の専門家ではないし、あなたよりネットやプログラムの知識が多いわけでも何でもないからね。ぼくが生半可な知識でやるより、あなた自身が正確なところを主張した方が、たぶんうまくいくよ」

 「はあ、そうでしょうか」

 「きちんとありのままに主張して、調書にサインする前にはよく読むこと」石田弁護士は忠告してくれた。「おかしいと思ったら、絶対にサインしないこと。それだけ注意すれば、まず起訴まではいかない……と思う」

 そう言われても、タカシは不安だった。法律の知識など、ほとんど持っていない素人なのだから。

 「もし、先生に引き続きお願いしたいときはどうすればいいんでしょうか?」石田弁護士の能力を信頼してというより、逮捕されてから初めて出会った味方と言える人間と離れたくないための質問だった。

 「取り調べの時にでも、そう言えばいいよ。でも、うちの最低料金は40万円だし、さっき言ったように、あなた以上にできることは何もないから、たぶんムダ金になるよ。ま、何かうっかり失言とかしちゃって、つまり、罪を認めるようなことになってしまうとか、どうにもマズイ状況になったら呼んでくれていいけど」

 「……」

 少なくとも石田弁護士は、無料ですむところを、無理に長引かせて弁護料をせしめようなどとは思っていない程度には良心的だといえた。そういう意味では、まともな当番弁護人にあたったといえるのかもしれなかった。あるいは、無料でのサービスはここまで、という線を引いているのかもしれないが。

 「他に聞きたいことはある?」

 「前に人から聞いたんですが、弁護士が話をしてくれれば、保釈してもらえることがあるって……」

 タカシの言葉が終わらないうちに、石田弁護士は短く首を横に振った。

 「それはたぶん無理」

 「どうしてですか?」

 「証拠隠滅の恐れがあると警察は考えているだろうからね。在宅捜査にしなかったのも、たぶんそれが原因なんだろうね」

 「でも、PCとか携帯とか、全部押収されたんですよ?」

 「最近のIT技術はすごいでしょ。よく知らないけど、クラウドとかさ。そっちの方でプログラムを実行するとか、自宅とは別の場所にPCが隠されてて、それでサイバーテロの実行指令を出すとか、いろいろ可能性はあるでしょ。警察の技術の人も全知全能じゃないから、全ての可能性を防ぐなんてできない。だから、無罪が確定するまでは釈放は無理だと思うよ」

 「……」映画じゃあるまいし、と思ったものの、素人がIT関係者に抱く印象なんて、そんなものなのかもしれない。「そうですか……」

 「まあ、あなたはどう見ても犯罪者タイプじゃないしね。警察もそれぐらいは分かると思うから、もう少しの辛抱じゃないかな」

 あまり慰めにはなっていないその言葉を最後に、石田弁護士は帰っていった。

 結局のところ、当番弁護人との接見は、事態の進展に寄与するものではなく、法律のプロフェッショナルに少なからぬ期待を寄せていたタカシとしては、正直なところ肩すかしを食らわされたような気分だった。ただ、そのプロから、私見とはいえ不起訴の見込みを聞かされたことは、自宅から連れ出されて以来、初めて差した一筋の光ではあった。

 

 それからタカシは、連日のようにT署で取り調べを受けた。取り調べはほとんど小林警部補が行った。小林警部補は、初日に聴取したように、「結果的にDoS攻撃になってしまい、図書館の業務を妨害した」という内容の調書を作成しようとしたが、タカシはきっぱり拒否した。

 「検察でも言いましたが、あれは業務妨害でもないし、DoS攻撃でもありません。悪意があったわけでもないんです。私は自分には罪はないと思っています」

 小林警部補はやや険悪な表情でタカシを睨んだ。

 「そうは言うけどね、実際に図書館の方じゃ、あんたのプログラムのせいで業務に支障が出てるんだよ。検索もできなくなってたから、市民にも迷惑がかかってる。それについて、反省はしてないわけかね?」

 「図書館の人には迷惑をかけたと思っていますけど」タカシは鼓動が高まるのを感じたが、勇気を出して言い募った。「それは私のせいではなく、図書館のシステムの問題だと思います」

 「あ、そう」小林警部補は調書を入力していたノートPCから手を離して、頭の後ろで組んだ。「自分は正しいプログラムを作っただけで、それがどういう結果を生んでも知らねえよ、ってことかね? そういう態度だと、裁判官の心証悪くなるよ」

 「弁護士の先生は、不起訴になるだろうって言ってましたよ」

 「それは弁護士さんの個人的見解だろう。検察の方じゃ、ちゃんと偽計業務妨害罪が成立すると見てるんだよ」

 その言葉にショックを受けたタカシは継ぐ言葉を失い、途方に暮れた。その表情がよほどひどかったのか、小林警部補は、少し優しげな口調で続けた。

 「だから、反省すべきところは、きちんと反省したって言っておいた方がいいんだよ。な?」

 そう言われてさすがに迷いが生じたものの、最初の事情聴取のとき「業務妨害をしてしまいました」と書かれた調書にサインしてしまったことは、今でも失敗だったと思っていた。石田弁護士も、納得がいかなければサインしてはいけない、とアドバイスをくれた。それを思い出したタカシは、小林警部補の目をまっすぐ見ながら言った。

 「なんと言われようと、私のプログラムが業務を妨害したとは考えてはいません。問題になるとしたら、図書館のシステムの方だと思います。ここは譲れません」

 「あ、そう。後悔しないといいけどね」

 その口調は、しかし、それほど確信があるわけでもなさそうだった。自分の房に戻ってから、タカシはその意味を考えてみた。

 次の日の取り調べで、手詰まり感を漂わせた小林警部補からの聴取がひととおり終わった時、タカシは逆に質問してみた。

 「図書館のシステムを作ったベンダさんには、話を聞いたんですか?」

 お前の知ったことじゃない、と一喝されることを半ば覚悟していたが、意外にも小林警部補はあっさりうなずいた。

 「聞いたよ」

 「何て言ってたんですか?」

 「システムに問題はないってさ」

 タカシは思わず苦笑した。ベンダの立場としては、そう言うだろう。タカシだってそう答えるに違いない。

 「で、それを信じたんですか? 図書館のプログラムは調べたんですか?」

 「何でそんなことをしなきゃならんのだね」小林警部補は苦々しい顔になった。「そっちを捜査してるわけじゃないんだからね」

 「あの、すみませんが」タカシは躊躇いながら言ってみた。「アクセスログを見せてもらえないでしょうか」

 「ああ? 前に見せただろう」

 「いえ、できれば、Webサーバではなくて、アプリケーションの方のログがあれば見たいんですが」

 「はあ? アプリケーション?」

 タカシは20分ほどかけて、小林警部補に、Webサーバとアプリケーションサーバの違いを説明した。小林警部補は、両者の違いを完全に理解できた様子ではなかったものの、ファイルボックスの中をしばらく探した後、「これのことかな?」と数枚のプリントアウトを取りだして、タカシの前に置いた。

 「あ、これです」

 しばらく無言でアクセスログを追っていたタカシは、ある行を指した。

 「この、211ってどういう意味ですか?」

 「え、どれ?」

 タカシが指していたのは、

ERROR 201x-04-04 18:21:11,015 code=211
ERROR 201x-04-04 18:21:12,061 code=211
ERROR 201x-04-04 18:21:13,104 code=211
ERROR 201x-04-04 18:21:14,009 code=211
ERROR 201x-04-04 18:21:15,323 code=211

 という数行だった。この日時は、図書館のサーバが「ダウンした」と言われた日時と一致しているようだった。

 「さあ、分からんねえ」小林警部補はタカシの顔を見た。「これがどうかしたの?」

 「これは図書館のシステムが出しているエラーコードだと思うんですけど、意味がわからないんです。ベンダさんに質問してもらうわけにはいきませんか」

 「ふーん、それで何か分かるの?」

 「分かるかもしれません」

 小林警部補は肩をすくめて、その部分にポストイットを貼り付けた。

 翌日の取り調べのとき、タカシが質問する前に、小林警部補の方から結果を教えてくれた。

 「昨日のコードだけどね、データベースに接続できないときのエラーだって言ってたよ」

 「やっぱりそうですか」タカシはうなずいた。

 「どういうこと?」

 「検察でも言ったことですけど、図書館のシステムには、データベースへの接続が解放されないバグがあるんじゃないかと思うんです」

 タカシは検察官の前で行った説明を繰り返し、同じような図も書いた。それを理解しているのかいないのか、小林警部補は無言で耳を傾けていた。

 「こういう現象が起こったんじゃないかと思います。ベンダさんに、こういうバグがないか聞いてもらえませんか?」

 「あんたねえ」小林警部補は呆れたように苦笑した。「警察はあんたの使いっ走りじゃないんだがね。まあ、いい。これも捜査だ。聞いておくよ」

 「お願いします」

 とはいえ、タカシはほとんど期待はしていなかった。図書館のシステムを作ったのが、どこの会社なのか知らないが、小林警部補の話だとかなりの大手SIerであるらしい。タカシ自身、そういう会社の下請け・孫請けとして働いたことがある。その経験からすると、大手SIerのエンジニアは、バグであっても「仕様です」と言い張ることが多い。条件反射でそう言うように刷り込みされているのではないかと思うぐらいだ。ましてや、今回は、警察沙汰になっているのだから、自社の不利になることを言うはずがない。

 数日後に小林警部補は「そのようなバグは存在しないと言っとるよ」とタカシに告げた。

 予想していたことで、タカシはたいして失望もしなかったが、ふと、ある可能性に思い至り、ベンダへの質問を依頼したのは失敗だったかもしれない、と不安になった。もしベンダがコネクション解放の問題に気付いていなかったとしたら、自分はみすみすベンダに警告を発してしまったことになるのではないか、警察がコネクション問題に目をつけているぞ、と。ベンダが証拠隠滅を図る気になれば、図書館システムのソースをこっそり修正してしまうことが可能だ。

 まさか、地方自治体の図書館システムを開発するようなベンダが、そこまでやるなどあり得ない気もする。だが、そもそもタカシがここにいること自体、正しい捜査が行われていれば、本来ならあり得ないことなのだ。それを考えると、タカシはもはや何を信じていいのかわからなくなってくるのだった。

 

 翌日、6月7日の取り調べは、いつもと様子が異なっていた。タカシが連れてこられたのは、いつもの取調室ではなく、署内の会議室のようだった。会議用テーブルの上に、1台のノートPCとスイッチングHUBが置かれている。HUBには3本のLANケーブルが差し込まれていて、1本はノートPCのLANポート接続し、1本はテーブルの下に消えている。3本目は所在なげにテーブルの上に転がっていた。

 「何ですか?」タカシは小林警部補に訊いてみた。

 「ああ、今から、実況見分やるから。ちょっと待ってて」

 小林警部補はそう答えると、壁際の内線電話を取って、ぼそぼそと何か話し、すぐ受話器を置いた。

 「そこ、座ってて」小林警部補は一番端の椅子を指した。

 タカシは言われた通りに座り、期待と不安が入り交じった気分で待った。

 数分後、ドアが開いた。

 「すみません。遅くなりました」

 入ってきたのは、佐伯警部補だった。片手にタカシの家から押収したThinkpadを抱えている。タカシは旧友に再会したような懐かしい気分になった。独房にいる間、本は貸してもらえたが、PCや携帯電話などの電子機器には一切触らせてもらえなかったからなおさらだ。

 佐伯警部補はThinkpadをタカシの目の前で広げ、アダプタを壁のコンセントにつなぐと電源を投入した。低いモーター音とともに、液晶モニタにロゴが浮かび上がり、続いてFedora16のGRUB2メニューが表示された。佐伯警部補はエンターキーを叩くと、タカシに向き直った。

 「じゃ、起動するまで、これからやることを説明しますね」佐伯警部補は捜査官らしくない気楽な口調で告げた。「起動したら、あなたには、T市立図書館サーバにアクセスしたプログラムを実行してもらいます。cronは全部停止してあるので、手動でコマンド叩いてください。いいですか?」

 「はい」タカシはうなずいた。

 「調書によると、図書館サーバにアクセスするプログラムは2種類あって、1つが予約状況確認で20分間隔に実行、もう1つが新着図書確認で1日1回18時に実行。これは間違いないですね?」

 「はい、そうです」

 「こちらとしては」佐伯警部補はFedora16の起動状況を横目で見ながら続けた。「新着図書確認プログラムが、図書館サーバに問題の事象を引き起こしたとみています。これは、あなたも同じ意見ということで間違いないですか?」

 タカシはまたうなずいた。そのことは、取り調べの中で伝えてあったことだ。

 「では、これからあなたに、実際に実行してもらいます。といっても……」佐伯警部補はクスクス笑った。「またまた図書館のサーバを落とすわけにもいかないので、20秒ぐらいで合図します。そしたら、止めてください。こっちでもLANケーブル外しますけどね」

 「分かりました」

 「こっちのPCで、パケットキャプチャします。すでに、デフォルトゲートウェイを、このノーパソに変えてあります。80番ポート以外は通さないようになっています。念のため」佐伯警部補はまた画面を見た。「お、起動しましたね。じゃあ、rootでログインしてください」

 タカシは胸の高鳴りを押さえながら、数週間ぶりにThinkpadの前に座り、いつもの癖で指をポキポキ鳴らした。小林警部補が注意深く手元を注視しているのに気付いたが、それには構わず、キーボードのホームポジションに手を置き、ログインした。

 「ちょっと待ってくださいね」佐伯警部補はゲートウェイになっているノートPCで、マウスを数回クリックした後、ThinkpadにLANケーブルを差し込んだ。「はい、じゃあ、実行してください」

 タカシはコマンドを叩いた。

[root@wintermute1 ~]# cd /home/takashi/tools/library/
[root@wintermute1 library]# sh ./newbookchecker.sh

 たちまち、コンソールに進行状況やデバッグ情報が、ずらずらと表示された。

start newbookchecker...
checking -- http://www.library.t-city.kanagawa.jp/tosho/Shinkan/1.jsp
found book.bookCode=00780413605.
check book.bookCode=00780413605...done.
found book.bookCode=00813770162.
check book.bookCode=00813770162...done.

 20秒ほど走らせたところで、佐伯警部補は声を上げた。

 「はい、止めてください」

 Ctrlキーに指を載せていたタカシは、佐伯警部補の言葉と同時にCキーを押して実行を停止させた。

 「いいですね」佐伯警部補は満足そうにうなずいた。「じゃ、もう一度やってみましょうか」

 佐伯警部補の指示に従って、タカシは再びプログラムの実行・停止を繰り返し、結果も忠実に再現された。

 「はい、終わりにしましょう」佐伯警部補はThinkpadからLANケーブルを抜いた。「キャプチャーできましたよ」

 「どうだったんだ?」小林警部補がもどかしそうに訊いた。

 「この結果を見る限り、倉敷さんの供述と一致していますね。リクエストが並行して送られることもないし、リクエストに対するレスポンスが返ってきてから、次のリクエストを送るようになっています」

 タカシは安堵のため息をもらした。

 「プログラムも調べてもらえましたか?」

 「ええ、調べました」佐伯警部補はタカシを勇気づけるような暖かい声で答えた。「HTMLを解析している部分は関係ないと思われるので詳しく見ませんでしたが、リクエスト関係には特にDoS攻撃になるようなコードはなかったですね」

 「だが、現実にこの人のプログラムが実行されたことで、図書館のサーバが落ちたことは間違いないだろう。どういうことだ?」

 だから、それは落ちたんじゃなくて、データベースへのコネクションが解除されてないんですよ、とタカシが言おうとしたとき、佐伯警部補が先に答えた。

 「そこんとこはよく分かりませんね。相性ですかね」

 「そういうものにも相性ってあるのかね」

 呆気にとられたタカシは、信じられない思いで佐伯警部補の顔を凝視した。相性って何だ、一体?

 タカシは恐怖と不安と同時に感じた。ひょっとすると、これまでタカシが何度か主張してきた、図書館システムのコネクション解放漏れの可能性について、一番知識があると思われる佐伯警部補に話が通っていないのではないか。だから、佐伯警部補はその方向での捜査を行っておらず、タカシの側のプログラムに原因を求めているのだろう。だが、コネクション解放漏れについては、あくまでもタカシの意見としてではあるが、調書に書かれているのを確認して、署名したのだ。佐伯警部補はそれを読んでいないのか。

 「あの……」タカシは佐伯警部補に声をかけた。「取り調べの時に言ったんですけど……」

 「ああ、すみませんけどね」佐伯警部補は気ぜわしそうに時計を見ながら、タカシの言葉を遮った。「私は次の予定があるんで、これで終わりにします。言いたいことがあれば、取り調べの時にお願いしますね」

 そう言うと、佐伯警部補は慌ただしく、ノートPCやHUBを片付け始めた。

 「さ、行くよ」

 小林警部補に促されて立ち上がりながら、タカシは名状しがたい焦燥感と徒労感に見舞われていた。

(続く)

 この物語は事実を基にしたフィクションです。実在する団体、個人とは一切関係ありません。また司法当局の捜査方法などが、現実のそれと異なっている可能性があります。

Comment(3)

コメント

通りすがり

佐伯ェ…。
遠隔操作事件の聴取もこんな感じだったのかなぁ。

ちけんち

容疑者が自分にかけられた容疑を晴らそうとする時、この物語の主人公のように真相を自分で推理しないと容疑を晴らせないっていうのは現実も同じなのかな。だとしたら容疑者になるって相当恐ろしいことですよね。

本来は、自分を容疑者だと推定する論理が不十分であることを示すだけで十分だと思うのですが、現実はそうなっていないのかな。

この事件の例で言えば、「主人公のアクセスの直後にサーバが正常にアクセスできなくなった」は事実ですが、その原因が主人公のアクセスであり、かつ責任があるかどうかは全く別の話ですよね。「アクセス」の中身を吟味しないことには全くわからないはずなんですけどね。

主人公からのアクセスが原因であり、かつその行為に責任があるというのはベンダの主張だと思いますが、これは結果的には技術的に正しくなかった。これって偽証罪かなにかにならないのかしら。

rurie

PCの遠隔操作の件では2名ほど
無罪の人間に「私がやりました」って言わせてるよw>警察

コメントを投稿する