釈放後3ヶ月経過

起訴猶予処分で釈放後3ヶ月経過。朝日新聞の取材により、図書館サイトに不具合があることが判明した。

岡崎図書館事件の真実を検証

Librahack

岡崎図書館事件の詳細

検察庁で聞いてきました

起訴猶予になった理由を聞きに検察庁へ行ってきた話。

「なぜ起訴猶予になったのか?」を聞きに検察庁へ行ってきました

朝日新聞 神田さんや岡崎市立中央図書館事件等 議論と検証のまとめの杉谷さんの取材では「私が罪を認めたので起訴猶予になった」とのことです。

朝日新聞 神田記者による検察への取材より

不起訴とした理由は「強い意図は証拠上認定できなかった。どれくらい業務に支障があったかという点でも、検索システムの障害になったのは比較的短時間だった。業務妨害罪としてそれほど悪質なものではない。本人も反省している。」

”嫌疑不十分”でなく”起訴猶予”とした理由は「本人が罪を認めているから。」

杉谷氏の愛知県警への取材より

「攻撃ではない、と認識していながら、嫌疑なしではなく起訴猶予処分となった理由はなんですか」 との問いに対して、愛知県警は「故意が認められたということで、警察としてはそう判断している」

Librahackメモの通り、自分では罪を認めたつもりはありませんでした。故意も否定したつもりでした。「本人が罪を認めた」と認定されることは、私が今後ビジネスを行っていくときに困ります。そこで、その理由だけでもはっきりさせたいと思い、「なぜ起訴猶予になったのか?」を聞きに検察庁へ行ってきました。

検察庁では事件を担当した検察官の事務官に対応していただきました。事務官というのは、検察官が読み上げた内容をタイプして調書を作る人です。分かりやすく言えば、ドラマ「HERO」の松たか子さんです。検察官は大変お忙しいようで、事務官が別室にいる検察官に説明を受けて私の質問に回答するという形でした。

以下、聞いてきたことです。

なぜ故意を認定したのか?

故意を認定した理由はこういうことのようです。

コンピュータに詳しい技術者なので、リクエストを大量に送りつけたら、図書館のサーバに影響が出ることを予想できた。事実、まったく予想しなかった訳ではなく、少しは影響が出ることを予想していたはずだ。それなのに、リクエストを大量に送りつけたので、「故意があった」ものと判断した。

また、「なぜ嫌疑不十分ではなく、起訴猶予としたか?」との問いには、「影響が出ることをまったく予想しなかった訳ではなかったから」とのことでした。
さらに、「それは過失になりませんか?」との問いにも同様に、「影響が出ることをまったく予想しなかった訳ではなかったから、過失ではなく故意が認定される」とのことでした。
ちなみに、逮捕前に警察でとられた自白調書はまったく影響していないそうです。

検察官に認めてもらうにはどうすればよかったのか?

私は法律を知らず、刑事事件における「故意性」「過失罰」など重要なことの意味を理解していませんでした。

今思えば、取り調べの時に行うべきだったのは、故意の否定です。故意を否定するために最も受け入れやすい話をすべきでした。
具体的には、まず検察官が誤解している「大量に」の認識を改めてもらう、つまり検察官の「大量に」の基準が適切でないことを指摘し、この「大量に」はWebの世界では常識的なものだと認識を合わせておく必要がありました。その上で、図書館のサーバに影響が出ることを予想できなかったと認めてもらうことでした。

ところが、故意の否定を明確な目標にせず、図書館のサーバに不具合があることだけを主張してしまったため、故意がなかったことを認めてもらえなかったようです。

相手側に不具合があることを示しても、法律の考え方では、因果関係を否定することにはならないと、ネットの議論(質問回答1回答2)を通して知りました。

2010.12.17

私にとって重要なポイント(朝日新聞記事)

12月8日の朝日新聞記事には「私にとって重要なポイント」「皆さんにお伝えしたいこと」が書かれていないので補足します。

本日12月8日の朝日新聞に岡崎図書館事件の記事が載りました。(見出し「起訴猶予の男性が被害届の撤回要求」)
記事には、7日の定例会見で岡崎市長が図書館事件について話したことに対する私のコメントが含まれています。

この記事には、「私にとって重要なポイント」「皆さんにお伝えしたいこと」が書かれていないので、ここで補足します。

私個人としては、「障害発生当時はお騒がせしてすいませんでした」という気持ちがありますので、謝罪云々ということにはこだわっていません。
それよりも、これが前例となって、他の技術者の皆さんに迷惑がかかることを心配しています。今後ほかの技術者の皆さんが、同じ状況に出くわしたときに、私と同じように逮捕され、犯罪者とみなされてしまうことを心配しています。
現時点では、9月1日の公式発表「岡崎市立中央図書館のホームページへの大量アクセスによる障害について」は有効で、警察への被害届は出されたままという状態です。
図書館長と面談してお話はしましたが、公式な発表が出ていない限り、「この事件が犯罪だった」という事実は認められたまま解消しません。
公式に「これは犯罪ではありませんでした」と発表して頂けることを願っています。

2010.12.08

Librahackメモ

事件について知っていることを時系列で整理したメモを公開します。個人的に作成していたものです。

事件について知っていることを時系列で整理したメモを公開します。このメモは有識者・新聞記者の方々とのやりとりを正確なものにするため個人的に作成していたものです。いろいろな方々からの質問や突っ込みについて調べたこと、Twitterやいろいろな方々のブログなどで知ったことをその都度反映させてきました。

私にとって都合の良い記憶や解釈に変わってしまっている可能性は残りますが、できるかぎり正確に思い出したつもりです。

Librahackメモ

日時 本人 その他
2010/3/13
2010/3/14
2010/3/15
2010/3/16
2010/3/19
2010/3/21
2010/3/23
  • (MDIS)新着図書ページ名を手作業で変更した
2010/3/24
2010/3/25
2010/3/31
2010/4/1
2010/4/2
2010/4/3
2010/4/5
2010/4/8
2010/4/15
2010/4/16
2010/5/24
2010/5/25
2010/5/26
2010/5/27
2010/5/28
2010/5/29
2010/5/31
2010/6/1
  • 岡崎署で警察の取り調べを受けた
2010/6/2
  • 岡崎署で警察の取り調べを受けた
2010/6/3
2010/6/4
  • (検察)勾留延長
2010/6/6
  • 岡崎署で警察の取り調べを受けた
2010/6/7
2010/6/8
  • 岡崎署で警察の取り調べを受けた
2010/6/9
  • 岡崎署で警察の取り調べを受けた
2010/6/10
2010/6/14
2010/6/19

出来事の詳細

