Juniper Networksは2月18日(米国時間)、「Invisible obfuscation technique used in PAC attack|Official Juniper Networks Blogs」において、Unicodeの非表示文字を使用するJavaScript難読化手法が悪用されたとして、注意を喚起した。

これは2025年1月初旬、米国の政治活動委員会(PAC: Political Action Committee)の関連組織を標的とした高度なサイバー攻撃の調査中に発見された。

  • Invisible obfuscation technique used in PAC attack|Official Juniper Networks Blogs

    Invisible obfuscation technique used in PAC attack|Official Juniper Networks Blogs

JavaScript難読化手法とは

このサイバー攻撃で悪用されたJavaScript難読化手法は、セキュリティ研究者のMartin Kleppe氏により発見された。同氏は2024年10月、Xに次のように投稿し、視覚的に隠されたJavaScriptの実装例を示した。

目に見えないハングル・フィラー文字(U+3164)とJavaScriptの「with」ステートメント、Proxyオブジェクトを組み合わせてスクリプトをエンコードし、評価(eval)します。

  • Martin Kleppe氏のXへの投稿

    Martin Kleppe氏のXへの投稿

また、同氏は投稿から20日後に改良版の概念実証(PoC: Proof of Concept)コードとその解説を「INVISIBLE.js - Encode and Run Invisible Code」にて公開した。Juniper Networksによると、政治活動委員会へのサイバー攻撃では、この実装がそのまま悪用されたという。

改良版では半角ハングル(U+FFA0)と全角ハングル(U+3164)を悪用する。どちらも画面上には空白として表示されるが、データとしては1つの有効な文字として認識される。難読化(エンコード)する際にはこれら文字に「0」および「1」を割り当て、1ビット情報を表現する。

つまり、8文字で1バイトを表し、JavaScriptを半角ハングルおよび全角ハングルの文字列に変換する。デコード時は逆の処理を実行してJavaScriptを復元し、eval関数で実行する。

攻撃の分析

Juniper Networksによると、確認した攻撃では空白のハングル文字がそのまま使用されたわけではなく、Base64でエンコードされ、特異な文字シーケンスとして別のスクリプトに埋め込まれていたという。

  • Base64エンコードされた特異な文字シーケンスの例 - 引用:Juniper Networks

    Base64エンコードされた特異な文字シーケンスの例 引用:Juniper Networks

また、JavaScriptの「debugger」文を使用して遅延を計算し、デバッガーを検出して回避する機能が確認されており、高度なサイバー攻撃に悪用されたとしている。

迅速な対策が求められる

Juniper Networksはこの事例から、概念実証コードの悪用がいかに早いかわかるとして注意を呼びかけている。近年は生成AIによる脅威アクターの参入障壁の低下、脆弱性やコード悪用の高速化が指摘されている。この脅威に対抗するため、セキュリティ研究者や企業には生成AIを活用し、最新のサイバーセキュリティ情報の収集、および対策の高速化が望まれている。