The #ChromeDevSummit site is live, happening Nov 12-13 in San Francisco, CA
Check it out for details and request an invite. We'll be diving deep into modern web tech & looking ahead to the platform's future.

日本語キーワードによるハッキングを解決する

このガイドでは、サイトに自動生成の日本語テキストを作成するハッキング行為について説明します。このタイプのハッキングのことを、日本語キーワードによるハッキングと呼びます。一般的なコンテンツ管理システム(CMS)のユーザーを対象としていますが、CMS をご利用になっていない場合でもこのガイドは役立ちます。

注: サイトがハッキングされているかどうかわからない場合は、まず、サイトがハッキングされているかどうかを確認する方法のガイドをご覧ください。

目次

このタイプのハッキングを特定する

一般に、日本語キーワードによるハッキングでは、ランダムに生成されたディレクトリ名(http://example.com/ltjmnjp/341.html など)でサイト上に自動生成の日本語テキストを含む新しいページが作成されます。このページは、偽ブランド商品を販売しているストアへのアフィリエイト リンクを使って収益化され、Google 検索結果に表示されます。次に、このページの例を示します。

このタイプのハッキングでは、一般的に、地域ターゲティングやサイトマップなどのサイトの設定を操作して収益を拡大するために、ハッカーは自分自身をプロパティの所有者として Search Console に追加します。見覚えのない人が Search Console でサイトを確認したという通知が届いた場合は、高い確率でサイトはハッキングされています。

まず、Search Console にあるセキュリティの問題のツールを使って、サイト上にこうしたハッキングされたページがあることが Google で検出されているかどうかを確認します。このようなページは、Google 検索を開いて site:[your site root URL] を検索する方法でも確認できます。この方法では、ハッキングされたページを含め、Google のインデックスに登録されているサイトのページが表示されます。検索結果のページをいくつか見て、普通とは異なる URL があるかどうかを確認します。Google 検索結果にハッキングされたコンテンツが表示されない場合は、別の検索エンジンで同じ検索キーワードを使用してください。他の検索エンジンで、Google がインデックスから削除したハッキングされたコンテンツが表示される可能性もあります。次に、この例を示します。

上記の検索結果には、サイトの所有者が作成したものではないページが多く含まれています。説明をよく見ると、このハッキング行為で作成された日本語テキストの例が表示されています。

ハッキングされたページにアクセスすると、ページが存在しないことを示すメッセージ(404 エラーなど)が表示されることがありますが、これは偽装です。ハッカーは、ハッキングされたページがなくなったか修正されて、サイトが修正されたかのように思わせているのです。このハッキングは、コンテンツのクローキングによるものです。クローキングを確認するには、Search Console の Fetch as Google ツールにサイトの URL を入力します。Fetch as Google ツールを使うことで、下に隠れているコンテンツを確認できます。

ハッキングの問題を解決する

まず、ファイルを削除する前に、後で復元が必要になったときに備えてファイルのオフライン コピーを作成しておきます。できれば、クリーンアップ プロセスを開始する前に、サイト全体をバックアップしておくことをおすすめします。バックアップを作成するには、サーバー上にあるすべてのファイルをサーバー外の場所に保存するか、お使いの CMS に最適なバックアップ方法を検索してください。CMS をお使いの場合は、データベースもバックアップしてください。

Search Console から新たに作成されたアカウントを削除する

Search Console アカウントに見覚えのない新しい所有者が追加されていた場合は、できる限り早急にそのアクセス権を取り消してください。サイトに対して確認されているユーザーは Search Console の確認ページで調べることができます。サイトに対応する [確認の詳細] をクリックすると、確認済みのすべてユーザーが表示されます。

Search Console から所有者を削除するには、ヘルプセンターのユーザー、所有者、権限の管理の所有者の削除に関する記事をご覧ください。関連付けられた確認トークンを削除する必要があります。通常、これは、サイトのルートにある HTML ファイルか、HMTL ファイルを装った動的生成の .htaccess ファイルのいずれかです。

サイトに HTML の確認トークンが見つからない場合は、.htaccess ファイルの書き換えルールを確認します。書き換えルールは次のようになります。

  RewriteEngine On
  RewriteRule ^google(.*)\.html$ dir/file.php?google=$1 [L] 

: 一般に、wwww.example.com/google[random number and letters].html のようなシミュレーションされた確認トークン ファイルにアクセスすることで、動的生成の確認トークンが正しく削除されたかどうかを調べることができます。たとえば、サイトが www.brandonsbaseballcards.com の場合は、www.brandonsbaseballcards.com/google1234.html にアクセスしてみます。HTTP 404 が返された場合は、動的生成の確認トークンは修正されたと思われます。

.htaccess ファイルから動的生成の確認トークンを削除する方法は、次のとおりです。

.htaccess ファイルを確認する(2 ステップ)

.htaccess ファイルを使って動的生成の確認トークンを作成するだけでなく、ハッカーは .htaccess ルールを使ってユーザーをリダイレクトさせたり、意味不明な内容のスパムページを作成したりすることもあります。カスタムの .htaccess ルールを設定している場合を除き、.htaccess をまったく新しいコピーに置き換えることをご検討ください。

ステップ 1

サイトで .htaccess ファイルを探します。ファイルの場所がわからず、WordPress、Joomla、Drupal などの CMS を使っている場合は、検索エンジンで「.htaccess ファイルの場所」と CMS 名を入力して検索してください。サイトによっては、.htaccess ファイルが複数あることもあります。.htaccess ファイルの場所がすべて収められたリストを作成します。

ステップ 2

すべての .htaccess ファイルを問題のないバージョンまたはデフォルト バージョンの .htaccess ファイルに置き換えます。通常、デフォルト バージョンの .htaccess ファイルを探すには、「デフォルト .htaccess ファイル」と CMS 名を入力して検索します。サイトに複数の .htaccess ファイルがある場合は、ファイルごとに問題のないバージョンを探して置換します。

: 通常、.htaccess は「隠しファイル」になっています。このファイルを検索する場合は隠しファイルの表示を有効にしてください。

悪意のあるファイルとスクリプトをすべて削除する(4 ステップ)

悪意のあるファイルを特定することは難しく、数時間がかかることもあります。ファイルの確認には時間をかけてください。まだサイトのファイルをバックアップしていない場合は、この機会にバックアップを作成することをおすすめします。サイトをバックアップする方法については、Google 検索で「バックアップ サイト」と CMS の名前を入力して検索してください。

ステップ 1

CMS を使用している場合は、CMS のデフォルトのディストリビューションに付属のコア(デフォルト)ファイルをすべて再インストールします。これで、このファイルからハッキングされたコンテンツを除去できます。再インストールの手順については、Google 検索で「再インストール」と CMS 名を入力して検索してください。プラグイン、モジュール、拡張機能、テーマがある場合は、これらも再インストールします。

コアファイルに直接変更を加えた場合は、再インストールすると、設定したカスタマイズが失われる可能性があります。再インストールする前にデータベースとすべてのファイルのバックアップを作成しておいてください。

ステップ 2

ハッカーは、URL がより速くインデックスに登録されるよう、サイトマップを変更したり新しいサイトマップを追加したりすることもあります。以前にサイトマップ ファイルを使っていた場合は、そのファイルに不審なリンクがあるかどうかを確認し、サイトマップからそのリンクを削除します。サイトに追加した覚えのないサイトマップ ファイルがある場合は、再度確認し、スパム行為のある URL のみが含まれている場合はそのファイルを削除します。

ステップ 3

悪意のあるファイルや不正使用されているファイルが残っていないかどうかを確認します。前述の 2 つのステップで悪意のあるファイルはすべて削除されたと思われますが、サイト上に不正使用されているファイルが残っている場合に備えて、次のステップを行うことをおすすめします。

すべての PHP ファイルを 1 つずつ開いて確認する必要はありません。まず、調査を必要とする不審な PHP ファイルのリストを作成します。次のいずれかの方法で不審な PHP ファイルを判断することができます。

  • CMS ファイルの再読み込みはすでに完了しているので、確認するのは、デフォルトの CMS ファイルやフォルダ以外のファイルのみです。これで、多くの PHP ファイルが除外され、確認対象の数件のファイルが残ります。
  • 最終更新日を基準にサイト上のファイルを並べ替えます。サイトがハッキングされたことに初めて気づいてから数か月以内に変更されたファイルを探します。
  • ファイルのサイズを基準にサイト上のファイルを並べ替えます。著しく大きいファイルを探します。

: 通常、攻撃者がスクリプトを注入するファイルは、index.php、wp-load.php、404.php、view.php です。

ステップ 4

不審な PHP ファイルのリストを作成したところで、そのファイルが正常なファイルか悪意のあるファイルかを判断します。PHP をよくご存じないとこの確認作業は時間がかかる可能性があるため、PHP の資料を見直すことをご検討ください。初めてコーディングする場合は、サポートチームを作ることをおすすめします。それまでは、基本的なパターンに沿って悪意のあるファイルを探し、特定してください。

CMS を使用していて、上記のファイルを直接編集する習慣がない場合は、サーバー上のファイルと、CMS に付属のデフォルト ファイルとプラグインやテーマからなるリストを比較します。リストに含まれていないファイルや、サイズがデフォルトより大きいと思われるファイルを探します。

特定した不審なファイルを調べ、難読化されたコードのブロックを探します。これは、文字と数字が乱雑に組み合わされたようなコードです。通常、難読化されたコードの前には、base64_decode、rot13、eval、strrev、gzinflate などの PHP 関数の組み合わせが指定されていますが、その関数自体が難読化されていることもあります。次に、コードブロックの例を示します。このコードは長い 1 つのテキスト行に詰め込まれ、実際より短く見えることもあります。

  $O_O0O_O0_0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70
  %78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
  $OO0_0OO0__=$O_O0O_O0_0{26}.$O_O0O_O0_0{6}.$O_O0O_O0_0{10}.$O_O0O_O0_0{30}

サイトに問題がないかどうかを確認する

ハッキングされたファイルを取り除き終えたら、問題が解決したかどうかを確認します。前に特定した意味不明な内容のページがまだ存在するかどうかを、Fetch as Google ツールをもう一度使って確認します。Fetch as Google の結果が「Not Found」であれば、おそらく問題はありません。

また、サイトがハッキングされた場合のトラブルシューティングの手順に沿って、サイト上にまだハッキングが解決していないコンテンツがあるかどうかを確認することもできます。

二度とハッキングされないようにするには

サイトの脆弱性を修正することは、サイトを修正するための重要な最後のステップです。最近の調査によると、ハッキングされたサイトの 12% が 30 日以内に再びハッキングされています。サイトがどのようにハッキングされたかを正しく把握することが大切です。調査を始めるにあたっては、スパマーがウェブサイトのハッキングでよく利用する手段のガイドをご覧ください。なお、サイトがどのようにハッキングされたかがわからない場合は、次のチェックリストでサイト上の脆弱性を削減する方法をご確認ください。

  • コンピュータを定期的にスキャンする: 信頼できるウィルス スキャナを使ってウィルスや脆弱性を調べます。
  • 定期的にパスワードを変更する: ホスティング プロバイダ、FTP、CMS などのすべてのウェブサイト アカウントのパスワードを定期的に変更することで、サイトへの不正アクセスを防ぐことができます。アカウントごとに、安全性の高い、一意のパスワードを作成することが重要です。
  • 2 段階認証プロセス(2FA)を使用する: ログインする必要があるすべてのサービスで 2FA を有効にすることをご検討ください。2FA を利用すれば、ハッカーはパスワードを盗んでもログインすることが難しくなります。
  • CMS、プラグイン、拡張機能、モジュールを定期的に更新する: このステップはすでに実施していることと思います。サイトで古いソフトウェアが実行されていることが原因で多くのサイトがハッキングされています。自動更新に対応している CMS もあります。
  • サイトのモニタリングを行うセキュリティ サービスへの登録を検討する: わずかな料金でサイトのモニタリングを行ってくれるサービスはたくさんあります。サイトの安全性を確保するため、こうしたサービスへの登録をご検討ください。

その他のリソース

上記の方法を行ってもサイトの問題が解決しない場合は、参考となるリソースがさらにいくつかあります。

次のツールを使ってサイトをスキャンし、問題のあるコンテンツを探し出すことができます。なお、Google がサポートしている(Google 上で利用できる)ツールは VirusTotal のみです。

Virus TotalAw-snap.infoSucuri Site CheckQuttera: これは、サイトをスキャンして問題のあるコンテンツがあるかどうかを探すことができるツールの一部です。なお、いずれのツールも、問題のあるコンテンツをすべて特定することを保証しているわけではありません。

Google が提供するリソースは次のとおりです。