This post is also available in: English (英語)
概要
Unit 42のリサーチャーは、GoogleのreCAPTCHAなど正規のチャレンジ&レスポンスサービスや、CAPTCHAに似せてカスタマイズした偽の検証を展開する、様々な悪意のあるキャンペーンを観測してきました。フィッシングキャンペーンやreCAPTCHAを利用するサイバー犯罪者に関する最近のセキュリティブログや、PhishTimeやCrawlPhishなどの研究報告によると、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チャレンジが表示されます。
標準的なreCAPTCHAチャレンジを解くとブラウザには以下の図2に示すような古典的フィッシングページが表示されます。この例では、同じページにフィッシングコンテンツが動的に生成されていますが、トップレベルのリダイレクトが発生することの方が多いです。
ただし(CAPTCHAのチャレンジを解く前の) メインページ では、次のようなサブリクエストが観測され、URLパラメータに使用されているreCAPTCHAのAPIキーが明らかになります。
このような識別子をパースして他のページの検索に使えば他のフィッシングページを見つけられます。たとえば、同じIDを使ったWebページは、Apple IDのフィッシングもプッシュしていました。
このほか、CAPTCHA のキーを HTML から抽出する方法もあります。以下に示す例は、最近のOutlookのフィッシングキャンペーンで使用されたものです。
このような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の認証情報を詐取しようとします。
フィッシングだけではない
様々なフィッシングキャンペーンに加えて、2020年10月からは、CAPTCHA回避を利用した詐欺キャンペーンや悪意のあるゲートウェイが多く観測されるようになりました。多くの場合、 IPやブラウザのバージョンなどから他の手段による自動化が疑われる場合にのみCAPTCHAチャレンジを表示します。
グレイウェアキャンペーン
CAPTCHA保護された悪意のあるページのカテゴリとしてはほかにグレイウェアがあげられます。アンケートや宝くじの詐欺などは、最も一般的なグレイウェアのページです。偽の支払いや宝くじの当選チャンスと引き換えに、ユーザーは住所、生年月日、銀行情報、年収などの機微な情報を開示するように誘導されます。
以下は、ID6LfKnxEUAAAAAO1iXBX9FqL0w-68XqXGl3UPBF5pでCAPTCHA回避を使用し、ユーザー情報を収集しようとする宝くじ詐欺ページ (win[.]click2win4life[.].com/api/offer) の例です。
マルウェア配布
最近はマルウェア配布ページが正規CAPTCHAサービスを悪用している例が見受けられます。たとえば、hxxps://davidemoscato[.]comという URL は、悪意のある JAR ファイル (PayeeAdvice_IN00231_Q1626801_32843.jar) をホストしていますが、ページを CAPTCHA チャレンジで保護することでセキュリティスキャナから隠しています。
CAPTCHAシグネチャの有効性
1ヶ月間 (2021年4月18日~5月18日) で最も多数見られた悪意のあるCAPTCHA ID 10個の統計を紹介します。下のグラフは、各IDの1日あたりの新規検出数を表しています。こうした悪意のあるIDを使う新たなURLが1日平均529件見つかっていることがわかりました。このトップ10のIDからは30日間で合計7,572件の一意なURLを受信しました。
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%を占めています。
検出の影響
これらの検出がお客様に与える影響を見てみましょう。同じ30日間に、お客様がこれらのページに少なくとも202,872回アクセスしようとしたことが確認されています。下のグラフは、最も頻度の高かった上位10個の悪意のあるURLへのアクセス数を示しています。うち6つはグレイウェアに、4つはマルウェアのカテゴリに属しています。抽選のチャンスを得るためにユーザー情報を収集するグレイウェアのページ (win[.]omgsweeps[.]info) は、これらの悪質なページへのお客様の訪問数の51%を占めています。
その他の検出方法
こうして検出されたサイトは、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氏にはデータ関連でのご協力をいただきました。ありがとうございました。