目次 |
原文のブログはこちらからご覧いただけます。
ご注意ください。GootLoader は、観察し、学習を続けています。
セキュリティ研究者はここ数年来、オープンソースのツールでこのマルウェアをデコードし、初期段階の侵入の痕跡(IOC)を取得することができていました。しかし、脅威グループは最近のいくつかの調査結果から回避策を見出し、再び身を隠そうとその手口を変化させています。その後、GootLoader の初期段階を担うマルウェアの新たな亜種が発見されていますが、この亜種はかつて効果のあったオープンソースツールへの対策を講じ、デコード処理ができないように作られています。
特に動きのない数か月を経た後、今度は悪意のあるマルチステージ型ダウンローダが急成長を見せ、さまざまなマルウェアキャンペーンを開始する初期アクセスの経路として使用され始めました。最近では、こうしたキャンペーンの 1 つが Cobalt Strike Beacon をペイロードとして採用し、展開していたことが確認されています。
このマルウェアを背後で操る脅威グループは、トロイの木馬化したページをインターネットブラウザーの検索結果の最上位に表示させるために、検索エンジン最適化(SEO)の手法を用いることでも知られています。
オペレーティングシステム

リスクと影響

GootLoader マルウェアの技術的解析
GootLoader はマルチステージ型の JavaScript マルウェアパッケージで、2020 年後半から存在が確認されています。この脅威はかつて、その名の由来である情報窃取型マルウェア「GootKit」をドロップしていました。時が経つにつれ、GootLoader を操る脅威アクターはペイロードの選択肢を多様化させ、ランサムウェアを含むさまざまな脅威を扱うようになっています。
この脅威グループは、検索結果を主な感染経路とすることでも知られています。これを実現するため、脅威アクターはマルウェアの初期段階を含んだ ZIP アーカイブファイルを指すさまざまなリンクを使用して、オンラインのインターネットフォーラムを汚染します。
このマルウェアは被害者のマシンに感染した後、攻撃チェーンの後続段階をダウンロードしようと試みます。このマルチステージ型のローディング手法では、単一のペイロードですべての処理を行うのではなく、各段階(「Stager」と呼ばれる)がペイロード全体の機能の一部を実行します。このマルウェアは、ステルス性をできるだけ保つために機能を分離した上で、コンポーネントを被害者のマシンのディスク上に置かずメモリ上にロードすることで、検知をさらに難しくしています。
サイバー犯罪の手口としての SEO ポイズニング
「検索結果のポイズニング」(SEO ポイズニング)として知られる手法は、不正ツールやマルウェアを配信する手段として、多くのサイバー犯罪者や脅威グループに利用されています。攻撃者は侵害された Web サイトを最適化し、そのサイトをインターネット検索エンジンの上位結果として表示させることで、被害者をおびき寄せます。上位の検索結果は人目につき、信頼される可能性が高いためです。
この攻撃手法では、正規の Web サイトの評判を「借りる」ために、脅威グループがトロイの木馬化した偽の Web サイトを作成する必要があります。GootLoader はほとんどの場合、ポピュラーでありつつもニッチな話題を扱うオンラインのインターネットフォーラムを偽装しています。
悪意のあるリンクは通常、脅威アクターが作成したスレッドへの投稿に含まれています。この偽のメッセージスレッドでは読者が期待するであろう話題が議論されているため、だまされた読者がおとり文書をクリックし、ダウンロードしてしまいがちです。
また、このようなフォーラムは脅威アクターによって開設されているのが通例です。この偽フォーラムには情報提供を求める投稿をする偽のユーザーがおり、その投稿に対してフォーラム管理者が返信し、所定の文書を提供しています。
このやり取りは、偽の質問者が「正しいファイル」を提供した偽の管理者に礼を述べる形で締めくくられています。しかしこれは完全な虚構であり、提供されたファイルに正当性があるように見せかけるために作られたものです。

