2010-03-06
Firefox Add-on「NoRedirect」で HTTP レスポンスコードによるリダイレクトを防止する
メモ | |
いわゆる Gumblar に .htaccess を悪用して Exploit コードが仕込まれたサイトに誘導される方法が確認されたようですね。ラックが発表した注意喚起の動作概要を引用します。
【動作概要】
この.htaccessファイルが置かれる影響は、主要検索サイトからのアクセス、および404、403などのエラーがApacheのリダイレクト機能で攻撃サイトに転送されることです。攻撃サイトに転送された後、他のGumblar攻撃と同様に、悪性プログラムの感染被害に遭われることが推測されます。
Gumblar(ガンブラー)ウイルスによる新たなホームページ改ざん被害を確認 | 注意喚起 | 注意喚起情報 | セキュリティ情報 | 株式会社ラック
この注意喚起から分かることは、あくまで Exploit コードへと利用者を誘導する手法で新しいものが確認されただけであって、対策はこれまでの Gumblar(に限らず Web Exploit 全般)へのものと変わらないと思います(2009年11月3日の日記を参照)。
ただ、以前短縮 URL のリダイレクトについて調べた*1ときに HTTP レスポンスによるリダイレクトを防止する方法が見つけられなかったので、改めて調べてみました。すると、Firefox Add-on「NoRedirect」を見つけました。これを試用してみました。
結論
「NoRedirect」では、「HTTP レスポンスコードによるリダイレクト」と「meta タグによるリダイレクト」の際に、リダイレクト前に確認画面を挿入できるようです。ただし、「JavaScript によるリダイレクト」はブロックできませんでした。リダイレクト先の確認に使えそうなので、しばらく使ってみようかなと思いました。
注意喚起の .htaccess の挙動を確認する
注意喚起の .htaccess の挙動を確認してみました。注意喚起の .htaccess を基に以下の .htaccess を作成して、僕の借りてるさくらインターネットの公開ディレクトリ(一時的に作成した demomo ディレクトリ以下)に設置しました。この .htaccess を設置した URL に対して、(a) Google の検索結果からのアクセス、(b) 存在しないファイルへのアクセスを実施しました。
# HostRule
RewriteEngine On
RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*ask.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*yahoo.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*excite.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*altavista.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*netscape.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*hotbot.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*goto.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*infoseek.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*mamma.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*alltheweb.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*lycos.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*search.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*metacrawler.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*yandex.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*rambler.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*mail.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*dogpile.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*ya.*$ [NC]
RewriteRule ^(.*)$ http://www.google.ru/ [R=301,L]
ErrorDocument 401 http://www.google.ru/
ErrorDocument 403 http://www.google.ru/
ErrorDocument 404 http://www.google.ru/
ErrorDocument 500 http://www.google.ru/
# /HostRule
(a) Google の検索結果からのアクセス
http://q1w2e3.sakura.ne.jp/demomo/(今はありません) に Firefox 3.6 でアクセスします。なお、アクセスする際に Firefox Add-on「Tamper Data」で Referer に Google で「ほげ」を検索した時の URL を設定しました。該当 URL にアクセスすると、HTTP レスポンスコード 301 が返ってきて、http://www.google.ru/ にリダイレクトされました。
上記の通信を Firefox Add-on「Live HTTP Headers」でキャプチャしました。以下、キャプチャ結果です。
http://q1w2e3.sakura.ne.jp/demomo/ GET /demomo/ HTTP/1.1 Host: q1w2e3.sakura.ne.jp User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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: 115 Connection: keep-alive Referer: http://www.google.co.jp/search?q=%E3%81%BB%E3%81%92&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox If-Modified-Since: Sat, 06 Mar 2010 11:49:38 GMT If-None-Match: "46-4b924152" HTTP/1.1 301 Moved Permanently Date: Sat, 06 Mar 2010 11:55:02 GMT Server: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e Location: http://www.google.ru/ Keep-Alive: timeout=5, max=19 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 ---------------------------------------------------------- http://www.google.ru/ GET / HTTP/1.1 Host: www.google.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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: 115 Connection: keep-alive Cookie: PREF=ID=a766140dc336d442:NW=1:TM=1267876370:LM=1267876370:S=LYwT1F_fiCsNH57R; NID=32=heJQG18gWByFgSDiKqSa_RdL8lV8MwiT2_eNu_lc0_AfeikHkKwL2Wzaf_EppKUvdyHdr4uCx0YfQs-ata8RHtUWLbcvVMsj58caVdpVu3uBRauZ7u5ZNjXLCsbqdM-u HTTP/1.1 200 OK Date: Sat, 06 Mar 2010 11:55:05 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Set-Cookie: PREF=ID=a766140dc336d442:U=0a0843889d83e5da:NW=1:TM=1267876370:LM=1267876505:S=-cDAVQvBhsGroo0D; expires=Mon, 05-Mar-2012 11:55:05 GMT; path=/; domain=.google.ru Content-Encoding: gzip Server: gws Content-Length: 4389 X-XSS-Protection: 0
(b) 存在しないファイルへのアクセス
http://q1w2e3.sakura.ne.jp/demomo/hoge(今はありません) に Firefox 3.6 でアクセスします。該当 URL にアクセスすると、HTTP レスポンスコード 302 が返ってきて、http://www.google.ru/ にリダイレクトされました。
上記の通信を Firefox Add-on「Live HTTP Headers」でキャプチャしました。以下、キャプチャ結果です。
http://q1w2e3.sakura.ne.jp/demomo/hoge GET /demomo/hoge HTTP/1.1 Host: q1w2e3.sakura.ne.jp User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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: 115 Connection: keep-alive HTTP/1.1 302 Found Date: Sat, 06 Mar 2010 12:10:36 GMT Server: Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e Location: http://www.google.ru/ Keep-Alive: timeout=5, max=19 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 ---------------------------------------------------------- http://www.google.ru/ GET / HTTP/1.1 Host: www.google.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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: 115 Connection: keep-alive Cookie: PREF=ID=a766140dc336d442:U=0a0843889d83e5da:NW=1:TM=1267876370:LM=1267876505:S=-cDAVQvBhsGroo0D; NID=32=heJQG18gWByFgSDiKqSa_RdL8lV8MwiT2_eNu_lc0_AfeikHkKwL2Wzaf_EppKUvdyHdr4uCx0YfQs-ata8RHtUWLbcvVMsj58caVdpVu3uBRauZ7u5ZNjXLCsbqdM-u HTTP/1.1 200 OK Date: Sat, 06 Mar 2010 12:10:36 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Server: gws Content-Length: 4388 X-XSS-Protection: 0
Firefox Add-on「NoRedirect」を試用する
Firefox Add-on「NoRedirect」をインストールし、すべての URL でリダイレクトチェックが有効になるように設定します。Firefox の [ツール]メニュー → [NoRedirect] を選択し、「NoRedirect」の設定画面を開きます。この設定画面で、正規表現パターンとして「.*」を追加します(下記画像の青枠を参照)。
設定が完了したら、前述の (a), (b) の URL にアクセスしてみました(下記 2 つの画像を参照)。「NoRedirect」を有効にしていると、HTTP レスポンスコード 301, 302 が返ってきた場合、リダイレクト前に確認画面が挿入されるようですね。これはいいかも。この確認画面でリンクをクリックすると、リダイレクト先にアクセスできます。
続いて、「bit.ly」の短縮 URL にもアクセスしてみます。きちんと確認画面が挿入されました。
meta タグによるリダイレクトも確認してみます。以下の内容の HTML ファイルを作成し、この HTML にインターネット経由でアクセスします。http://q1w2e3.sakura.ne.jp/a.html(今はありません)にアクセスすると、確認画面が挿入されました。
<html> <head> <meta http-equiv="refresh" content="0; url=http://www.google.ru/"> </head> <body> test </body> </html>
JavaScript によるリダイレクトについては、さすがにブロックできませんでした。ただし、JavaScript によるリダイレクトは Firefox Add-on「NoScript」を有効にしていればブロックできました。
「NoRedirect」では、「HTTP レスポンスコードによるリダイレクト」、「meta タグによるリダイレクト」を実行する前に確認画面を挿入することで、リダイレクトをブロックできました。「JavaScript によるリダイレクト」についてはブロックできませんでした。今回の Gumblar 手法を防御するだけではなく、短縮 URL サービスのリダイレクト先を確認することもできるため、個人的に使えそうだなと思いました。
参考情報
VMware Server で動作する Windows XP のカーネルデバッグ環境を整える
メモ | |
2010年2月27日の日記ではじめてカーネルデバッグしました。分からないことだらけだったけど、調べるのは面白かったです:D。VMware Server で動作する Windows XP をカーネルデバッグするためには、準備が必要だったので、その過程をメモとしてまとめます。
カーネルデバッグ環境の準備
カーネルデバッグ環境は、最終的に下記画像のようになります。下記画像の 1) 〜 4) の流れに沿って、カーネルデバッグ環境を準備します。
1). windbg のインストール
まず、カーネルデバッグができる windbg をインストールします。基本的には、Microsoft のサイトからインストーラをダウンロードしてインストールするだけです。2010年2月27日の日記では、windbg 6.11.1.404 をインストールして使用しました。
windbg をインストールしたら、OS のシンボルファイルを OS に合わせて取得するように、Microsoft Symbol Server へのシンボルパスを設定します。windbg の [File]メニュー → [Symbol File Path] を選択します。起動した設定ウインドウで Microsoft Symbol Server のパスを設定します。Microsoft Symbol Server のパスについては、Microsoft の「Windows デバッグ ツールとシンボル:はじめに」のサイトに記述があります。設定すると、下記画像のようになります。
2). Guest OS に仮想 COM ポートを作成する
VMware Server で動作する Windows をカーネルデバッグする場合、Guest OS の Windows に COM ポートを追加し、その COM ポート経由でカーネルデバッグすることになります。追加する COM ポートには名前付きパイプ(named pipe)を設定し、windbg はその名前付きパイプを介して仮想マシンをデバッグします。
VMware Server 1.0.8 で仮想 COM ポートを追加する流れを下記画像にまとめました。Guest OS の設定画面を起動し、下記画像の(a)〜(e)の手順を実施すれば、仮想 COM ポートの追加は完了します。(a)〜(e)について、簡単に後述します。
(a).設定画面の [Add] ボタンから仮想ハードウェアを追加する
(b).ハードウェアタイプで Serial Port を選択する
(c).Serial Port タイプで「Ouput to named pipe」を選択する
(d).Named pipe に以下を設定する
「\\.\pipe\com_1」
「This end is the server」
「The other end is a virtual machine」
(e).仮想 COM ポートの追加完了
3). Guest OS を debug モードで起動する
カーネルデバッグするためには、Windows XP をデバッグモードで起動する必要があります。Windows XP をデバッグモードで起動するため、Windows の起動パラメータにデバッグオプションを設定します。具体的には、C:\boot.ini に以下を追加します。「/debug /debugport=com1 /baudrate=115200」がデバッグモードに関連するパラメータとなります。「/debugport」には、Windows XP の CO M ポートを指定します。2) で追加した仮想 COM ポートが COM1 に該当するため、ここでは com1 を指定しました。デバッグオプションに関しては、Microsoft の KB170756 を参照してください。
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /debug /debugport=com1 /baudrate=115200
デバッグオプションを指定した後に Windows XP を再起動すると、OS が起動する前に下記画像のようにブートする OS を指定する画面が表示されます。ここで、「Microsoft Windows XP Professional [debugger enabled]」を選択します。
4). windbg を起動する
1) 〜 3) でカーネルデバッグの準備が整いました。ここで、windbg を起動します。windbg を起動したら、[File]メニュー → [Kernel Debug] を選択します。[Kernel Debug] を選択すると、Kernel Debug の設定画面が表示されます。この設定画面で、2) で作成した名前付きパイプ「\\.\pipe\com_1」に接続するように設定します(下記画像を参照)。
以上で、カーネルデバッグ環境が整いました。これで 2010年2月27日の日記で掲載した画像のようにカーネルデバッグが可能となります。
参考情報
- Amazon.co.jp: Windowsダンプの極意 エラーが発生したら、まずダンプ解析!: 上原 祥市: 本
- p.268 「9.3.2 カーネルモードのライブデバッグ」
*1:2009年8月2日の日記を参照












ところで、自分で試してみた感じでは、リストで許可してないURLの
リダイレクトは制限されるようで、「.*」は必要ないように思える
のですが、設定しない場合の問題点があれば教えて頂けると幸いです。
「.*」がなくても302がブロックされるサイトを見て必要なさそうに
思ったのですが、「.*」がないと404がブロックされないサイトが
ありました。
検証不足で、どうも失礼しました。m(_ _)m
参考になったようで何よりです^^
ただ、「.*」の設定については、「あれこれ条件を考えるより、すべてリダイレクト前に確認してしまえば楽かな」という意図があります。「NoRedirect」によって、リダイレクトがブロックされるといっても、リダイレクトさせたければリンクをクリックするだけですし。
私も「NoRedirect」自体は試用したレベルなので、細かな挙動までは分かっていないのが正直なところです。なので、いただいだコメントは嬉しいです。標準設定でもリダイレクトをブロックできるところもあるんですね。