3/13 新着図書データベースを作るためクローリング&スクレイピングプログラムを作成した

  • ちょうどその頃、市場調査を行うためにECサイトのスクレイピングプログラムを作っていた。そのついでに、前々から構想していたLibra新着図書Webサービスを作ろうと思った。市場調査プログラムの一部をカスタマイズして、新着図書データベース作成プログラムを作った。この時、市場調査プログラムと新着図書データベース作成プログラムは同じプログラム内にあり、パラメータでアクションを指定して振り分けていた。
  • Webサービスを作ろうと思った動機は「なぜプログラムを作ったか」の通り。
  • Webサービスの概要は「どんなプログラムを作ろうとしていたか」の通り。
  • 普段読む本を入手する流れ:1. Amazonの各カテゴリの売れ筋をチェックしてレビューを確認し読むかどうか決める(または、書評ブログや新聞などのメディアで紹介された面白そうな本をチェックしてAmazonのレビューを確認し読むかどうか決める)、2. その本が図書館にあるかどうか?を図書館サイトでチェックする、3. 図書館にあれば予約数を確認し少なければ予約を入れる、4. 図書館にない、または予約が多ければAmazonで買う。
  • この方法は大衆受けする本のみを漁ることになり、読書の幅が広がらないかなと思った。また、図書館にない本や予約が多い本をどんどんAmazonで買うので、読む速度が追いつかずに家の空間を圧迫する問題もあった。そこで、Libraの新着図書を基点として本を発見する別の仕組みを作ろうと考えた。あらゆるジャンルの新着図書から自分にとって有益な本を効率的に発見し入手する仕組みを作ろうと思った。
  • 図書館が新着図書データを公開した後に、毎日1回自動でこちらのデータベースに当日入架した図書データ(前日との差分)が蓄積されていく仕様。毎日変わる予約数まで知りたかったので、差分だけではなく全件詳細ページまでクローリング対象とした。新着図書データの反映時刻が分からないので、当日の新着図書データが確実に反映されていると予想され、一般的にWebサイトが混む時間帯(20:00-23:00)を避けた18:00に取得するようにした。
  • 完成形はAmazonのAPIとマッシュアップした自分専用のWebサービスにするつもりだった。ユーザインターフェイスはシンプルなリスト式(Amazon)でもよいし、本棚式(BoosaBooks)でも面白いかなと考えていた。図書館サイトの仕様や運用パターン・継続性などの調査も含め、まずは新着図書データベースの自動更新までの完成を目指した。
  • サイト名はLibrahack、Webサービスのドメインはlibrahack.jpと決めていた。サイト名の由来はLifehackから。Libraを効率よく使いやすくするサービスの意味。
  • 自分専用のWebサービス(主にマッシュアップ)は今までにいくつか作っていた。セキュリティに関してそれほどシビアにする必要はないので、.htaccessファイルで自分のIPだけ許可を与える方式をよく使っている。今回も同じ方式を使う予定だった。このサイトを公開する時、いつも使っている.htaccessファイルをそのまま利用したため、最初に高木先生からのアクセスを拒否してしまった。
  • スクレイピングの際、普段は正規表現を使ってゴリゴリ抜いていたが、htmlSQL(HTMLの要素をSQLのように取り出すことができるスクレイピング用ライブラリ)を使えば今後スクレイピング対象サイトを追加していく場合にメンテナンスが楽かなと思い、今回試しに使ってみた。
  • クローリング時の負荷対策について「負荷について考えたこと」のように考え、プログラムを作成した。対策1.図書館サーバの負荷を限定する:図書館サーバに過度な負荷を掛けないように「シリアルアクセス」(リクエストは同時に複数送信しない、リクエストの応答が返ってきてから次のリクエストを送信する、負荷は高々1アクセス分)、「TosCodeによるキー読み」(キーワード検索ではなく図書コードによるインデックス検索、データベース検索の中で最も低負荷)。対策2.レンタルサーバの負荷を限定する:レンタルサーバにプロセスを止められないように、特に時間に根拠はなかったが30分間ぐらいで終わるように。約2,000リクエスト / 1,800秒 = 1秒に約1リクエスト。対策3.単位時間あたりリクエスト数の上限を限定する:図書館サーバにおける時間あたりの当リクエストのCPU資源を限定するためにリクエストとリクエストとの間に適当な時間間隔を作る(時間あたりのリクエストが一定数を超えないように制限する)
  • 単位時間あたりのリクエスト数の上限は1秒1リクエストの前後でいろいろ変えた。単純な一定ウェイト方式ではなく、単位時間あたりのリクエスト数に上限を設ける方式にしたのは、Amazon Webサービスを利用する時に作ったプログラムの一部をそのまま使用したため。Amazon Webサービス(TM)カスタマー契約 5.1.19には「毎秒1コールを超えず」と制限がある。
  • アクセスは、キーワード検索ではなく図書コード直指定のインデックスアクセスであり、かつ、シリアルアクセスであるため、十分に低負荷と考えていた。そのため、30分間2,000リクエストがサーバに問題を発生させる可能性をまったく想定していなかった。今回のアクセス方式やアクセス回数はサーバの負荷的には安全圏にある、と考えていた。図書館サーバはこれぐらいのリクエストを余裕で捌けるだろう、と考えていた。
  • 自分用のデータベースなのでそれほど正確なものを求めていなかった、サーバの負荷的には安全圏にあると考えていた、遊びなので時間をかけたくなかった、などの理由からエラーを通知するような機能(アラートを携帯メールに飛ばすなど)は作成しなかった。プログラムに作業ログを吐かせるような機能も作らなかった。
  • 図書館サイトは1日平均80,000アクセスぐらいとのこと。 – 警察経由の岡崎図書館より

3/13 ローカル環境でプログラムをテストで動かした(初日)

  • プログラム完成後、(自宅or実家のどちらかから)プログラムを動かし、新着図書データがデータベースに作成されていることを確認した。(釈放後、データベースを確認すると1,800件あった。)

ローカルデータベース
ローカル環境のデータベースに蓄積されたレコード件数の集計。プログラムを動かしている時点で算出・確認していた訳ではなく、釈放後、事件の経緯を調査するためにSQL文を作成して算出したもの。

ローカルデータベース2
同上

3/13 Librahackのロゴを作った

  • 飽きっぽい自分がこのWebサービスを最後まで作り上げるモチベーションを維持するため、サイトが完成する前にサイトのロゴを作った。Libraのロゴと同じフォントを見つけてきて「Hack」を付けたもの。(自分用サイトで第三者の目に触れることはないので、問題ないと考えていた。)

Librahackロゴ

3/14 ローカル環境でプログラムをテストで動かした(2日目)

  • (自宅or実家のどちらかから)プログラムを動かし、データベースに当日分のデータが作成されていることを確認した。(釈放後、データベースを確認すると5件あった。)

3/14 レンタルサーバにプログラムを設置

  • レンタルサーバ(さくらインターネット)にプログラムをアップロード、データベースを設定した。
  • 当サイト用にレンタルサーバを新たに契約したのではなく、さくらインターネットにいくつか契約中のサーバ(スタンダードプラン)の中の1つを利用した。

3/14 レンタルサーバでプログラムを動かした

  • レンタルサーバでプログラムを動かし、新着図書データがデータベースに作成されていることを確認した。(釈放後、データベースを確認すると1,750件あった。)

レンタルサーバデータベース
レンタルサーバのデータベースに蓄積されたレコード件数。プログラムを動かしている時点で算出・確認していた訳ではなく、釈放後、事件の経緯を調査するためにSQL文を作成して算出したもの。

3/14 レンタルサーバにプログラムの定時起動を設定した

  • 毎日18:00にプログラムが起動するようにcronの設定をした。
  • レンタルサーバのCRON設定ページより注意事項を抜粋。「メモリやCPUに著しく負荷をかける処理は他のお客様にご迷惑がかかりますのでおやめください。サーバ運用に支障をきたす場合はやむを得ない場合には、予告無く設定解除、機能制限することがあります。実行頻度が1時間以内に連続する場合や、CPU処理時間が60秒以上連続で利用される場合、予告なく設定解除される場合があります。」

さくらインターネットCRON管理

3/15 データベースの中身を時々確認した

  • 時々、データベースを見てデータが取れていることを確認した(レンタルサーバでプログラムを定時起動していた3月31日まで)。厳密に正しく動作しているかを確認したわけではなかった。新着図書データの項目には該当するカテゴリコードがあるので、最後にクローリングされるカテゴリ(例えば0210)のデータがあれば最後まで実行されたと判断していた。

3/15 (図書館)利用者から「図書館のホームページにつながらない」という苦情の電話を受けた

  • 図書館は利用者から「図書館のホームページにつながらない」という苦情の電話を受けた。すぐに職員が調べたが原因を特定できなかった。 – 朝日新聞 神田記者の取材より
  • 図書館 三浦氏「一般市民から『図書館のホームページにつながらない』という電話連絡を受けて気がついた。これまでそういう経験はなかったので驚いた。」 – 日経コンピュータ「動かないコンピュータ」より

