掲載日:2021/12/13

RATDispenser:ステルス性のあるJavaScriptローダーがRATを野に放つ

※ 本ブログは、2021年11月23日にHP WOLF SECURITY BLOGにポストされたRATDispenser: Stealthy JavaScript Loader Dispensing RATs into the Wildの日本語訳です。

 

脅威アクターは、検知されずにマルウェアを配信するステルス性の高い方法を常に探しています。この記事では、RATDispenserと呼ばれる検知をすり抜けるなJavaScriptローダーを使用して、リモートアクセス型トロイの木馬(RAT)やインフォスティーラーを配布する攻撃者の手口を紹介します。RATDispenserの検知率は11%で、セキュリティ対策を回避してマルウェアを配信するのに効果的であると考えられます。2021年中に、このマルウェアを使用して配布されたマルウェアファミリーを合計で8つ確認しました。ペイロードはすべてRATで、情報を盗み、攻撃者が被害者のデバイスを制御できるように設計されていました。

 

RATDispenserは、JavaScriptを使用したマルウェアを使った攻撃の多くと同様に、システムへの侵入の足掛かりを得るために使用され、その後侵入したデバイスの制御権を確立する二次マルウェアを起動します。興味深いことに、今回の調査では、RATDispenserは主にドロッパーとして使用されていることが判明しました。(分析したサンプルの94%)つまり、マルウェアがネットワークと通信して悪意のあるペイロードを配信することはありません。 マルウェアの種類は多様で、その多くはアンダーグラウンドなマーケットプレイスで購入したり、自由にダウンロードしたりすることができます。マルウェアの運用者がペイロードのドロップを好んでいるということは、RATDispenserの作者が、マルウェア・アズ・ア・サービスのビジネスモデルを採用していることを示唆しています。

 

このレポートでは、以下を行います。

  • RATDispenserの感染チェーンを分析し、マルウェアを検知してブロックするための機会を提示する。
  • RATDispenserがどのように難読化されているかを説明する。
  • RATDispenserが配布するマルウェアのファミリーについて説明する。
  • ネットワーク防御者がこのマルウェアを検知・分析できるように、YARAルールとPython抽出スクリプトを共有する。

 

感染チェーン

RATDispenser を添付ファイルとして配信するEメール 図1 - RATDispenser を添付ファイルとして配信するEメール

 

感染チェーンは、ユーザーが悪意のある添付ファイルを含むEメールを受け取ることから始まります。例えば、図1では、注文に関する情報が含まれていると思われる、テキストファイルを装ったJavaScriptファイル(.js)が表示されています。ユーザーが、このファイルをダブルクリックするだけで、マルウェアが実行されます。

 

ネットワーク防御者は、実行可能なEメールの添付ファイル(JavaScriptやVBScriptなど)がEメールゲートウェイを通過するのをブロックすることで、感染を防ぐことができます。また、JavaScriptファイルのデフォルトのファイルハンドラを変更、デジタル署名されたスクリプトのみの実行許可Windows Script Host(WSH)の無効化をすることで、マルウェアの実行を妨害することができます。

 

マルウェアが実行されると、JavaScriptは実行時に自身をデコードし、cmd.exeを使ってVBScriptファイルを%TEMP%フォルダに書き込みます。これを行うために、cmd.exeプロセスには長い連鎖した引数が渡され、その中の一部がecho関数を使って新しいファイルに書き込まれます。

連鎖したコマンドライン引数が示すプロセス実行グラフ 図2 - 連鎖したコマンドライン引数が示すプロセス実行グラフ

 

その後、VBScriptファイルが実行され、それによってマルウェアのペイロードがダウンロードされます。ダウンロードに成功した場合は実行され、VBScriptファイルは削除されます。

 

難読化

最初のJavaScriptダウンローダーは難読化されており、いくつかのeval関数が含まれています。evalの呼び出しの1つは、長い文字列を返す関数で、この文字列は別の関数でデコードされます。

難読化されたJavaScriptダウンローダーのスニペット 図3 - 難読化されたJavaScriptダウンローダーのスニペット

 

