InvisibleJSと呼ばれる画期的な概念実証(PoC)ツールがGitHub上に登場し、人間の目による検出を回避しつつ完全な実行性を維持したままJavaScriptソースコードを隠す高度な手法を明らかにしました。
開発者oscarmineによって作成されたこのツールは、可視のコードを不可視文字へと変換する高度なステガノグラフィ技術を示しており、開発コミュニティにとって重大なセキュリティ上の懸念を提起しています。
InvisibleJSはUnicodeステガノグラフィを用いて、JavaScriptペイロードをゼロ幅文字にエンコードし、人間の目には空のファイルとして表示されるようにします。
この仕組みはソースコードを8ビットのバイナリ文字列に変換し、各ビットを特定のUnicode文字に割り当てます。ゼロはゼロ幅スペース(U+200B)、1はゼロ幅非接合子(U+200C)で表現されます。
エンコードされたペイロードにはブートストラップローダーが含まれており、実行時に隠されたコードを自動的にデコードして実行するため、異なるJavaScript環境間でもシームレスに機能します。
このツールは、異なるJavaScriptコンテキスト向けに最適化された2つのバージョンを提供しており、それぞれ特定の実行要件に対応しています。
バージョン1は従来のCommonJS環境とレガシーブラウザを対象とし、同期的なeval()を使用します。require、_dirname、module.exportsを含むNode.jsの変数を自然に扱い、古いシステムとの互換性を確保します。
バージョン2は、data URIスキームを用いた動的なawait import()により、最新のESモジュールをサポートします。このバージョンではトップレベルのimport文、exportキーワード、トップレベルawaitの機能が利用可能になりますが、完全な ESモジュール サポートが必要です。
InvisibleJSの手法は重大なセキュリティリスクをもたらします。このツールでエンコードされたファイルは目視では空に見えるため、サプライチェーン攻撃やコードインジェクションのシナリオで悪意あるペイロードを隠す可能性があります。
UTF-8エンコーディングによりファイルサイズが元の約24倍に劇的に増加することは、検知の手がかりの一つになり得ますが、迅速なセキュリティレビューでは自動化ツールが見落とす可能性があります。
セキュリティ研究者は、InvisibleJSがステガノグラフィの能力を理解するうえで教育的価値を示す一方で、この手法が武器化され、手動のコード検査やセキュリティレビューを回避するために悪用され得ると警告しています。
組織は、ゼロ幅文字のエンコーディング方式を検出できる自動コード解析ツールを導入すべきです。
さらに、セキュリティスキャナーは異常なファイルサイズの変動を検知するよう設定し、ソースリポジトリ内の疑わしいUnicode文字パターンを分析するようにすべきです。
翻訳元: https://cyberpress.org/invisiblejs-hides-executable-es-modules/