7月 122014
 
シェアする

GoogleAppEngine

Google Proxy Hacking とは?

簡単に言うと他人のサイトを自分のサイトのようにGoogleBotにクロールさせる/させてしまうことによっておきる迷惑行為です。調べた限りでは、Google検索においてバグが存在し、そのバグを理解したものが悪用している・・?そんな感じのようです。

Proxy Serverがもつウェブコンテンツをキャッシュする機能と、それを処理するGoogleのアルゴリズムのバグが原因となって、Website Hacking(ウェブサイトの乗っ取り)が発生する可能性があるのです。
引用元:Google Proxy Hacking(グーグル プロキシ ハッキング)-あなたのページが乗っ取られる?

Proxyってなに?

Proxy(プロキシー、プロクシ、串(くし))とは、あなたの代わりに何かを代行してくれるものことです。WebProxyとなると、あなたとアクセス先のWebサイトの間に入ることで、アクセス元であるあなたの情報を隠したりしてくれる機能を持っています。

あなた —–> WebProxy ——> Webサイト

これにより、すでに言いましたがアクセス元のあなたの情報をWebサイトにわからないようにしたり、はたまたすでにアクセスしたことがあるコンテンツをWebProxyが保持する(キャッシュ)ことで、素早くコンテンツを表示したり出来ます

たとえば、社内にWebProxyがあると、アクセスする先を制限したり、コンテンツをキャッシュしておくことで、利用しているインターネット回線のデータ通信量を抑えてくれたりする優れものです。

プロキシ – Wikipedia

で、Google Proxy Hackingってなに?

今回耳にしたものは、このProxy機能、主にコンテンツをキャッシュしておく機能を用いて他人のサイトをあたかも自分のサイトのように公開し、さらには本当のWebサイトよりもGoogleでの検索結果が上位になることで、本当のWebサイトへのアクセス数が激減し、おもに広告による収入を行っている優良サイトなどへの影響を起こすGoogle Proxy Hackingという迷惑行為です。

根拠のない見解ですが、GoogleAppEngine(GAE)を用いたGoogleのクラウドサービスは「*.appspot.com」というGoogle所有のドメインのサブドメインで公開されます。そのため、Google検索に対するSEOとしては、他の独自ドメインによるサイトなどを差し置いて優先順位があがるんじゃないか?っておもってます。ちょっと自分のサイトをGoogleAppEngineで独自ドメインで公開しようカーなんて今思ってますが、これはまた今度で。

そもそも、なぜ他人のサイトを自分のサイトのようにアクセスさせることが出来るのか。

Google検索結果はGoogleのクローラーによってクロールする(Webコンテンツを嘗め回して情報を集める)ことによって、どの情報がどのWebサイトにあるのか、を集めた情報によって出来上がっています。そのためまったく同じコンテンツを公開した場合、クローラーから見たときには同じものになるのです。

それで?

そこで、Googleが提供するクラウドサービスのAppEngineにてProxyを作ったとします。前述しましたとおり、Proxyサーバーはコンテンツをキャッシュさせることが出来ます。一度Proxy経由でアクセスされたWebページは一定期間キャッシュとしてProxyサーバーに保存されます。これにより、「同じコンテンツを公開した場合」に該当することが実現できるというのを理解するのは難しくないと思います。

とりあえず、Googleのクラウドサービスを使って、Proxyサイトを作ってみます

作成開始:23:58
作成終了:00:24(嫁さんとテレビを見ながら)

作ってみました

すごくないですか?笑 所要時間1560秒wwwww

http://worldbestproxy.appspot.com/

