昨年はいろいろお世話になりました。 今年もよろしくお願いします。
去年やろうと思っててできなかったことが山ほど有るので、今年はそれを一つずつ片付けていくのが目標かなぁ。
"週"記を維持するのが先か...
情報を見つけてその画像ファイルにアクセスしようとしたときにはもう削除されてて捕獲できず。どんなファイルなのかとても興味あるので、持ってる方は見せてもらえるとありがたいです。
よく考えたらこれ、0day 攻撃受けたってことなのか?
こういう場合、どうしたらいいんだろ。まともにIPAとか通してると(間にステップが入る分)どうしても対応が遅くなるし。攻撃手法が公開されてるとはいえ、どのくらい知れ渡ってるのかよくわからないし。そもそも攻撃手法が出回っちゃってるものって、IPAの守備範囲なんだっけ?
オープンソースのものなら修正を開発者に押しつけるのではなく、自分(もしくはできる人)が修正版を公開して、後で本家にマージしてもらうのがいいのか?
とかいろいろ考えてたら、やられてることはずいぶん前から知ってたんだけど、結果的に対応が遅くなってしまった。申し訳ない。
tDiary の category.rb に問題があるみたい。 他のサイトにも影響があるだろうということでblueタンがIPAにも通報してくれて、開発者も認識済みらしいので、近々正式に対策されたものが出てくるでしょう。
ちなみに自分のところはどうしてるかというと、自分でちょっといじってしまいました。本質的な対策じゃないけど、参考にどうぞ。
--- category.rb.old 2007-12-14 17:50:24.000000000 +0900 +++ category.rb 2007-12-14 17:51:27.000000000 +0900 @@ -339,7 +339,7 @@ @mode = :all end - if /\d{4}/ === @year.to_s + if /^\d{4}$/ === @year.to_s @mode = :year else @year = nil
2007-12-17追記
開発元からアナウンスが出てるので、これで対策した方がいいと思います。
tDiaryの脆弱性に関する報告(2007-12-16)
ネーミングが悪いから、こういう勘違いした記事が出てきちゃう。画像に限った話ではないし、そもそもサイトをクロスしてないし。
ユーザがスタイルシート(を含んだタグ)を自由に書き込めるようなサイトの場合、画像などの表示位置をスタイルシートで指定してあげることによって、オリジナルのコンテンツを書き換えたように見せることが可能、というもの。
こんな感じ?IE7だとそれっぽく重なってくれるはず。
<img src="images/month.png" style="position:absolute;right:70px;top:21px"> <input type="text" value="お名前をどうぞ" style="position:absolute;right:0px;top:170px;background-color:white;color:black;">
今は自分でやってるからいいけど、もしコメント欄からこれができて、"日"に書き換えられちゃうと、とっても困ることになる。けど、「XSSと同様の影響」としてしまうのは、ちょっと無理があると思う。
これはなかなかよさげな。
とてもよくまとまってると思います。では、現状はどうなのか、というのを過去〜最近の経験から。
「住所欄や掲示板への投稿本文欄など、実質的に文字種を制限できない」値に対してはエスケープするなど正しく実装されてることが多いです。それが要件として明記されているのか、単にエスケープしないとデータが壊れるからか、プログラマが意図的に行っているのか、理由はよくわからないですけど。
問題がよく見つかるのは、「電話番号とか、価格とか、メールアドレスのように文字種や桁数などが限定される」値や、もっと値が限定できるはずの「hidden値やselectboxで選択された値」の方だったりします。
なので、次は何に注意して開発をすればいいかと聞かれたら、(当たり前の)入力チェックを確実に行いましょう、と答えるでしょう。根本的なセキュリティ対策ではない保険的な対策なのかもしれないですけど、十分効果が期待できると思います。
以前 Ver.1で設定していたんだけど、Ver.2になって変わっているようなので、Ver 2.1で再設定。
インストールは mod_unique_id を有効にした以外特別なことはしてないので、省略。デフォルトで入っているルールは、目的と違うので使っていない。
SecRuleEngine DetectionOnly SecRequestBodyAccess on SecDefaultAction "phase:1,pass" SecAuditEngine on SecAuditLogType Serial SecAuditLog logs/modsec_audit.log
出てくるログはこんな感じ↓
--9672d75e-A-- [30/Aug/2007:16:10:07 +0900] ZXDGgX8AAAEAAC2lE1gAAAAA 127.0.0.1 48155 127.0.0.1 80 --9672d75e-B-- GET / HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.6) Gecko/20070822 Firefox/2.0.0.6 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive --9672d75e-F-- HTTP/1.1 200 OK Content-Location: index.html.ja.iso2022-jp Vary: negotiate,accept-language,accept-charset TCN: choice Last-Modified: Thu, 21 Dec 2006 18:47:36 GMT ETag: "74032-65e-c3cd4200;74040-961-c3cd4200" Accept-Ranges: bytes Content-Length: 1630 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-2022-jp Content-Language: ja --9672d75e-H-- Stopwatch: 1188457807398529 2346 (516 525 -) Producer: ModSecurity v2.1.1 (Apache 2.x) Server: Apache --9672d75e-Z--
リクエストする度に、こんなのが延々と1つのファイルに出力される。ログ見るとき前後を合わせてみたいのでこの形式が好きなんだけど、遅いとのこと。1リクエスト/レスポンスを1ファイルにする場合は、ログのところを以下のようにすればよい。
SecAuditLogType Concurrent SecAuditLogStorageDir /path/to/storage/dir
ひとまず終了しました。関係者の皆さん、お疲れ様でした。
今年も個性的な参加者もいて、(どの講義も)濃いネタにもかかわらず楽しんでくれてたようなので良かったです。きっと消化しきれなかったんじゃないかと思うけど、まずはこんな世界があるんだということを知ってもらい、自分が天井だと思ってたものが壊れたならそれでよし。これから帰って、理解しようと勉強していくにつれ、自分がどんな講義を受けていたのかわかってくれればいいと思ってます。
それから卒業生の成長っぷりも見えましたね。某表彰の告白(きっと来週にはどこかに出るはずなのでそれまでは内緒w)もさることながら、「去年はよくわからなかったけど、ここ1年いろいろやってたおかげで今年は理解できた」って話をしてる人が何人もいたり、一晩で化けた猫人がいたり、うれしい限りです。
いやぁ、楽しかった〜。参加者や卒業生の活躍を肴に呑めるようになったのが一番の収穫かな(笑)
今出てる記事はこの辺かな。見つけ次第追記予定
8/22追記