突然ですが,あなたの Movable Type は安全ですか?
Movable Type は非常に高機能な Blog のツールです.しかしその反面,設定等により(少なくとも私にとっては)危険と思われる問題が幾つか考えられます.
ここに挙げる問題は,Movable Type のパスワードが第三者に漏れた場合を想定しています.したがって,すぐに問題となるようなものではありません.しかし,万が一パスワードが漏れてしまった場合は,例えば掲示板CGI等に比べてより大きな被害が出る可能性があります.それは,Blog への被害にとどまらず,サーバ全体への被害や踏み台にされる可能性も含まれます.
ここでは,それらの問題の可能性について考えてみました.
はじめに
この文書の内容は,私の環境 *1において,再現したまたは思考実験によりその可能性が考えられるもの *2であり,全てが正しいとは限りません *3.また,私は実際に試したことにより生じる責任を負いません.
以下に挙げる問題は,直接かつすぐに脅威となる問題ではありません.しかし,長期間放置しておきたくないと考える人もいるであろう *4問題です.
これらの問題は,Movable Type のパスワードが第三者に漏れたときに以下の可能性があるというものです.
- サーバの実行権限で可能な任意のファイルの読み取り/書き込み/実行が可能
パスワードが,自信を持って安全といえる状況であれば,ここで挙げる問題はありません.しかしそうでなければ,例えば telnet をインターネットに向けて公開しているのと同じ状況である可能性があるわけです.
私は,この問題に対し,Movable Type ソース変更やサーバの設定変更により対処しました.しかし,私が単に見落しているだけで,実はもっと簡単に回避出来るのかもしれません.もしそうであれば,お教え頂ければ幸いです.
パスワードは安全か
Movable Type を SSL 等の暗号化手段を通じて運用している人は多くはないでしょう.従って,ほとんどの場合は,暗号化されていないパスワードがネットワークを流れていることになります.これらのパスワードは,経由するネットワークの管理者であれば容易に見ることが出来ます.これに対して,通常は「テンプレートの編集」等の機能を制限された ID を用いるようにすれば,気休め程度には回避できるかもしれません.
また,正しいパスワードが容易に推測できてしまう場合もあるでしょう.例えば,以下のような状況であれば,その危険性は高くなります.
- 簡単なパスワードを用いている
- Blog に表示されている著者名とユーザIDが同じ
- mt.cgi や mt-xmlrpc.cgi がデフォルトの名前のままである
逆に,上の項目に当てはまらなければ,より安全であると言えます.とはいえ,Movable Type パスワードに関して言えば,十分に安全といえる状況はあまり多くは無いでしょう *5.
サーバの実行権限で可能な任意のファイルの読み取りが可能
設定画面の「Template の編集 > この Template をリンクするファイル」においては,一部の拡張子 *6は制限されますが,ディレクトリに関して制限はありません.したがって,サーバの実行権限で可能な任意のファイルを表示させることが可能です.例えば,「/etc/passwd/」と入れれば,システム上で有効なユーザ一覧を見ることが出来ます.
サーバの実行権限で可能な任意のファイルの書き込み/実行が可能
設定画面の「Template の編集 > 出力ファイル名」で入力されるファイル名は,全く制限を受けません.従って,サーバの実行権限で可能な任意のファイルを書き込むことが可能です.ここで書き込まれるファイルのパーミッションは,mt.cfg で指定されたものとなります.もし実行可能なパーミッションが設定されていれば *7,
#!/bin/sh
/bin/rm -rf /
のようなファイルを rm.cgi 等の名前で書き込まれた場合,そりゃぁ大変なことが起ります *8.
実行権限が設定されていなくても注意が必要です.それは,サーバの実行権限で上書きが可能な CGI ファイル等がある場合です.このファイルに上書きしようとした場合,上書き前の実行権限が保存されます.従って,上記同様に任意のプログラムを実行される可能性があります.
また,実行権限が設定されていなくても実行可能な SSI が利用できる場合も同様の可能性があります.SSI が有効になっていなくても,.htaccess ファイルを書き込むことにより有効化できる場合があります.
サーバの実行権限で可能な一部のファイルの書き込み/実行が可能
設定画面における「ファイルのアップロード」や,XML-RPC API における metaWeblog.newMediaObject でも前節と似た問題があります.書き込みが可能なディレクトリは,Blog のトップディレクトリ *9以下に限られますが,その他は前節と同じです.これで,新しいディレクトリを作った上で,.htaccess を置いて CGI を有効化し,前節の方法でスクリプトを放り込んでちゅど〜ん,という可能性もあるわけです.
サーバの実行権限で可能な任意のファイルの書き込みが可能
設定画面の「Create new Weblog」では Blog を設置するディレクトリについて制限を受けません.したがって,前節で書き込み可能となるディレクトリを(サーバの実行権限で可能で書き込み可能であれば)任意に設定することが出来ます.
回避策
というわけで,重複する部分や当然しておくべきことも多いですが,とりあえずの回避策.
お手軽編
設定変更編
- .htaccess を制限
- ディレクトリ毎に不必要な機能は外しておく.
Movable Type ソース変更編
- 読み書き可能なディレクトリを制限する
- 不必要な機能を禁止しておく
おわりに
以上のように即危険というものではありませんが,パスワードが漏れた場合には,これらのような問題が考えられます.そのサーバが自分のものではなく,かつ公開しているコンテンツが Blog のみというのであれば,あまり問題にならない *12かもしれません.しかし,例えば自分が管理するサーバで利用している場合は,サーバの実行権限で動く telnet がインターネットに向けて公開されているのと実質同じ状況も起りうるということを踏まえておく必要があります.
これらの問題は,任意のファイルを直接操作出来るという Movable Type の高機能さ故の問題 *13です.「安全性と利便性はトレードオフである」と良く言われますが,まさにそれを意識した運用が必要でしょう.
繰り返しになりますが,もしかしたら私が気付いていないだけであり, mt.cfg 等の設定により大部分を回避できる問題なのかもしれません.もしそうであればその旨をご指摘頂ければ幸いです.
*2: 断定的に記述されていても,曖昧な思考実験に依るものかもしれません
*3: 嘘を書くつもりはありませんが
*4: 例えば私
*5: もっともパスワードの問題については,例えば ファイルのアップロードに ftp を使っている場合でも似たような問題があるでしょう.しかし,総当たり攻撃を受けた場合を考えるならば,Movable Type の方がより気付きにくいと考えられます.
*6: .cgi や .pl 等
*7: Blog のページを動的に構成するため実行可能にしている人も多いと思います
*8: サーバが root 権限で動いていることはまず無いでしょうから,全削除には至りませんが
*9: 「ファイルのアップロード」では Archive Path以下も
*10: 総当たり攻撃に対しては無意味ですが,上記が可能であるユーザ/パスワードを盗聴される機会が少なくなるという意味で意味があるかもしれません
*11: コマンド実行が制限された SSI.また,古いバージョンでなければ上位ディレクトリへのアクセスは制限されているので比較的安全かもしれません.ただし,Last-Modified ヘッダを正しく返すためには実行権限をあたえる必要がありますが.
*12: パスワードが漏れても,最悪 Blog が破壊されるだけだし,サーバローカルのセキュリティ問題はサーバ管理者の責任,と考えることも出来なくはない
*13: 読み書き出来るファイルがソースによって特定されているものであれば,この問題は起きにくい.もちろん処理が適切であればですが

コメントする