文字列をデコードする関数は、スクリプトの後ろの方にあります。一見すると複雑に見えますが、単純な置換関数です。まず、渡された引数を新しい変数に格納します。任意の数の引数で正しく動作するように、このようにしています。次に、最初の文字列に対して置換処理が実行されます。JavaScriptのreplace関数の第2引数は別の関数で、置換後の文字列を返します。今回の場合、このインライン関数の第2引数は、正規表現 {\d+} にマッチするキャプチャグループです。キャプチャグループは10進数なので、置き換え文字列として返される引数配列のインデックスとして使用されます。インデックスが範囲外の場合、この関数はマッチした文字列全体を返しますが、これはミスマッチを処理するために実装されたものと思われます。

 正規表現の置き換えを使った難読化解除関数 図4 - 正規表現の置き換えを使った難読化解除関数

 

図3に示した文字列をデコードするために、3つの引数(A, u, F)が関数に渡されます。デコードされた文字列はBase64エンコードされており、これをデコードするだけでより詳細な解析が可能になります。ActiveXデータストリームオブジェクトを作成して書き込むことで、このシーケンスはデコードされ、eval文を使って実行されます。新たにデコードされた第2段階のコードは次のようになります。(図5)

デコードされたJavaScriptのダウンローダーストリング 図5 - デコードされたJavaScriptダウンローダーのストリング

 

この一連のシーケンスの中で最も注目すべきは、入れ子になった配列に格納された16進数の文字であり、これは難読化の別のレイヤーとして使用されています。ActiveXオブジェクトを使用して、シェルアプリケーションのインスタンスが作成され、長い連鎖した引数が渡されます。文字の後に改行を加えるだけで、コマンドラインの引数を読み取り可能な形式に再フォーマットすることができます。

 cmd.exeに渡されるコマンドライン引数 図6 - cmd.exeに渡されるコマンドライン引数

 

コマンドライン引数の最初の部分は、エコー関数を使用してVBScriptファイルに行を書き込むために使用されます。このファイルが実行されると、XMLHTTPオブジェクトを通じてダウンロードが行われます。GETリクエストに対するレスポンス(マルウェアのペイロード)は、YVC.JARというファイルに書き込まれます。VBScriptファイルは削除されます。その後、cmd.exeプロセスは12秒間待機し、ペイロードを実行します。

 

マルウェアのペイロード

 

RATDispenserは、8つのマルウェア・ファミリーを配信することが確認されています。上記の例では、キーロガーとインフォメーションスティーラーである Formbook を配信しています。このローダーがどのマルウェア・ファミリーを広めているかを分析するために、私たちは市中での目撃情報を追跡するためのシグネチャを書きました。しかし、難読化されているため、この作業は通常よりも複雑なものとなりました。このマルウェアは,replace関数を使って文字列を分割し,それをネストした配列に格納し,eval関数を使ってコマンドを解釈・実行するため,一貫したパターンを見つけるのが難しいのです.それでも,マルウェア・ファミリーの分散状況を把握するために,YARAルール(図7)を書きました.

 

rule js_RATDispenser : downloader
{
    meta:
        description = "JavaScript downloader resp. dropper delivering various RATs"
        author = "HP Threat Research @HPSecurity"
        filetype = "JavaScript"
        maltype = "Downloader"
        date = "2021-05-27"

    strings:
        $a = /{(\d)}/

        $c1 = "/{(\\d+)}/g"
        $c2 = "eval"
        $c3 = "prototype"

        $d1 = "\\x61\\x64\\x6F\\x64\\x62\\x2E"
        $d2 = "\\x43\\x68\\x61\\x72\\x53\\x65\\x74"
        $d3 = "\\x54\\x79\\x70\\x65"

        $e1 = "adodb."
        $e2 = "CharSet"
        $e3 = "Type"

        $f1 = "arguments"
        $f2 = "this.replace"

    condition:
        #a > 50 and all of ($c*) and (any of ($d*) or any of ($e*)) and all of ($f*) and filesize < 2MB
}

図7 - RATDispenser検知のためのYARAルール

 

このYARAルールで過去3ヶ月間のレトロハントを行った結果、155個のRATDispenserのサンプルを確認しました。これらのサンプルの中には、3つのバリエーションがありました。そのうちの1つは、上記で説明した亜種です。他の2つの亜種は、PowerShellダウンローダーと、ペイロードをBase64エンコードされた文字列として保存するため、ネットワークへのアクセスを行わないドロッパーです。

 

