このブログサイトのLogwatchから不穏なログが通知されてきた。
「apache脆弱性攻撃と思われるアクセスがありましたよ~」
で、中を見るとこんな感じ。(IPの最後はとりあえず隠しておきますです)
A total of 1 sites probed the server 119.63.198.xx A total of 1 possible successful probes were detected (the following URLs contain strings that match one or more of a listing of strings that indicate a possible exploit): /wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP Response 200
そこでアクセス元はというと、whoisでこの[119.63.198.xx]を見てみると、このセグメントは[Baidu, Inc.]が所有している。つまり検索サイト「百度」を運営している日本法人である。
警告を超意訳すると、「成功したっぽい探査が見つかったよ~、下記のURLで1つ以上の脆弱性攻撃の可能性を示す文字列リストが含まれてやんす」と。(この訳は役に立たないのでご自分で訳してくださいな)
それで、問題のURLを見ると・・・、
「あぁ~、タグに使われている漢字コードっぽいな~」
「ん?、なんで[\x]なの?、本来[%]じゃ・・・」
ふ~ん、「百度」クローラエンジンのリクエストURLのエンコードがバグっているものと思われますな。
UTF-8エンコードを別のエンコードに変換しているのならまだ可愛げがあるが、[\x]はねぇ~だろうよ・・・
実際、[\x]を[%]に置き換えると、
「\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1」は、
「%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1」=「メール送信」
という文字列になる。(実際タグとして使われている)
で、この変態リクエストを受け取るとどうなるかをtelnet接続で試してみると、Wordpressは404ページを作って返しているのだが、ヘッダが以下のようになっている。
# telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP/1.1 HTTP/1.0 404 Not Found Date: Sun, 28 Jun 2009 01:24:44 GMT Server: Apache/x.x.xx X-Powered-By: PHP/5.2.9 Expires: Wed, 11 Jan 1984 05:00:00 GMT Last-Modified: Sun, 28 Jun 2009 01:24:50 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Pragma: no-cache Connection: close Content-Type: text/html; charset=UTF-8
「ほぇっ?、HTTP 1.1 対応のエラーコードが帰ってねぇ~!」
ってことは、変態URLに伴う404ページが、検索インデックス(検索データベース)に登録されちゃってる可能性がある、まずい・・・のか?元来リクエストのエンコードがミスっているんだろ・・・(ry
ということで、正しく404ステータスコードを返すように下記コードを、使用テーマの404.phpに追加。(get_header()の前)
<?php header("HTTP/1.1 404 Not Found"); ?>
<?php header("Status: 404 Not Found"); ?>
で、どうなったか。
telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP/1.1 HTTP/1.1 404 Not Found Date: Sun, 28 Jun 2009 01:42:30 GMT Server: Apache/2.2.11 (Fedora) X-Powered-By: PHP/5.2.9 Expires: Wed, 11 Jan 1984 05:00:00 GMT Last-Modified: Sun, 28 Jun 2009 01:42:33 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Pragma: no-cache Status: 404 Not Found <<<===HTTP/1.1用に 追加された・・・ Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8
ということで、ヘッダには確かな値が入ったので、あちらさんがヘッダ情報を正確に拾ってくれることを祈って、ちょっと様子見してみまひょ。
ちなみに、他のクローラ(googleやyahoo)は正常なURLエンコードでリクエストしてきてますけどね。
「あんたのところだけよ」と小一時間程問い詰めたいが、小心者なので止めとこ。
2 Comments.