emacsワームがなぜ存在しないのか?
emacsというエディタがあります。エディタというよりプログラム実行環境つまり、一種のOSのようなものです。この上で多くのソフトが開発されています。私もemacs上で以下のものを使っています。
- navi2ch(2chブラウザ)
- WanderLust(メーラ)
- howm(スケジューラ件メモ書きツール)
- tdiary-mode(tDiary更新ツール:まさに今それでこの記事を書いている)
- pcl-cvs(バージョン管理システムのフロントエンド)
- w3m-el(テキストブラウザ)
howm以外はネットワークを使用するアプリケーションです。つまり、emacsはネットワーク関連の機能を豊富に持っているわけです。ということは、この環境で動くワームというのが出てこないのか気になります。
絶対にあり得ないとは言えませんが、それは非常に可能性が低いし、仮に出てきたとしてもあまり拡散しないで大きな被害にはつながらない、と私は思います。そして、そのことには多くの教訓が含まれています。ひとことで言うと多様性の価値とどのようにそれを産み出すかということです。これを抽出すれば、社会全体としてセキュリティをどう構築していくかの鍵になるかもしれません。
バイナリの多様性と.emacs
なぜ、emacsのワームを作るのが困難かと言うと、バイナリ(実行ファイル)の種類がたくさんあるからです。私が使っているものだけでも以下の5種類があります
脆弱性にもいろいろありますが、「任意のコマンドを実行可」と書かれているようなものは、たいてい実行ファイル(Windowsで言うexeファイル)の細かい所に依存しています。特定の同じexeやdllがあちこちにコピーされているで、ワームが書けるわけです。
上記の5種類のemacsは、普通に使う分には使い勝手はほとんど同じです。実際、navi2chとWanderLustとtdiary-modeはこれら全てで動くようセットアップしてあって、どのemacsでも同じように使えます。しかし、バイナリとしては全く別物であって、これら全てに通用するワームはおそらく書けません。
それでは、elispベースでワームを開発できないかを考えると、今度は.emacsの存在が障害になります。
elispというのは、emacs用のプログラミング言語で、上記のアプリケーションはみなこの言語で書かれています。そして、.emacsというのは設定ファイルで、emacs本体とelispで書かれたアプリケーションの設定をするファイルです。これによって同じアプリでも動作が違ってきます。
(setq navi2ch-offline t)
例えば、こう書いておくとNavi2chがオフラインモードで起動されます。こういう設定項目が無数にあって、さらには「フック」と言って、簡単なプログラムを書いて動作を変更させることができるようになっています。emacsのユーザは普通にこういう設定をバリバリ書いています。実際に自慢の.emacsを貼り付けようなんてスレがあります。(これは今は倉庫で後継スレが叩かれて】Emacs Lisp道場【強くなれ】)
私もそうですが、ユーザが全てこういうのを完璧に理解しているわけではなくて、人の書いたものの断片をそのままコピペして「動かない」とこういうスレで相談して、怒られたり悩んだりしているうちになんとなく自分用の.emacsができてしまいます。
これによって、同じemacsでも人によって動作が微妙に違ってくるのです。elispで書いたプログラムは、どのemacsでも(一定の制限の中で)同じ動きをするのですが、.emacsの存在によってその環境が違ってきてしまうわけです。ワームと言えどもコンピュータソフトですから、対象となるものがちょっとでも期待と違うことをしたら、そこで止まってしまいます。
ですから、技術的な観点から言うと、バイナリが複数あることと.emacsによってカスタマイズされる度合が高いことで、emacsベースのワームの開発は非常に困難になっているのです。
多様性の発生過程
emacsのワームが開発できない理由は、それぞれのemacsが似ているけど微妙に違うからです。emacsにおける多様性がなぜ発生したかと言うと、次の理由です。
- みんなが違うコンピュータを使うので、バイナリ(実行ファイル)が違う
- みんなが違う仕事をするので、設定(.emacs)が違う
つまり、使う人がemacsをコピーする時に多様性を発生させているわけです。ひとつは自分のコンピュータで動くよう修正してコンパイルするという行為、ひとつは自分のマシンで動くよう設定するという行為、emacsはコピーされるたびに自分の変種を産み出すわけです。
それで、なんでそうなるのかと言うと、それは実に当然の話ですが「人間はみんな違うから」です。人間がみんな違うから、違う好みと違うクセがあって違う仕事について違う環境で仕事をするのです。ですから、最適な道具がそれぞれ違うのは当然のことで、容易にカスタマイズできるようになっていれば、コピーする時に自分用の変種を産むのが自然なことです。
emacsはとても柔軟なソフトですから、アプリをインストールすることも含めて、かなり多くのカスタマイズができます。しかし、当然それには限界がある。その限界の為にフラストレーションがたまる。それが一定量蓄積されると、移植、改造という作業が行なわれるわけです。
実際、mule,xemacs,Meadowと言った代表的な派生バージョンはそのようにして産まれました。muleは日本語処理での、xemacsはXでの、Meadowは(かな漢字変換も含めた)Windows上でのフラストレーションがたまって開発されたものです。こういう大規模な改造、変種も.emacsによるカスタマイズの延長にあります。emacsの柔軟さがユーザの多様性に適応できなくなると、変種が誕生することでそれに追随しようとするわけです。
結局、emacsの多様性は特別な魔法で産まれてくるわけではなくて、人間の多様性とソフトウエアの柔軟性に何も人為的な制限をしなければ、自然発生してくるわけです。
一元性と多様性を選択する価値観
それで、emacsの多様性には特別な理由がなくて、「普通にやるとそうなる」という結論だとしたら、なんで世の中はそうなってないのか説明しないといけません。
普通、こういう疑問は経済の問題として説明されます。品数を作って大量生産した方が一個あたりのコストが安くなると。しかし、それは本質的な回答ではないと思います。
例えば、ユニクロは極端に品数を絞りますが、色とサイズだけは結構豊富に用意します。品数を絞れば生産も流通もコストを削減できるならば、なぜサイズと色もひとつにしないのか?それも絞ればもっと安くできるんですが、たぶんそれでは市場に受けいれられないのでしょう。消費者はデザインの一元化は受けいれるが、サイズ・色においては多様性を求めるのです。
つまり、一元化すればコストが下がるのは事実ですが、消費者はある所ではコストと引き換えの一元化は許容するけど、別の所はそうではない。つまり、そこには価値判断が含まれている、価値観の問題だと思います。
emacsにおいて理想的に実現されている多様性は、なぜソフトウエア、ネットの世界において一般的ではないのか?それを求める人とそうでない人がいて、後者の方が多いからです。「自分だけのもの」を使う満足感と「みんなと同じもの」を使う安心感で、後者を選択する人が多いからです。GPLは前者を認め後者を否定します。それは意図的にしくんであったのか偶然なのかわかりませんが、GPLに対する感情的な反発の根っこには「それじゃみんなと同じものが使えなくなっちゃうじゃないか!」という声があるような気がします。
もし、セキュリティの問題を退却戦でなく、根本的に解決しようとしたら、結局、この価値観の問題に踏みこむしかないのです。
デジタルデータの世界では、逆に多様化でなくて一元化に対する執着がある。つまり「セキュリティの完全なる喪失」という多大なコストを払ってでも、一元化されたいという欲望があるのです。
(参考: パッチを売る商人たち)