また、最終的なペイロードを復元しマルウェアファミリーとRATDispenserの亜種を特定するPythonスクリプトを作成しました。我々のスクリプトで155のマルウェアサンプルを分析した結果、以下のことがわかりました。

  • 155サンプルのうち145サンプル(94%)がドロッパーでした。ネットワークを介して通信し、二次的なマルウェアをダウンロードするダウンローダーは、わずか10サンプルでした。
  • 8種類のマルウェアがペイロードとして配信されました。
  • すべてのペイロードは、リモートアクセス型トロイの木馬(RAT)、キーロガー、インフォメーションスティーラーでした。
RATDispenserが配信するマルウェアファミリー 図8 - RATDispenserが配信するマルウェアファミリー

 

最も高い頻度で観測されたマルウェアファミリーはSTRRATWSHRATで、分析したサンプルの81%を占めました。STRRATは、2020年半ばに初めて確認されたJava RATで、リモートアクセス、認証情報の窃取、キーロギングの機能を備えています。WSHRATは、Houdiniとしても知られており、2013年に初めて確認されたVBS RATで、典型的なRATの機能を備えています。より頻度の低かったものは、AdWind、Formbook、Remcos、Panda Stealerでした。

 

その中でも最も興味深いのがPanda Stealerです。2021年4月に初めて確認されたこのマルウェアは、暗号通貨ウォレットを標的とする新しいマルウェアファミリーです。私たちが分析したPanda Stealerのサンプルは、すべてファイルレスの亜種で、テキストストレージサイトであるpaste.eeから追加のペイロードをダウンロードします。最も少ないファミリーはGuLoaderRattyでした。GuLoaderは様々なRATをダウンロードして実行することで知られるダウンローダーであり、RattyはJavaで書かれたオープンソースのRATです。

 

図9は、さまざまな亜種と、それらを通じて配信されたマルウェアファミリーを示しています。Panda Stealer や Formbook など、特定のマルウェアファミリーは、ドロップではなく常にダウンロードされていました。このJavaScriptマルウェアは、ダウンローダーとしてもドロッパーとしても動作し、RATのみを配布することから、社内ではRATDispenserと呼んでいます。

 RATDispenserの亜種と配信されたマルウェアファミリーの概要 図9 - RATDispenserの亜種と配信されたマルウェアファミリーの概要

 

 

検知

JavaScriptは、Microsoft Officeのドキュメントやアーカイブよりも一般的ではないマルウェアのファイル形式ですが、多くの場合検知率は低くなります。今回の155個のRATDispenserサンプルのうち、77個はVirusTotalに掲載されており、その検知率を分析することができました。各サンプルの最も古いスキャン結果を使用すると、平均してRATDispenserのサンプルは、利用可能なアンチウイルスエンジンの11%、つまり絶対数では8つのエンジンによってのみ検知されました。

 

侵害の痕跡(IoC)

ハッシュ、URL、YARAルール、抽出スクリプトのフルセットは、HP Threat ResearchのGitHubリポジトリでご覧いただけます。

 

00853f4f702bf8a3c82edbd1892c19aaa612f03d4541625068c01d0f56d4415b : RatLoader -> Formbook
026b19fdc75b76cd696be8a3447a5d23a944a7f99000e7fae1fa3f6148913ff3 : RatDropper -> STRRAT
0383ab1a08d615632f615aa3c3c49f3b745df5db1fbaba9f9911c1e30aabb0a5 : RatDropper -> WSHRAT
094ddd437277579bf1c6d593ce40012222d8cea094159081cb9d8dc28a928b5a : RatDropper -> AdWind
2f9a0a3e221a74f1829eb643c472c3cc81ddf2dc0bed6eb2795b4f5c0d444bc9 : RatDropper -> RemcosRAT
942224cb4b458681cd9d9566795499929b3cedb7b4e6634c2b24cd1bf233b19a : RatLoader -> Panda Stealer
b42c6b4dd02bc3542a96fffe21c0ab2ae21ddba4fef035a681b5a454607f6e92 : RatDropper -> GuLoader

HP WOLF SECURITY

Emotetにお悩みの方
(無料試用キャンペーン)