Protect Against Russia-Ukraine Cyber Activity

CAPTCHAで保護されたフィッシングキャンペーンの発見

Protected phishing

This post is also available in: English (英語)

概要

Unit 42のリサーチャーは、GoogleのreCAPTCHAなど正規のチャレンジ&レスポンスサービスや、CAPTCHAに似せてカスタマイズした偽の検証を展開する、様々な悪意のあるキャンペーンを観測してきました。フィッシングキャンペーンreCAPTCHAを利用するサイバー犯罪者に関する最近のセキュリティブログや、PhishTimeCrawlPhishなどの研究報告によると、CAPTCHAで保護されたフィッシングページには増加傾向が見られます。フィッシングコンテンツをCAPTCHAの背後に隠すことで、セキュリティクローラが悪意のあるコンテンツを検出するのを防ぎ、フィッシングログインページに見かけ上の正当性を与えることができます。

本稿では、CAPTCHAによる回避がある場合でもセキュリティクローラで悪意のあるコンテンツを検出する技術を紹介します。場合によっては、このようなキャンペーンを追跡・検出することも可能です。多くの悪意のあるキャンペーンが、CAPTCHAのサービスキーを再利用しています。これは、マルウェアのインフラを簡素化するためか、CAPTCHAのアカウントやキーを過剰に作って正規reCAPTCHAプロバイダにブロックされるのを避けるためでしょう。

弊社は研究報告「Betrayed by your Dashboard」 (2018年にTheWebConfで発表) で、「攻撃者は正規Web解析サービスを利用するので、Web解析IDを利用すれば大規模な悪意のあるキャンペーンを特定できる」ということを示しました。本稿では、同様のパイプラインを使って、CAPTCHAキーの関連付けによりフィッシングページを検出する方法を紹介します。

先月の広範囲なフィッシングキャンペーンで多数見られた悪質CAPTCHAキーのトップ10を確認したところ、4,088個の有料レベルドメインの7,572の一意なURLをブロックし、少なくとも202,872回、お客様がそれらのURLにアクセスしないよう保護していたことがわかりました。同時に、こうしたURLは、サードパーティの悪意のあるフィードに取り込まれるのが遅いこともわかりました。おそらくは、フィッシングや詐欺などの悪意のあるコンテンツが隠されているためと思われます。

パロアルトネットワークスの次世代ファイアウォールのお客様で、Advanced URL Filteringと WildFireセキュリティのサブスクリプション をお持ちの方は、このような高度なフィッシングキャンペーンから保護されています。

CAPTCHAで保護されたフィッシングキャンペーン

パロアルトネットワークスでは、さまざまなドメインやURLにまたがるキャンペーンをどのようにして検出・追跡していくかに重点を置いています。

Apple IDの認証情報を狙ったフィッシングの例

