フィッシング
SEOポイズニングによる偽ショッピングサイトへの誘導を行うPHPマルウェアの解析
トレンドマイクロでは、日夜インターネット上の不審サイトの監視と調査を行っています。その中で、改ざんされたWebサイトにWeb検索結果の汚染(SEOポイズニング)を目的としたPHPマルウェアが設置されている事例を複数確認いたしました。このPHPマルウェアにより、一般利用者が検索エンジンの検索結果から偽ショッピングサイトに誘導される危険が生じています。
トレンドマイクロでは、日夜インターネット上の不審サイトの監視と調査を行っています。その中で、改ざんされたWebサイトにWeb検索結果の汚染(SEOポイズニング)を目的としたPHPマルウェアが設置されている事例を複数確認いたしました。このPHPマルウェアにより、一般利用者が検索エンジンの検索結果から偽ショッピングサイトに誘導される危険が生じています。本記事では、そのようなPHPマルウェア2種類の解析結果から、SEOポイズニングの活動について解説し、Web検索の利用者やWebサイト管理者が注意すべき点をまとめます。
SEOポイズニングとは
「SEOポイズニング」とは、Web検索エンジンの検索結果を不正に操作するための攻撃手法です。攻撃者は特定のサイトを検索エンジンの検索結果の上位に表示しようとします。検索結果に表示させようするサイトは、攻撃者の用意した不正サイトであることもあれば、攻撃者によって改ざんされたWebサイトである場合もあります。いずれにせよ、攻撃者はSEOポイズニングを悪用し、ユーザを様々なサイバー空間の脅威に誘導します。SEOポイズニングは古くから使われ続けている手法で、当社でもこれまで過去にSEOポイズニングを悪用する様々な脅威について解説しています。
SEOポイズニングを悪用した偽ショッピングサイトへの誘導
一般財団法人日本サイバー犯罪対策センター (JC3) の発表によれば、年々悪質なショッピングサイトに関する通報が増加傾向にあり、その中でも検索エンジンの検索結果から偽ショッピングサイトに誘導されるケースが半数以上を占めています。当社では、このようなケースでSEOポイズニングが関連しているケースが多く含まれるのではないかと考えています。
検索エンジンの検索結果から誘導される偽ショッピングサイトの例を示します。偽ショッピングサイトでは、以下のような特徴を有するものが多く見られますが、必ずしもこのような特徴を持つものだけではありません。
- 商材の種類が様々で一貫性がない
- 商品画像を他の大手サイトから流用している
- 価格が、他の大手ショッピングサイトに比べて安い
- 実在の会社名を騙る、または架空の会社名を名乗る
- オープンソースのショッピングサイト構築キットが使われている
また、これらの偽ショッピングサイトの多くの目的は金銭目的、およびクレジットカードと個人情報の窃取が目的と考えられます。購入手続きの返信メールで指示された銀行口座に代金を振り込んだ場合でも注文した商品が届くことはなく、その後に販売業者と連絡が全く取れなくなるケースや、荷物が届いたとしても全く関係のない商品や、明らかな偽ブランド品が届くケースが報告されています。クレジットカード情報を入力して購入手続きを行った場合には、犯罪組織にクレジットカード情報を窃取され悪用されてしまいます。
SEOマルウェアの動作概要
当社ではここ数年において、SEOポイズニングを目的とした悪意のあるPHPスクリプトが改ざんされたWebサイトに設置され、Webサイトを訪問した一般ユーザを偽ショッピングサイトに誘導する事例を複数確認しました。このようなPHPスクリプトは「SEOマルウェア」と呼ばれることもあります。当社では、複数種類のSEOマルウェアを確認しており、それぞれ異なる犯罪アクターに紐づくものであると推測しています。SEOマルウェアの動作の概要を図に示します。
SEOマルウェアは犯罪アクターにより改ざんされたWebサイトに設置され、検索エンジンのクローラやユーザからのHTTPアクセスを横取りし、本来Webサーバが応答するコンテンツではなく、アクターの意図通りのコンテンツを応答するようにします。このときSEOマルウェアはC2サーバから応答するコンテンツを取得します。なお、HTTPアクセスの横取りは、PHPスクリプトそのものではなく、アクターがWebサイトを改ざんするときにWebサイトの設定ファイルなどを使って設定されます (例えば、Apache HTTP Serverにおける .htaccessファイルなど)。SEOマルウェアは、ユーザからのアクセスがあると、HTTPリクエスト中のUser-Agentヘッダを見て、検索エンジンのクローラのアクセスか、一般ユーザのアクセスかを判断し、応答するコンテンツを選択します。具体的には、検索エンジンのクローラからのアクセスの場合はSEOポイズニングを目的とした、商品名や解説文章が大量に掲載されたコンテンツを応答します。また、一般ユーザからのアクセスには偽ショッピングサイトへ誘導するコンテンツを応答します。このときSEOマルウェアはRefererヘッダを検査しリンク元が検索エンジンかどうかを判断しており、検索エンジンを経由したアクセスの場合のみコンテンツを応答します。結果として、コンテンツを受け取ったWebブラウザは偽ショッピングサイトへ転送されてしまいます。
以下では、このようなSEOマルウェアを2種類取り上げて、それらの動作の詳細を解説します。
マルウェア「CURLHACK」の解析
CURLHACK (Trojan.PHP.CURLHACKとして検出) はSEOマルウェアの一種で、上記で説明したSEOマルウェアの動作を一通り実装しています。
SEOポイズニングのために、まず、SEOマルウェアはrobots.txt を生成します。robots.txtは検索エンジンのクローラがWebサイトをクロールする際にアクセスするファイルで、Webサイトクロールのための情報を指示するテキストです。CURLHACKはHTTPリクエストにrobots パラメータが設定されている場合、robots.txt の内容をC2サーバから取得して改ざんサイトのルートディレクトリに書き込みます。CURLHACKがrobots.txtを書き込むコードを示します。なお、本記事で示すコードやサンプルは見やすさのためにインデントなどを修正しています。また、危険につながるURLやパラメータに関してはマスク処理をしています。
また、別の亜種では robots.txt の内容を直接コーディングしていて、C2サーバに通信を行わずに生成しているものもありました。
ここで生成されるrobots.txtの例を以下に示します。特徴として、連番のサイトマップ・インデックス (sitemap_index_<数字>.xml) がクロール対象として指定されていることが挙げられます。サイトマップ・インデックスは内容としてクローラが読みだすべきサイトマップのXMLファイルを複数指示しており、さらに各サイトマップがWebサイト内の複数のURLをクローラに指示しています。
次に、検索エンジンのクローラはrobots.txtに記載された各サイトマップ・インデックス、もしくはサイトマップにアクセスします。これらのアクセスはCURLHACKによって横取りされ、本来Webサーバが応答する内容ではなく、C2サーバが生成した内容が応答されます。以下にCURLHACKがsitemap.xmlを生成する関数を示します。この関数ではC2サーバに対してサイトマップの生成を要求しており、C2サーバから 「okhtmlgetcontent」 という応答があった際には、それに続く生成されたサイトマップのデータを返します。「getcontent500page」や「getcontent404page」という応答があった場合には、「500 Internal Server Error」や「404 Not Found」というエラーコードをクローラに応答するように指定しています。なお、「getcontentping」 で始まる応答があると、サイトマップの内容を Google に送信し、クローラを呼び込むようになっています。
サイトマップの例を以下に示します。CURLHACKは1つのサイトマップに数百件~数千件のURLを列挙し、クローラに大量のURLをインデクシングさせようとします。
また、別の亜種では、最終更新日であるlastmod をアクセスした日時に設定することにより、最新のデータであるとクローラに判断させるようにしていました。
クローラからインデクシング用のコンテンツを要求するアクセスをCURLHACKが処理するコードを以下に示します。CURLHACKはC2サーバからSEOに使う商品情報のコンテンツを取得して応答します。C2サーバからの応答は「okhtmlgetcontent」、「getcontent500page」、「getcontent404page」、「getcontentnotplpage」といったように、初めにどのようにページを応答するかを指定するコマンドが記載されており、それに続いてコンテンツの内容が格納されています。
SEOポイズニングの目的で、CURLHACKがC2サーバから取得しクローラに送信するコンテンツの例を以下に示します。文言や商品画像だけが表示されており、サイトのレイアウトはぐちゃぐちゃになっています。口コミと思われる文章も書いてあるように見られますが、その内容と商品に関連性はなく、内容も他のサイトからコピーしたものと思われます。
検索エンジンを経由したユーザからのアクセスであるとCURLHACKが判断すると、CURLHACKは偽ショッピングサイトにユーザを転送するコンテンツをC2サーバから取得して応答します。
CURLHACKから応答される、ユーザを偽ショッピングサイトへ誘導するコンテンツを以下に示します。METAタグやJavaScriptを用いて偽ショッピングサイトへ転送しています。
また、特定のパラメータにパスワードを持たせたリクエストを送信することで、攻撃者が改ざんサイト上でCURLHACKが正常動作しているかどうかを確認できます。この機能は攻撃者が改ざんサイトの状況の確認に用いていると考えられます。
検索エンジン経由のアクセスでなかった場合は、改ざん前のコンテンツを応答するようにしますが、その場合には、アクセス元のユーザのIP アドレス、言語設定、アクセスURLに関する情報をC2サーバに送信します。
CURLHACKの亜種では、難読化によってウイルス対策ソフトによる検知やアナリストによる解析を妨害するものも発見されています。
マルウェア「SMYSHOP」の解析
SMYSHOP (Trojan.PHP.SMYSHOPとして検出)もCURLHACKと同様にSEOポイズニングを目的としたマルウェアです。こちらも上述のSEOマルウェアとしての機能が一通り実装されています。しかし、そのコードにはCURLHACKと異なる部分があります。
SMYSHOPがクローラからのアクセスに対してサイトマップを応答するコードを以下に示します。このコードでは、アクセスするURLが.xmlで終わっているかどうかを判断しています。またSMYSHOPはRSSを応答できるようにもなっています。これはCURLHACKには実装されていなかった機能です。
SMYSHOPはCURLHACKとは異なり、C2サーバからの応答がサイトマップそのものにはなっておらず、応答内容からサイトマップを組み立て、でき上がったサイトマップをクローラに応答します。
サイトマップの生成に必要なデータをC2サーバから取得するコードを以下に示します。CURLHACKとは処理内容が同等でもコードやアクセス先のパスが異なっていることがわかります。
検索エンジンを経由したユーザからのアクセスに対して、偽ショッピングサイトに誘導するコンテンツをC2サーバから取得し、応答するコードを以下に示します。コマンドに続いて内容が応答されるところ、および「getcontent500page」、「getcontent404page」といったコマンド文字列に、CURLHACKとの類似性が見られます。これは、CURLHACKとSMYSHOPで先発マルウェアのコードを後発マルウェアが取り入れた可能性、もしくは共通の祖先となる別のSEOマルウェアから独自に派生した可能性が考えられます。
また、SMYSHOPがユーザを偽ショッピングサイトに誘導するコンテンツはCURLHACKのものと異なっており、誘導のためのJavaScriptに簡単な難読化がなされています。
SMYSHOPでは、robots.txtの生成や、サイトマップの送信をアクターが行うときに、パスワードが必要とされています。パスワードは、MD5ハッシュ関数による一方向の演算を2重に適用してから判定することにより、パスワードを逆算できないようにしています。
SMYSHOPも、CURLHACKと同様に、難読化されている亜種が発見されています。しかし、その難読化の方法は異なっています。
被害にあわないためには
一般ユーザは、このような偽ショッピングサイトの被害にあわないために、検索エンジンで商品の購入を目的とした検索を行う際、および初めて使うショッピングサイトで商品を購入する際には十分注意する必要があります。具体的には、
- URLを確認し、あまり使われないドメイン名であるなど、不審な点はないか
- その商品の一般的な相場と比べて不自然に安価でないか
- 大手ショッピングサイトで売っているのを見かけない商品が、割引されて売っていたりしないか
- 大手ショッピングサイトでないのに大量、多様な商品を扱っていないか
- 大手のブランドを騙っていたりしないか
- 会社情報、所在地を確認し、これらをキーにして再度検索して不審な結果がないか
といった確認をして自衛することが有効です。また、トレンドマイクロの「Webレピュテーション(WRS)」技術では、トレンドマイクロで偽ショッピングサイトと確認したサイトへのアクセスをブロックすることで、ユーザを偽ショッピングサイトによる攻撃から保護します。
また、Webサイト管理者は、Webサイト改ざんを防止するため、管理者アカウントの窃取やWebサイト内の脆弱性について常に注意を怠らないでください。管理者パスワードは十分複雑なものにし、最新の脆弱性情報を収集しておく必要があります。なお、統合型サーバセキュリティソリューション「Trend Micro Deep Security™」では、仮想パッチ機能によって、未更新の脆弱性を狙う攻撃からサーバを防御します。また、変更監視機能やセキュリティログ監視機能で予期しないシステム変更を警告することにより、サーバ上で行われる不審な活動を早期に検出・対応することが可能です。
トレンドマイクロはJC3をはじめとした様々な組織と緊密に協力して偽ショッピングサイトによる被害の対策に取り組んでいます。これからも偽ショッピングサイトによる被害の撲滅を目指して様々な取り組みを推進していきます。
調査・執筆協力:嶋村 誠 (Trend Micro Research)