図 1:トロイの木馬化されたフォーラムで GootLoader がホストされている様子
GootLoader を背後で操る脅威アクターはしばしば、既存の Web サイトを侵害してマルウェアをホストするという方法に依拠しています。こうすれば初期段階のローダーのダウンロードリンクとホスティング先を分散できるためです。この分散型アプローチはマルウェアにさらなる複雑性をもたらしており、防御側にとっては、マルウェアがホストされている潜在的な感染経路のすべてに緩和策を講じることが難しくなっています。
GootLoader マルウェア:Stager 1
このマルウェアの初期段階(Stager 1)の処理の流れはやや複雑であるため、詳細な解析を行う前にその活動の概要を見ていきましょう。
- 被害者がダウンロードした文書を正規のものと思い込み、トロイの木馬化された jQuery のコピーを実行する。
- 文書内のコードは大部分が正規の jQuery のコード(293 KB)ながら、6 KB というわずかな違いがあり、その部分が GootLoader の悪意のあるコードとなっている。
- このコードはほとんどランダムに見えるほど高度に難読化されているものの、トロイの木馬化された jQuery から切り分けることができる。
- このトロイの木馬化されたコードを実行すると、マルウェアの第 2 段階(Stager 2)をダウンロードするための複数のコマンドアンドコントロール(C2)用 URL がデコードされる。
- Stager 1 は、ダウンロードした Stager 2 を実行して攻撃チェーンを継続することを最終目的としている。
この記事の冒頭で述べた ZIP ファイルを開くと、マルウェアの Stager 1 が見つかります。このコンポーネントは約 1 万行のコードを含む JavaScript ファイルです。図 2 に示すように、アーカイブ内のファイルの名称が ZIP ファイルと一致しているため、被害者はダウンロードに続いてこのトロイの木馬化されたファイルをダブルクリックし、実行してしまいます。

図 2:GootLoader Stager 1 の例
著名ライブラリ「jQuery」に身を隠す、トロイの木馬化されたコード
図 3 に示すように、Stager 1 は一見、著名な JavaScript ライブラリ「jQuery 3.60.0」の正規バージョンのように見えます。これもやはり、被害者にとってマルウェアが無害であるように見せかけるための手口です。

図 3:GootLoader Stager 1 の実行を開始するコード
前述のように、GootLoader の Stager 1 はごく最近になってコードの構造が変わっており、脅威の開発者がこのマルウェアの解析ツールに注意を払っていることが示唆されています。BlackBerry の調査の過程では、Stager 1 の各関数が、再設計はされていないものの場所がばらばらに変更されていました。これは、マルウェアのデコードを支援するために以前に開発されたオープンソースツールへの対策として行われています。
新旧のファイルを比較すると(図 4 参照)、ほとんどの関数が異なる場所にちりばめられ、また別のランダムな変数名がつけられていることがわかります。

図 4:2022 年 5 月版 Stager 1 と 2022 年 6 月版 Stager 1 のファイル比較
また、悪意のある JavaScript ファイルと、https://code.jquery.com/jquery-3.6.0.js からダウンロードできる正規の jQuery ファイルとの比較も役に立ちます(図 5 参照)。

図 5:jQuery ライブラリと GootLoader Stager 1 のファイル比較
この悪意のあるファイルはサイズが小さくなっている反面、正規のファイルにはない追加の関数とその呼び出しが含まれています。また、正規のファイルには「try/catch」文がありますが、図 6 に示すように、悪意のあるファイルではそれらのチェック処理がコメントアウトされています。

図 6:正規の jQuery(左)と GootLoader Stager 1 のコード比較
図 7 に示すように、マルウェア関連のコードを jQuery から抽出することで、ライブラリに追加された悪意のあるコードが明確になります。

図 7:GootLoader Stager 1 から抽出したコード(2022 年 5 月版)
Stager 1 のデコード
先に述べたように、GootLoader の古いサンプルはかつて、広く知られたツールでデコードすることが可能でした。このツールはhttps://github.com/hpthreatresearch/tools/blob/main/gootloader/decode.py から入手できます。
このツールを使用すると、図 8 に示すように、Stager 1 の悪意のある IOC を文字として抽出できます。ただし、ごく最近のサンプルでは、この過程でより多くの手作業が必要となります。手作業によるデコードを経て復号されたコードには、URL とドメインのリストが含まれています。

図 8:2022 年 5 月版 GootLoader Stager 1 の IOC の例
Stager 1 は実行後にインターネット接続を確認し、GootLoader の C2 サーバーへの接続を試みます。そして被害者のデバイスから C2 への GET リクエストを生成し、マルウェアの第 2 段階をダウンロードしようとします。
これが失敗した場合、マルウェアは自身を終了します。これらの処理を図 9 に示します。

図 9:Stager 1 のデコード結果
GootLoader マルウェア:Stager 2
Stager 1 と同様、GootLoader の Stager 2 は難読化された JavaScript ファイルで、図 10 のとおり多数のコンポーネントを含んでいます。マルウェアのこの段階の目的は、ディスク上にペイロードファイルの痕跡を残すことなく、意図されたペイロードを被害者のデバイス上に正常に展開することです。

