iどさにっき shuffle 〜2007年7月下旬〜

by やまや
<< = >>

2007年7月22日(日)

無題

_ あたまいたい。

_ 休んでるヒマなんかないほど仕事は詰まってるんだが明日までになおるだろうか。


2007年7月23日(月)

無題

_ 3ゾロ。

バージョンを隠してもねぇ

_ 出遅れたが たった2行でできるWebサーバ防御の「心理戦」という記事。親切にも はてブから 前にも書いたことにリンクしてくれた人がいたようだけど、そういうわけなのでそっちも参照してくだされ。というか、以下は去年書いたことに対する長い長い蛇足。

_ なぜ多くのサーバソフトウェアはデフォルトで外からバージョン番号が見えるようになっているんだろうか。バージョン番号が見えることにセキュリティ的な問題があるいうのが広く認識された事実なのであれば、デフォルトでバージョンを外にさらすよういなことはしないはずだ。いちおう RFC2616 にはその可能性は言及されていて「設定で変更できるようにするべき」とあるけど、バージョンを出すべきでないとなっているわけではないし、実際の実装がそうなっているわけでもない。そんなのは晒してもセキュリティ的な問題はない、と認識されてるのがほんとのところだと思う。

_ つーか、隠すのは Server ヘッダやエラーページに表示されるバージョンだけでいいの?

ちなみに Apache ではなく BIND でも、chaos txt version.bind. を問い合わせずにだいたいのバージョンを判別することはできる。バージョンによる挙動の違いに触れた文書はむしろ Apache より BIND の方が豊富(JPNIC のサイトにいっぱい転がってる)。

_ そもそも隠すのはサーバだけでいいの? 攻撃ってのはサーバに対するものだけでなく、クライアントに対するもの(受動的攻撃)だってある。この記事の理屈にしたがうならクライアントのバージョンによって受動的攻撃を受けたり受けなかったりする可能性もあるんだけど、じゃあ、そのバージョンは隠さなくてもいいの? ブラウザの User-Agent を変更するネタもたまに見るけど、UA によるアクセス制限を回避するのが目的なのがほとんど、残りは自分の使っているブラウザを知られたくないというプライバシー的なもので、攻撃を受けないために変更するという観点で書かれたものはただの一度も見たことがない。いつだったか、どっかの ML でサーバのバージョンを隠した方がいいですよ、なんてアドバイスをしている人のメールヘッダを見たら、Emacs な人にありがちなヘッダに elisp のバージョンがこと細かに載ってるものだったことがあって失笑した。MUA だって受動的攻撃を受ける可能性はあるわけだけど、バージョンによってターゲットを選別するような攻撃を受けることがあると信じるのらばこっちも隠さなきゃ矛盾だよ。

_ っていうか、もしもわしが攻撃コードを書くとしても 前に書いたようにバージョン番号を変えずにパッチをバックポートしている場合や、設定によって穴がふさげる場合もあるから、そんなものはアテにしないでいきなり穴を叩くように作るけど、仮にチェックするとしても、

if (穴ありバージョン) { 攻撃 }
ではなく、
if (穴ありバージョン || バージョン不明) { 攻撃 }
にすると思うね。バージョンが不明というのは古い可能性もある、ということだから叩いてみる価値はあるでしょ。実際に穴をつつくコードを書く人の精神構造は知らないけどさ、わしと同じ考え方をしているのならば、穴なしバージョンでもバージョンを隠すと逆によけいなちょっかいを出されるということ(穴なしならばそれで侵入を許すわけじゃないけど)。バージョンによって対象を選別するような攻撃者の目を逸らすのが目的ならば、バージョンを隠すのではなく、「最新版を使ってます」と嘘をつく方が効果あるはず。あるいは apache 1.3.99 とかの存在しないバージョンとかね。

