JavaScriptでコードを書くことによりFirefoxの機能を手軽に拡張できるようにするという、Firefoxの機能拡張モジュール「Greasemonkey」がある。同様の機能が Operaでは標準搭載されているようだ。
これらは「User JavaScript」(ユーザスクリプト)という概念で、「ユーザスタイルシート」に似ている。ユーザスタイルシートとは、Webページの見た目のデザインをブラウザ側の設定で変更するものであるが、ユーザスクリプトではさらに進めて、ブラウザ側に設定したJavaScriptプログラムをページごとに動作させることによって、HTML内容などを改変して表示させるものだ。
自分で自分のブラウザに表示するHTMLを改変するという行為は、プロキシサーバ上での変換フィルタなどを用いるなどして古くから行われてきた。たとえばProxomitron*1はそうした用途に特化して作られたプロキシサーバの代表例である。
当然ながら、変換方法を第三者に勝手に決められてしまうと、致命的なセキュリティリスクを負うことになる。端的に言えば、「ワンタイムパスワードやバーチャルキーボードなどの厳重なスパイウェア対策のなされているインターネットバンキングのサイトであっても、知らないうちに不正送金されるなどの被害」が起こり得る。
元々これらは、自分用に自分のブラウザの動作を改変する行為なのであるから、その設定がどんな変換をするものであるかを自分で理解して使うものだった。
Greasemonkeyは変換フィルタに比べるとかなり強力になっている。第一に、JavaScriptでDOMを操作するという方法で変換するため、高度な変換ルールを容易に作成できること、第二に、「GM_xmlhttpRequest」というXMLHttpRequest*2に類似した機能*3があること、第三に、JavaScriptファイルへのリンクを右クリックメニューで選択するだけで簡単にルールを追加できることなどが、その理由である。
セキュリティ上のリスクは以前から報道されていたところだったが、先日ついに日本語圏でも、不正なスクリプトか?と疑いを持たれる騒動*4が起きた。
興味深いのは、次のような声が挙がった点だ。
greasemonkeyというのはソースを読むのが前提なので、今回の件について言えばソースを読まずに使っていて文句を言うのはお門違いだと思います。
そうすると、次のような反論がわらわらと出てきた。
たしかに、ユーザスクリプトも立派なプログラムであるという点で、ツールバーや.exeファイルなどと同様にリスクを考えるべきだということは言える。それを承知でもなお、「greasemonkeyというのはソースを読むのが前提なので」という感覚を抱く人は少なくなかったのではなかろうか。それがどのような気持ちから来るものかがポイントだ。
最近では日本語圏でもトロイの木馬による被害は深刻なものとなっており、いよいよ、「拡張子を見ないでファイルを開いてはいけない」といった基礎的なリテラシーが周知されようとしているところだ。そんな折、「成分解析」なる.exeファイルが人気を博したというが、そういうものを安易にダウンロードして実行する人たちが大量にいたということが恐ろしい。それをまた注意もせず広めたITmediaの記事はにわかには信じがたいものだった。こんな内容のプログラムは.exe形式で作成する必然性は全くなく、Web上で安全性が保証されたプログラム(JavaScriptや、Javaアプレットや、Flashコンテンツや、サーバサイドのプログラム)で実現できるのであり、できるだけそうした方法でプログラムを提供するというのが、近代的なソフトウェア配布のあるべき姿とされつつあるところ、それをITmediaがブチ壊した。
あるタイミングで不正なプログラムではないようだと思われている .exeファイルが、ある日突然、悪質なプログラムに差し替えられているとも限らないと考えると、得体のよくわからない一般Webサイトで提供されている .exeファイル(未署名の)を紹介することさえ憚られる。そういう時代になってきた。
プログラマにとってプログラムを配布することがある意味「肩身の狭い」ものになりつつある。そんな中Greasemonkeyは、ひさびさにプログラマたちを晴れやかにするものだった。「どんなスクリプトであれ、自由に気軽に公開させてくれ」という心の叫びを感じる。
プロキシの変換フィルタからの流れからすれば、変換方法を記述したファイルは「設定方法」のようなものだ。「プログラム」と「設定方法」に違いがあるのかないのか*5という話もあるが、Greasemonkeyで使われる「ユーザスクリプト」を、設定ファイルのようなものと感じる人も少なくないのではないか。
たとえば次のページを見てみる。
ここに掲載されているユーザスクリプトは、コードを読んでみると、AmazonのアソシエイトリンクのすべてのIDを、「ryosukecompute-22」に書き換えるスクリプトになっている。
これはblogとして書かれて一般公開状態になっているものの、おそらく、著者が自分で使うため専用のリンクなのだろう。Greasemonkeyの右クリックでインストールの機能を使うために、Webページにリンクを貼り付けているのだと思われる。
しかし、他人がこのリンクを右クリックしてインストールしてしまうとどうなるか。今回の騒動で指摘された「Amazonアソシエイトの規約違反」という事態が発生する。
ここで、3月の不正指令電磁的記録作成罪の議論を思い出す。
この議論でけったいな刑法学者さまより教えていただいたことは、不正指令電磁的記録の罪で、作成が罪とされていることの趣旨は、どんなプログラムでも安心して人々が利用できるように「プログラムの動作に対する信頼」を法律で保護するものなのだということである。
自分用に自分で書いたユーザスクリプトでも、公衆送信可能な状態に置くからには、それがどのように他人にクリックされるかを意識して書かないと、プログラムの動作に対する社会的信頼を侵害することになる……ということになるだろうか?
Greasemonkeyがなければ(簡単なインストールはできないので)、ユーザスクリプトはユーザスタイルシート同様に単なる「設定方法」のひとつにすぎないとも言える。設定方法の説明をWeb上にどう書こうが自由だろう。ところが、Greasemonkeyが存在すると、それは一般人にとって「プログラム」として目に映るものとなり、その社会的信頼の確保が求められるようになる……。
けったいな刑法学者さまは最後で次のようにおっしゃっていた。
ある程度リテラシーのあるひとから見れば、わかりそうなものであっても、そうではない人たちが実際にコンピュータを利用するようになってきたというのであれば、そのレベルが「コンピュータの利用に関心を持つべき社会の客観」ということになります。むしろ立法者は、そうだからこそ不正指令電磁的記録に関する罪を立法しなければならないと考えているようです。
# 通貨偽造では、真正なものと一般に誤認されうるものであることが必要とされます。この場合、普段からお金に接することが多い商売人やレジ担当者がすぐに偽造とわかるものであっても、そのへんの普通の人たちが誤認しやすいものであれば偽造通貨ということになります。社会的な信頼というとき、そのレベルはその道の専門家が思うほど高くはないように思います。
続々・作成罪はいらいない?, 続・けったいな刑法学者のメモ, 2006年3月18日
通貨は通貨としてしか機能しないものなので話はそのように単純なものでよいだろうが、プログラムは使う人によって、また使い方によって、様々な動作をするものである。さらに、一口に「プログラム」といっても、署名されたプログラムパッケージのような明らかに社会的信頼が確保されるべきものから、設定ファイルや設定の手順を記したものと違わないレベルのものまで幅広い概念を指している。不正指令電磁的記録作成等の罪は、いったいどういう範囲のものに対して適用されるのだろうか。
ところで、けったいな刑法学者さまは、3月に挙げた「delall.vbs」の例について次のようにおっしゃっています。
甲についてどうなるのかということですが、事情にもよりますが、おそらく甲については作成罪は成立しないといえます。甲は、ハードディスクを消去するものとして「delall.vbs」というプログラムを書いたのであり、それは「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」不正な指令を与える電磁的記録とはいえないからです。また、たんに「format c:」のようなプログラムを紙に書いただけの場合、それだけでは、「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」不正な指令というのは困難ではないでしょうか。したがって、通常、なんらかのプログラムを紙に書いたとしても、その動作内容がそれ自体不確定な場合には、不正指令電磁的記録作成罪は成立しないと解されます。
続々・作成罪はいらいない?, 続・けったいな刑法学者のメモ, 2006年3月18日
犯罪成立のためには「人の電子計算機における実行の用に供する目的」でなければならないとされているので、「そのような心配はありませんよ」ということをよく耳にするのですが、次の点が気になります。
法案の文は、
人の使用する電子計算機についてその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる目的で、不正な指令に係る電磁的記録その他の記録を作成し、又は提供した者は、
と書かれているわけではありません。実際には、
人の電子計算機における実行の用に供する目的で、人の使用する電子計算機についてその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる不正な指令に係る電磁的記録その他の記録を作成し、又は提供した者は、
となっています。「目的」は、「意図に沿うべき動作をさせない」や「意図に反する動作をさせる」にはかかっていないように見えます。「実行の用に供する」にだけかかっているように見えます。つまり、どういう動作をさせるつもりだったかとは関係なく、単に他人のコンピュータで実行してもらう目的であれば、全部が該当するのではないでしょうか?
この「目的」による限定は、単に、他人に実行させる目的でないケース(研究目的のウイルス作成等、自分で使用する目的のケースなど)を除外しているだけではないでしょうか。
「その意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」というのは、作成者の意図(目的)を指しているのではなく、実行した人のコンピュータ上で起きる結果のことを指しているようにしか読めません。
ですから、「人の使用する電子計算機についてその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」ということが作成者の意図であることを要件とする目的犯となるように、法文を修正するべきではないでしょうか。法案作成者は、プログラムの動作というものについて、作成者の意図と実行結果が常に同じになるものだと想定していたように思えてなりません。
もしこの法案のままでいくとすると、作成罪の適用については、「不正な指令」の解釈を、「どのように使っても不正な動作にしかならないプログラム」に限定して運用しなければならないと思います。そうすると、作成者の目的が「意図に反する動作」という結果を招く意図のものであっても、作成者は「正当な目的の利用もできるようにプログラムを作っておく」という方法によって、作成罪を免れる抜け道ができてしまうのではないでしょうか。
という記事が出ていた。たしかに、「設定ファイルを書き換える」とか、「システムフォルダ内に自分自身をコピーし、レジストリを書き換える」というと、ウイルス臭い感じがしてくる。
しかし、シマンテックのテクニカルノートや、トレンドマイクロのウイルスデータベースの詳細情報で確認してみると、「レジストリを書き換える」というのは、Windowsの起動時にこのプログラムが自動起動するようにするレジストリ設定のことを言っているようだ。
他にも、レジストリ値の削除があるそうだが、それはよく読んでみると、「[仁義なきキンタマ]」のファイルを作成する不正プログラムの自動起動を止めるレジストリ設定のことを指しているようだし、ファイルの削除というのは、Antinny系トロイのファイルを削除することを指している。
Remojinが実行されると、システムフォルダ内に自分自身をコピーし、レジストリを書き換えることでWindowsが起動されるたびにRemojinが実行されるようにする。
Antinnyの亜種を削除しようとするトロイの木馬「Remojin」, INTERNET Watch, 2006年3月20日
「システムフォルダ内に自分自身をコピー」というが、よく考えてみれば、ごく普通のソフトウェアは皆そうやって自分をインストールするものだ。常駐型のソフトウェアであれば、レジストリを「改変」して自動起動の設定をするものだ。
そして、Remojinに自分自身を増殖する機能(他のコンピュータへ感染を広げる機能)があるわけではないらしい。
つまり、Remojinは、普通にAntinnyを駆除するツールプログラムとも言えるんじゃないの? と考えてみることができる*6。
Remojinがどのようなファイル名でばら撒かれているのかは知らない。ファイル名が、この動作内容とかけ離れたものであれば、「人の使用する電子計算機についてその意図に反する動作をさせる不正な指令」と言えるかもしれないが、元のコードの作成者の目的は、単にAnntiny駆除ツールの提供だ――ということもあり得る。
あるいはこんなことも起き得るのではないか。
アンチウイルスベンダーが、Antinny駆除ツールを作り配布した。ツールは、駆除を実行するプログラム「disinfect_main.exe」とそれをインストールするGUIのインストーラ「Setup.exe」から構成されていたとする。通常はユーザはSetup.exeを起動し、仕様許諾条件の確認やインストール先の確認、「本当にインストールしますか?」などの確認を経て disinfect_main.exe が起動されるようになっているとする。しかし実は、直接 disinfect_main.exe をダブルクリックすれば確認なしにすべては完了してしまう作りになっていた。そこで、disinfect_main.exe だけを取り出して適当なファイル名を付けて .zip アーカイブするなどして、Winnyネットワークに放流する輩が現れた。
これもトロイの木馬として認定されてしまうのだろうか。
*1 作者が亡くなったためメンテナンスされていない。
*2 Ajaxを実現する要素機能として近年よく知られるようになった。
*3 XMLHttpRequestでは当該ページの供給元のサーバにしか接続を許さないというセキュリティ上の制約があるが、GreasemonkeyのGM_xmlhttpRequestは任意のサイトにアクセスできてしまう。
*4 作者によれば、プログラミングミスによるバグが原因であり、意図したものではなかったとのこと。
*5 たとえば、「やってはいけないセキュリティ設定指示 Top 15」にあるような危険なセキュリティ設定の指示をする行為が、「不正指令電磁的記録作成および供用」にあたるかといえば……あたらないだろう。「設定の指示」と「プログラム」の違いはどこにあるのか。
*6 もっとも、Remojinは、インストール先として「<Windowsシステムフォルダ>drivers」を選んでいるところが普通ではないし、おそらくアンインストーラも用意されていないのだろうから、トロイの木馬とみなす判断は正しいと思うが。
しかし、<br/>
ソフトウエアを買うのではなく、正常に動作するソフトウエアを買う。という視点で考えると、
<br/>
プログラマでないなら、フリーソフト(とフリーソフトウエア)を使う
な。
<br/>
というのは正しいのではないのか?
私としては新ネタが無かったのでふれていなかった共謀罪審議の動向ですが、いよいよ今週、衆議院法務委員会でまずいことになりそうな状況。日弁連の法務省への反論にもあるように、...
非常に為になる話でした。Web2.0とかAjaxとかユーザー方向に技術が歩みよる...
前々から書こう書こうと思ってすっかり忘れていたことを高木センセーに先に書かれてしまった。。。_| ̄|○
最近では日本語圏でもトロイの木馬による被害は深刻なものとなって
熱にうなされているときに、高木さんからコメントをいただいたようです。 「人の使用する電子計算機についてその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」...
asahi.com によると、「共謀罪法案、与党が強行採決へ」とのこと。共謀罪と「ウィルス作成罪」 (不正指令電磁的記録作成罪) についての改正案は一体なので、ウィルス作成罪についても成立する可能性が高まってきたと言える。 (cf. 閣法163回22号 犯罪の国際化及び組織化..