月: 2007年10月

Javaの脆弱性

書かない日記なので書きませんがJava(JRE,JDK,SDK)の脆弱性が多数CVEとして公開されています。数日前のアップデートで更新されていると思いますが、WindowsUpdateのついでにJavaもアップデートの確認をした方が良いです。

アプレットを使ったリモートからの任意ファイルの読み取り、DNS Rebinding攻撃に対する防御などいろいろアップデートされています。

勝手に更新するように設定していたはずのPCでもJavaアップデータのバグか何かで更新ができていないPCもあるのでちょうど良い機会のなので念のために確認するのも良いと思います。

JRE1.6ならJRE Update 3(1.6.0_03), JRE1.5ならUpdate13, JRE1.4なら1.4.2_16になっていればOKです。

CVEの一部
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5274
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5273
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5239

IEの脆弱性

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-3893

Unspecified vulnerability in Microsoft Internet Explorer 5.01 through 7 allows remote attackers to execute arbitrary code via unspecified vectors involving memory corruption from an unhandled error.

ということで、IEすべてにリモートコード実行の脆弱性があり

http://www.microsoft.com/technet/security/bulletin/ms07-057.mspx

がFIXだそうです。

普通にWindowsUpdateを動かしていれば今日中にはアップデートされると思います。

簡単なベンチマーク

最近のPostgreSQL, MySQL, SQLiteのパフォーマンスはどうかな?と言うことで非常に簡単なベンチマークをしてみました。

デフォルト状態のデータベースに郵便番号データ(12万件とちょっと)をINSERTしてみました。フラグを除く全てのフィールドをテキスト型として定義し、全てのフィールドを挿入しました。旧番号と現行番号にインデックスを付けています。スクリプトはPHPで記述し、DBが動作しているPC上からPHP 5.2.4で実行しました。1レコードが分割されている場合などは無視して挿入しているので12万2000レコードになりました。

PC

CPU: PentiumD 2.8GHz
Memory: 3GB
HDD: PATA

DBMS

MySQL: 5.0.45
PostgreSQL: 8.2.4
SQLite: 3.4.0 (PDO)

実行結果(12万行INSERTの実行時間)

InnoDb: 130.70663690567
MyISAM: 131.24672317505
Postgres: 159.47350597382
SQLite: 676.43534302711

MySQLもPostgreSQLもチューニングは一切無しで実行しています。

非同期クエリを利用するとPostgreSQLもInnoDb, MyISAMと同じくらいの速度になりました。

どのDBもペンチマーク中はディスク待ちの状態でCPU時間はあまり使っていませんでした。

MySQLとPostgresは概ね予想通りの結果でしたが、SQLiteが異常に遅いのでPDOを使わないで計測してみましたがあまり変わりませんでした。トランザクションかな?と思いBEGIN, COMMITを付けてみましたが変わりませんでした。

INSERTしたレコードをランダムにSELECTしてみました。番号はmt_rand関数で生成したのでほとんどがINDEXにヒットしないので、インデックスを利用した検索の最悪のケースのテストになります。単純にテーブルから検索をするだけです。永続的接続を利用しています。

Webサーバ:Apache 2.2.6
クライアント: ab -n 10000 -c 10 (別PCから実行。Athlon64 3500+/3GBメモリ)

パフォーマンス:リクエスト/秒

Postgres: 947.58
SQLite: 1096.00
MySQL(MyISAM): 1190.35
MySQL(InnoDb): 1245.85

概ね予想通りの結果ですが、SQLiteが思っていたより遅いです。PostgreSQLは接続のネゴシエーション処理が重いので非永続的接続を利用するとかなりパフォーマンスが落ちます。システム全体でDBへの接続数を上手に制御できていない場合はpgpoolを利用するとパフォーマンス(システム全体のスループット)が改善することがこの事からも分かります。

「Postgresでこんな数字でないよ」という方、pg_pconnectで試してみましょう。コネクションプーリングが無いと話になりません。

