2010年8月21日(土曜日)
岡崎市立中央図書館のサービスが停止した理由
更新: 2010年8月26日0時30分頃
朝日の報道と前後して、高木さんからも情報が出ていますね……「Anonymous FTPで公開されていたGlobal.asaが示すもの 岡崎図書館事件(6) (takagi-hiromitsu.jp)」。
福岡県の篠栗町立図書館のサイトにFTPサーバが立っていて、Anonymous FTPでソースコードらしきものが取得できたというお話のようで。今どきFTPのポートが開いているというだけでも驚きますが、Anonymous FTPは物凄いですね。
※私の記憶では、Windows 2000 ServerのFTPサービスはデフォルトで匿名アクセスが有効になっていたような気がします。Windows Server 2003ではFTPを使おうと思ったこと自体がないので、最近どうなっているのかは良く分かりませんが。
※2010-08-26追記: デフォルト設定どころか、管理会社 (MDISとは別らしい) が故意に認証を外したらしく、しかも書き込み可能だったという説があるようで……http://twitter.com/HiromitsuTakagi/status/22096009910 (twitter.com)。それは想像もできませんでした。にわかには信じがたい話ですが、事実だとすれば驚愕の一言です。
以前から、MELIL/CSはSession_OnStartでDBコネクションを確立しているのではないかと推察されていました。高木さんが取得したGlobal.asaの内容は、まさにその予想を裏付けるものでした。
この実装では、セッション開始の際にDBへの接続が確立され、セッション終了時に破棄されます。しかし、この図書館の蔵書検索は、そもそもログインして使うサービスではありません。ログアウトの機能もありませんから、ユーザーのログアウトでセッションが終了することはありません。ユーザーがサイトから離脱してもサーバ側にはセッションが残り、タイムアウトになるまで維持されます。タイムアウトまでの時間は設定によりますが、IISのデフォルトでは20分です。
さらに注目するべきは、セッションがCookieで管理されているということです。誰かがブラウザでこのアプリケーションにアクセスすると、アプリケーションではセッションが開始され、そのセッションIDを含むCookieが発行されます。次回アクセス時には、ブラウザからアプリケーションにCookieが送られ、アプリケーションはそのCookieを見て、同一セッションであるかどうかを判断します。
では、ブラウザのCookieが無効だったらどうなるでしょうか。この場合、初回アクセス時にセッションが開始されてCookieが発行されますが、ブラウザはそのCookieを無視します。次回アクセス時にはCookieが送られてこないため、アプリケーションは初回アクセスだと判断します。アプリケーションは別のセッションを開始し、別のCookieを発行します。
つまり、Cookie無効状態でアクセスされると、アプリケーションはどんどん新しいセッションを作ります。普通はそれでも大した問題は起きないのですが、セッション開始時にDB接続を確立する場合、DBへの接続数がどんどん増えていくことになります。DB接続できる本数には限りがありますから、その上限に達するとDB接続できなくなり、エラーで終了してしまいます。たとえば以下のようなエラーメッセージが出ることになります。
Oracle Automation エラー '800a01b8' 接続できません。,ORA-00020: maximum number of processes (150) exceeded
/LM/W3SVC/1/Root/tosho/global.asa, 行 31
これは、私が尼崎市立図書館のサイトで目撃したメッセージです。岡崎市立中央図書館においては、このエラーが On Error Resume Next で飛ばされ、別の場所でエラーになっていたと考えられています。いずれにしても、DB接続数が上限に達してしまい、サービスを継続できなくなるという現象が発生します。CPUパワーやメモリ、ディスクの容量などとは全く関係なく発生します。
ふつう、クローラはCookieを送出しませんから、クローラがアクセスしてくると一気に大量のDB接続が発生することになります。だからrobots.txtでクローラのアクセスを拒否していたのでしょう。
ではCookie有効のブラウザであれば問題が起きないかというと、そうでもありません。多くの人がアクセスしてきた場合、アクセスしてきた人数分だけDB接続が発生し、タイムアウトまで維持されます。短時間の間に多くの人が来れば、負荷がそれほど高くなくてもサービスが停止してしまうおそれがあります。
そもそも、セッション開始時にDB接続を確立するような設計がナンセンスなのであって、その設計を見直すべきです。高木さんの報告によれば、ASP.NET版では実際に見直しがされているようですね。
※どうでも良い話ですが、「'エラー対策?」というコメントが秀逸で笑ってしまいました。「エラー対策」と書くなら分かるのですが、どうして疑問形で書かれているのでしょうか。
- 「岡崎市立中央図書館のサービスが停止した理由」にコメントを書く
関連する話題: Web / セキュリティ / 岡崎市立中央図書館事件 / librahack
岡崎市立中央図書館の件、朝日新聞に
公開: 2010年8月22日19時0分頃
岡崎市立中央図書館の件、朝日新聞名古屋本社版に記事が出たそうで。asahi.comでも見られますね。
- 図書館HP閲覧不能、サイバー攻撃の容疑者逮捕、だが… (www.asahi.com)
- なぜ逮捕?ネット・専門家が疑問も 図書館アクセス問題 (www.asahi.com)
- ソフト会社、図書館側に不具合伝えず アクセス障害問題 (www.asahi.com)
日経コンピュータと比べてもかなり踏み込んだ取材を行われたようで、問題の本質をとらえた良い記事だと思います。要するに、サービス停止の原因は図書館側のプログラムの不具合ということですね。Twitter界隈では盛んに言われていたのですが、一般の人に分かりやすく伝えるのはなかなか難しいところでした。
記事を書かれた神田大介さんは、Twitter上でもいろいろ語られています。
みなさま、おはようございます。記事を書きました朝日新聞の神田と申します。今回の件では、ツイッターやブログなどネット上の情報をたくさん参考にさせていただきました。まずはお礼を申し上げます。
私のアカウント (@bakera (twitter.com)) もフォローしていただいているようで、私のツイートが多少なりとも役に立ったのであれば嬉しいですね。
その後のやりとりは以下にまとめられています。
- 岡崎市中央図書館 #librahack 事件を取材した朝日新聞記者さんへの質問と回答まとめ (8月21日分) (togetter.com)
そして、最も印象に残ったツイートがこちら。
警察発表があったとは言え、もともとlibrahack氏の名誉を毀損したのは朝日新聞をはじめとするマスコミの報道です。その意味でも今回の記事は必要だったと考えています。
これはなかなか言えないですよね。
関連する話題: Web / セキュリティ / 岡崎市立中央図書館事件 / librahack / Twitter
- 前(古い): 2010年8月20日(Friday)のえび日記
- 次(新しい): 2010年8月23日(Monday)のえび日記