<前の日記(2010年08月11日) 次の日記(2010年08月24日)> 最新 編集

高木浩光@自宅の日記

目次 はじめに 連絡先:blog@takagi-hiromitsu.jp
訪問者数 本日: 1586   昨日: 2605

2010年08月21日

Anonymous FTPで公開されていたGlobal.asaが示すもの 岡崎図書館事件(6)

もしや三菱電機ISのシステムはフリーソフトを使っていたりはしないかと、「WwKensaku.aspx」でググってみたところ(図1)、そこに現れたのは、 Anonymous FTPサイト専門の検索サイトだった*1。そこでさらに「WwKensaku.aspx」で検索してみると、なんとそこに現れたリンク先は ftp://210.230.245.201/ (図2)、このリンクをクリックすると図3の画面が現れた。

画面キャプチャ
図1: 新型MELIL/CSの検索ページURLのファイル名「WwKensaku.aspx」でググった様子

画面キャプチャ
図2: Anonymous FTPサイト専門の検索サイトでの検索結果

画面キャプチャ
図3: ftp://210.230.245.201/ のURLにジャンプしたときの様子

210.230.245.201 をDNSで逆引きすると sasaguri1.uxt.cknet.co.jp となる。http://sasaguri1.uxt.cknet.co.jp/ にアクセスしてみると、以下の図4のようになった。

画面キャプチャ
図4: http://sasaguri1.uxt.cknet.co.jp/ にアクセスした様子

ドメイン名が変だが、これは篠栗町立図書館(福岡県)の正規サイトのようだ。

Anonymous FTPサイトを見て廻ったところ、MELIL/CSのプログラム(VBスクリプト)の一部等が公開された状態になっていた。念のため、ftpコマンドでアクセスしてみたところ、「Anonymous access allowed」と表示され、パスワードなしに接続することができた(図5)。

画面キャプチャ
図5: ftpコマンドで接続すると「Anonymous access allowed」と表示された

公開された状態のMELIL/CSのプログラムのうち、特に重要なものは図6のディレクトリにあった。

画面キャプチャ
図6: /Contents/TOSHOW/ の一覧

ディレクトリを隈無く見て廻ると、「Global.asax」が置かれているように、これは新型の方(ASP.NET版)であるが、旧型(ASP版)の残骸のようなもの*2が随所にあり、旧型のものと思われる「Global.asa」が置かれていた。

その中身は図7のものであった。

画面キャプチャ
図7: 旧型MELIL/CSの残骸と思しき「Global.asa」

肝心の部分のコードは以下のとおりである。

Sub Session_OnStart
(中略)

'エラー対策?
    On Error Resume Next

'図書館用データベース
    Set Session("OraDatabase") = OraSession.DbOpenDatabase(HostName ,LoginPasswd ,Clng(3))
End Sub

Sub Session_OnEnd
    Set Session("OraDyna_Book") = Nothing
    Set Session("OraDatabase") = Nothing
    Set Session("OraSQLStmt") = Nothing
End Sub

まさに、Twitter界隈で皆が予想していたとおりだった。

つまり、7月14日の「サーバ管理者日誌」で「念力デバッグ」として、現象から推測されていたことがほぼ図星で、7月22日の「その後の念力デバッグ」で補正されたものがズバリであった。そして、この推測を基に再現実験が行われた「ぐて〜blog」の7月24日のエントリ「岡崎市立図書館の件のサーバ側挙動の擬似環境下再現実験(その2)」で作成された「Global.asa」は、

Sub Session_OnStart
	Set Session("OraDatabase") = Application("OraSession").DbOpenDatabase("libradb","scott/tiger",clng(3))
End Sub

Sub Session_OnEnd
	Set Session("OraDatabase") = Nothing
End Sub 

というもので、さらに、中川氏が警察の取り調べで見せてもらったというサーバ側アクセスログにあったエラーメッセージの記憶を基に、そのようなエラーメッセージが出るよう、「On Error Resume Next」のエラー処理を追加したのが、7月29日の「ASP実験、Session_OnStartのオブジェクト生成失敗を無視する処理」のときの「Global.asa」であり、まさにその推測は完全に当たっていたということになる。*3

このコードの場合、DB接続はアクセス元のブラウザ専用として確保(ASPセッションに紐付け)され、ASPセッションがタイムアウトするまでの間(7月の時点で岡崎市立中央図書館では実測で620秒くらいだった)、閉じられることなく(使いもしないのに)占有されてしまう。その間に新しい閲覧者(ブラウザが)接続してくると、次々新しいDB接続が確保され、その最大数に達すると、それ以上のアクセスを受付けなくなってしまう。