図 10:GootLoader Stager 2 の例
GootLoader は、このファイルレス実行を wscript.exe によって実現しています。最近のバージョンの GootLoader では、2 種類の埋め込みペイロードが次の 2 つのレジストリキーに書き込まれます。
- SOFTWARE\Microsoft\Phone\%Username%
- SOFTWARE\Microsoft\Phone\%Username%0
これらのレジストリキーにペイロードを書き込むため、GootLoader は 2 種類のペイロードを含んだ 2 つのエンコード済み変数を使用し、それらを 4,000 文字ごとの塊に切り分けます。
このスクリプトをより良く理解するため、手作業でスクリプトをデコードし、図 11 以降でその動作と真の狙いを明らかにしていきましょう。

図 11:Stager 2 の JavaScript を整形したコード
前述の文字列の塊は、マルウェアの実行チェーンの後続段階で PowerShell によって使用され、メモリ上でデコードされたのちに実行されます。これを実現するため、GootLoader はスケジュールタスクを使用して、図 12 のレジストリキーに格納されたペイロードを読み出します。

図 12:GootLoader の攻撃によって追加されたレジストリキーと値
2 種類のペイロードを切り分け、被害者のレジストリキーの内部に分散配置した後、GootLoader は「%Admin%0」キーに格納されたペイロード(図 11 の変数 ryxav)を反射型ロードで読み出そうとします。
この 1 つ目のペイロード(以下、第 1 ペイロード)は「PowerShell.DLL」という .NET DLL で、2 つ目のペイロード(以下、第 2 ペイロード)をデコードするための関数「Test()」を含んでいます。
図 13 に示す PowerShell コマンドは、「%Admin%0」に格納された第 1 ペイロードをロードして第 2 ペイロードの実行を開始するとともに、同じ処理をスケジュールタスクに登録し、マルウェアの永続性を確保しています。

図 13:GootLoader の起動と永続化のための PowerShell コマンド
第 1 ペイロード、つまり PowerShell.DLL は、文字列を置換する関数で処理されてからメモリ上にロードされます。
ただし、図 14 のとおり Windows 実行可能ファイルの「MZ」ヘッダー(0x4D5A)の存在が確認できることから、文字列置換関数で処理される前でもこれがペイロードであることは推定できます。

図 14:レジストリに格納された第 1 ペイロードのデータ
メモリ上のファイルはもはや難読化されておらず、そこには前述の「Test()」が含まれています。この関数は、GootLoader の最終段階である第 2 ペイロードをデコードする上で中心的な役割を果たしています。
Powershell.dll
Stager 2 の第 1 ペイロードは小さな DLL で、サイズはわずか 15 KB しかありません。第 1 ペイロードの目的は、はるかに大きな第 2 ペイロードをデコードすることです。
図 15 にも示すように、このデコード処理は Test() 関数を用いて以下のように行われます。
- レジストリキー「SOFTWARE\Microsoft\Phone\%Username%」から、切り分けられたコードの塊を読み出す。
- 読み出したコードの塊をすべて列挙する。
- 一連の文字列置換を行ってデータをデコードする。
第 2 ペイロードは、.NET DLL である第 1 ペイロードが提供する単純な暗号方式でエンコードされています。Test() はエンコードされたデータに一連の文字列置換を施し、真の第 2 ペイロードを生成します。 - DLL をメモリ上に動的にロードする。
Stager 2 の第 1 ペイロードと同様、第 2 ペイロード自体もディスク上のファイルとしてはドロップされません。 デコードされた後はメモリ上にロードされ、その場で実行されます。