3/16 (図書館)MDISに対応策を尋ねた

  • 図書館はWebサイトにアクセスできない状態が生じたため、MDISに対応策を尋ねたところ、シャットダウンするように指示された。サーバをシャットダウンし、回復。
  • このころ「予約をしたはずなのにできていない」との市民から数件苦情があった。

3/19 (MDIS)アクセスログを調査した

  • MDISの作業報告「毎日18時頃にロボットによるリンクアクセスが実行されており、WEBサーバの高負荷の原因となっておりました。一時的にCD・DVD一覧リストのハイパーリンクを削除し、様子見させていただきました。」

3/19 (図書館)岡崎署の警察官に相談した

  • 業者にアクセスログを調べてもらったところ沢山のアクセスが来ていた。3日続けて同じ時間帯に起きたので、最近こんなことが起きているけど何でしょうねという感じで岡崎署の警察官に相談した。攻撃が来ていると伝えたわけではない。その後しばらく警察側からは音沙汰なし。

3/21 (MDIS)新着図書ページ名を手作業で変更した

  • MDISは集中的なアクセスを回避するために新着図書ページ名の各ページ末尾にアルファベットを手作業で変更した。

3/21 (図書館)岡崎署に迷惑アクセスを受けていると連絡した

  • 愛知県警岡崎署に「迷惑アクセスを受けている」と連絡した。「どこに相談すべきか分からなかったので、まずは警察に話をした」

3/24 (MDIS)新着図書ページ名を自動で変更した

  • MDISは集中的なアクセスを回避するために新着図書ページ名の各ページ末尾にアルファベットをランダムに自動で変更した。
  • MDISの作業報告「新着案内に毎日18:00に大量アクセスがおこなわれ (3/14~ )、WEBのデータベースが不調になっていた件につき対処を行いました。TOPからのアクセスするファイル名の変更を実施しています。」

3/25 データベースにデータが取得できていない日を発見した

  • データベースを確認したところ、データがまったく取れていない日を発見した。新着図書ページのHTMLを調べてみたところ、カテゴリトップページURLに201x.aspのようにアルファベットが付いていた。これが原因でクローリングに失敗したと判断した。
  • アルファベットの一文字の意味はよく分からなかったが、クローリングを開始して10日そこそこだったので、これは「そういうもの(仕組み、仕様)」と解釈した。自分からのアクセスを防ぐための変更とは思わなかった。
  • 各カテゴリページ(201.asp、202.asp、・・・)を決め打ちで基点にURLを辿っていたので、上の階層の新着図書トップページを基点に辿るようにプログラムを変更した。

3/25 変更したプログラムを動かした

  • プログラム変更後、レンタルサーバで実際に動かし、データが取れるようになったことを確認した。

3/31 (図書館)つながりにくい原因を特定した

  • 同じIPアドレスからのアクセスが特定の時間帯に人間業で不可能なほど大量に行われていることを確認した。これがつながりにくい状態の原因と特定した。サーバをシャットダウンして、回復した。(3/24 MDISの作業報告によれば「新着案内に毎日18:00に大量アクセスがおこなわれ…」とある。) – 朝日新聞 神田記者の取材より

4/1 (MDIS)ファイアウォールの設定を変更した

  • 図書館はさくらインターネットからのアクセスをファイアウォール設定で遮断した。
  • MDISの作業報告「3/31に再度「新着資料」に大量のアクセスがあったため、ファイアウォールの設定を変更いたしました(17:00)。その後、該当のIPからのアクセスがブロックされていることを確認いたしました。」

4/2 (警察)図書館に連絡した

  • 人事異動で岡崎署にやってきた警察官から「これは捜査できるかもしれない 」と連絡があった。この警察官はこういった事案を取り扱ったことがあるそうだ。警察官は図書館にヒアリングした。
  • 警察側の認識:「事件にして処罰を求めるのであれば被害届を出してくださいと説明した。」
  • 図書館側の認識:「これは被害にあたります。被害届を出しますか?と言われた。」「まさか逮捕につながると思っていなかった。」

4/2 再びデータベースにデータが取得できていない日を発見した

  • データベースを確認したところ、データがまったく取れていない日を発見した。データベースには前回にチェックした時から新しく追加された新着図書の差分が追加される仕組みで、3月31日分が1件、4月1日分が0件だった。新着図書の3月31日の追加が1件だけしかないのは、図書館の運営から考えておかしいのではないか?と思った。(データベースを確認した日付は4月1日か4月2日かのどちらか。)
  • プロセスの実行時間が長すぎた、またはCPU使用量が多すぎた、などの理由でさくらインターネットにプロセスを強制終了され、以後の使用を制限された可能性を疑った。レンタルサーバは1台に100人以上のユーザーが同居することもありCPU使用量は厳しく制限される。この場合はなんの連絡もなく、強制的にプログラムを中断される。
  • 以前に、同じレンタルサーバで和布蕪を利用して形態素解析を行う自作のWebサービスやバッチを動かしていたとき、利用制限されたことがあった。また、同時期に調整していた市場調査プログラムはプロセスを強制的に終了させられた様子があった。
  • 作成したプログラムではスクレイピングに「htmlSQL」というライブラリを使っていて、開発時(デバッグ時)にこの部分はちょっと処理が重くCPU使用量が増えるかなという感覚があった。
  • プログラムに妥当な負荷対策を施していたので、図書館のサーバに掛けている負荷は低いと思っていた。まさか、制限を掛けられるほど酷いアクセスをしていると思わなかったので、IPアドレス制限を受けた可能性について考えなかった。

4/2 レンタルサーバを諦め、ローカルへ移行した

  • レンタルサーバでの実行を諦め、Thinkpadからプログラムを実行して様子を見ようと思った。プログラムの続きを作る予定もあった。
  • 今後改良を加えたとしてもなお、さくらレンタルサーバの負荷制限でクローリングができなければ、ローカルで動作するWebサービスとして使用しても良いかな、と思った。
  • cronの自動実行の設定を解除した。

4/2 22:20 ローカル環境でプログラムを動かした

  • (自宅or実家のどちらかから)プログラムを動かし、新着図書データがデータベースに作成されていることを確認した。(釈放後、データベースを確認すると562件あった。これは3/14に実行した開発直後のテスト2日目のときからの差分。)

4/3 1日1回手動でプログラムを実行した

  • (自宅or実家のどちらかから)忙しい場合や旅行へ行った場合を除いて1日1回手動でプログラムを実行した。(逮捕前日の5月24日まで)
  • 別の案件に手をかけていたこともあり、プログラムの次の開発に進む時間が取れなかった。データベースさえ更新されていれば、表示部分はどうにでもなるだろうと考え、片手間に新着図書データの更新を続けていた。
  • 問題なく動いているだろうと思っていたため、データベースの中身を確認することはなかった。

4/5 (図書館)岡崎署へWebサーバーのログを提出した

  • MDISの作業報告「WEB新着一覧への大量データアクセスを受けた際のログ(3/14~4/4)、及び4月4日のファイアウォールのログをCD-ROMにて提出いたしました 。」

4/8 (図書館)岡崎署へWebサーバーのログを提出した

  • MDISの作業報告「4月2日より前回と異なるアドレスでアクセスされている為、日時を調査し一覧を作成、ログ(4/5~4/7)をCD- ROMにてお渡ししました。また、以前ブロックしたIPアドレスと同様のドメイン名が含まれるメールアドレスを登録している利用者を調査し、利用者番号、メールアドレスを一覧にてお渡ししました。」

4/15 (図書館)岡崎署へ被害届を提出した

  • 岡崎警察署に被害届を提出した。
  • 「MDISと図書館が相談して、被害届の提出に踏み切った」「警察はログを見て、クローラがヌルいものだと判断せず、サーバが止まっているという事実と行為をもとに立件した」 – 杉谷による愛知県警本部への電凸