旧型MELIL/CSの設定ファイルもあった(図8)。

画面キャプチャ
図8: 旧型MELIL/CSの設定ファイル

2003年8月に作成され、少なくとも2005年7月まで正式に活用されていたことが窺える。

iモード版ではcookieが使えないため、Global.asaによるASPセッション中のDB接続の維持ができないことから、アクセスの都度接続する方式をとっているらしく、DB接続のID・パスワードがこの設定ファイルに書かれている(Gloabl.asaではなく)。

他にも管理者用のものと思われる「AdminTools.asp」が公開された状態になっていた。これは旧型であり、2003年5月に開発されたことが窺える。

画面キャプチャ
図9: 「AdminTools.asp」が公開された状態になっていた様子

ここで謎なのが、著作者として個人の氏名が書かれていて、およそ会社の職務で書いたものには見えない文言が書かれている。旧型の.aspに著者名があるものは、どれもこの方によるものになっていた。*4

一方、新型(ASP.NET)の方はどうなっていたかというと、まず、「Global.asax.vb」にはDB接続するコードは書かれていなかった。そして、新型用の設定ファイルに以下の記述があった(図10)。

画面キャプチャ
図10: 新型(ASP.NET版)MELIL/CSの設定ファイルにある記述

「データベースのアクセス方式を指定する」とあり、「0:都度コネクト」と「1:プーリング機能」が選択できるようになっている。

このDB接続の実装は、「Database.vb」にあった(図11)。

画面キャプチャ
図11: 新型(ASP.NET版)MELIL/CSのDB接続の実装コード「Database.vb」の肝心部分

これを読むと、新型のMELIL/CSでは、今回の岡崎市立中央図書館のような事態や、他の各地の図書館で報告されていた不具合(/robots.txtを置かないと一般のクローラが来ただけで支障が出てしまう)が生じないよう、ちゃんとDB接続の管理が作り込まれていることがわかる。「都度接続方式」では、SQL文の実行が終了してASPページの実行が終了する(HTTPレスポンスがブラウザに返される)までに、毎回DB接続を閉じるように書かれている。

このコードが書かれたのは、2006年3月〜2007年2月であり、少なくともこの時点で三菱電機ISは、旧型の欠陥を原因まで含めて承知していたはずと言える。

そして、このAnonymous FTPサイトの存在を朝日新聞の記者*5に通報したところ、数日後にはこのAnonymous FTPは閉鎖されていた。

*1 この時点で「何これ?」とTwitterにつぶやきそうになったが、後になって思えば、思いとどまってその先まで調べてよかったと思う。

*2 もしくは、部分的に旧型のプログラムを流用している、あるいはテスト用ページ(旧型の)を残したままにしているために、旧型のコードの一部が置かれていたと考えられる。

*3 私が朝日新聞からの依頼を受けたのはそれより後。

*4 一方、新型の .vb のコードには、別の方の名前がローマ字で記載されていた。

*5 7月16日に、情報ネットワーク法学会のこの事件をテーマにした座談会に取材にいらしていて、お目にかかっていた。

本日のTrackBacks(全9件) [TrackBack URL: http://takagi-hiromitsu.jp/diary/tb.rb/20100821]

 えーと、朝日新聞とかでネタになってるようです。

三菱電機インフォメーションシステムズ(MDIS)の図書館システムMELIL/CS

検索

<前の日記(2010年08月11日) 次の日記(2010年08月24日)> 最新 編集

最近のタイトル

2016年04月23日

2016年04月06日

2016年03月27日

2016年03月14日

2016年03月06日

2016年02月24日

2016年02月20日

2016年02月11日

2016年02月05日

2016年01月31日

2015年12月12日

2015年12月06日

2015年11月23日

2015年11月21日

2015年11月07日

2015年10月20日

2015年07月02日

2015年06月14日

2015年03月15日

2015年03月10日

2015年03月08日

2015年01月05日

2014年12月27日

2014年11月12日

2014年09月07日

2014年07月18日

2014年04月23日

2014年04月22日

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|05|06|07|08|09|10|11|12|
2012|02|03|04|05|06|07|08|09|
2013|01|02|03|04|05|06|07|
2014|01|04|07|09|11|12|
2015|01|03|06|07|10|11|12|
2016|01|02|03|04|
<前の日記(2010年08月11日) 次の日記(2010年08月24日)> 最新 編集