Windows Vista用パッチ

http://support.microsoft.com/kb/941649
http://support.microsoft.com/kb/941600

1台ハイバーネーションからの復帰にやたらと時間がかかるVistaがあるのですが、一応このパッチで対応している事になっています。KB938194,KB938979のどちらかが同じ問題を対処したことになっていましたが私が持ているPCには役に立ちませんでした。今回のパッチは役に立つのかも知れません。

http://support.microsoft.com/?kbid=941649

この更新は、互換性と信頼性と Windows Vista の安定性が向上させます。 このアップデートには、次の向上が含まれます。• モバイル デバイスのバッテリの寿命を拡張します。
• uninterruptable な電源装置(UPS)を使用するポータブル コンピュータのとデスクトップ コンピュータの安定性を向上させます。
• スタートアップ アプリケーションのメニューを開くと、 Windows Vista の信頼性を向上します。
• Web ページ開くと、 Internet Explorer の安定性を向上させます。
• ワイヤレス ネットワーク サービスの安定性を向上させます。
• 優れるタイミング構造体を使用しようと Windows Vista の起動時間を短くします。
• 一定期間が Windows Vista に発生した後、復旧時間を短縮します。
• Photo スクリーン セーバーを終了しようとする復旧時間を短縮します。
• Windows PowerShell の安定性を向上させます。
また、次の Windows Vista での問題がこの更新で解決します。• サードパーティ ウイルス対策ソフトウェアの一部のアプリケーションに影響する互換性の問題。
• Windows Vista-based コンピュータが特定のドライバのネットワーク構成を使用する場合、発生する信頼性問題。

http://support.microsoft.com/?kbid=941600

