Shhing Hacker

バイナリ値を表現するために目に見えないユニコード文字を使用する新しいJavaScript難読化手法が、米国の政治活動委員会(PAC)の関連会社を標的としたフィッシング攻撃に積極的に悪用されている。

この攻撃を発見したJuniper Threat Labsの報告によると、この攻撃は2025年1月上旬に行われ、以下のような巧妙な手口が用いられています:

  • 被害者を標的にした個人化された非公開情報
  • 検出を回避するためのデバッガーのブレークポイントとタイミングチェック
  • Postmarkの追跡リンクを再帰的にラッピングし、最終的なフィッシングの送信先を不明にしている。

JavaScript開発者のマーティン・クレッペは2024年10月にこの難読化テクニックを初めて公開し、実際の攻撃に素早く採用されたことで、新しい研究がいかに早く武器化されるかが浮き彫りになった。

JSペイロードを “見えなくする”

新しい難読化技術は、目に見えないUnicode文字、特にハングル半角(U+FFA0)とハングル全角(U+3164)を悪用する。

JavaScriptのペイロード内の各ASCII文字は8ビットのバイナリ表現に変換され、その中のバイナリ値(1と0)は目に見えないハングル文字に置き換えられます。

難読化されたコードはJavaScriptオブジェクトのプロパティとして保存され、ハングルのフィラー文字は空白としてレンダリングされるため、スクリプト内のペイロードは、下の画像の最後にある空白で示されるように、空白に見えます。

White space hiding malicious code
悪意のあるコードを隠す空白
ソースはこちら:ジュニパー

短いブートストラップ・スクリプトは、JavaScript Proxyの「get()トラップ」を使用して、隠されたペイロードを取得します。隠されたプロパティにアクセスすると、Proxyは目に見えないハングルのフィラー文字をバイナリに変換し、元のJavaScriptコードを再構築します。

ジュニパーのアナリストによると、攻撃者は上記に加えて、スクリプトをbase64でエンコードしたり、アンチデバッギング・チェックを使って解析を回避したりするなど、さらなる隠蔽手段を用いているという。

Base64 encoding of a sequence of Hangul filler characters
ハングルのフィラー文字列のBase64エンコーディング
ソースはこちら:ジュニパー

「この攻撃は、非公開情報を含む高度にパーソナライズされたもので、最初のJavaScriptは、解析されている場合、デバッガのブレークポイントを呼び出そうとし、遅延を検出した後、良性のウェブサイトにリダイレクトすることで攻撃を中断します」とジュニパーは説明します

空白のスペースがあると、セキュリティ・スキャナでさえ悪意があると判断する可能性が低くなるため、この攻撃を検出するのは困難です。

ペイロードはオブジェクトのプロパティに過ぎないため、疑われることなく正規のスクリプトに注入することができる。

ジュニパーによると、このキャンペーンで使用されたドメインのうち2つは、以前にTycoon 2FAフィッシング・キットにリンクされていたという。

もしそうであれば、この目に見えない難読化手法は、今後より広範な攻撃者に採用されることになるだろう。