よくある質問とその答え
ここでは,過去の議論等で出てきた,よくある質問とその回答を記載しています。
具体的なソースについては,各種リンクから事実関係および議論ログを参照してください。
具体的なソースについては,各種リンクから事実関係および議論ログを参照してください。
事件に関して
- どうして librahack 氏は新着情報を集めたの?
- 新着情報ページが使いにくかったので,自分専用の新着情報サイトを作って便利にしようとしたのです。 同じようなニーズが,同じく MELIL/CS を使っている東京都中野区立図書館にも意見として寄せられたことがあります 。この意見によれば,「現在ネットで新着図書を確認しようとすると新着図書の件数が多すぎてチェックするのに手間がかかり過ぎます。」「毎日チェックする必要があるのですが、現在の仕様ですと重複してチェックをしなくてはならず、件数が多い分類ですとそれに時間を取られすぎてしまいます。」など,改善要望が出ていますが,図書館側は「他にも多数のご要望を頂いておりますが、システム改修やそれにともなう予約・リクエスト数の増加などを考えますと、すぐに対応することはできません。」として,将来の課題,という扱いで回答していました。プログラミングの知識があれば,このニーズを「マッシュアップ」という方法で自分の力で解決することができます。librahack氏もそうしようとしました。
- 図書館の館内業務も影響を受けたのでしょうか?
- いいえ。 館内業務のためのデータベースと,WEB システムのためのデータベースは切り離され,日に一度の割合で同期を取っていました。そのため,館内業務は通常どおり滞りなく行われていました。(別の図書館では,貸し借りと予約について毎分同期を取っている,との情報提供がありました。岡崎市立中央図書館がどの程度の頻度で同期を取っていたかは,あくまでも推測によるものです。)
- どうしてみんなそんなに議論したりしてるのですか?
- WEB の世界におけるマッシュアップや新たなサービスを作る人たちにとって,相手が脆弱なシステムであったときに逮捕されうる,というのは大きなリスクになるからです。また,公共サービス,あるいは WEB に公開するサービスとしての脆弱な実装,それを調達してしまった自治体にも問題があるからです。
- librahack氏はなぜ,自分のサイトでお詫びをしているのですか?
- 大人の事情です。朝日新聞記者の取材では、妻が臨月だったので警察の主張を受け入れてでも早く帰りたかったという話がでています。
- 三菱電機インフォメーションシステムズ株式会社は何をしてたのですか?
- おそらく,何もしていません。図書館側からログの提示を求められたので,従った,というだけだと考えられています。
- 岡崎市立中央図書館のサーバは止まったの?
- いいえ,実際には止まっていません。バグが原因で一時的にデータベースと接続できなくなり,検索に失敗することはありましたが,サーバが止まったという事実はありません。
捜査(逮捕)に関して
- 警察はどうして逮捕に踏み切ったのでしょうか?
- 愛知県警は librahack 氏の作ったクローラが常識の範囲内の動作をしていることを見抜けませんでした。そのため,DoS 攻撃と通常のクローラによるアクセスの見分けがつかず,librahack 氏がサービスを止めたものとして逮捕に踏み切ったものと考えられています。また,さくらインターネットのサーバ,自宅,実家の三ケ所からアクセスしたことから悪質であると想定したこと,「証拠隠滅の疑いがある」と判断したことがわかっています。いずれにしろ,いわゆる誤認逮捕であると考えられています。
- でも,サービスが止まったんだから,逮捕は妥当では?
- いいえ。サービスが停止したように見えたのは,岡崎市立図書館に導入されていたシステムそのものの性能があまりに不十分だったからです(参考:どうして岡崎市立中央図書館のサーバがアクセス不能になってしまったのでしょうか?)。
- サーバが止まったのは偽計業務妨害によるものなのですか?
- 愛知県警はそのように考えたようです。しかし,実際には蔵書検索システムの設計不備による不十分な性能のため,通常のアクセスに耐えられなかっただけのことでした。→偽計業務妨害とはどのような犯罪ですか?
- 愛知県警は正しく捜査したのですか?
- 疑問符がつきます。少なくとも,「DoS攻撃」「責任を取る」などの記述が含まれた自白調書をあらかじめ作っておき,librahack氏が法的に無知なのを利用してサインさせたことがわかっています。適切な捜査が行われたかどうか,追求されてしかるべきでしょう。
- librahack氏はどうして罪を認めてしまったのですか?
- 朝日新聞記者 神田大介氏の取材によると,次の理由からだそうです。
- (1)結果的に図書館に迷惑を掛けていたとしたら、図書館側にどんな問題があろうと申し訳ない、という気持ち。
- (2)librahack氏の妻が妊娠中で臨月が近く、一刻も早く妻の元へ戻りたいと考えていたため。(この事実の公表はlibrahack氏から承諾を受けています)
- (3)勾留中、この問題を理解できているのは自分1人しかいないのではないか、という絶望感に似た気持ちを抱いていた。
- 朝日新聞記者 神田大介氏の取材によると,次の理由からだそうです。
- あれ?
カーリルというサービス
が全国の図書館をクロールしていますが,大丈夫なんでしょうか?
- 本来,法人と個人(自然人)が刑法上区別されることはありません。法文に「人」とあれば,個人と法人の両方を指します。しかし,高木浩光氏が六月中旬に愛知県警岡崎警察署に電話問い合わせをしたところ, 「会社がやっているものを逮捕することはないので大丈夫です。」との回答があった そうです。また, カーリルを運営しているNota, Inc.が全国の図書館に問い合わせたところ,「カーリルは法人だからいい」ととれる発言があったそうです。 会社組織であれば安心で,個人は怖いという,誤った感覚が広まってしまうことは懸念されるべきでしょう。
- あれ?librahack氏は独立起業しているから,会社じゃないんですか?それじゃあ会社がやってることを逮捕したことになって,おかしくありませんか?
- ホームページ作成会社社長,と報じられていますが,個人扱いになったのでしょうか。申し訳ありませんが管理人の理解の範囲を超えてしまっていますので,お答えできそうにありません。
技術的な事柄
- プログラムを作れる人なら,サーバエラーを見れば、自分のせいだと気づくのではないですか?
- 無理です。サーバエラーを見て自分のせいだとわかるのは,認証失敗など一部のエラーだけです。ふつうは「ああ,なんかサーバの調子が悪いのかな」程度に認識できる程度でしょう。詳しい人であればサーバエラーの内容がわかりますので,今回の事件で表示された「レスポンスコード500」が「サーバ側の不具合によるエラー」だと理解するので,自分のせいだと認識する事はまず不可能です。
- さすがにIPアドレスでブロッキングされたら気づくでしょう?
- まさか。ネットワークの不調や自分のプログラムの不調,クライアントPCの不調など疑う点はたくさんあります。環境を変えてうまくいったのであれば,それでよしとしても何の不思議もありません。
- 新着図書を知りたいならどうして一秒に一回のアクセスをしたのですか?
- 新着情報はカテゴリ分けされ,詳細情報を得るためにはさらに詳しく調べる必要がありました。およそ二千件弱の詳細情報を調査し,その日に追加された本の情報を選別するため,三十分以上かけてクロールしたのです。なお,クロールは一日一回だけ実行するようになっていました。
- 一秒に一回のアクセスはひどくないですか?
- いいえ(→DoS攻撃とはどれくらいのアクセスを指すのでしょうか?参照)。また,librahack氏のクローラは,最低一秒の間隔を空け,かつ,一つのリクエストに対する応答が終了するまで次のリクエストを行わない,という構造になっていました。実質的には,一秒に一回に満たない,もっとスローなクローリングであったと考えられています。
- librahack 氏のクローラはどうして Cookie を解釈しなかったのですか? Cookie に対応していれば,サーバは止まらなかったのでは?
- 通常,クローラは Cookie を解釈する必要に迫られません。それは,Cookie で管理される状態遷移はブラウザ上での個別のものであり,サーバが恒常的に提供するページではないことが多いからです。また,librahack 氏のクローラは単純に新着情報を取得するためのものであり,ログイン操作などの必要がなかったことから,Cookie に対応する必要がなかったと言えます。また,Cookie に紐付いたセッションにデータベース接続そのものを格納するという実装は通常ありえないもので,普通の設計をしたシステムであれば Cookie を解釈しないクローラが来ても全く問題ないことから,特に必要のない限り,Cookie に対応しない,という実装は普通によくあると言えます。
- インターネットには,そういうアクセス方法を規定したルールはないのですか?
- はい,あります。インターネットに関する技術の標準を定める団体で,IETFというところが発行しているRFCという文書があります。インターネット上で利用されている通信は,このRFCにしたがって行われています。しかし,新しい技術なあはRFCにそもそも記載されていませんし,罰則規定があるわけでもないので,厳密に守らなければならない,とまではいえません。みんながRFCに準拠していれば,問題なく通信できるよね,といったものと考えてもらえればよいでしょう。
- librahack氏のクローラは,そのRFCに準拠していたのですか?
- はい。librahack氏のクローラを分析した結果についての情報によりますと,個人で利用するための標準的なクローラであって,特に問題のあるプログラムではありませんでした。
- DoS攻撃とはどのような攻撃なのでしょうか?
- サーバに大量のアクセスを行い,サービスを提供できない,または困難な状態にする攻撃です。通常,専用のツールを使って行われるか,F5アタックなどを多人数で行うことによって攻撃を行います。一般的に,サーバが返すデータを待たず,次のアクセスを行います(参照:DoS攻撃とはどれくらいのアクセスを指すのでしょうか?)。また,セキュリティ・ホールを悪用することによって,一回~数回程度のアクセスでサービスを停止させることが可能な場合もあります。
- DoS状態とはどのような状態でしょうか?
- サーバ側に何らかの不具合があるなどの理由で,そのサービスに一般的なアクセスをしたとき,偶然サービスが提供できなくなったり,提供しづらい状況になってしまった状態をいいます。
- DoS攻撃とはどれくらいのアクセスを指すのでしょうか?
- 前述のセキュリティ・ホールの悪用によるものを除いた大量アクセスによるものでは,例えばチューニングしていないApacheだと,同時接続数150,タイムアウトまで15秒ですので,最小で毎秒10回以上のアクセスが必要であるといえます。また,今回の事件では IIS が使われていました。 IIS の場合,簡単な ASP ページを表示する際に毎秒50回程度は出力できることが実験でわかっています(参考:http://www.atmarkit.co.jp/fwin2k/dnsvrguide/iisperf/iisperf_05.html)。データベースアクセスを含むことを考えても,毎秒20~30回のアクセスに耐えることが前提と考えられるので,最小で毎秒30回程度以上のアクセスが必要といえます。また,短時間に1000を超えるアクセスをした場合,特にチューニングしていないUNIX系システムではファイル取り扱い数の上限を迎えて,データを読み出せなくなるため,サービスが提供できなくなる場合があります。これらはWEBサーバの性能最小値といえます。
- WEBサーバはどれくらいの性能が普通なんですか?
- 2006年の記事ですが,よくチューニングされたシステム(IIS6.0とSQL ServerやOracleによるもの)は1秒あたり約2000回のリクエストをさばいています。ただし,これは上限値と見るべきでしょう。実際には,「DoS攻撃とはどれくらいのアクセスを指すのでしょうか?」より数段優れた性能が提供されると考えられますので,ごく普通に推測していわゆる商用サーバを導入した場合は1秒に100~数百のリクエストをさばける程度の性能が(もちろんハードウェアの性能にも左右されますが)期待されると言えるでしょう。いわゆる自宅サーバ等で,少し古くなったパソコンを再利用しているなどの場合は,もっと性能の下限値に近い性能になると思います。いずれにしろ,人間の感覚的には膨大な処理をこなせるのが普通であると言えます。ちなみに,もっと古い型で,サーバ用ではない普通のノートパソコンを使った場合(モバイルペンティアム3 700MHz,メモリ128MB)の実験では,同時に10本のリクエストを並列に投げても,一本あたり0.3秒,つまり一秒に約3回のリクエストをこなしきりました。2005年ごろのサーバ専用機が一秒一回で落ちると予測することはできません。
- どうして岡崎市立中央図書館のサーバがアクセス不能になってしまったのでしょうか?
- 岡崎市立中央図書館には,三菱電機インフォメーションシステムズ株式会社による「MELIL/CS」というシステムのASP版が導入されていました。このシステムの設計が悪く,セッションタイムアウトまで10分以上もかかる状態でありながら,セッション内でデータベース接続そのものを掴んでいました。しかも,有効なセッション数が限られていました。このため,データベースと WEB サーバの間の通信のためのデータベース接続数があっという間に上限に達してしまい,データベースと接続できなくなってしまったため,サービスが提供できないDoS状態が起きてしまいました。一般的にはこのような設計・実装は行われず,ごくふつうに製造したシステムであればもっと効率的にデータベース接続を行えるため,サーバがDoS状態に陥る事はなかったと考えられています。
- MELIL/CS の ASP 版はずっと止まりっぱなしだったのでしょうか?
- いいえ。10分待てば,セッションがタイムアウトとなり,同時に掴んでいたデータベース接続が解放されるため,再びサービスが提供できるようになったと考えられています。
- どうして,三菱電機インフォメーションシステムズは MELIL/CS のウェブサイトがそんなにすぐ止まってしまうものだと気付かなかったのですか?
- おそらく,システムの正常系しかテストしていなかったのではないでしょうか。全てが理想的に操作された状態のみチェックしていたと考えなければ,リリース前の統合テスト等をパスできるとは考えられません。特に,負荷テストと呼ばれるテストは行われていなかったと思われます。もし負荷テストを行っていれば,この不具合はすぐに気付け,システムリリース前に修正されていたことでしょう。それができなかったからこそ,場当たり的に問題が出た図書館毎に対応しなければなかったと考えられます。
- 負荷テストって何ですか?
- システムがどの程度の負荷に耐えられるかを試すテストです。フリーで使えるものとしては,Apache には「ab(Apache Benchmark)」というテストツールが付属しています。また,マイクロソフトは ab 同様のツールとして2000年ごろまで「MS Web Application Stress ツール」というものを配布していました。現在は IIS6.0 リソースキットに含まれる「MS Web Capacity Analysis Tool」がそれに代わって配布されています。どちらも単一の URL にしかアクセスしませんが,Cookie をオフにすることでたくさんのブラウザからのアクセスを想定することができます。より複雑なテストを行うツールとして「Apache JMeter」というものがあり,これは複数のページを次々とアクセスしながら負荷テストを行う事ができます。その他,商用の負荷テストツールが複数存在していますので,WEBアプリケーションの仕様にあわせて負荷テストを行う事ができます。
- 負荷テストはやらなければならないことですか?
- はい。一般的には当然のように行われていると考えられます。なぜなら,WEBシステムが処理できる上限(性能限界値)を知っておくことによって,利用者が増えたとき等の場合にシステムを更新するための判断材料になるからです。また,大量の処理を正しくさばけるかどうか(リソースの取り扱いに不備がないか)といったことを確認することができます。このように,WEBシステムが期待通りの性能を発揮できるかどうかを検査することは必要なことです。
- MELIL/CS は負荷テストを受けていなかったのですか?
- 前述のような負荷テストはおそらく受けていないと思われます。もし負荷テストを受けていれば,不具合を発見でき,修正していただろうと考えられるためです。ただし,複数のクライアントからアクセスする,程度のことはやっていた可能性があります。全くテストをしていない可能性もわずかにありますが,MELIL/CS は不十分な負荷テストしか受けていなかった,と考えるのが妥当です。
- レスポンスコード 500 とは何ですか?
- サーバの内部エラー(何らかの都合で正常な応答ができなかった)を意味します。通常,レスポンスコード 500 を受け取ったクライアントは,特になにもせずその応答を無視します。あるいは,行儀の良いクライアント(企業などで製品として利用するためのクローラ等)では,クロール頻度を下げるかもしれません。普通,クローラでは次々と別のページにアクセスするので,ひとつのページで 500 が返って来たからといって特に対処しなければならないということはありません。
- 行儀の良いクローラとは?
- 高度にエラーハンドリングを行い,クロール頻度を調整しつつ,サーバの負荷を最小限に抑えた上で,何らかの方法で連絡先を通知しつつ,効率的にページを収集するクローラが行儀の良いクローラと言えそうです。
- librahack氏は岡崎市立中央図書館のサーバが止まったことに気付かなかったのですか?
- はい。librahack氏は,クローリングに成功してデータベースに格納できたデータの件数を見て,プログラムが動作している事を確認していました。最後の一割程度のデータがうまく取得できなくても気付く事はできません。また,サーバのレスポンスを仮に見ていたとしても,レスポンスコード500ではクロールをやめるべきと判断することはできません。
- クローリングとはどのような行為を指すのですか?
- プログラムを使って自動的に WEB サイトを巡回し,ページをダウンロードする行為を指します。このために利用されるプログラムを,クローラと呼びます。
- ブラウザからのアクセスならば安全ですか?
- 場合によります。一般的なブラウザは,同時に数本のリクエストを投げています。いわゆるF5アタックなどに相当する行為や,大人数で一斉にアクセスするような行為を,サーバに悪影響を起こすつもりで,または悪影響があるかも知れないと知ったうえで行えば,業務妨害として罪に問われる可能性があります。
法的な事柄
- librahack氏にはどんな罪や責任があるのですか?
- 全くありません。偽計業務妨害などの罪に問うには故意が必要ですが,氏のクローラは常識的な性能であり,かつ,データの取得が目的でした。サーバが止まってしまうとデータが取れず,librahack氏にとっても不都合でしたので,サーバを止める意図はありませんでした。そのため,刑事責任がないことになります。また,民事的な責任ですが,サーバに一時的にアクセスできなくなったことによって損害を受けたとして図書館側が訴えた場合,どのように判断されるかはわかりません。一般的に考えて,図書館のシステムに問題があったことが事件の原因ですので,本来は責任を負わせる事は難しいのではないかと考えています。
- 偽計業務妨害とはどのような犯罪ですか?
- 刑法第二百三十三条に「虚偽の風説を流布し、又は偽計を用いて、人の信用を毀損し、又はその業務を妨害した者は、三年以下の懲役又は五十万円以下の罰金に処する。 」と定められています。偽計とは「ひとをあざむく計略」という意味ですが,広く「人の邪魔をする行為」と捉えられて運用されているようです。例えば,コンビニの出入り口付近にチンピラが何時間も居座ったせいでお客さんが怖がってしまい,営業の邪魔になっている場合などが含まれます。
- 偽計業務妨害には故意が必要なのでしょうか?
- はい。故意または未必の故意が必要です。刑法に定められた犯罪において,故意が不要なものは必ず「過失罪」として定義されています。偽計業務妨害に過失罪はありません。
librahack氏の救済(名誉回復)について
- librahack氏は図書館を訴えたら勝てるのではないですか?
- いいえ。訴える事は非常に困難です。まず,図書館は不法行為を行っていません。また,違法行為も行っていません。そのため,提訴したとしても,裁判を維持できないどころか,提訴すること自体ままならないと考えられています。同様に,三菱電機インフォメーションシステムズを相手に訴えることも不可能に近いでしょう。ただし,愛知県警を相手取り,20日間の勾留に対する国家賠償法に基づいた賠償を求める,といったことは可能だと考えられますが,librahack氏自身にそのつもりがないので,訴えを起こす事はないと考えられています。
- じゃあ,不当逮捕した警察や検察を国家賠償法で訴えたら勝てますか?
- 起訴猶予処分ということは,すくなくとも形式上は「罪を犯したが反省しているなどの理由で起訴しないと検察が判断した」ということになっています。なので,法律上は不当逮捕にならないのです・・・。
- それじゃ,三菱電機インフォメーションシステムズを訴えたら?
- 三菱電機インフォメーションシステムズは直接事件に関与していません。岡崎市立中央図書館とどれだけ連携していたかも具体的にはわかりませんし,図書館が被害届を出す際にその事実を知っていたかも不明です。librahack氏への直接の責任関係がありませんので,民事で賠償請求しようとしても提訴できないのではないでしょうか。
- こうしてはどうでしょうか。行政訴訟のうち,取消訴訟を提訴して,起訴猶予処分そのものを取り消してもらうというのは。
- 可能だと思います。が,librahack氏の負担,氏の意思を尊重すると,そのような提訴は行われないと考えられます。
- では,どうすればよいのでしょうか
- librahack氏が現状を受け入れている以上,librahack氏が提訴することはありませんし,それを強要するなんてとんでもないことです。我々にできることは,事実を明らかにして,この事件における逮捕は不当だった,という認識を世間に広めることです。そうすることで,librahack氏のみならず,これからのエンジニア達をも守る事ができると考えています。
その他
- librahack氏もカーリルみたいに許諾を得てからクロールすればよかったのではないですか?
- カーリルも事前に許諾を受けていたわけではありません。 検索エンジンなども同様です。2ちゃんねる住人が実際に岡崎市立中央図書館に電話して許可を取ろうとした時,「許可を得るよう求めたつもりはない,メディアが勝手に書いた」「プログラムでアクセスするのはやめて欲しい」といった趣旨の回答が得られた,という噂を耳にしたことがあります。
- librahack氏はどうしてそんなに急いで新着情報を集めていたのですか?
- 別に急いでいたわけではありません。図書館の閉館間際まで待てば新着が揃っているだろう,程度の読みでクロールを行っていましたが,後に自宅や実家ではばらばらの時間でアクセスしていました。時にはクロールしない日もあったそうです。librahack氏はもともと,Amazonの各カテゴリの売れ筋をチェックして本を借りたり買っていました。しかし,それでは大衆受けする本ばかり読むことになってしまうと考え,本を探すきっかけとして岡崎市立中央図書館の新着蔵書をチェックして読書の幅を広げようとしたのです。我先に予約を入れようとするのではなく,あくまでも本を探すきっかけだったと言えます。
- 岡崎市立中央図書館のシステムがそんなにダメなものなら,税金でそんなダメなものを掴まされた岡崎市は何らかの対応をしなければならないのでは?
- 岡崎市議会議員やなせ太氏が市議会で質問すると言及しています( http://aiailifeyanase.cocolog-nifty.com/blog/2010/08/librahack-7c6d.html )。
- 岡崎市立中央図書館のサーバって,普段どれくらいのアクセスがあるんでしょうか?
- 岡崎市立中央図書館は三菱電機インフォメーションシステムズと保守契約をしていなかったのですか?
- 保守契約の有無は不明ですが,少なくとも SQL Injection や XSS の修正を行い,また,七月には本事件の原因となった不具合も修正しています。なんらかの形で保守を行える関係にあることは確かです。
- 私のサーバにも同じところからたくさんのアクセスがあります!
- アクセスログをよく見てみましょう。毎秒一回~二回程度で,かつ,ページを順に辿っている場合は,一般的なクローラである可能性が高いでしょう。フリーソフトで配布されているものでは,毎秒四回~六回程度の頻度でアクセスするものがあります。
- クローラじゃなさそうです。変なアクセスが大量に来ています。
- セキュリティホールを探すツールなどでは,短時間に複数の様々なアクセスを繰り返します。そのようなアクセスの場合は,まずサーバのセキュリティチェックを行い,問題があれば早急に改善しておくことが必要となります。
- サーバが止まってしまうほどのアクセスが来ています。
- 警察に相談する前に,まずは JPCERT/CC ( http://www.jpcert.or.jp/ )に相談してみましょう。→困ったときは