- Cisco Talos はこの数か月間に、悪意のある電子メールを使用した攻撃を複数発見しました。電子メールの HTML 添付ファイルに JavaScript コードを隠すもので、一般的には「HTML スマグリング」と呼ばれる手法です。
- 観測した期間において、一部の業種は、HTML スマグリング手法を使用した電子メール攻撃を受ける回数が他の業種よりも多かったことを Cisco Talos は確認しました。例を挙げると、最も多く攻撃されたのは人材、保険、医療分野の企業であり、最も少なかったのは法律、サプライチェーン、e コマース分野の企業でした。
- こうしたメールの送信者が幅広い回避手法を駆使し、電子メールゲートウェイをはじめ、さらに高度な検出ですら回避する方法を見つけている状況が確認されています。さまざまなエンコーディングメカニズムから暗号化、難読化まで、回避手法は多岐にわたります。
- 攻撃者は成功率を上げるために、電子メールの添付ファイルを細工するといった単純な方法だけでなく、さまざまな回避手法を組み合わせる、あるいは 1 つの回避手法を複数回使用するといった、さらに高度な手口を駆使します。
- Talos は CyberChef の新しいレシピを複数リリースしています。これらのレシピを使用すれば、HTML 添付ファイルに含まれているエンコードされた JavaScript コードをすぐ簡単にリバースエンジニアリングできます。問題のある電子メールの処理や検出の自動化に役立ち、より効果的で長期的なセキュリティ対策にも使用できる可能性があります。
HTML スマグリングについて
HTML スマグリングとは、エンコードまたは暗号化された JavaScript コードを HTML 添付ファイルや Web ページに埋め込むという攻撃手法です。過去数か月にわたり、非常に多くのスピアフィッシングメール攻撃でこの手法が使用されました。HTML スマグリングは電子メールゲートウェイや Web プロキシなど、ネットワーク境界におけるセキュリティ対策を回避するのに極めて有効です。その理由は主に 2 つあります。1 つは HTML5 と JavaScript の正当な機能を悪用するからであり、もう 1 つはさまざまな種類のエンコーディングと暗号化を用いるからです。
攻撃者はまず、標的に対して URL または HTML 添付ファイルが含まれる 1 通以上の電子メールを送ります。受信者が URL をクリックするか、添付ファイルを開くと、エンコードされている JavaScript コードがすべてブラウザで自動的にデコードされ実行されます。その結果、マルウェアがダウンロードされて被害者のデバイスに送り込まれるか、最終的なフィッシングページにユーザーがリダイレクトされてしまいます。中には、HTML 添付ファイルにマルウェアのコードが埋め込まれていて、他のマルウェアをダウンロードすることなく、JavaScript コードでそのコードを再構築して実行するだけという事例もありました。
HTML 添付ファイルのリバースエンジニアリング
セキュリティ研究者は、お客様のセキュリティを確保するために、攻撃者の手法の変化を絶えず監視し、検出ロジックを更新し続ける必要があります。これにはリバースエンジニアリング ツールが役に立つかもしれません。というのは、このツールを使用すると、攻撃手法、特に検出回避のために使用される手法をセキュリティアナリストがより深く理解できるからです。検出ルールや特徴抽出プロセスのロジックを更新して機械学習を活用したさらに高度な検出ソリューションを実現するために、リバースエンジニアリング ツールを利用できるでしょう。
リバースエンジニアリングで得られたインサイトを幅広いサイバーセキュリティ コミュニティで共有することにより、組織は脅威インテリジェンスへの共同の取り組みに寄与することができ、他の組織が類似の攻撃に備え、防御するための支援ができます。
CyberChef は、英国政府通信本部(GCHQ)が開発した強力なオープンソースの Web アプリケーションです。これを用いると HTML 添付ファイルに埋め込まれた JavaScript コードのデコードと復号が容易になります。デコードと復号のためのさまざまなモジュールや関数が提供されており、それらを組み合わせて「レシピ」を作ることができます。作成したレシピはさまざまなフォーマットでエクスポートし、後で他のところへロードして使用できます。以下に示しているのは HTML 添付ファイルのスニペットです。
script タグ内に base64 でエンコードされた文字列が埋め込まれている HTML 添付ファイルのスニペット
この添付ファイルには、エンコードされた JavaScript の文字列が含まれており、base64 のデコード関数を使用してデコードできます。この URL は読者が誤って開いてしまうのを避けるために変更されています。
エンコードされた文字列とそれを CyberChef の「From Base64」機能を使用してデコードした文字列
Talos は、セキュリティ研究者が HTML 添付ファイル内のエンコードまたは暗号化された JavaScript コードをリバースエンジニアリングするために使用できる新しいレシピをリリースしています。自動化された特徴検出プロセスにレシピを統合して、HTML 添付ファイルを含む電子メールの検出機能を改善することも可能です。HTML 添付ファイルのリバースエンジニアリングによく使用されているレシピで、このブログ記事では触れていないものについても今後紹介していきます。これらのレシピを用いて得られたものを組み合わせると、攻撃者がどの回避手法を最も頻繁に使用しているかがわかります。
回避手法の詳細
Talos はこの数か月にわたり、HTML スマグリングを使用した電子メール攻撃を細かく監視してきました。攻撃者が電子メールゲートウェイをバイパスするために用いる多様な回避手法が確認されており、さまざまなエンコード手法から暗号化まで、多岐にわたっています。複数の回避手法を併用している事例もあれば、1 つの手法を複数回使用して検出を困難にしている事例もありました。さらに、エンコードされた JavaScript コードには難読化が施されており、検出をより難しくしていました。
添付ファイルを細工するさまざまな試み
Talos は、攻撃者が電子メールの添付ファイルを細工するさまざまな試みを行い、ソフトウェア エンジニアリングで見落とされている点を悪用して検出システムを回避している状況を目にしました。
一般的な手法の 1 つに、添付ファイルに別のファイル拡張子や類似のファイル拡張子を付けて、メッセージフィルタリングの仕組みをバイパスするものがあります。例を挙げると、XML 構文で記述された HTML の古くてより厳密なバージョンである XHTML が HTML スマグリングではよく使用されています。また、動的コンテンツを含めることができる HTML の拡張機能である SHTML も実際に悪用されています。
別のファイル拡張子を使用する代わりに、HTML のファイル拡張子の最後にドットが追加されているパターンも数多く確認されています(「html.」、「htm.」、「htm…」など)。この試みの狙いは、電子メールの添付ファイルの種類を Content-Type ヘッダーによって決定する電子メール解析を回避することです。ファイル拡張子の最後にドットを 1 つ以上追加することで、電子メールの添付ファイルの Content-Type が text/html から application/octet-stream に変わります(下の例を参照)。
電子メールの添付ファイルの拡張子が HTML の場合の Content-Type
電子メールの添付ファイルの拡張子が「htm.」の場合の Content-Type
中には、添付ファイルの拡張子が複数回繰り返されているものや、ファイル拡張子のない添付ファイルもあります(下の例を参照)。また、異なるファイル拡張子を組み合わせたもの(「.pdf.html」や「.xls.html」など)も Talos は確認しています。こうした拡張子は検出コードのファイルタイプ識別ロジックを混乱させ、その後の評価のために下流のモジュールにファイルを渡す方法にも影響を与える可能性があります。
「.html .html」という拡張子のファイルが添付された電子メールの例
上記の電子メールの HTML 添付ファイルのスニペット(JavaScript コードが含まれている)
ファイル拡張子のない HTML ファイルが添付された電子メールの例
上記の電子メールの HTML 添付ファイルのスニペット(JavaScript コードが含まれている)
確認されたその他の一般的な手法には、複数の HTML 添付ファイルを Zip アーカイブに格納する手法や、1 通の電子メールに同じような HTML 添付ファイルを複数添付する手法があります。後者には、成功率を上げる狙いがあることが確認されています。下に示しているのはスピアフィッシングメールの例で、内容が同じ複数の SHTML ファイルがメールに添付されています。攻撃者の狙いは、雇用手当を複数提案し、だまされた被害者がいずれかのファイルを開くように仕向けることです。従業員にとってその手当が魅力的であればあるほど、攻撃の成功率が上がります。
複数の SHTML ファイルが添付されたスピアフィッシングメールの例
上記の電子メールの SHTML 添付ファイルのスニペット(JavaScript コードが含まれている)と、デコードされたフィッシング URL
難読化
HTML スマグリング攻撃では、検出を難しくし、高くつくようにするために、コードの難読化が広範囲に使用されています。JavaScript コードによく適用される最も一般的な手法の 1 つに、識別子のリネームがあります。これは、変数名や関数名のようなコードの主要な識別子を意味のない文字列に変更するというものです。無料のオープンソースの難読化ツールのほとんどがこの機能を提供しており、コードのロジックを変更しないので、広く使用されています。下に 2 つの例を示します。最初の例では、フィッシング URL は整数の配列であり、難読化された変数に格納されています。この変数がその場でデコードされ、「クリック」メソッドによって被害者をフィッシングページにリダイレクトします。
難読化された JavaScript を含む HTML ファイルが添付されたスピアフィッシングメールの例
上記の電子メールの HTML 添付ファイルのスニペット(識別子のリネーム手法で難読化された JavaScript 変数が含まれている)と、デコードされたフィッシング URL
2 番目の例では関数名も難読化されています。この例では、難読化された文字列が、最初に一連の置き換え処理によってデコードされます。続いて、デコードされた文字列が「eval」メソッドへ渡され、実行されます。
難読化された JavaScript が HTML 添付ファイルに含まれている電子メールの例
上記の電子メールの HTML 添付ファイルのスニペット(識別子のリネーム手法で難読化された JavaScript 変数と関数が含まれている)
1 つの回避手法を複数回使用
下に示しているのは、あるお客様が 2023 年 10 月に受信した電子メールの例で、拡張子が「html.」のファイルが添付されています。この例では、攻撃者は base64 のエンコード手法を 2 回使用し(二重エンコードともいわれる手法)、スクリプトの分析前に 1 段階だけのデコード手順に依存していると思われる検出システムを回避しました。
二重エンコードされた JavaScript 文字列変数を含む HTML ファイルが添付されたスピアフィッシングメールの例
下図は HTML 添付ファイルの内容を示したものです。この添付ファイルには 4 つの隠し入力フィールドが含まれています。Web ページには隠し入力フィールドは表示されませんが、フォームの送信時にサーバーに送信される値を保持できます。JavaScript コードは、最初に隠し入力フィールドの値を取得します。次に「substr」メソッドを使用して、取得した値から文字列の一部を抽出し、連結します。最後に、2 つの URL が隠しフィールドからその場で生成されます(隠しフィールドと次の変数の値は Base64_Decode_DecimalUnicode2String_Base64_Decode レシピを使用してデコードできます)。
上記の電子メールの HTML 添付ファイルのスニペット(二重エンコードされた JavaScript 文字列変数が含まれている)
HTML ページが完全に読み込まれると、その場で作成されて「trc」変数に格納された最終的なフィッシングページ(https[:]//dompr[.]arrogree[.]park/login.php)が、「onload」メソッドを使用して被害者のデバイスに自動的に表示されます。ユーザーがログイン情報を入力するとすぐに、「SFiegrt」メソッドが非同期の HTTP POST リクエストを使用して別のリモートサーバー(https[:]//cpsvr[.]hiominsa[.]com/POST/genofcatch.php)にその情報を送信します。
上記の電子メールの HTML 添付ファイルのスニペット(二重エンコードされた JavaScript 文字列変数が含まれている)と、デコードされた URL
さまざまな回避手法の併用
電子メール攻撃に用いられる HTML 添付ファイルでさまざまなエンコード手法や暗号化手法を組み合わせて使用し、検出を回避しようとする試みが続いていることを Talos は確認しています。それに加え、通常、埋め込まれた JavaScript コードは難読化されています。この目的は攻撃の成功率を上げることです。
下の例は、2023 年 12 月にあるお客様に送信された「htm」ファイルが添付された電子メールです。
検出を回避するために、識別子のリネームによる難読化、base64 でのエンコード、シーザー暗号化を併用した HTML ファイルが添付されたスピアフィッシングメールの例
下図に示しているのは、埋め込まれていた JavaScript コードです。この電子メールは、明らかに特定の受信者に合わせてカスタマイズされています(電子メールアドレスは伏せていますが、ご覧のとおりです)。
上記の電子メールの HTML 添付ファイルのスニペット(難読化された JavaScript 変数と base64 でエンコードされた文字列変数が含まれている)
スクリプトブロックには、base64 でエンコードされた文字列を保持する「_0x5da6a8」という名前の難読化された変数が含まれています。これを Base64_Decode_2 レシピを使用してデコードすると、最終的なフィッシング URL と難読化解除関数を含むメインの JavaScript コードが得られます。難読化解除関数は「link」文字列変数を入力として受け取り、各文字を順に反復処理して Unicode に変換し、各文字の 10 進値から 5 を引きます。その結果得られた 10 進値を変換して Unicode 文字に戻し、その Unicode の値を変換して文字列に戻します。内部的に見ると、この関数はシーザー暗号を復号するメソッドの機能(Caesar_Decrypt レシピを参照)と実質的に同じものです。
上記の base64 でエンコードされた文字列変数をデコードした JavaScript コード(シーザー暗号の復号関数とフィッシング URL が得られる)
つまりこの例では、検出を回避するために攻撃者はエンコーディング、シーザー暗号化、難読化を併用しています。
下は、検出を回避するために、エンコーディングと AES 暗号化を組み合わせて使用した HTML ファイルが添付された電子メールの例です。
検出を回避するために、base64 でのエンコードと AES 暗号化を併用した HTML ファイルが添付されたスピアフィッシングメールの例
上記の電子メールの HTML 添付ファイルのスニペット(base64 でエンコードされた隠し入力フィールドが含まれている)
この HTML 添付ファイルのスニペットからわかるように、このファイルには base64 でエンコードされた文字列があります。この文字列は最初に「atob」メソッド(または Base64_Decode_1 レシピ)を使用してデコードされます。デコードされると、下に示すように、4 つのキー(a ~ d)を持つ JSON 文字列が得られます。キー「a」の値は暗号化された文字列で、その場で復号されます。キー「b」の値はパスフレーズ、キー「d」の値はソルトで、PBKDF2 キー導出関数が復号キーを作る際に使用されるものです。キー「c」の値は、AES 復号関数の初期化ベクトル(IV)です。
デコードされた JSON 文字列(上記の HTML 添付ファイルのエンコードされた入力フィールドから取得)
上記の値を使用して、復号キーがその場で導出されます(Derive_Key_PBKDF2 レシピを使用)。次に、このキーと IV パラメータを使用して「a」の値が復号されます(Base64_Decode_AES_CBC_Decryptレシピを使用)。この結果、下に示すように URL が取得されます。なお、内部の URL は HEX フォーマットです(Hex_Decode レシピを使用してデコードできます)。
AES 復号によって取得された最終的なフィッシング URL
この URL が作成されると、POST メソッドを使用して、その URL にフェッチリクエストが送信されます。リクエストのボディには「{ “lettuce”: “friendliness” }」という JSON 形式のデータが含まれています。次に、フェッチリクエストの結果得られたレスポンスがテキストとして読み取られます。このテキストは、pea 関数を呼び出して再度復号されます。最後に、この 2 回目に復号された結果が「document.write」を使用してドキュメントに書き込まれ、現在のコンテンツがすべて置き換えられます。上記のウォークスルーは、攻撃者がさまざまな回避手法をどのように組み合わせているのか、そして、防御担当者がそのような脅威を検出することがいかに難しいかを示しています。
実際に確認された HTML スマグリング攻撃
HTML スマグリングが使用された一意の電子メールの数(2023 年 10 月 1 日~ 2024 年 5 月 31 日)
上図は、この手法が使用された電子メールの数を示しています。2024 年 2 月 2 日がピークとなっています。HTML 添付ファイルでは、高度なエンコーディングと難読化が特に使用されていました。下の円グラフは、ヨーロッパのお客様よりもアメリカのお客様が、この手法を使用した電子メール攻撃を受ける回数が著しく多かったことを示しています。
HTML スマグリングが使用された電子メールの割合(お客様の地域別)
観測した期間において、一部の業種は、HTML スマグリング手法を使用した電子メール攻撃を受ける回数が他の業種よりも多かったことが確認されています。例を挙げると、最も多く攻撃されたのは人材、保険、医療分野の企業であり、最も少なかったのは法律、サプライチェーン、e コマース分野の企業でした。
HTML スマグリングを使用した電子メール攻撃と判定された数(業種別)
Talos が確認したところでは、HTML スマグリング手法による電子メール攻撃で最も多く使用されたファイル拡張子は「.shtml」で、「.htm」と「.html」がこれに続きました。使用頻度が 4 番目と 5 番目に高かったファイル拡張子は「.htm….」と「.xhtml」でした。それ以外に目を引いたファイル拡張子には、「.pdf.shtml」、「.pdf.htm」、「.xlsx.html」がありました。これらは、ソフトウェア エンジニアリングで見落とされている点を悪用して検出メカニズムを回避しようとしている手法であることを Talos は確認しています。
HTML スマグリングを使用した電子メール攻撃で確認された、HTML 添付ファイルに付けられた上位のファイル拡張子
HTML スマグリングを用いた電子メール攻撃から保護する方法
前に説明したとおり HTML スマグリングは、従来のセキュリティソリューションやルールベースの検出エンジンに対して重要な課題を提起しています。エンコーディング、暗号化、難読化の広範な展開により、この手法を使用した電子メールの検出が困難になっているので、防御をさまざまな面で強化する必要があります。そのいくつかの領域について、以下に詳細を述べます。
多層防御
攻撃を迅速にブロックすることにより、お客様の事業運営に及ぶ可能性がある影響を最小限に抑えられます。そのため、電子メールゲートウェイや Web フィルタリングレベルなど、初期の段階で脅威を無力化したほうが有益です。ただし、メッセージがネットワーク境界におけるこうしたセキュリティ対策をすり抜けてユーザーの受信ボックスに届いてしまった場合は、レトロスペクティブ検出やエンドポイント保護対策によって、後の段階でメッセージを検出してユーザーの受信ボックスから抜き取るか、悪意のある JavaScript が被害者のデバイスで実行されないようにする必要があります。
セキュリティ エンジニアリングの改善
攻撃者は通常、市販のセキュリティソリューションのアーキテクチャや内部動作について十分な情報を持っていません。それにもかかわらず、時々ソフトウェア エンジニアリングで見落とされている点を悪用して検出メカニズムを回避します。この中で特に注目すべきは、監視を回避するために電子メールの添付ファイルを細工することです。そのため、こうした回避手法を監視し、手法に応じてコードを修正することにより、既存の検出エンジンの有効性を大幅に高めることができるでしょう。Talos は攻撃者の手法の変化を細かく監視し、お客様のセキュリティを確保できるようにしています。
高度な検出方法
HTML スマグリング手法によって、電子メールゲートウェイなど、境界における従来のセキュリティ対策を電子メールが効果的にすり抜けられるようになり、ルールベースのシステムにとっては検出が重要な課題になっています。したがって、より高度なメッセージ処理とセキュリティソリューションを導入することが必要不可欠です。また、エンドポイントセキュリティ対策を強化し、ユーザーのデバイスでスクリプトが実行されないようにすることも必須です。
Talos は攻撃者の手法の変化を継続的に監視して検出機能を更新し、お客様のセキュリティを確保しています。Cisco Security Email Threat Defense の詳細についてはこちらをご覧ください。
侵入の痕跡(IOC)
このブログ記事に関連する侵入の痕跡(IOC)はこちらでご確認いただけます。
本稿は 2024 年 07 月 10 日にTalos Group のブログに投稿された「Hidden between the tags: Insights into spammers’ evasion techniques in HTML Smuggling」の抄訳です。