_ バージョンを隠すこと自体は否定しない。効果があるかどうかは疑問にしても、それをおこなうことによる害もないから。でも、そういう取るに足らないつまらないことを気にするぐらいならば、それにかける時間を使ってもっと別の対策をした方がずっと有意義だと思う。バージョン隠しは気休めにしかならない(あるいは気休めにもならない)ことは認識しておかなきゃ。バージョンを隠しても、バージョンが見えると文句を言う人とクソつまらない議論をしなくていいこと以上のメリットはない、とわしは冗談ではなく思ってる。

_ で、バージョンは隠しましょう、という記事を置いている www.atmarkit.co.jp のサーバが

Server: Apache/1.3.37 (Unix) PHP/4.4.4 mod_ssl/2.8.28 OpenSSL/0.9.8e
とバージョンを垂れ流しているわけなのだが。もちろん記事を書いた人と、その記事を置いているサイトのポリシーが一致するなんて思っていないけどね。っていうか、PHP/4.4.4 はヤバいぞ:-)


2007年7月24日(火)

Varnish 1.1

_ 出たそうなのでいじってみる。

_ えー、 CPU を食い尽くすバグは直ってない。開発版はまだ試せてないんだけどどうなんだろう。svn co がなんかコケるんだよね。

_ root 権限で動くってどうよ?の件は、デフォルトで nobody:nogroup で動くように変更された。管理インターフェイスに ACL を設定できない件はそのまま。

_ 動作に必要なファイルのいくつかの置き場所が /tmp にハードコードされていてキモかったんだけど、これは起動時の引数で変更できるようになったみたい。ただし、configure で --prefix を指定せずにビルドしてデフォルトのまま起動しようとすると、configure 中に書かれている prefix=NONE がそのまま使われて NONE/var/varnish というとんでもないところにファイルを作成しようとして起動に失敗する。そのぐらいリリースする前にチェックしようよ……。起動時の引数で、あるいは configure の引数でちゃんと明示しておけば問題なし。

_ 起動したり止めたり暴走させたりしただけで、実際にプロクシとしてアクセスさせるような確認はまったくしていないので、それ以上のこまかいところがどうなったのかはわかんね。そんなにいじってる時間なんか取れないよ。


2007年7月25日(水)

checkout をちぇけら!と呼ぶ会

_ it がないのは気にしない。

_ svn co がうまくいかない件。まだ遊びでいじってる varnish だけではなく、仕事で使うものもコケる。なんでだろー、と試しに FreeBSD の ports からインストールした subversion を使ったらあっさりちぇけら!できた。うまくいかなかったのは debian etch な colinux の環境だけど、こんなあたりまえの使い方でコケるならとっくに大騒ぎされてるはずだからたぶんわしのところだけの問題。でもどこがおかしいのか調べてるヒマなんかない。とーぜん、ちぇけら!したソースからコンパイルして試すヒマもない。


2007年7月30日(月)

特定のIPアドレスからのアクセスを禁止する.htaccessジェネレーター

_ えーと、生成された例として挙げられている .htaccess をよく見てみる。んで、次に こっちを読んでみる。

_ もうわかったよね。

_ クソだから使うな。つーか、こんなクソを紹介するな。


2007年7月31日(火)

パケットリダイレクト

_ pf で

rdr pass proto tcp from any to any port 8080 -> 127.0.0.1 port 80
(8080番ポートへのアクセスを 127.0.0.1:80 にリダイレクトする)という設定を入れると、CGI に渡される環境変数は
SERVER_ADDR=127.0.0.1
SERVER_PORT=8080
になる。リダイレクト先の IP アドレスが SERVER_ADDR に設定されるなら、ポート番号もリダイレクト先の 80 になるはずじゃね? apache は80番を listen してるだけなのに、なんで関知してない8080番が SERVER_PORT に出てくるんだろ?

_ パケットキャプチャしてみたところ、たしかに 127.0.0.1:8080 とお話していて 127.0.0.1:80 との通信は発生していない。んじゃなんで httpd とつながってるんだろ。IP アドレスは L3 でポート番号は L4 だから、ということなのかなぁ。納得できてないけど。

_ だれか教えてエラい人!


<< = >>
やまや