このURLはまだGoogleにクロールするように登録していないので、ここでキャッシュされるコンテンツは検索サイトに表示されません/と思います。またデフォルトのrobots.txt(http://worldbestproxy.appspot.com/robots.txt)は以下の記述になっているので、クローラーがアクセスしてきたとしても、/main配下以外はクロールされないはずです。

User-agent: *
Disallow: /
Allow: /main

このままGoogleのクラウドサービスにアップロードして、Googleにクロールするように設定したとしても、誰かがプロキシ経由でアクセスしてキャッシュされている情報がクローラーに取得されることはないはずです。しかし、robots.txtを変更した上でGoogleクラウドサービス上にアップロード(Deploy(でぷろい)という)して、URLをGoogleクローラーに登録した場合、作成したProxy経由でアクセスしたサイトのキャッシュがクロールされる可能性はあります。

ためしに私の遊び用のサーバにアクセスさせて、パケットをキャプチャしてみましたところ、以下のようなUser-Agentを確認できました。

User-Agent: AppEngine-Google; (+http://code.google.com/appengine; appid: s~worldbestproxy)
Host: vps2.trippyboy.com
Accept-Encoding: gzip

なんと簡単なんでしょう。参考までに、アクセスした際にブラウザ上URLとして表示されたのは「http://worldbestproxy.appspot.com/vps2.trippyboy.com」でした。

作成する際に参考にしたサイトでは最低限の操作しかされていないので、pythonに詳しい人がもっと記述を変更すれば表示されるURLをランダムな文字列にしたりすることが出来ます。もちろんrobots.txtの変更も出来ますし、Googleクローラーへの登録も出来ますよね。

どうすればGoogleProxyHackingから身を守れるか!?

とにかく巷に出回っているGoogleのクラウドサービスを用いたWebProxyサイト構築はとても簡単であることがわかりました。

この方法にPythonの知識を加えれば、Google Proxy Hackingと呼ばれる迷惑行為はたやすく出来ると思われます。

User-Agentからのアクセスをブロック!

とりあえず今回は、上記のパケットキャプチャの結果からAppEngine-Google」をUser-Agentとしたアクセスがあることがわかりますので、このUser-Agentからのアクセスをブロックするように設定してみました。ただし、「AppEngine-Google」をUser-Agentとしたアクセスをブロックすることで、100%のアクセスを制限できるとは思えません。というのも、*.appspot.comにてUser-Agentを詐称したProxyサイトを立てられた場合は現状対応の仕方が思い浮かびません。

GoogleProxyHackingによって検索順位をのっとられてしまったかたは、ぜひアクセスログを解析してこのUser-Agentが記録されていないか確認してください。上記にあるとおりUser-Agentには「s~worldbestproxy」とGoogleAppEngineのIDが記録されているので、このようなログが残っていればどのユーザーかを特定できるのでGoogleに通報しましょう!

明確になっていないものとして

  • *.appspot.comはもしかして自動でクロールされてしまうのか?
  • *.appspot.com/*でアクセスしたURLはGoogleのクラウドサービス自体がキャッシュしてそれをクロールしてる?
  • *.appspot.com/*へのアクセスを勝手にキャッシュしてしまうGoogle検索のバグ??

とりあえずの対策はこれだ!

最後になりましたが、今回初めてこのことをしり私は以下の設定を本サイトに設定しました。「https://blog.trippyboy.com」には以下の設定を行っていますので、「http://worldbestproxy.appspot.com/blog.trippyboy.com」とアクセスをしてもForbiddenになります。

nginxの場合は設定ファイルに

server{
~
   if ($http_user_agent ~* ".*AppEngine-Google.*"){
        return 403;
    }
~
}

Apacheの場合は.htaccessで対応できます

SetEnvIf User-Agent ".*AppEngine-Google.*" block_AppEngine
order allow,deny
allow from all
deny from env=block_AppEngine

最後に

この記事を書く上で、Google Proxy Hackingによって被害を受けている人、被害を受けたくない人への回避策の提案を目的としていますが、同時にAppEngineを用いてProxyサーバーを構築している人たちへ、加害側が行う回避策を回避する方法を思いつくきっかけになってしまわないかと考えました。これは本当に防ぎようがないのです。接続元はGoogleのクラウドサービスから行われるわけで、Proxyサーバーから外部サーバーを見るときに通るゲートウェイが違うのか、接続元のIPアドレスがころころ変わります。また、これらを特定できたとしても、これらのIPアドレスが今後どのようなGoogleサービスに利用されるかわからずブロックが難しい。。さらに、アクセスにProxy経由ですよーを示すHTTPヘッダーがないので、それを元にもアクセス拒否が出来ない。。単に自分のPCでアクセスした内容をPCに保存して、それを友人に見せている のと同じことをやっているので、本当に難しいですね。最後の手段として、今後はGoogelAppEngineで自分のコンテンツを公開する!それしか対抗策がない。。対抗策として、「外部サイトからの被リンクを増やす」という対抗策がありますが、それでもGoogleAppEngineを好評価するGoogleクローラーの関心を引くことは難しいようです。

参考:

Google App Engine

How to Setup your own Proxy Server for Free

GitHub: google-proxy

このエントリーをはてなブックマークに追加

  2 コメント

  1. 参考にして対策いれました。ありがとうございます!

    ところで、.htaccessのところ1ヶ所間違ってますよ~
    誤:deny from env=blog_AppEngine
    正:deny from env=block_AppEngine

  2. Wizard-Gさん
    ご指摘ありがとうございます!修正させていただきました(^_^)v

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