弊社が2020年7月から監視している長期的なフィッシングキャンペーンの例 (hxxp://utem[.]com/[.]YSou8XI) を見てみましょう。このキャンペーンではフィッシングページをプッシュし、Microsoft OutlookやAppleなどのログインページを標的にしてきました。ユーザーがこのページにアクセスすると、次のようなCAPTCHAチャレンジが表示されます。

ある稼働期間の長いフィッシングキャンペーンでは、この図のようなCAPTCHAで保護されたフィッシングページが使われている。ユーザーがこのページにアクセスすると、この図のようなCAPTCHAチャレンジが表示される。
図1 CAPTCHAチャレンジ

標準的なreCAPTCHAチャレンジを解くとブラウザには以下の図2に示すような古典的フィッシングページが表示されます。この例では、同じページにフィッシングコンテンツが動的に生成されていますが、トップレベルのリダイレクトが発生することの方が多いです。

この例では、同じページにフィッシングコンテンツが動的に生成されていますが、トップレベルのリダイレクトが発生することの方が多いです。
図2 フィッシングページ

ただし(CAPTCHAのチャレンジを解く前の) メインページ では、次のようなサブリクエストが観測され、URLパラメータに使用されているreCAPTCHAのAPIキーが明らかになります。

サブリクエストからURLパラメータで使用されているreCAPTCHA API キーが明らかにRe-CAPTCHA API キーは太字で示されている。
図3 サブリクエストからURLパラメータで使用されているreCAPTCHA API キーが明らかに

このような識別子をパースして他のページの検索に使えば他のフィッシングページを見つけられます。たとえば、同じIDを使ったWebページは、Apple IDのフィッシングもプッシュしていました。

Apple ID のフィッシング用 web ページのスクリーンショット
図4 Apple IDの認証情報を狙ったフィッシング

このほか、CAPTCHA のキーを HTML から抽出する方法もあります。以下に示す例は、最近のOutlookのフィッシングキャンペーンで使用されたものです。

CAPTCHA のキーを HTML から抽出する方法もあります。この例は最近のOutlookのフィッシングキャンペーンで使用されたものです。
図5 最近のOutlookのフィッシングキャンペーンで使用されたHTML

このようなCAPTCHAキーは、フィッシングコンテンツを取得しなくても、悪意のあるページを検出する強力な指標となります。さらに、こうした実地観測済みのデータとフィルタリングパイプラインを使うことによって悪意のあるCAPTCHAキーを自動的に掘り出していくことも可能で、先の研究報告書「Betrayed by Your Dashboard: Discovering Malicious Campaigns via Web Analytics」でもこれについて言及しています。しかし私たちはこうした洗練された悪意のあるページは、サードパーティのマルウェアやフィッシングのフィードに取り込まれるのが遅いことに気づきました。このためラベルなしのURLフィードから手動で検証した実地観測データの方が、より有用なCAPTCHAキーやCAPTCHAキーグループを提供してくれます。

Microsoftのフィッシング例

ここでは op[.]g2yu-bere[.]xyz/?e=c2Nhc2VAY2l0Y28uY29t を取り上げます。このフィッシングサイトで攻撃者はMicrosoftアカウントの認証情報を詐取しようとしています。CAPTCHAチャレンジがあることで、ユーザーやセキュリティスキャナの目にはこれが正当なサイトであるかのよう映ります。ユーザーがCAPTCHAを解くと、攻撃者はそのユーザーからOffice 365の認証情報を詐取しようとします。

CAPTCHAで保護されたフィッシングキャンペーン。Microsoft のアカウント認証情報を狙ったもの。
図6 CAPTCHAで保護されたフィッシングページ

フィッシングだけではない

様々なフィッシングキャンペーンに加えて、2020年10月からは、CAPTCHA回避を利用した詐欺キャンペーンや悪意のあるゲートウェイが多く観測されるようになりました。多くの場合、 IPやブラウザのバージョンなどから他の手段による自動化が疑われる場合にのみCAPTCHAチャレンジを表示します。

グレイウェアキャンペーン

CAPTCHA保護された悪意のあるページのカテゴリとしてはほかにグレイウェアがあげられます。アンケートや宝くじの詐欺などは、最も一般的なグレイウェアのページです。偽の支払いや宝くじの当選チャンスと引き換えに、ユーザーは住所、生年月日、銀行情報、年収などの機微な情報を開示するように誘導されます。

アンケート詐欺の例。ユーザーは住所、生年月日、銀行情報、年収などの機微な情報を開示するよう要求される。
図7 アンケート詐欺の例

以下は、ID6LfKnxEUAAAAAO1iXBX9FqL0w-68XqXGl3UPBF5pでCAPTCHA回避を使用し、ユーザー情報を収集しようとする宝くじ詐欺ページ (win[.]click2win4life[.].com/api/offer) の例です。

Click to Win 4 Life lotteryという宝くじ詐欺のスクリーンショット
図8 宝くじ詐欺の例

マルウェア配布

最近はマルウェア配布ページが正規CAPTCHAサービスを悪用している例が見受けられます。たとえば、hxxps://davidemoscato[.]comという URL は、悪意のある JAR ファイル (PayeeAdvice_IN00231_Q1626801_32843.jar) をホストしていますが、ページを CAPTCHA チャレンジで保護することでセキュリティスキャナから隠しています。

横断歩道を含むすべての画像を選択するよう求める検証ページの背後に隠されたマルウェアのスクリーンショット
図9 CAPTCHAで保護されたマルウェアのページ

CAPTCHAシグネチャの有効性

1ヶ月間 (2021年4月18日~5月18日) で最も多数見られた悪意のあるCAPTCHA ID 10個の統計を紹介します。下のグラフは、各IDの1日あたりの新規検出数を表しています。こうした悪意のあるIDを使う新たなURLが1日平均529件見つかっていることがわかりました。このトップ10のIDからは30日間で合計7,572件の一意なURLを受信しました。

トップ10 IDの日毎の検出数 (2021年4月18日から5月18日)を示すグラフ
図10 トップ10 IDの日毎の検出数 (2021年4月18日から5月18日)

1日あたりの一意な検出数を用いて人気度をランク付けしました。攻撃者は、こうしたIDを長期間 (なかには250日以上のものも) 使用しているケースが見られるため、これが悪意のある活動の強固な指標となっています。

それぞれのCAPTCHA IDの利用期間は以下のようになっていました。

CAPTCHA ID

一意な30日間の検出数

1日あたりの平均検出数

ID の利用期間 (単位: 日)

6LcEthAUAAAAANLeILVZiZpPDbVwyoQuQ7c3qlsy 3,290 228 264
6LcJK64UAAAAAKwjDYyWpakQ_5aFAb34tK-EkiDA 2,094 87 287
6Le-dsYUAAAAABJa32oIuo9LEPsur7OcBz-a9kyL 1,132 42 294
6LfKnxEUAAAAAO1iXBX9FqL0w-68XqXGl3UPBF5p 1,021 39 238
6Lc8-cQUAAAAAF60sMK0PjhPOA6ciyzy6cfnGcl0 784 38 294
6LeihuEUAAAAAEgMRhYQKQCxnJvsqIZnRghJAPcH 222 42 182
6LezpHMUAAAAALunasQAvKdhRwFC1oqRE0OZW8f4 216 23 295
6LdkVo0aAAAAAN5yxjGbJPH39rF--s6ZVsl_LxzE 201 10 43
6LdVFrgUAAAAAEMNq1ljl8HZSQ2sA8Hu6a8umPQr 191 7 287
6LfrPbMUAAAAAF2DLXNWH8-s0Ln08lXtaX9k1tRC 152 13 294

表1 CAPTCHA ID トップ10を30日間の一意な検出数でランキング

また興味深いことに、ランキング上位3つのCAPTCHA IDが検出数の70%を占めています。

CAPTCHA IDの累積検出数のグラフ
図11 CAPTCHA ID を人気順に並べた累積検出数

検出の影響

これらの検出がお客様に与える影響を見てみましょう。同じ30日間に、お客様がこれらのページに少なくとも202,872回アクセスしようとしたことが確認されています。下のグラフは、最も頻度の高かった上位10個の悪意のあるURLへのアクセス数を示しています。うち6つはグレイウェアに、4つはマルウェアのカテゴリに属しています。抽選のチャンスを得るためにユーザー情報を収集するグレイウェアのページ (win[.]omgsweeps[.]info) は、これらの悪質なページへのお客様の訪問数の51%を占めています。

下のグラフは30日間の悪意のあるwebページへのお客様による訪問数を表している
図12 お客様による訪問数が最も多かった悪意のあるURL トップ10

その他の検出方法

こうして検出されたサイトは、CAPTCHA IDのほかの指標も持つことが多くなっています。IDのほかにもいくつかの方法でこうした悪意のあるサイトを検出することができます。

静的URL分析: URLを確認するだけで悪意があるサイトかどうかを評価できる場合があります。多くのキャンペーンは、類似したURLのパターン、関連ドメイン、IPなどの指標を再利用しています。対象URLと同じパターンを持つ過去のURLの例 (runswift-besthighlyfile[.]best/ZW2RR5af4KcKjWeJS2qTOgg92QyTjh7NL0_4Yv8R98) から、悪意のあるものかどうかを判別できます。

トラフィック分析: HTMLトラフィックを調べ、そのなかに悪意のあるアクティビティがあるかどうかを探すこともできます。たとえば、悪意のあるページhttps:/syans2008[.]3dn[.]ru/news/barbi_princessa_rapuncel_skachat_igru/2013-10-23-1705は、CAPTCHAのID 6LcpAwsUAAAAAPif4MyLJQVv7r5Nr1Wv31NB86C6で検出することも、以下のyaraルールで検出することもできます。

rule Rule {
     strings:
         $s1 = "100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 117, 114, 114, 101, 110, 116, 83, 99, 114, 105, 112, 116, 46, 112, 97, 114, 101, 110, 116, 78, 111, 100, 101, 46, 105, 110, 115, 101, 114, 116, 66, 101, 102, 111, 114, 101, 40, 115, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 117, 114, 114, 101, 110, 116, 83, 99, 114, 105, 112, 116, 41"
         $s2 = "document.currentScript.parentNode.insertBefore(s, document.currentScript)"
         $s3 = "s=d.createElement('script')"
     condition: $s1 or ($s2 and $s3)
}

クライアント側の動作をシミュレートすると、havnsardf[.]gaのページがロードする (SHA256: 781e16b89604cdcd37928009920654628cc95f6e1b34916fd47b880ff3c7cc92) のHTMLトラフィックが観測されます。上記のYaraルールは、悪意のあるJavaScriptインジェクションやダウンロードの多くを発見できます。こうした実行の振る舞いは通常、攻撃者がWebサーバーを乗っ取り、自サーバーから悪意のあるJavaScriptを被害者のWebサーバーにインジェクションしようとするという状況で見られます。

コンテンツ分析を利用する: 場合によっては、悪意のあるフィッシングコンテンツがHTMLの中にすでに存在しているのに表示されていないだけだったり、カスタムないし偽のCAPTCHAが使用されていることがあります。このようなページはJavaScriptを多用していることが多く、パロアルトネットワークスが使用している悪意のあるJavaScript解析で検出可能です。たとえば、CAPTCHA ID 6LcA2tEZAAAAAJj7FTYTF9cZ4NL3ShgBCBfkWov0を使って保護されている悪意のあるサイトyourstorecentre[.]comには、SHA256 68687db7ae5029f534809e3a41f288ec4e2718c0bbdefdf45ad6575b69fed823の悪意のあるJSが含まれており、解析すると悪意があることがわかります。

最後に、CAPTCHAシグネチャで検出を行うことのシンプルさは、新しい検出を早期に行うことができるというメリットがあります。たとえば、サードパーティベンダのフィードで「lowautocasion[.]es」というサイトを調べてみると、2021年7月7日までは検出されませんでしたが、CAPTCHAシグネチャを使用したパロアルトネットワークス Advanced URL Filteringでは、2021年5月18日時点でマルウェアとして検出されています。

結論

大規模なフィッシングやグレイウェアのキャンペーンは、自動化されたセキュリティクローラによる検出を逃れるための回避技術を用いて、より巧妙になっています。幸い、悪意のあるアクターが悪意のあるWebサイトのエコシステム全体でインフラ、サービス、ツールを使用している場合、私たちはこれらの指標を利用して彼らに対抗するチャンスがあります。CAPTCHAの識別子は、このような関連性による検出の優れた例です。

パロアルトネットワークスでは、悪意のある指標の一例としてCAPTCHA IDを継続的に監視し、これをフィッシング、マルウェア、グレイウェアページの検出に利用しています。パロアルトネットワークスの次世代ファイアウォールのお客様で、Advanced URL Filteringと WildFireセキュリティのサブスクリプション をお持ちの方は、このような高度なフィッシングキャンペーンから保護されています。

シグネチャ

以下は、2021年4月18日から2021年5月18日までの期間で検出頻度の高かったCaptcha IDシグネチャのトップ10リストです。

  • 6LcEthAUAAAAANLeILVZiZpPDbVwyoQuQ7c3qlsy
  • 6LcJK64UAAAAAKwjDYyWpakQ_5aFAb34tK-EkiDA
  • 6Le-dsYUAAAAABJa32oIuo9LEPsur7OcBz-a9kyL
  • 6LfKnxEUAAAAAO1iXBX9FqL0w-68XqXGl3UPBF5p
  • 6Lc8-cQUAAAAAF60sMK0PjhPOA6ciyzy6cfnGcl0
  • 6LeihuEUAAAAAEgMRhYQKQCxnJvsqIZnRghJAPcH
  • 6LezpHMUAAAAALunasQAvKdhRwFC1oqRE0OZW8f4
  • 6LdkVo0aAAAAAN5yxjGbJPH39rF--s6ZVsl_LxzE
  • 6LdVFrgUAAAAAEMNq1ljl8HZSQ2sA8Hu6a8umPQr
  • 6LfrPbMUAAAAAF2DLXNWH8-s0Ln08lXtaX9k1tRC

IoC

全IOCのリストはこちらからご覧いただけます: GitHub

謝辞

本稿の執筆で協力をいただいたUnit 42の各氏に感謝します。Bahman Rostamyazdi氏、David Fuertes氏、Taojie Wang氏、Tao Yan氏、Hector Debuc氏にはデータ関連でのご協力をいただきました。ありがとうございました。