4/16 (図書館)岡崎署へWebサーバーのログを提出した

  • 4月8日以降のログをCD-ROMにて提出した。

5/24 (警察)図書館に被害状況の照会をした

  • 岡崎警察署は図書館に、これまでにホームページがつながりにくい旨の通報を受けた実績の照会をした。

5/25 自宅を強制捜査された

  • 7:30頃、妻と食事中、インターホンが鳴った。こんな時間に誰だろう?と思って、インターホンのカメラを覗くと、男が数人いた。驚いてドアを開けると、「○○○○(本人名前)、岡崎図書館のホームページにアクセスしているな。大問題だよ、ちょっと悪質だよ、大変なことになっているよ。」などと警部補Aが言いながら令状を広げ読み上げた。警察官7・8人が上がりこんできた。
  • 強制捜査時にいた警察官:警部補A(愛知県警本部、推定45歳)、警部補B(岡崎署、推定40歳)、技術系警察官C(愛知県警本部、推定35歳)、その他警察官D、E、F、G、H(岡崎署と愛知県警本部、推定30前後)。技術系警察官C以外はIT知識に明るくない。
  • 警部補Aはこの事件を扱うために愛知県警本部から岡崎署に来た。警部補Bは愛知県警本部から岡崎署に人事異動してきたそうだ。
  • 図書館のWebサイトにアクセスしていることは認識していた。しかし、強制捜査されるまで図書館のサーバがダウンしたことを知らなかった。(警察は図書館のサーバがダウンしたと言っていた。)後日(5月31日)、警察の取調中にアクセスログを見せてもらい確認したところ、実際にはWebサーバがダウンしたのではなく、データベースサーバとの接続資源がなくなり、WebサーバはHTTPレスポンス500(内部サーバエラー)を返していただけだった。
  • この時まで、図書館、警察、その他全てから「やめてほしい」といった意思表示はまったくなかった。
  • 技術系警察官Cのサポートの下、グローバルIP、ローカルネットワーク環境、プログラム開発環境、プログラム実行環境などを確認した。また、自宅にあったその他のノートPC2台が今回の事件とは関係ないことを説明した。
  • 確認したこと:ネットワーク環境、ISP契約、プログラム実行環境、プログラムソースコードのハードコピー、自家用車
  • 押収されたもの:ThinkpadX200s、バックアップ用HDD、iPhone、携帯電話、ノート、技術書、LibraのIDカード
  • 捜査段階で既に自宅へ何回も来ているそうだ。生活パターンも監視されていたようだ。
  • 自宅前の駐車場に止めてあった自家用車の前で警察官2人に腕をつかまれて写真を撮られた。自宅への移動手段の証拠写真だろうか。近所のおばさんたちにその様子をじっと見られていた。
  • 「警察はlibrahack氏が図書館にサイバー攻撃をしている、とみていたようです。」 – 朝日新聞 神田記者tweet

5/25 自宅から実家へ移動した

  • 9:00頃、自宅での強制捜査を終え、もうひとつの接続場所であった実家へ移動した。ワンボックス(パトカーではない)の最後列に警部補Bと座った。
  • 実家への移動時にいた警察官:警部補A、警部補B、技術系警察官C、その他警察官D、E
  • 捜査段階で既に実家へも行っているそうだ。

5/25 実家を強制捜査された

  • 捜査は技術系警察官Cのサポートの下、グローバルIP、ローカルネットワーク環境などを確認した。また、実家にあったノートPC2台やPC2台、サーバ6台が今回の事件とは関係ないことを説明した。
  • 確認したこと:ネットワーク環境
  • 押収されたもの:会社書類、ISP契約書

5/25 実家から岡崎署へ移動した

  • 10:30頃、実家での強制捜査を終え、岡崎署へ連行された。ワンボックスの最後列に警部補Bと座った。
  • 連行される車の中での会話その1: 本人「何も(連絡)なしに、いきなり強制捜査ですか?サーバがダウンしているなんて、知りませんでした。」 警部補B「(さくらインターネットの)IPアドレス制限の時点で気づくべきだったね。気づかなかった?」 本人「制限なんて知りません。(プロセスの実行時間が長すぎたので)さくらインターネットに(プロセスを)止められたと思って、自分のThinkpadで様子を見ていました。(CPU使用量が多くなると)さくらインターネットはすぐにプロセスを止めますから。」
  • 連行される車の中での会話その2: 本人「(あの程度のアクセス数で)Webサーバがダウンするのはおかしいです。本当にダウンしたんですか?」 警部補B「ダウンした。」 本人「今までにもいくつか(クローリングを)やっていますし、(AmazonやYahoo!などの)Web APIを呼ぶときよりも気をつかったつもりでしたが。」 警部補B「図書館は営利目的の大企業と違って少ない予算で運営されているから、(サーバに)お金をかけられないので(サーバの能力が低い)。」 本人「(えぇー!何を言ってるんだこの人は。ほとんどお金をかけなくても、あの程度のアクセス数は余裕で捌けるのに。まったく分かってない。)〔以降、カギ括弧内の括弧書きは、口にしていないが頭の中で思ったことを表す〕」 本人「(図書館のサーバは)レンタルサーバかなにかの共有サーバで運営されている訳ではないですよね?」 警部補B「そんなことはない。図書館にサーバはある。」 本人「(そういえば、どこかの市役所でプログラムが得意な職員がWebサイトを作ったとかいうニュースがあったな。図書館のWebサイトはログイン機能などなく素人っぽいし、もしかしたら図書館の職員がプログラムを作ってバグを作りこんだのかな?)」 本人「もしかして、プログラムを図書館の人が作ったとか?」 警部補B「いやいや、ちゃんとした業者が作っている。」 本人「(えぇー!どこが作ったのかな?)」 本人「有名な会社ですか?」 警部補B「みんな聞けば分かると思う。」 本人「(おかしいなぁ。自分のプログラムにミスがあったのかな?)」
  • 連行される車の中での会話その3: 本人「やっていることの内容や目的、理由を聞かれずに、いきなり強制捜査されて連れて行かれるのは(いかがなものかと)。」 警部補B「それは調べてみないと分からない。サイバーテロの練習をしているかもしれないし。」 本人「(よくわからんが、警察署に行ってやっていたことを説明すれば、すぐに誤解が解けるだろう。)」

