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

高木浩光@自宅の日記

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

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年06月12日

2016年06月03日

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|06|
<前の日記(2010年08月11日) 次の日記(2010年08月24日)> 最新 編集