図 15:Test() の処理内容
便宜上、上の図から暗号表を抜粋して以下に示します。GootLoader のペイロードは進化していますが、この暗号方式は当初からどのサンプルでもキャンペーンでも変更されていません。
文字 |
変換後の 16 進文字 |
文字 |
変換後の 16 進文字 |
q |
000 |
p |
8 |
v |
0 |
s |
9 |
w |
1 |
q |
A |
r |
2 |
h |
B |
t |
3 |
j |
C |
y |
4 |
k |
D |
u |
5 |
l |
E |
i |
6 |
z |
F |
o |
7 |
|
|
第 2 ペイロードの内容は変わる可能性がありますが、2022 年現在、GootLoader は Cobalt Strike Beacon をドロップして展開することが最も多くなっています。この Beacon は実行後に Cobalt Strike インフラストラクチャへの接続を試み、さらなるマルウェアや悪意のあるツールを取得する可能性があります。
第 1 ペイロードの場合と同様、第 2 ペイロードも前述の暗号表を用いて手作業でデコードすることができ、これにより別の Windows DLL が得られます。
この Cobalt Strike Beacon の内容は難読化されていますが、この難読化は解除可能であり、結果として以下のような Beacon 構成情報が明らかになります。
{ "beacontype": [ "HTTPS" ], "sleeptime": 60000, "jitter": 0, "maxgetsize": 1048576, "spawnto": "AAAAAAAAAAAAAAAAAAAAAA==", "license_id": 1580103824, "cfg_caution": false, "kill_date": null, "server": { "hostname": "146.70.29.237", "port": 443, "publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnCZHWnYFqYB/6gJdkc4MPDTtBJ20nkEAd3tsY4tPKs8MV4yIjJb5CtlrbK HjzP1oD/1AQsj6EKlEMFIKtakLx5+VybrMYE+dDdkDteHmVX0AeFyw001FyQVlt1B+OSNPRscKI5sh1L/ZdwnrMy6S6nNbQ5N5hls6k2kgNO5nQ7Q IDAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" }, "host_header": "", "useragent_header": null, "http-get": { "uri": "/__utm.gif", "verb": "GET", "client": { "headers": null, "metadata": null }, "server": { "output": [ "print" ] } }, "http-post": { "uri": "/submit.php", "verb": "POST", "client": { "headers": null, "id": null, "output": null } }, "tcp_frame_header": "AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "crypto_scheme": 0, "proxy": { "type": null, "username": null, "password": null, "behavior": "Use IE settings" }, "http_post_chunk": 0, "uses_cookies": true, "post-ex": { "spawnto_x86": "%windir%\\syswow64\\rundll32.exe", "spawnto_x64": "%windir%\\sysnative\\rundll32.exe" }, "process-inject": { "allocator": "VirtualAllocEx", "execute": [ "CreateThread", "SetThreadContext", "CreateRemoteThread", "RtlCreateUserThread" ], "min_alloc": 0, "startrwx": true, "stub": "IiuPJ9vfuo3dVZ7son6mSA==", "transform-x86": null, "transform-x64": null, "userwx": true }, "dns-beacon": { "dns_idle": null, "dns_sleep": null, "maxdns": null, "beacon": null, "get_A": null, "get_AAAA": null, "get_TXT": null, "put_metadata": null, "put_output": null }, "pipename": null, "smb_frame_header": "AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "stage": { "cleanup": false }, "ssh": { "hostname": null, "port": null, "username": null, "password": null, "privatekey": null } } |
まとめ
GootLoader は当初、GootKit マルウェアをドロップする巧妙なマルチステージ型ダウンローダとして悪名を馳せました。このドロッパーは年を追うごとにペイロードの配信方法が高度化し、ペイロードの機能も多様化しており、もはや同名のマルウェアを配信するだけの存在ではなくなっています。
GootLoader は SEO ポイズニングの手法にも長けており、無防備な被害者をできるだけ多くおびき寄せようと、インターネット検索結果の目立つ位置にマルウェアへのリンクを表示させています。マルウェアを配信するためのおとり文書は直接の標的を持っているわけではないものの、特定の業界、特に(ごく最近では)米国とドイツの法的機関や不動産開発会社に狙いを定めている可能性が示唆されます。
こうした特定の対象者を引きつけるため、脅威アクターはトロイの木馬化された文書へのリンクをオンラインフォーラムに投稿し、ニッチな情報をダウンロードしようとする特定業界の人々を誘い込んでいます。
このマルウェアの開発は今もなお活発に行われているようです。最近ではその中核をなす Stager 1 コンポーネントが修正され、GootLoader をデコードして IOC を得るためにセキュリティ業界で広く用いられてきたオープンソースツールへの対策が講じられています。
GootLoader のもう 1 つの危険性は、ペイロードの多様性です。ごく最近のサンプルは Cobalt Strike Beacon の展開に重点を置いているように見えますが、このマルウェアはバンキング型トロイの木馬やランサムウェアさえも展開することが知られています。
GootLoader の被害を軽減するためのヒント
URL の解析:GootLoader は SEO ポイズニングの手法でマルウェアの初期段階を含んだ文書をホストし、被害者を狙っています。URL が無害なのか悪意のあるものなのかを判断することは、被害者がマルウェアをホストするリンクをクリックするのを予防する上で、極めて重要な役割を果たす可能性があります(MITRE D3FEND™ 手法 D3-UA)。
おとりファイル:GootLoader はマルウェアの初期段階をおとり文書に偽装し、それをニッチなインターネットフォーラムで無料でダウンロードできるようにして、被害者を欺きます(MITRE D3FEND™ 手法 D3-DF)。
クライアント/サーバーペイロードのプロファイリング:GootLoader は侵害されたサイトでホストされています。ペイロードが悪意のあるものかどうかを事前に判断することで、被害者が悪意のあるおとり文書をデバイスにダウンロードするのを予防できます(MITRE D3FEND™ 手法 D3-CSPP)。
ファイルハッシュの計算:ハッシュによる検知機能をデバイスに導入することで、マルウェアがデバイス上に現れた場合でも、それを効果的にブロック/隔離できます(MITRE D3FEND™ 手法 D3-FH)。
ファイルコンテンツルール:YARA などのパターンマッチングでファイル内容を検索することは、ファイルが無害なのか悪意のあるものなのかを判断する優れた方法です(MITRE D3FEND™ 手法 D3-FCR)。
システム構成の権限:特定のユーザーに対してシステムの利用を制限することで、悪意のあるファイルの実行と GootLoader によるレジストリ作成の両方を予防できる可能性があります(MITRE D3FEND™ 手法 D3-SCP)。
プロセス生成の解析:wscript.exe や PowerShell.exe の不審な使用など、生成されたプロセスを可視化することで、被害者のシステム上で実行中の悪意のある脅威を把握できる可能性があります(MITRE D3FEND™ 手法 D3-PSA)。
ネットワークトラフィックのフィルタリング:GootLoader は Stager ペイロードをダウンロードしようとし、また Beacon 用 C2 への接続も試みます。これらを可視化してフィルタリングすることで、悪意のあるトラフィックを傍受して破棄できるようになります(MITRE D3FEND™ 手法 D3-NTF および D3-UA)。
GootLoader に対する YARA ルール
以下の YARA ルールは、この記事で説明した脅威を捕捉するために BlackBerry の Research & Intelligence Team が作成しました。
import "pe" rule Mal_Downlaoder_Win32_GootLoader_Cipher_DLL { strings:
//PE File // DotNet Imports // Original Filename // File Version 0.0.0.0 //All Strings |
import "pe"
{ strings: condition: //All Strings |
侵入の痕跡(IOC)
Stager 1(ZIP) Stager 1(JavaScript) Stager 2(2022 年 5 月以降) ペイロード(Powershell.dll) ペイロード(Cobalt Strike Beacon) レジストリキーの追加 |
参照資料
https://github.com/hpthreatresearch/tools/blob/main/gootloader/decode.py
https://redcanary.com/wp-content/uploads/2022/05/Gootloader.pdf
https://thedfirreport.com/2022/05/09/seo-poisoning-a-gootloader-story/
https://twitter.com/GootLoaderSites/status/1524861015812456485?s=20&t=uMZt5e5BHzdZfN7st_hPYA
BlackBerry によるサポート
もしGootLoaderのような脅威にさらされているなら、BlackBerry にお任せください。現在 BlackBerry 製品を利用していなくても問題ありません。
BlackBerry の インシデント対応チームは、世界的に活躍するコンサルタントから構成され、ランサムウェアや持続的標的型攻撃(APT)など、さまざまなインシデントへの対応と封じ込めのサービスを専門としています。
弊社はグローバルコンサルティングチームを常に待機させており、ご希望があれば、24 時間サポートと現地支援を提供できます。次の URL からご相談ください。 https://www.blackberry.com/ja/jp/forms/enterprise/contact-us
- お問い合わせ:https://www.blackberry.com/ja/jp/forms/enterprise/contact-us
- イベント/セミナー情報:https://www.blackberry.com/ja/jp/events/jp-events-tradeshows
- サイバーセキュリティチームによるコンサルティング: https://www.blackberry.com/ja/jp/services/blackberry-cybersecurity-consulting/overview
- BlackBerry Japan:https://www.blackberry.com/ja/jp
- Facebook(日本語): https://www.facebook.com/watch/BlackBerryJPsec/
- Twitter(日本語): https://twitter.com/BlackBerryJPsec
- LinkedIn: https://www.linkedin.com/company/blackberry/
- Youtube(日本語): https://www.youtube.com/channel/UCT2VHYwfUVC4V0AnkVZ2QIg/videos