5/25 岡崎署で警察の取り調べを受けた

  • 11:30頃からお昼休みを挟んで14:30頃まで、岡崎署で警部補Bによる取り調べが行われた。取り調べは警部補Bが1人で行った。
  • 取り調べの調書は自宅での強制捜査自宅から実家へ移動中の会話実家での強制捜査実家から岡崎署へ移動中の会話を参考にして警部補BがノートPCで作文した。
  • 取り調べと平行して、別室で技術系警察官Cが押収したThinkpadを解析しているようだった。取調べ中に使いの警察官がデータの場所やパスワードを聞いてきた。([注]後日、分かったことだが、この時、別室では解析を行っていたのではなく、単にThinkpadの中身を別のPCへコピーしていただけだった。)
  • 調書の完成が近づくと、警部補A、他警察官2・3人が取調室に入ってきた。
  • 取り調べ時の会話1:警部補A「どうやってプログラムを動かしたんだ?」 本人「どうやってとは(どういう意味)?」 警部補A「ボタンを押すと動くんだろ?」 本人「(強制捜査の時、動かし方を説明したEclipseの実行ボタンのことを言ってるのかな?)」 本人「そうですね。」([注]後日、何方かに教えてもらったことだが、調書には行為の具体的方法が必要らしい。)
  • 取り調べ時の会話2:警部補A「どれぐらいのスピードでアクセスしたんだ?」 本人「(2ヶ月以上前にサクッと作ったプログラムだし、憶えてないなぁ。)」 本人「よく分かりません。」 警部補A「大体でいいよ。」 本人「1秒に1回ぐらいですかね?でもやっぱり憶えていません。」 警部補A「いいよ、いいよ、約(やく)だから。」 本人「じゃぁ約1秒に1回ぐらいですかね。」([注]後日、何方かに教えてもらったことだが、調書には数値的表現が必要らしい。)
  • 取り調べ時の会話3:警部補Bが調書を印刷した。調書には一言も発していない『DOS攻撃をしてしまいました。』の表現があって驚いた。 本人「(DoS攻撃って、久しぶりに聞いたな。まさかDoS攻撃と思われてるのかな?どう考えてもぜんぜん違うのに。しかも、o(オー)が大文字だし。ひょっとして全員素人か?この先ヤバいことになるかも。技術系警察官Cがいるのに間違いを指摘しなかったのかな?おかしいなぁ。)」 本人「DoS攻撃とは違いますが。」 本人「(サーバがダウンしたということなら)結果的に同じ現象になったかもしれませんが。」 警部補A「そうだよね、結果的に。結果的に。」 警部補Bが調書を修正した。
  • 逮捕前取り調べ調書(本人覚え)「私は4月2日から4月15日にかけて岡崎市立中央図書館のホームページに自作のプログラムを使って自宅ほか1カ所から約33,000回アクセスしました。そのプログラムはボタンを1回押すと自動的に新刊図書ページのデータを取得するために約1秒間に1回のリクエストを送信するものでした。結果的にDOS攻撃になってしまいました。業務を妨害しました。迷惑をかけた責任は償いたいと思います。」
  • 「DOS攻撃」「業務を妨害しました。」「迷惑をかけた責任は償いたいと思います。」など言った憶えはない。
  • 「DOS攻撃」という言葉には引っ掛かったが、表現を「DOS攻撃をしてしまいました。」から「結果的にDOS攻撃になってしまいました。」に変更してもらったので(『結果的にDOS攻撃になってしまった。』という一文は悪意も故意もないことを示していると考えていた)、この調書にサインした。
  • 調書にサインした理由:「結果としての現象は正しかった」「2ヶ月前に作成したプログラムの内容をよく憶えていなかったので、強く否定できなかった」「早朝からの強制捜査で気が動転していて、自分の置かれている状況を冷静に把握することができなかった」「図書館に被害が出ていて申し訳なく思い、言われたことを認めないことができなかった」「素直に謝ればすぐに帰れると思った」「合法な利用をしていると考えていたので、まさか逮捕されるとは思わなかった」「法律、刑法・刑事訴訟法に無知だった」「『結果的にDOS攻撃になってしまった。』という一文は悪意も故意もないことを示していると考えていた」「技術系警察官Cがプログラムを解析しているので、すぐに疑いが晴れると思った」
  • 偽計業務妨害罪について、構成要件について、故意について、などの説明はなかった。法律に詳しくなかったので、自分がどんな罪で容疑をかけられているのか理解できなかった。

5/25 裁判所の逮捕状を待った

  • 取り調べ調書にサインした後、裁判所が逮捕状を出すまでの間、取調室で待機していた。強制捜査時にいたその他警察官D、F、Gが1人づつ交代で付いていた。待機中は何もせずにじっとしているか、警察官と雑談していた。
  • 待機中の会話1:本人「技術系警察官Cは岡崎署の方ですか?コンピュータに詳しいようですが。」 警察官D「(愛知県警)本部から応援で来ている。ヘッドハンティングされてきた(すごい人)。」 本人「ヘッドハンティング?すごいですね。」 警察官D「Winny事件の時、活躍した(そうだ)。」

5/25 逮捕された

  • 17時ごろになって、警部補Aと警部補Bが取調室に入ってきた。しばらくすると警察官Eが裁判所が許可した逮捕状を持って入ってきた。
  • 警部補Bが逮捕状を読み上げた。刑事訴訟法によると弁護士を呼ぶ権利があることについて話すことになっていて、多分この時説明を受けたと思うが、どんな説明だったか今は思い出せない。
  • 手錠をはめられ腰縄をパイプ椅子に縛り付けられた。
  • 自分には弁護士のあてもなかったので、弁護士の件は落ち着いて考えてから翌日にしようと思った。どの警察官か忘れたが「(後から)家族に連絡して呼んでもらえば」的なことを言われた記憶がある。釈放後に知ったことだが、この時すぐに弁護士を呼ぶことができたそうだ。
  • 夕食の弁当を食べた後、勾留の手続きに入った。

5/25 勾留の準備

  • 岡崎署の建物内にある勾留施設(留置場)に移されることになった。
  • 警察官から留置場の刑務官へ渡され、写真撮影、指紋採取、身体検査、持ち物検査、留置場内の説明を受けた。
  • 施設内では「14番」と呼ばれることになった。留置される部屋(監)が約30室ある中の「5室」に決まり、同室の男性に寝具入れを手伝ってもらった。

5/25 事件について整理した

  • 一晩かけて、すっかり忘れていたプログラムの仕組みや作成時に考えたことなどを思い出した。妥当な動機があったこと(使いにくかったからプログラムを作った)、負荷対策してあること(シリアルアクセスとウェイトタイマー)、DoS攻撃(同時にできるかぎり多くのリクエストを送信する)とは異なること、図書館サーバにデータベース接続が解放されない不具合が考えられること(自分が行ったアクセス方式で図書館サーバに問題が発生したとすれば、この可能性が最も高そうだと考えた)、など主張するポイントを考えた。そして今後、逮捕前の調書の内容が間違いだったことを説明し、容疑を否認しようと決めた。本件に関わった警察官はコンピュータやネットのことをよく分かっていないので、コンピュータの仕組みを説明して疑いを晴らそうと思った。この時、刑法に無知だったので、刑事事件としては故意がなかったことを説明することが重要ということが分かっていなかった。

5/26 マスコミが逮捕を報道した

  • 警察の発表を受けて、マスコミが逮捕を報道した。警察発表文「図書館が設置・管理するサーバコンピュータにホームページの閲覧要求の信号を大量に送信し…」。報道内容はマスコミ報道についてのとおり。

5/26 Twitterで話題になった

5/26 (yohgaki氏)岡崎署に電話して意見を述べた

  • 「図書館HPにアクセス3万3千回 業務妨害容疑で男逮捕 http://ow.ly/1PV6N この件、納得できないので岡崎署の捜査本部に電話して意見を述べておいた。捜査中なので報道発表以上の事は言えないそうです。意見のある方は岡崎署へどうぞ。」 – yohgaki tweet
  • 「私は昨日捜査本部(岡崎署)に電話して意見を言っておきました。出た方は直ぐに論点を理解できたようです。」 – yohgaki tweet
  • 「予想通りの『捜査中なので質問には答えられない』でしたが、なぜ逮捕が不当である可能性が高いのか検索サイトのクローリングを例に説明したところ電話に出た方は納得したようでした。」 – yohgaki tweet

