Secure Internet Access Enterprise セキュア Web ゲートウェイで悪性の JavaScript を検知する
著者:Jordan Garzon
はじめに
JavaScript のない世界を想像してみてください。私も同僚もそれぞれのキャリアを通じて何度も考えましたが、今でも JavaScript のない世界を思い描くのは困難です。私は何年も前から企業で JavaScript に携わってきたため、JavaScript の課題はよくわかっており、もちろん業界での普及状況も知っています。実際、好むと好まざるとに関わらず、JavaScript の保護は私たちの職務の大きな部分を占めています。
JavaScript は どこにでもあります。Web サイトやモバイルアプリケーションがリクエストされるたびに、多数の JavaScript コード行が読み込まれ、すべてのブラウザーが JavaScript をサポートしています。これだけ広く使用されていれば、Web サイトを構築し機能させるための重要なテクノロジーであることは容易に想像できます。そしてセキュリティの観点から言えば、重要性の高いテクノロジーほど悪用される可能性が高いことは周知の事実です。
JavaScript はあまりにも遍在しているため、これを狙って活用することは、攻撃者にとって JavaScript が提供する広大なアタックサーフェスを悪用して大きな被害を与えることができるチャンスとなります。大規模なベクトルがどれだけの影響を及ぼすかは、2021 年 12 月に発見された Log4j の脆弱性によって明らかとなりました。この攻撃ベクトルは悪用されるとすぐに規模が拡大します。Java ライブラリの Log4j はログ機能を提供しますが、これはほとんどすべての開発者が使用する基本的な機能です。これが JavaScript の脆弱性とその他の脆弱性の違いです。本番コードにおける存在感の大きさが違います。
こう考えると、どうしても「私たちには何が できる のだろうか」という疑問が浮上します。Log4j による大混乱を目の当たりにし、私たちはこの疑問に明確に答えようと決心しました。そこで、悪性の JavaScript を理解し、検知するための調査に着手したのです。これが今回のプロジェクトにつながりました。セキュリティ調査は常に面白いものです。自分たちの考えた理論が機能すると思われる場合には、さらに一歩進んで実際の状況で試してみました。
このブログ記事では、私たちが実施した調査について説明するとともに、当社製品の新機能の構築を目的として私たちが悪性の JavaScript の特定と隔離に使用した手法についてもお伝えしたいと思います。また、JavaScript 関連の脅威のレビューについても取り上げます。これには、システムアーキテクチャ、適用されたアルゴリズム、ケーススタディが含まれます。
悪性 JavaScript の脅威の状況
このプロジェクトの本題に入る前に、悪性の JavaScript が攻撃ベクトルとして注目される背景を考えてみたいと思います。広範性についてはすでに述べましたが、どれくらい深く浸透しているのでしょうか。この要因を理解すれば、このプロジェクトを真に理解できます。以下では、JavaScript を使用した実際の攻撃のうち、最も一般的なものをいくつか取り上げます。
ブラウザーの悪用
この脅威の大きさは説明するまでもありません。ブラウザーとブラウザープラグインは、コンピューターを使用するすべてのユーザーにとって重要な要素です。その良い例となるのが Browser Exploitation Framework Project( BeEF)です。BeEF は、Web ブラウザーに的を絞った侵入テストツールであり、クライアント側の攻撃ベクトルの中で最大級のものです。つまり、それだけ悪用されやすいといえます。
スキマー
スキマーは、サイバーセキュリティが会社外での生活や個人に及ぼす影響を示す恰好の例といえます。JavaScript は Document Object Model を制御するので、生成された HTML だけでなく、その基礎となる HTTP リクエストも変更できます。しかも、ボタンを 1 つクリックするというユーザーの簡単な操作で実行できます。
この実際の例は、関連するデジタルコマースを持つどのようなサイトからでも引き出すことができます。悪性の JavaScript が良性の Web サイトにインジェクトされると、スキマーによってキャプチャされたクレジットカード認証情報がすべて攻撃者にリダイレクトされる可能性があります。なかでも最も注目すべきケースは、2018 年に発生した British Airways の Web サイトに対する Magecart 攻撃 です。この攻撃では、約 38 万件ものクレジットカード番号が盗まれました。
2018 年以降、スキミングは変容してきました。現在、この手法の一般的な使用目的は、ビットコインアドレスを、良性の Web サイトにある攻撃者のアドレスに置き換えることです。ここ数年、 Lazarus グループによる攻撃 でこの手法が使われています。
クリックジャッキング
良性の Web サイトでの操作でも攻撃を広げることはできますが、完全にコントロールしているサーバーと比べれば、範囲は制限されます。こうしたサーバーへとユーザーを導くことができれば、攻撃者はホームグラウンドで有利に戦うことができます。これにより、攻撃者の影響は大きく拡大する可能性があります。被害者が攻撃者の縄張りに到達すると、攻撃者はマルウェアをダウンロードさせたり、ブラウジングセッションから情報を取得したりなど、さまざまな悪事を働くことができます。
そのための典型的な手法は、正規のページの上に透明の iframe を作成し、ユーザーが安心してクリックするように仕向けるというものです。この iframe は、攻撃者がコントロールするサーバーへとユーザーをリダイレクトし、攻撃者はそこで多種多様の悪質な行為を行います。
不正なクリプトマイニング
暗号資産の急激な値上がりに伴い、ここ数年、クリプトマイニングが注目を集めるようになりました。ユーザーの CPU を使用して暗号資産のマイニングをしようと考える人がいても不思議ではありません。わすか 1 行の JavaScript で済むのですからなおさらです。マイニングのためのライブラリとして最も有名だった Coinhive は、2019 年に閉鎖されたようですが、当然のことながら、その後は CoinIMP や CryptoLOOT などに置き換えられています。
悪性 JavaScript 検知エンジン - アーキテクチャとアルゴリズム
ここまで脅威の状況を見てきましたが、ここからは私たちが開発した製品について説明します。JavaScript を Web サイトに挿入する方法は 2 つあります。同じサーバーに JavaScript ファイルを書き込む方法と、別のソースの既存ファイルを使用して HTML ページにリンクを挿入する方法です。プロキシ側では、2 種類のリクエストが見えます。1 つは HTML へのリクエストで、もう 1 つは JavaScript ファイルへのリクエストです。ブラウザーは、1 つの Web サイトにアクセスすると、その Web サイト全体をレンダリングするために数百の HTTP リクエストを実行することもあります。
HTML 自体に JavaScript コードを記述することもできます。そうすれば、取得するために追加のリクエストを実行する必要はありません。悪性の JavaScript の検知方法を考える際には、これらの両側面に対処する必要があり、私たちはそれを実現しました。
当社の新しいエンジンは、「インライン」JavaScript コードを抽出し、個別にスキャンできます。以下に示すのは、 The New York Times のソースページの抜粋ですが、前述した 2 種類の JavaScript が含まれています。
2022 年 2 月 2 日における The New York Times Web サイト(https://www.nytimes.com/)の HTML コードの抜粋
Akamai Secure Internet Access Enterprise セキュア Web ゲートウェイ(SWG)は、さまざまなエンジンで構成され、これらによってリアルタイムでトラフィックをスキャンします。また、当社の脅威インテリジェンスに接続し、そのカスタムアルゴリズムで強化されます。
「JS Models」と書かれている赤いボックス内の拡大図:
データベース
このモデルでは、リレーショナルデータベースを使用してメタデータを保持し、実際の JavaScript コードはストレージベンダーを通じて保存します。
データベースには、トレーニングセット(ラベル付きデータ)が含まれています。良性のデータは、主に当社のトラフィックに見られる一般的な JavaScript からのものです。悪性のデータのソースは、VirusTotal(VT)、他のアルゴリズムからの検知、当社が実際に検知した悪性コードなど、さまざまです。これらは常に更新されています。
DB にはテストセットも含まれています。これは基本的に過去数日間に当社がプロキシ経由で把握したトラフィックです。
リアルタイム検知モデル
悪性の JavaScript をリアルタイムで検知できるようにするために、当社は YARA ルールをエッジに展開しています。これらのルールはトレーニングセットに基づいて作成されます。ルールの作成は簡単な作業ではないため、 こちらの記事 に記載されているアルゴリズムに基づいて YARA ルールを自動生成しています。バイナリではなく JavaScript コードを分類するためにこのアルゴリズムを調整し、ルール生成ロジックを変更しました。つまり、SWG で稼働する悪性 JavaScript 検知エンジンを オンデマンドで更新できます。
機械学習モデルによる脅威インテリジェンスの強化
JavaScript を検知する際にリサーチャーは難読化という既知の問題に直面します。難読化は、コードを縮小し、読みにくくするテクニックです(正当な Web サイトでも使用されます)。これについては、Or Katz が 2020 年 10 月に ブログ記事 を書いています。
これらを検知できるようにするために、私たちは JStapからヒントを得たモデルにロジックを統合し、コードの木表現である抽象構文木で実行するという方法で、このテクニックを回避しています。
機械学習モデルは、YARA ルールよりも精度が高い場合があります。ただし、リアルタイムスキャンのためにエッジに展開することは困難です。そこで、私たちはその中間を採ることにしました。当社のモデルは、同じトレーニングセットでトレーニングされ、トラフィックをオフラインでスキャンし(Azure 機械学習環境で)、検知された情報を脅威インテリジェンスに入力します。
SWG に接続するたびに脅威インテリジェンスが確認されるため、お客様は機械学習モデルによる検知からメリットを得ることができます。
実際に見る - ケーススタディ
「百聞は一見にしかず」ということで、実際の例をご紹介します。2022 年 3 月 8 日に、cigarettesblog[.]blogspot[.]com にホストされている JavaScript を機械学習モデルが検知しました。
このドメインは、2022 年 3 月 10 日現在、VT での検知数は 0 件です。
以下に JavaScript コードの抜粋を示しますが、このコードはすべての HTML リンクを悪性の URL に置き換えます。
そのうちの 1 つ、hxxps://myprintscreen[.]com/soft/myp0912.exe(現在はコード内にコメントが付けられています)は実際にはトロイの木馬(4a6ffa02ff7280e00cf722c4f2235f0e318e6cc8a2b9968639ba715f1a38c834)をダウンロードします。これは VT で 23 件検知されています。他にも VT で多くのベンダーが悪性であるとのフラグを立てている URL がいくつかありました。
ページ上の URL を置き換えて、他のドメインに POST リクエストを送信したり(以下の抜粋を参照)、ユーザーのマシンにマルウェアをドロップするドライブバイダウンロード攻撃を実行したりするのは、悪性の JavaScript の典型的なふるまいです。
URL:
myprintscreen[.]com/soft/myp0912.exe
www[.]blog-hits.com
ファイルハッシュ:
4a6ffa02ff7280e00cf722c4f2235f0e318e6cc8a2b9968639ba715f1a38c834 (トロイの木馬)
fc311d002d7139e0a58b00464731ba8d4faea4670cff9fedfb35057fe838c285 (3 月 10 日に当社がアップロードした JavaScript ファイル)
同じメカニズムは、penis-photo.blogspot[.]com.br (3 月 10 日) 、mateyhderesa[.]blogspot.com(3 月 13 日)、playboy-college-girls.blogspot.sk (3 月 14 日)でも検知されています。
サマリー
この記事の冒頭でも述べましたが、セキュリティにとって重要なものは悪用される可能性もあります。特に JavaScript のように広く利用されているものは重大な結果を招きかねません。また、復号化が非常に困難な場合もあります。 以前のブログ記事 で示したとおり、悪性コードの 25% は難読化されています。これは無視できるような小さい割合ではありません。私たちが見ているインターネットの規模を考えれば、難読化は広がっていると考えられます。
この調査はすべてお客様の安全性を高める手段として開始されたものであり、私たちは調査結果を SWG に適用しました。こうして生まれたのが 2 つの新しいモデル、YARA ベースと機械学習ベースです。YARA ルールシグネチャに基づくモデルは、SWG を通過する JavaScript コードをスキャンして、リアルタイムの保護を実現します。機械学習に基づくモデルは、トラフィックをダブルチェックし、エッジで脅威インテリジェンスを更新します。どちらのモデルも常に更新と再トレーニングが行われ、現実世界における最新の脅威に加え、良性の JavaScript も考慮できるようになっています。