ロールアップ修正プログラムに修正される問題
925528 (http://support.microsoft.com/kb/925528/) 停止エラーは、 2 GB または複数の RAM を持ちそして NVIDIA nForce USB コントローラを使用している Windows ベースのコンピュータで発生します。
929734 (http://support.microsoft.com/kb/929734/) スリープまたは休止から Windows Vista-based コンピュータを再開した後、問題が発生することがあります。
930568 (http://support.microsoft.com/kb/930568/) Windows Vista-based コンピュータがスリープまたは休止へ状態とすると、エラー メッセージ:「 STOP 0x000000FE BUGCODE_USB_DRIVER」
929478 (http://support.microsoft.com/kb/929478/) ポータブル Windows Vista-based コンピュータから組み込む光ドライブを削除するために、ハードウェアの安全な取り外しオプションを使用した後に、ドライブに再接続することができません。
930570 (http://support.microsoft.com/kb/930570/) スリープまたは休止から Windows Vista-based コンピュータが起きるとき、 Usbhub.sys プロセスでのエラー メッセージ:「 STOP」 0x00000044
928631 (http://support.microsoft.com/kb/928631/) Windows Vista がスリープまたは休止から再開された後、正しくもう USB デバイスが機能しない可能性があります。
933433 (http://support.microsoft.com/kb/933433/) RAM または複数のを持つ Windows Vista-based コンピュータで USB マイクを使用すると、品質を記録するのが不十分です。
933442 (http://support.microsoft.com/kb/933442/) USB 複合デバイスはデバイス マネージャでの Windows Vista を実行しているコンピュータ上の装置を無効にした後、そして有効に次にした後、動作しません。
934633 (http://support.microsoft.com/kb/934633/) Windows Vista-based コンピュータに USB 多機能プリンタ デバイスを接続すると、プリンタ オブジェクトの 2 のインスタンスを作成し、最初のインスタンスが動作しません。
934796 (http://support.microsoft.com/kb/934796/) USB 複合デバイスを実行している Windows Vista-based コンピュータでのエラー メッセージ:「 STOP」 0x000000FE
933824 (http://support.microsoft.com/kb/933824/) ハードウェアの安全な取り外し機能と「取り出す」エクスプローラのコマンドが Windows Vista-based コンピュータが接続されたアップル iPod で正しく機能しません。
935782 (http://support.microsoft.com/kb/935782/) “選択的に中断する” UHCI USB コントローラを使用する Windows Vista-based コンピュータでのモード長い時間 USB デバイスが再開されるようとります。
935783 (http://support.microsoft.com/kb/935783/) スリープからの Windows Vista-based コンピュータを再開すると、 USB デバイスからの予期しない現象が発生することがあります。

次の問題については、以前サポート技術情報(Microsoft Knowledge Base)に記載されませんでした。• コンピュータがサスペンド状態または休止状態から再開するとき、コンピュータがコンピュータは、応答を停止します。 また、「 0x9F」にブルー スクリーンの STOP メッセージを表示します。
• コンピュータは、長い時間サスペンド状態または休止状態から再開するのにとります。
• VIA コントローラを使用する場合、長い時間サスペンド状態または休止状態から再開するのにとります。
• AuthenTec USB 指紋リーダーを使用する場合、コンピュータは、コンピュータの応答を停止します。 また、「 0xFE」にブルー スクリーンの STOP エラーまたは「 0x9F」にブルー スクリーンの STOP エラーを表示します。
• USB Bluetooth オーディオ デバイスを使用する場合、コンピュータは、コンピュータは、応答を停止します。
• 拡張 ホスト コントローラ インターフェイス(EHCI)コントローラを使用する場合、長い時間サスペンド状態または休止状態から再開するのにとります。
• USB デバイスを削除すると、コンピュータは、コンピュータは、応答を停止します。 また、「 0xFE」にブルー スクリーンの STOP エラーを表示します。
• コンピュータがサスペンド状態または休止状態回複数再開するとき、「 0xFE」にブルー スクリーンの STOP エラーを表示します。

SP1リリースまでにかなり時間がかかるので地道にこれらのアップデートを適用しなければならないですね…

VMWare Fusion 1.1 beta vs. Paralells Desktop 3.0

Boot CampでOSXとVistaをデュアルブートにして利用しています。Boot Camp 1.4 betaにアップグレードしてからParalellsの調子が非常に悪く、直ぐに固まるのでVMWare Fusionを試してみる事にしました。

キーボードの配列がAT配列になる、ディスプレイドライバの設定に問題があったのかVistaの画面がSVGAになった、Boot Campのドライバをインストールし直す必要があった、などのマイナーなトラブルは有りましたが普通に使えます。もっともチャレンジャーにもParalellsをアンインストールしないでVMWare Fusionをインストールした事が問題の原因かもしれませんが。

結論から言うとVMWareを使う事にしました。

– CPU消費が少ない
– 速い(体感的に)

が決め手になりました。Paralellsでぎくしゃくしていたアプリもかなり快適に動作するようになりました。フルスクリーンも使いやすいです。(OSXのメニューバーは邪魔なのでVMWareを使っている時のように隠れてくれるとうれしいのですが… 確かアプリ毎だった気がするのでOSでは変えれないのかもしれません。知らないだけで設定があるのかな?)

3DとDual Coreを有効にする設定も試してみましたが、3Dを有効にするとVistaでは無理ある(?)らしくまともに利用できませんでした。Dual Coreも有効にして少し使うとフリーズしたので無効にしました。

細かい所、例えばMacに無いキーが送信できるなどの機能はParalellsの方が良い感じです。しかし、VMWareは多少の問題は在りますが、軽快に動く方が助かるのでVMWareに乗り換えると思います。

Paralellsをインストールしている方でVMware Fusionを試したい方は最初にParallelsでWindowsを起動してParalells Toolをアンインストールした方が良いです。このツールはParallelsで起動していないとセットアッププログラムが動作しないようになっています。このツールを削除しておくとここに書いていたキーボードやドライバの問題は発生しないのかもしれません。

OSX 10.5 Leopardは10/19(大安)発売?

テキトーにMac OSXのニュースを見ていたらLeopardの発売日は10/19の大安ではないか?と言う説を見つけました。

過去発売日の4回のうち2回は大安、他も先勝などの縁起の良い日だったそうです。日本はAppleにとってお得意様だから縁起の良い日に発売しているのでは?と書かれていました。

ブックマークしなかったので元ネタURL無しで申し訳ないです。

追記:
見つけました。
http://blogs.itmedia.co.jp/2013/2007/10/mac_os_x_leopar_b514.html

http://japan.cnet.com/news/biz/story/0,2000056020,20358086,00.htm
によると10月26日(金)発売かも、となっています。

Netscape 9 ….

開発は継続していたのですね。広告収入だけでも結構な収入源になっているのしょうか?
中身はIEとFirefoxなので態々Netscape用にテストしなくても良いので開発者としては、在っても無くても良いブラウザです。このブログに過去30日間のアクセスしたブラウザの0.2%がNetscapeだったようです。

久しぶりにGoogle Analyticsを見て驚きました。IEのシェアが51.14%になっていました。Firefoxが39.40%でした。

最近公開されていたGoogle MailのXSS脆弱性もNoScriptを入れていると防げるケースも在ったようです。こういう事例がFirefoxユーザシェアを広げているのかも知れません。
# NoScriptはインストールすると明らかなXSSは防いでくれます。
# おかげでXSS関係の簡単なテストでも普段使いのFirefoxでできない
# のは不便ですが。

Boot Camp 1.4 beta

OSXのソフトウェアアップデートでEFI(MacのBIOSのようなもの)のアップデートがあったので、もしかして、と思ってBoot Campをダウンロードし直してみました。

現時点の日本語サイトでは「1.3 beta」と表示されていますが、ダウンロードした中身は「1.4 beta」になっていました。早速インストールしてドライバディスクを作成し、Vistaにドライバを入れてみました。特に変わったところは感じられませんがドライバ類は更新されたようです。

英語サイトのBoot Campのページは「1.4 beta」と表示され、大きくなったダウンロードサイズも正しく表示されていました。

安定性で困っている方、アップデートを試してみてはいかがでしょうか?

追記:
Pallarels Desktopと相性が良くないようです。私の環境ではフリーズしたようになって仮想環境(Boot Camp)が満足に利用できない状態です。

Python 3000は良いですね。

備考:古いブログですが公開し忘れしてい分です。

PHP5/PHP6の開発もPython 3000 (Python 3.0)のようになれば素晴らしいのですが、難しいでしょうね…

後方互換性は非常に重要です。今まで動いていたプログラムがバージョンアップしたら動かなくなる、と言う事態は開発者であれば誰でも避けたいものです。しかし、後方互換性を重視するあまりツジツマが合わなくなる事がよくあります。時間と共に合わなくなったツジツマはだんだんと大きくなっていきます。最初のうちは合わないツジツマはあった方が良い物ですが、だんだんと使い辛いものなっていきます。

些細な事ですがPHPの場合、古い関数の命名規約は「thisisfunctionname」と単語の区切りを付けないルールでしたが今のルールは「this_is_function_name」と単語を_で区切るルールになっています。この為、システムにデフォルトで含まれる基本的な関数であっても2つの命名規約に則った関数名が使われています。PHPには関数のエイリアス機能があるので新しい命名規約に則った関数名と古い関数名両方が存在しても問題無く利用できる機能があります。にも関わらず新しい命名規約に則った関数は作られていません。(と言うより反対する人がいるので作れなかった)クラス名や関数名も最近の言語に習って大文字・小文字を区別する方が良いと思いますが、これも実現できませんでした。(PHP5開発の際に議論されたが却下)

代わりにPHPプロジェクトが選択している仕様変更の手順はメジャーバージョンアップ、マイナーバージョンの度に徐々に少しずつ仕様を変更していく手順を取っています。strtotimeが失敗した場合の戻り値が-1からfalseに変更されたのもその一例です。

Python 2.xとPython 3.xが描いているようなアップグレードが言語として理想的なアップグレードの一つだと思います。

JSPWiki?

JSPWikiの脆弱性がCVEに書いてあったので見てみました。

JSPWiki: http://jspwiki.org/

http://nvd.nist.gov/nvd.cfm?cvename=CVE-2007-5121

Cross-site scripting (XSS) vulnerability in
JSPWiki 2.5.139-beta allows remote attackers to inject
arbitrary web script or HTML via the redirect parameter
to wiki-3/Login.jsp and unspecified other components.

http://nvd.nist.gov/nvd.cfm?cvename=CVE-2007-5120

Multiple cross-site scripting (XSS) vulnerabilities
in JSPWiki 2.4.103 and 2.5.139-beta allow remote
attackers to inject arbitrary web script or HTML
via the (1) group and (2) members parameters in
(a) NewGroup.jsp; the (3) edittime parameter in
(b) Edit.jsp; the (4) edittime, (5) author, and
(6) link parameters in (c) Comment.jsp; the (7)
loginname, (8) wikiname, (9) fullname, and (10)
email parameters in (d) UserPreferences.jsp and
(e) Login.jsp; the (11) r1 and (12) r2 parameters
in (f) Diff.jsp; and the (13) changenote parameter
in (g) PageInfo.jsp.

http://nvd.nist.gov/nvd.cfm?cvename=CVE-2007-5119

JSPWiki 2.4.103 and 2.5.139-beta allows remote
attackers to obtain sensitive information (full path)
via an invalid integer in the version parameter
to the default URI under attach/Main/.

要約すると「クロスサイトスクリプティングをはじめセキュリティの事を全く考えずに作ってしまいました」という感じ(?)です。

安定版のソースをダウンロードして見てみました。JSPWikiとなっていたので、全部JSP?と思いましたが違いました。zipで6MBあるので結構な分量です。

[yohgaki@dev JSPWiki]$ find . -name “*.jsp” | wc -l
55
[yohgaki@dev JSPWiki]$ find . -name “*.java” | wc -l
430
[yohgaki@dev JSPWiki]$ find . -name “*.jar” | wc -l
29

インストールに必要な環境

* Java (1.4 for 2.2)
* To know what a WAR file is and how to use it.
* A Servlet 2.3 -compliant web server. JSPWiki of course runs on 2.4 -compliant servers, we just don’t require anything more than 2.3. Containers that are known to work include:
o Tomcat (4.0 and higher) works quite nicely. For best results, we recommend Tomcat 5.5.
o See below for more container-specific notes
* A server to run your Wiki on. It does not have to be a very big server: JSPWiki has been run on a 266 MHz Pentium II with 192 Mbytes of memory.
* Some patience (the setup is not as easy as I would like it to be)
* If you want to email things, you need JavaMail and the Java Activation Framework JARs. Email is needed for password recovery, or error logging (log4j) if you wish to configure it that way.

初めての脆弱性レポートなのか調べてみると

http://secunia.com/advisories/13285/

がありました。

Release Date: 2004-11-24
Last Update: 2005-02-21

3年前くらいによくありそうなQueryパラメータのクロスサイトスクリプティング脆弱性がレポートされています。どうしてこんな感じになってしまったのか時間がある時に調べたいです。

Webカメラの脆弱性

WebカメラのなどのデバイスはWebサーバ機能を持っています。脆弱性がありそうだな、と思っていましたが調べてみるとかなり危険な状態のようです。

* Cross-browser XSS phishing
* Replacing the legitimate video stream with our own
* Adding a Backdoor Root Account
* Stealing the ‘passwd’ File

最近のWebカメラはメモリも十分でプログラムも実行できるので普通のWebサーバとしても利用できるくらいになっています。ネットワークWebカメラの運用には注意が必要なようです。