5/26 検察へ身柄送致された

  • 朝一、名古屋地方検察庁岡崎支部へ検事調べのために運ばれていった。岡崎署から車で10分ぐらい。検察庁岡崎支部には、この付近の警察によって逮捕された者が検事調べのためにやってきていた。検事調べの順番が来るまで駅のベンチのような椅子がある鉄格子の部屋で待たされた。
  • その部屋で約3時間待った。そこには自分を含めて4人の被疑者がいた。被疑者内の二人は犯罪や法律に詳しいようだった(自分よりは遙かに知識があった)。今後起こることの情報を集めるために、被疑者にいろいろ質問してみた。
  • 被疑者Aとの会話1:本人「威力業務妨害って、どんな罪ですか?」 被疑者A「(たばこを吸うまねをしながら)」「(禁煙のレストランなら)これでも威力(業務妨害)になるからな。威力を使って、業務を…」 本人「なるほど。(プログラムでアクセスするという威力を使って図書館の業務を妨害した、との解釈なんだな。)」([注]この時点では威力業務妨害罪で逮捕されたと思いこんでいた。理由は逮捕された日に見せられた文書の中に「威力」という漢字があった(ような感じがした)から。後日、警部補Bにこのことを聞いてみたところ、「初めから威力ではやっていない。(勘違いでは?)」と否定された。どこで「威力」を見たか未だに思い出せない。
  • 被疑者Bとの会話2:被疑者B「何やったの?」 本人「インターネット関係で…」 被疑者B「詐欺か!なに売った?」 本人「図書館のWebサイトにアクセスして…」 被疑者B「・・・」 被疑者B「弁当は?(現在、執行猶予はある?)」 本人「ないです。」 被疑者B「よかったな。執行猶予つくよ(実刑はないよ)。」 ここでの常識では、このまま行くと執行猶予付きの有罪になるのかなと思った。
  • 被疑者A・Bとの会話3:被疑者A「兄さん(被疑者Bのこと)、(弁当)いくつ持ってんの?」 被疑者B「3つか、4つ。」 被疑者A「(にやにやしながら)」 被疑者A「(刑務所へ)行くね。」 被疑者A「楽勝!楽勝!金沢、富山、大阪。行ったね。」 本人「(この人詳しいのかな?)」 本人「弁護士ってどうやって頼むんですか?」 被疑者A「私撰か?」 本人「誰がいいんですか?」 被疑者A「○○(弁護士の名前)、××(弁護士の名前)、最高やね。」 ある意味プロの人が言うのだから、弁護士を頼んだ方が良さそうだと思った。
  • 被疑者Bとの会話4:本人「昨日、取り調べでやってもいないことを書かれたんですけど?(そういうものですか?)」 被疑者B「そうそう、あんなのやつら(警察)の作文だよ。(おかしいと思ったら)署名しなきゃいい。」 本人「(今から取り調べする検察官に)昨日のは間違いだったと言えば、何か変わりますか?」 被疑者B「言えばいい。でもあいつら(検察官)、『分かってる分かってる、今から書くところだった。分かってる。』とか言って結局書いてくれない。頭の中で罪を考えて(罪の構成要件などを考えて罪になるように)それを書く。」 検察官に事実をきっちり書いてもらえば、出られるかもしれないと思った。

5/26 検察庁で検察の取り調べを受けた

  • 検察官による取り調べを受けた。前日の警察官による取り調べ調書の内容(DoS攻撃、業務妨害)は間違いであることを主張した。妥当な動機があったこと、負荷対策してあること、DoS攻撃とは異なること、図書館サーバにデータベース接続が解放されない不具合が考えられること、などを主張した。
  • 否認する内容の調書を作成してもらった。
  • 取り調べ調書(本人覚え)「私は4月2日から4月15日にかけて岡崎市立中央図書館のサイトに自作のプログラムを使って自宅ほか1カ所から約33,000回アクセスしました。そのプログラムは自動的に新着図書ページのデータを取得するために約1秒間に1回のリクエストを送信するものでした。これはリクエストを同時に大量に送信するようなDoS攻撃ではありません。悪意はありませんでしたし、そのプログラムはリクエストを受信した後に次のリクエストを送信したり、リクエストとリクエストの間に適当な待ち時間を作ったりして、負荷対策をしてあります。Libraのサーバにも問題があると思います。」

5/26 裁判所で裁判官と面接した

  • 検察官が勾留請求したので、裁判官による面接のため、名古屋地方裁判所 岡崎支部 岡崎簡易裁判所へ移動した。ここでも検察調べを同じ部屋で待っていた4名といっしょに行動した。
  • 裁判官面接を待っている部屋(鉄格子はない普通の部屋)に当番弁護士制度について書かれた紙が貼ってあった。
  • 裁判官との面接では、逮捕前に警察で取られた調書は間違いで、当日検察で取られた調書が正しい旨を述べた。
  • 裁判官に私選弁護士の選任を依頼したところ、まずは当番弁護士制度を利用して無料で当番弁護士に相談することを勧められたので、それに従った。

5/27 岡崎署で警察の取り調べを受けた

  • 岡崎署で警部補Bによる取り調べが始まった。内容は生い立ち、家族、学歴、職歴、仕事、趣味、図書館との関係、動機、プログラムの内容など。以後、基本的に取り調べは警部補Bが一人で行った。

5/28 (高木浩光氏)岡崎署へ電話で問い合わせ

  • 高木浩光氏が岡崎署へ事件について電話で問い合わせた。(相手は警部補A
    だったとのこと。)高木浩光@自宅の日記 – 岡崎図書館事件について その1
  • 警部補A「ただサーバーが落ちたから逮捕したのではなくて、故意だと認められる根拠があった。」と明言した。
  • 「これによると、「何かある」で私が想像していたような背景というのは、結局何もなかったということになる。日々の新着図書を確認できるようにすることを目的として、新着図書のページを1日1回巡回して、差分をとるためのアクセスだった。」 – 高木浩光@自宅の日記 – 岡崎図書館事件について その1

5/28 当番弁護士と接見した

  • 当番弁護士と接見した。同室の男性の話では、弁護士は逮捕当日の夜、遅くても翌日の夜までには来る、ということだったので、やっと来たかという感じだった。
  • 当番弁護士との会話:弁護士「(君には悪いけど)僕面白いなぁと思う。(なんで、こんなので逮捕されちゃうの?)プログラムを使ったかもしれないが、普通に利用して動かなくなったのなら図書館に問題がある。(それに君の説明だと)相手のシステムに問題がありそうなんだよね。あくまで私の考えだが(確実というわけではないけれど)、不起訴の可能性がある。私が話したようなポイント(利用目的があったことなど)を押さえて主張しなさい。ただし、(検察が)どこで引っかけてくるか分からないから、納得できないことにはサインしたらいけないよ。(これぐらいちゃんと説明できていれば、君一人でも大丈夫だから)君一人でがんばりなさい。」(急いでいるのか、立ち上がって帰ろうとした。) 本人「(万全を期すために)先生にお願いするとしたら、どうすれば…」 弁護士「もし、一人でどうしてもだめなら、その時は私を呼んで。でも35万円かかるので(もったいないよ)。」 本人「(弁護士も言っているように、こんなことで逮捕されるなんておかしいことだよな。弁護士は自分が出て行くまでもなく本人だけでも不起訴にできると予想しているようだから、ひとりでがんばることにしよう。)」
  • 留置場の六法全書を借りて「弁護士により勾留を止めるよう働きかけることができる」ことは学んでいた。「本当に押収されたThinkpadでプログラムを実行したのか?」「提示したさくらインターネットのアカウントとは別のアカウントでプログラムを実行したのではないか?」など疑い出せばきりがなし、証拠隠滅の恐れもあると警察は考えると思ったので、弁護士に頼んでも釈放されることはないと考えていた。弁護士から早期釈放の話は出なかったし、自分からも聞かなかった。

5/29 岡崎署で警察の取り調べを受けた

  • 留置場の六法全書を借りて業務妨害罪とその他関係のありそうな所を調べて取り調べに望んだ。(信用毀損及び業務妨害)第二百三十三条  虚偽の風説を流布し、又は偽計を用いて、人の信用を毀損し、又はその業務を妨害した者は、三年以下の懲役又は五十万円以下の罰金に処する。(威力業務妨害)第二百三十四条  威力を用いて人の業務を妨害した者も、前条の例による。(電子計算機損壊等業務妨害)第二百三十四条の二  人の業務に使用する電子計算機若しくはその用に供する電磁的記録を損壊し、若しくは人の業務に使用する電子計算機に虚偽の情報若しくは不正な指令を与え、又はその他の方法により、電子計算機に使用目的に沿うべき動作をさせず、又は使用目的に反する動作をさせて、人の業務を妨害した者は、五年以下の懲役又は百万円以下の罰金に処する。
  • 警部補Bとの会話1:本人「威力業務妨害罪って、どんなものですか?」 警部補B「今回は、威力業務妨害罪ではない。」 本人「どこかで(逮捕された日に見せられた書類の中に)威力という漢字を見た憶えがあり、てっきり威力業務妨害罪で捕まったと。」 警部補B「初めから威力ではやっていない。一般的に業務妨害と言ったら、偽計業務妨害罪のこと。」 本人「今回、何が『偽計』だったんですか?」 警部補B「図書館の想定していないアクセス(プログラムによるアクセス)をしたこと。」
  • 地元ISPからIPアドレスのレンタル履歴などを開示請求する時の容疑は電子計算機損壊等業務妨害罪だった。
  • 警部補Bとの会話2:(警部補Bが逮捕前の調書のような業務を妨害しましたという調書を作ろうとした。) 本人「あれは業務妨害ではありません。悪意はありませんし、正当な行為だと思っています。」 警部補B「・・・」 本人「昨日きた弁護士もそのようなことを言っていましたし。不起訴の可能性があると。」 警部補B「それは弁護士の判断であって、裁判官は偽計業務妨害と判断している。」
  • 警部補Bとの会話3:本人「図書館のサーバに問題があります。」 警部補B「自分のプログラムは正しいのだから何が起こっても問題ないと言うの?(図書館のサーバにエラーが発生して)図書館員がどうしたらよいのか分からず右往左往するのに、君は何とも思わないの?俺しらねでいいの?(そんな態度だと検察官は)どういう人かと思うよ。」
  • 何も分からない図書館員には迷惑をかけて申し訳ないと思ったが、逮捕前の調書では警察官の言うなりになって失敗したと思っていたので、「業務妨害罪ではないとの主張は譲れない」と言った。
  • 相手のことをまったく考えず、自分の行為の正当性をだけを主張した場合、被疑者は反省していないと検察官が判断し、公判に持ち込まれる可能性があるのでは?と考えた。裁判官は心証も考慮するようだから有罪判決が出る可能性もあるのでは?と考えた。公判になれば1ヶ月や2ヶ月は拘置所で待たされると同室の男性から聞いていた。妻の出産が近く、こんなところで捕まっている場合じゃないと思ったので、もし反省するとすれば?という点を警察官に言った。今回の業務妨害とは直接関係ないと思ったが、自分の反省点として考えられることの中から警察官と検察官が理解できそうなものを挙げていった。

5/31 岡崎署で警察の取り調べを受けた

  • 取り調べの時にWebサーバのアクセスログを見せてもらった。ログを見たのはこれが最初。Webサーバがダウンしたのではなく、データベースサーバの接続資源がなくなり、WebサーバはHTTPレスポンス500(内部サーバエラー)を返していた。図書館サーバにデータベース接続が解放されない不具合があると確信した。
  • すべてのリクエストに対して正常にレスポンスを送信できている(と推測できる)日があった。約90%ぐらいのリクエストについては正常にレスポンスを送信、あるリクエストを境にWebサーバ(APサーバ)がデータベースサーバとのセッションを確保できず、HTTPレスポンス500(内部サーバエラー)を送信していた。Webサーバは正常に動作していた。データベースサーバのセッションが確保できない状態になっていた。
  • 警部補Bが作成したExcel表には「停止日時」のカラムがあり、HTTPレスポンス500(内部サーバエラー)が当日最初に発生した時刻が記入されていた。警察はHTTPレスポンス500(内部サーバエラー)発生を「サーバ停止」と解釈していた。「これ、サーバは落ちてませんよ。サーバが落ちたら、ログが出ないのでは。」と伝えた。
  • 警部補Bとの会話:本人「HTMLから必要なデータを探す処理にCPU資源を多く使っていると思いました。(約2,000回繰り返しで)プロセスが長く動くので、CPU使用量が上がって、さくらインターネットに使用を制限されたと思いました。だから、Thinkpadで様子を見たんです。プログラムの開発の続きもやりたかったし。」 警部補B「あー、そういう理由だったの。その後(または、その時期に)IPアドレスを制限していたんだよ。」(後の文は多分そんな話をしていたような記憶。)htmlSQLライブラリの中を詳しく見たわけではなかったが、処理は重そうだなと予想していた。
  • アクセスログのHTTPレスポンス500には「…|19|800a01a8|オブジェクトがありません。:_’Session(…)’」などの言葉と意味不明のコードがあった。警部補Bに「このコードはどんな意味ですか?データベースに接続できなかったということですか?とベンダーに聞いてください。」とお願いした。翌日、「コードに意味はない。データベースに接続できなかったエラー。」との回答がベンダーからあったと聞かされた。
  • 警部補Bに「Webサーバがデータベースサーバとの接続を解放していない可能性が高いと予測されますが、そういった不具合はありませんか?とベンダーに聞いてください。」とお願いした。これについては特に回答はなかったと記憶している。この問い合わせはどこまで伝わったのか?も不明。もしかするとベンダーは不具合はないと言ったのかもしれない。

6/3 岡崎署で警察の取り調べを受けた

  • 警部補Bとの会話:警部補B「プログラムを解析した技術系警察官Cは『解析の結果、中川さんのプログラムに問題はなかった。図書館のプログラムにも問題ないとすると、相性の問題ですね。』と言っているけど、相性の問題ってあるの?」 本人「(相性?はぁ?)」 本人「・・・」
  • 技術系警察官Cが押収したThinkpadを解析して、3月13日に作成したLibrahackロゴの画像ファイルを発見。その報告を受けた警部補Bは 「(ハッキング?)やっぱりやっていたのか?」と一瞬思ったそうだ。 しかし、この時点で既に業務を妨害する目的でアクセスを行っていたのではないと判明していたので、「hack」の意味をネットで調べて、「クラック」と「(良い意味で使われる)ハック」の違いを理解したそうだ。取り調べでは、ここでの「hack」の意味は「ライフハック」とかオライリー本によくある「○○hacks」という意味で、ということを説明して納得してもらった。検察官にこのロゴのことを突っ込まれるかもしれないから、その時はちゃんと説明できるように心の準備をしておくように言われた。

6/4 検察庁で検察の取り調べを受けた

  • 逮捕翌日の検察調べ時とは別の検察官が取り調べを行った。この日は調書を作らなかった。主張したことは次の4点、1. シリアルアクセスなので図書館サーバの負荷は限定的(時間あたりの負荷は高々1リクエスト分である)であり、自分のアクセスが原因でサーバにエラーが発生するとは思わなかったし、サーバにエラーが発生したことに気付かなかった、2. レスポンスエラーをハンドリングせずに単にスキップしていたのでサーバのエラーに気付かなかった、3. 図書館サーバ側にデータベース接続を解放していない不具合の可能性がある、4. 一日約2,000回のアクセスは常識の範囲内である。

6/7 (警察)岡崎署で実況見分した

  • 岡崎署の一室で実況見分を行った。押収されていたThinkpadを使って、プログラムの作動方法を説明した。また、PC内データベースの確認方法も説明した。
  • 実況見分の時にいた警察官:警部補A、警部補B、技術系警察官C、その他警察官D、I
  • 警部補Aと技術系警察官Cの会話:警部補A「それ(図書館サーバ?)、こっちに持ってこれないか?」 技術系警察官C「セキュリティの関係で無理では?(図書館が拒否するのでは?)」 警部補A「中身だけでも(持ってこれないか?)どうすれば持ってこれる?」 技術系警察官C「ハードディスクを使えばできます。」 警部補A「それ(HDD)、いくらするの?」

6/9 (警察)Thinkpadで再現実験した

  • Thinkpadで再現実験を行った模様(PC内データベースで6月9日のデータを確認)。再現実験は技術系警察官Cが行ったそうだ。実際に図書館にアクセスして、データベースにデータが数件取得できたところでプログラムを中止し、被害が出るところ(HTTP500エラー発生)まではやらなかったようだ。

6/10 検察庁で検察の取り調べを受けた

  • 6月4日と同じ検察官が取り調べを行った。主張したことは次の6点、1. シリアルアクセスなので図書館サーバの負荷は限定的(時間あたりの負荷は高々1リクエスト分である)であり、自分のアクセスが原因でサーバにエラーが発生するとは思わなかった、2. レスポンスエラーをハンドリングせずに単にスキップしていたのでサーバのエラーに気付かなかった、3. あのサーバ構成なのに2,000回のアクセスでサーバエラーは考えられないので、図書館サーバ側にデータベース接続を解放していない不具合の可能性がある、4. 一日約2,000回のアクセスは常識の範囲内である、5. DoS攻撃とは目的と動きが異なる、6. 負荷対策を行っていた。
  • 検察官との会話1:本人「あの(方式の)アクセスでサーバがエラーを発生するとは(普通)思いませんよ?」 検察官「でもプロなんだからそれぐらい気付かないの?」 本人「いやいや(予想できません)。リクエストに対するレスポンスが返ってきてから次のリクエストを送信するのでサーバにかける負荷は高々1リクエスト分です。だから自分のアクセスが原因でサーバにエラーが発生するはずはないと考えますよ、普通。」 検察官「でも君が何回もアクセスしたから問題が起きたわけでしょ。」 本人「それは図書館のサーバの不具合が原因ですよ。」 検察官「・・・」 検察官「でも他の利用者はそんなことする(プログラムを使ったアクセス)と思う?」
  • 検察官との会話2:本人「サーバは同時にリクエストされるのが一番(負荷がかかって)困るんです。例えばT社さんの社内システムを作った場合、お昼休みが終わる頃、急にサーバにリクエストが増えることがあるんですけど。そこで閲覧が遅いと苦情があった場合、ベンダーは対策を考えます、とか言うんですけど。なぜ今回は(高々1リクエスト分しか負荷をかけていない)利用者である私を訴えることになっちゃうんですか?ベンダーは不具合の原因を調べてないでしょ。」 検察官「・・・」
  • 取り調べ調書(本人覚え)「私は岡崎市立中央図書館のホームページにアクセスするプログラムを使って、新着図書のデータベースを作成した。Webサーバからの応答を受信した後、次のリクエストを送信していたので、負荷は高々1リクエスト分であった。Webサーバはデータベースサーバとの接続を解放していないため、新たにリクエストを受け付けた時、データベースサーバとの接続が不可能になりエラーを発生した。」

6/10 (警察)検察に罰金刑を要求した

  • 「また、捜査関係者の話では、警察は検察に対し、罰金刑(略式起訴)、不起訴となる場合でも嫌疑不十分ではなく起訴猶予となるように要請していたとのことです。」 – 朝日新聞 神田記者tweet

6/14 (検察)不起訴(起訴猶予処分)にした

  • 「名古屋地検岡崎支部は取材に対し、不起訴(起訴猶予)とした理由について、「強い意図は証拠上認定できなかった。どれくらい業務に支障があったかという点でも、検索システムの障害になったのは比較的短時間だった」としています。また、名古屋地検岡崎支部は「業務妨害罪としてそれほど悪質なものではない。本人も反省している」とも話しています。不起訴の「嫌疑不十分」でないのは、librahack氏が罪を認めているからとのことです。」 – 朝日新聞 神田記者tweet1 tweet2
  • 「検察の調書がどのような文言になっているのかは、取材では詰め切れませんでした。ただし、取材のニュアンスからは、調書上は業務妨害罪がきちんと成立していること、それが未必の故意などではないこと、が感じられました。」 – 朝日新聞 神田記者tweet
  • 「なぜ業務妨害罪が成立しているのかについてですが、調書にはlibrahack氏の主張を取り込みつつも、法的には罪を認めるような形になっているのではないかと思います。」 – 朝日新聞 神田記者tweet
  • 杉谷氏「攻撃ではない、と認識していながら、嫌疑なしではなく起訴猶予処分となった理由はなんですか」 愛知県警「故意が認められたということで,警察としてはそう判断している」 – 杉谷による愛知県警への電凸第二回と第三回

6/14 不起訴で釈放された

  • 朝、釈放されると連絡があった。留置場の刑務官によると、通常どうなる予定か伝わってくるものだが、今回は当日まで分からなかったそうだ。
  • 警察官との会話1:警部補A「君は人に迷惑をかけて罪を犯したけど、自分のプログラムのミスを認め、反省しているので、検察が起訴猶予にしてくれたよ。」 本人「(プログラムのミス?やっと、図書館のプログラムを解析してくれたのかな?ベンダーがプログラムのミスを認めたのかな?)」 本人「プログラムとは?図書館のプログラムですか?私のプログラムですか?」 警部補A「君の(プログラム)。」
  • 警察官との会話2:本人「起訴猶予ってどういうものですか?」 警部補B「不起訴には…その中で最も起訴に近い処分。新に証拠が見つかった場合などは起訴されることがある。」 本人「その起訴されるという期限(時効みたいなもの)はありますか?」 警部補B「期限はないが、基本的にはこれで終わり。」 警部補A「事件には警察止まりとか検察止まりとかある。今回は検察止まりってやつだ。」
  • 警察官との会話3:警部補A「図書館には(謝りに)行かなくていいから」 本人「・・・」 警部補A「本人は十分に反省していて、『(図書館に)謝りに行きたい』と言っているけど、『俺が代わりに(図書館に)伝えておいてやるから、行かなくていいよ』と本人に言って行かないようにさせたと、図書館には言っておくから。」 本人「ありがとうございます。」 警部補A「図書館には行かなくていいからね」 ([注]10月18日、図書館の方に聞いて分かったことだが警部補Aからそのような話は聞いていないそうだ。今になって思えば、警部補Aはこのときどういうつもりだったのかと不審を感じる。)
  • 釈放後、銭湯ですっきりしてから、岡崎市立中央図書館へ謝罪に行こうと思っていた。どうしてこうなってしまったのか知りたかったし、ベンダーはどこなのかなどの情報を集めたかった。しかし、行かなくていいと言われたので、いまは行かない方が良いのかな?と図書館へ行くのは保留した。(銭湯は岡崎署から検察庁へ移送されるマイクロバスからいつも見ていて、釈放後直ぐに行くと決めていた。)

6/19 当ブログを公開した

  • 「謝罪に行くな」と言われ図書館の方々に謝罪する機会がなかったので、当ブログを立ち上げ謝罪文を掲載した。
  • 当ブログを立ち上げた目的:1. 迷惑を掛けた方々への謝罪、2. マスコミによる事件内容の誤報の訂正と事件の真相の説明、3. マスコミ報道後、警察に異議・意見を言ってくださった方々へ詳細説明、4. 図書館サイトの不具合を特定するための技術情報の提供と収集、など。
2010.12.01

サイト名から「大量アクセス」を削除しました

サイト名を「Librahack:岡崎市立中央図書館HP大量アクセス事件」から「Librahack:容疑者から見た岡崎図書館事件」へ変更しました。

サイト名を「Librahack:岡崎市立中央図書館HP大量アクセス事件まとめ」から「Librahack:容疑者から見た岡崎図書館事件」へ変更しました。以下、その理由について。
“サイト名から「大量アクセス」を削除しました”の詳細はこちら »

2010.09.11