ニュースの概要
- サイバー犯罪グループ TA505 の活動歴は、少なくとも 7 年に及びます。ランサムウェアに関与する他の犯罪グループと広いつながりを築き、クレジットカード番号を盗んだりデータ漏洩を引き起こしたりしてきました。TA505 が攻撃によく使うツールの 1 つが ServHelper です。6 月中旬、Cisco Talos は ServHelper のアクティビティの増加を検出しました。調査を行ったところ、このアクティビティと密接に関連している複数のマルウェアファミリと TTP が明らかになりました。
- 今回判明したのは、標的システムに ServHelper をインストールする際に、さまざまなメカニズムが使用されていることです。一般に普及しているソフトウェアのインストーラの偽物を使う手口もあれば、Raccoon や Amadey など他のマルウェアファミリをインストールプロキシとして使用する手口もあります。
- 攻撃では、MITRE ATT&CK フレームワークのさまざまな手口が使用されています。特に注目すべきは、スクリプティング(T1064)、PowerShell(001)、プロセスインジェクション(T1055)、非標準ポート(T1571、リモート アクセス ソフトウェア(T1219)、入力キャプチャ(T1056)、難読化されたファイルまたは情報(T1027)、入力ツールの転送(T1105)、レジストリの Run キー/スタートアップフォルダ(T1547.001)です。
最新情報
ServHelper は 2019 年初めにはすでに存在していたマルウェアです。今回、ServHelper が他のマルウェアファミリを使用してインストールされていることを発見しました。インストールでは GoLang ドロッパーや .NET ドロッパー、PowerShell スクリプトが使用されます。通常、ServHelper を使った攻撃は犯罪グループ TA505 に関連付けられています。ただ、他にこの RAT を使うグループが存在する可能性も否定できません。
ServHelper は、暗号通貨の Monero や Ethereum のマイニングツールを含むモジュールをインストールする場合もあります。
仕組み
感染経路の 1 つは、暗号化された署名済み MSI インストーラをホストしている正規サイトの侵害から始まります。MSI インストーラは Discord などの一般的なソフトウェアをインストールしますが、それだけではありません。情報窃取マルウェア Raccoon の亜種も展開するのです。コマンド & コントロール(C2)サーバから指示を受けると、Raccoon は ServHelper RAT をダウンロードしてインストールします。
また、ServHelper RAT の展開には Amadey マルウェアの亜種が使用されています。サーバから完全なコマンドラインを取得し、ServHelper の PowerShell ダウンローダの初期コンポーネントをインストールするマルウェアです。
ServHelper には、感染システムのリモート制御、キーストロークの記録、ユーザの機密データの漏洩、RDP セッションの開始、暗号化ソフトウェアのインストール、NetSupport リモートアクセスツールのインストールなどの機能があります。
影響
ウクライナでハッカー集団 CLOP のメンバーが逮捕されたことで、一連の攻撃に関与したと推測(中程度の信頼性)される TA505 やその関連グループなどの多くが影響を受けています。しかし犯罪グループは、別のツールを使用して攻撃活動を続けていました。その目的は、感染したシステムを乗っ取り、機密データを盗み出すことです。盗んだ機密データは、後で金銭的な利益を得るために利用される可能性があります。
ソフトウェアをインストールする場合は、必ず信頼できるソースから行う必要があります。インストーラが有効な証明書で署名されている場合でも、機能が正当なものとは限らないのです。
技術的な詳細
はじめに
今回の調査は、Cisco Secure 製品のテレメトリで確認された PowerShell スクリプトをホストしている IP アドレスを単純に一度呼び出すところから始まりました。最初にコードを見たときは、多発するマイニングマルウェア攻撃の 1 つに過ぎないと考えていました。
しかし間もなく、メインのペイロードが ServHelper バックドアの亜種であることが分かりました。通常、このツールの使用はサイバー犯罪グループ TA505 の活動に関連付けられます。TA505 は主にクライムウェアを配布するグループで、遅くとも 2014 年には活動を始めていました。特に、Dridex と CLOP ランサムウェアファミリを攻撃に使用することで知られています。CLOP ランサムウェアを展開していたハッカー集団が 2021 年 6 月にウクライナで逮捕されましたが、TA505 から派生したグループだったとする説もあります。
Ethereum マイナーの調査として始まったはずが、さまざまなマルウェアファミリが次々と登場する中で調査を続けることになりました。情報窃取マルウェア Raccoon や、同じく情報窃取マルウェアでありローダでもある Amadey は、TA505 がよく使う典型的な手口です。ただ今回は、同グループが新たに 2 つの手口を使用するようになったことを発見しました。有効な証明書で署名された MSI インストーラと、メモリから .NET アセンブリをロードできる GoLang go-clr ベースのドロッパーを使用するというものです。
最初の検出
疑わしいコマンドラインの日次レポートを確認していたときに、IP アドレス 94.158.245.88 でホストされている PowerShell スクリプトへの呼び出しに気づきました。
製品テレメトリの初期コマンド
ダウンロードされていたのは、追加のスクリプトをダウンロードして VBScript ファイル「start.vbs」を起動するというシンプルな PowerShell スクリプトでした。最初はまた別の暗号通貨マイナーだろうと考えていましたが、それにしては見慣れないものだったので、スクリプトを分析することにしました。
ダウンロードされた PowerShell スクリプト「bi.ps1」
Start.vbs はシンプルなドライバです。仮想マシン内での実行を避けるために、システム管理 BIOS(SMBIOS)メモリのサイズをチェックしたうえで、スクリプト「ready.ps1」を起動します。
Start.vbs が、SMBIOS メモリの量を確認してから最初のローダを起動
ready.ps1 は、次のステージを実行する前に base64 でエンコードされた文字列をデコードします。すると、Microsoft のマルウェア対策スキャンインターフェイス(AMSI)を無効化するツールが現れます。AMSI は、難読化された PowerShell、VBA、VBS などの Microsoft スクリプト言語で書かれたスクリプトの内容をマルウェア対策ソフトウェアがスキャンする際によく使用されるツールです。AMSI を無効化したうえで、ready.ps1 は次のステージとなるメインの PowerShell ローダ resolve-domain.ps1 を起動します。
ready.ps1 の AMSI バイパス機能
AMSI バイパス機能は、まず amsi.dll ライブラリをロードし、次に関数 AmsiScanBuffer のアドレスを取得します。関数の最初の 6 バイトには 2 つの x86 命令「MOV EAX,80070057;RET」が混ぜ込まれています。値 0x80070057(無効な引数)が呼び出し元に返るようにして、スキャンが失敗したように見せかけるためです。
メインの PowerShell ローダ
ローダの処理は、実際の PowerShell コードを含む変数の内容を復号する関数から始まります。この関数は、関数呼び出しに送信されたパラメータから TripleDES パスワードを取得します。
実際の PowerShell ローダを復号するために使用される TripleDES
復号されたメインローダには、複数の base64 エンコードバッファと、それらのバッファからデコードされたファイルをドロップしてロードするロジックが含まれています。ディスクにドロップするには、固定の 7 バイト XOR キーを使用した単純なバイト XOR スキームを使って事前にバッファを復号する必要があります。
メインローダが base64 デコード後にファイルコンテンツの難読化を解除
ローダは、システムの特性に応じて以下のペイロードをドロップしようとします。
- C:\Windows\branding\mediasvc.png
- C:\Windows\branding\mediasrv.png
- C:\Windows\branding\wupsvc.jpg
- C:\Windows\system32\rdpclip.exe
- C:\Windows\system32\rfxvmt.dll
これらのペイロードが検出された場合、ServHelper に感染しています。この RAT は 2019 年初めにはすでに配布されていました。
難読化された PowerShell スクリプトを読んでいたところ、別の URL(hxxp://45[.]61[.]136[.]223/get/m5.php)のダウンロードと実行の記述を発見しました。この URL への呼び出しは、グラフィックカードのメモリ容量が 4 MB を超える場合にのみ実行されるようになっています。一部の仮想マシンを回避する手口である可能性もありますが、暗号通貨マイニングに使用するモジュールをダウンロードするのに十分な容量のあるマシンをチェックしているだけかもしれません。
暗号通貨マイニングモジュール m5.php
hxxp://45[.]61[.]136[.]223/get/m5.php でホストされているのは暗号通貨マイニングモジュールです。当初、この攻撃の最終的なペイロードは単なる暗号通貨マイナーであり、機密情報の窃取や感染システムのリモート制御ではないと推測するに至ったのは、このモジュールが存在していたからです。機密情報の窃取や感染システムのリモート制御であれば、既知の TTP からサイバー犯罪グループ TA505 の関与が疑われます。
ビデオコントローラメモリのサイズが 4 MB を超える場合のみ、m5.php をダウンロード
m5 には、各文字に 10 進数の 92 を追加してから base64 でエンコードするという方法で簡単な難読化が施されています。このスクリプトは、別の PowerShell スクリプト C:\Windows\system32\update-request.ps1 を作成します。update-request モジュールは、スケジュール設定されたタスク \Microsoft\Windows\DiskCleanup\SilentCleanup を悪用した UAC バイパス機能を通じて起動されます。具体的には、レジストリ値 HKCU:\Environment\windir を変更し、改変した slmgr.vbs スクリプト(この中に update-request.ps1 を起動するための呼び出しを含んでいる)を呼び出すというものです。
update-request.ps1 を起動する UAC バイパス機能
update-request.ps1 は、m5.php の内容と同様の方法で簡単に難読化されています。このスクリプトには、resolve-domain.ps1 でも見られるような TripleDES による難読化の別の層が含まれています。興味深いのは、復号化関数の名前が ServHelper サービスローダのエクスポートと同じで「decra」だということです。これについては、もう少し後で説明します。
復号された update-request には、暗号通貨マイニングソフトウェアをダウンロードして実行するための指示が含まれています。これまでの事例の中に、ServHelper のインストールが Monero のマイニングに関連していることはありました。しかし今回の攻撃では、XMRig で Monero をマイニングするか、Ethereum をマイニングするかを選べるようになっています。Ethereum のマイニングを選択した場合は、Ethermine とその設定ファイルがダウンロードされます。
Ethminer のペイロードは、C:\windows\system32\mui_pack_es.json(base64 エンコードファイル)として保存されます。このファイルも、XOR とバイトベースのキー「Asfianweiw」を使って暗号化されています。Monero マイナーの XMRig のペイロードは、同様の手口で C:\windows\system32\mui_pack.json にダウンロード、復号され、その後メモリにロードされます。この戦術は、マルウェア対策ソフトウェアによる PE ファイルの検出を回避するためのものと考えられます。
マイナーのペイロードは PE モジュールとしてメモリにのみ存在します。このモジュールは、リフレクションを介して正規のプロセスである C:\windows\system32\msiexec.exe に挿入することによってロードされます。msiexec のプロセスハロウイングの手口(正規のプロセスの内容をマルウェアのコードに置き換える手口)は、C++ RunPE のプロセスハロウイングの手口を PowerShell に移植したものと思われます。このペイロードによって、埋め込まれたカスタム .NET アセンブリ(base64 でエンコード)がロードされます。このアセンブリは、kernel32.dll モジュールから必要なすべての関数をインポートする必要がないよう、単にトランポリンとして使用されます。
ethermine.org のブロックチェーン エクスプローラでアドレス 0x12420E4083F1E37b91AFA0E054682d049F9505C6 への Ethereum の支払いを確認してみると、このアドレスを使用しているマイナーのプールが 4 ヵ月足らずで 17 を超える Ethereum を獲得していることが分かります。この記事の執筆時点における価値は 33,000 米ドル強です。
TA505 の ServHelper 攻撃に関連しているアドレスに対する Ethermine の支払い
ServHelper のインストール
この攻撃では、PowerShell ローダである resolve-domain.ps1 が ServHelper ペイロードのドロップとインストールを担います。今回のケースでは、メインローダは Web サイトからダウンロードされます。実行ファイル形式のドロッパーによってメインの PowerShell ローダがドロップされるケースもあります。
PowerShell ローダは、マイニングモジュールと同じ SilentCleanup UAC バイパス手法を使用してレジストリを実行します。ファイルシステムは UAC プロンプトなしで変更できます。
ServHelper のロードは、2 つの主要な DLL モジュールと、RDP 経由の通信を可能にするヘルパーモジュールで構成されます。PowerShell モジュールは、Windows サービスのターミナルサーバに関連するレジストリキーを変更します。ターミナルサーバサービスは、デフォルトの TCP ポート 3389 ではなく、非デフォルトのポート 7201 でリッスンするように変更されます。新しく作成されるリモートデスクトップ サービスのターミナルサービスの ServiceDLL 値は、ServHelper DLL ローダ C:\Windows\branding\mediasrv.png に設定されます。
DLL ローダ mediasrv.png は UPX で圧縮されていて、メモリ内で動的に構築される文字列の単純な XOR 復号が使われています。このローダは、メインの ServHelper DLL モジュールを C:\Windows\branding\mediasvc.png からロードする機能がある ServiceMain 関数を含むサービス DLL です。
mediasrv.png には、ServiceMain、SvcHostPushServiceGlobals などの svchost ベースのサービス DLL の通常のエクスポートのほか、復号に使用されると思われる追加のエクスポート decra が含まれています。SvcHostPushServiceGlobals は、標準のリモートデスクトップ DLL である termserv.dll をロードするために使用されているようです。ドロップされたファイル C:\Windows\branding\wupsvc.jpg から RDPWrapper の設定をロードします。過去に公開されている分析結果で、ServHelper DLL ローダの第 1 ステージが、実際にはホスト上でリモートの同時 RDP セッションを可能にする RDPWrapper の改変された亜種であることが示唆されています。これで、RDPWrapper の設定ファイルをロードすることの説明が付きます。
改変された RDPWrapper DLL が、まず名前を復号してからメインの ServHelper モジュールをロード
メインの ServHelper RAT モジュールは Delphi で記述されており、ネイティブコードへのコンパイルが使用されています。このモジュールは、改変された Vigneres 暗号を使用して、ファイルで使用されている文字列の暗号化と復号を行います。Talos は、IDAPython を使用して文字列をデコードするシンプルなスクリプトを作成しました。文字列を継ぎ合わせて IDA データベースファイルを復元するための関数キーを割り当てています。このスクリプトは、この記事の最後にご紹介します。
ServHelper モジュールには、基本的なバックドア機能が含まれています。起動される数多くのスレッドの中には、OpenSSH(C2 サーバからダウンロード可能)トンネル経由でトラフィックをトンネリングするものもあれば、メインコマンドの処理ループとして機能するものもあります。後者の場合、現在分析中のサンプルでは、次のコマンドを受け付けます。
- xl
- info
- fixrdp
- reboot
- updateuser
- deployns
- keylogadd
- keylogdel
- keyloglist
- keylogreset
- keylogstart
- sshurl
- getkeylog
- getchromepasswords
- getmozillacookies
- getchromecookies
- search
- bkport
- hijack
- persist
- stophijack
- sethijack
- setcopyurl
- forcekill
- nop
- tun
- slp
- killtun
- shell
- update
- load
- socks
ServHelper RAT はハイジャック機能とキーロギング機能のコマンドを受け付けますが、亜種には実装されていないようです。コードを分析したところ、たとえばハイジャック機能は DLL エクスポートの 1 つである gusiezo3 によって実装する必要があるようです。ただし実際には、この機能は無限スリープループに入ってしまいます。 その他の機能の詳細については、過去に他の研究者が詳しく説明しています。
コマンドハイジャックの処理を行うはずのところ、無限ループに入ってしまう gusiezo3 のエクスポート
このエクスポートは、euefnaiw など他のエクスポートと同じくキーロギングとヒットを処理するはずのものですが、機能が実装されていません。
このサンプルの C2 ドメイン名は「novacation.cn」です。他の関連サンプルを探している際に、GoLang で記述された別のドロッパーを発見しました。
GoLang go-clr ドロッパー
このドロッパーは、GoLang 実行ファイルが .NET アセンブリをメモリまたはディスクからロードできるようにする go-clr ローダを使用します。自身の rdate セクションから base64 エンコードバッファを抽出し、gzip deflate を使用してバッファを解凍します。その後、.NET ServHelper ドロッパーをメモリにロードして実行します。マルウェア対策ソフトウェアによる自動抽出を回避するために base64 バッファは破損していますが、base64 でデコードされて解凍される前に自動的に置き換えられます。
.NET アセンブリを含むバイナリバッファに base64 でデコードする前に gzip バッファを修正
ロードされるアセンブリは、ServHelper の通常のドロッパーです。これが ServHelper の PowerShell ローダコンポーネントを一時ファイルフォルダに抽出し、ready.ps1 を実行します。こうして、上述したように感染が始まります。
.NET ServHelper ドロッパーが PowerShell ローダコンポーネントをドロップして実行
いつも調査で行っているように、インターネットで同様のファイルと配置場所を調べてみました。その結果判明したのは、GoLang ドロッパーは、有効な証明書で署名された MSI インストーラパッケージの実行結果としてダウンロード、インストールされるため、どのマルウェア対策ソフトウェアにも検出されないということです。インストーラは、ビデオエディタ、Wiki プログラム、Discord など、さまざまなアプリケーションをインストールする MSI ファイルを装っています。
MSI インストーラのダウンローダ
使用されている証明書は、ロシアの企業 SGP-GEOLOGIYA, OOO のものです。最初のサンプルが VirusTotal に送信されたのは 5 月 2 日で、7 月 15 日にも送信されています。
マルウェア対策ソフトウェアでは検出されない、「SGP-GEOLOGIYA, OOO」によって署名された悪意のある MSI インストーラ
この MSI インストーラファイルは、Advanced Installer の試用版を使って作成されています。Advanced Installer で作成されたファイルには、パッケージを解析し、msiexec.exe と通信して前提条件をダウンロードして実行するためのパーサー aipackagechainer.exe が含まれています。AI_PreRequisite テーブルには、インストーラがダウンロードして実行する EXE ファイルを示す URL(hxxp://91[.]212[.]150[.]205/filename.exe)が含まれています。
AI_PreRequisite テーブルで指定された任意の URL からファイルをダウンロードして実行する MSI インストーラ
ただし、MSI インストーラがダウンロードするファイルとして参照されている GoLang ServHelper ドロッパーの URL は hxxp://91[.]212[.]150[.]205/al.exe であり、MSI インストールの前提条件にはこのファイルへの参照がありません。論理的には、filename.exe が ServHelper ドロッパーのダウンローダであると推測されます。
情報窃取マルウェア Raccoon と Amadey を ServHelper の攻撃に利用
MSI インストーラによってダウンロードされたサンプルの filename.exe(SHA256 7516b2271e4a887156d52f661cdfc561fded62338a72b56f50bf188c2f5f222a)は、情報窃取マルウェア Raccoon の亜種です。Raccoon は、ユーザのログイン情報、Cookie、暗号通貨ウォレットの詳細、クレジットカード番号など、金銭的利益を得るために使える情報を見つけ出して盗み出そうとする窃取プログラムです。
分析したサンプルは、MSI インストーラによって参照され、34[.]76[.]8[.]115 でホストされている C2 サーバと通信します。
Raccoon は、C2 サーバとの通信に HTTP を使用します。送受信されるデータは、窃取プログラムの本文にハードコードされている暗号化キーを使用して、RC4 で暗号化されます。Raccoon の実行ファイルが初めて実行されると、C2 サーバに POST リクエストが送信されます。このリクエストには、一意のボット ID、ユーザ名、設定 ID、想定しているデータの形式など、ボットに関する基本情報が含まれています。C2 サーバはボットが指定する形式(通常は JSON)で設定を返します。
単純な XOR スキームで暗号化された RC4 パスフレーズをはじめとするすべての Raccoon の文字列
分析したサンプルの RC4 パスフレーズは「$Z2s`ten\@bE9vzR」でした。これを使用して、C2 サーバからボットに返された応答を復号しました。次に、JSON の設定を入手しました。以下に示すとおり、C2 がボットに GoLang ServHelper ドロッパーをダウンロードするように指示しています。
復号された Raccoon の設定:ServHelper GoLang ドロッパーをダウンロード
なお、情報を盗み出すとともに ServHelper のインストールにも使用されている窃取プログラムのファミリは、Raccoon だけではありません。別のファミリの例として、Amadey の亜種があります。こちらも C2 サーバから ServHelper のサンプルをダウンロードするように指示を受けますが、手口は若干異なります。Amadey ローダは、C2 サーバから PowerShell コマンドラインを受け取って実行し、PowerShell 形式の ServHelper サンプルをダウンロードしてインストールします。Amadey の使用も TA505 グループに関連しています。
このほか、SHA256 baad7552e8fc0461babc0293f7a3191509b347596d9ca8d2a82560992ff2c48e のサンプルの場合は、スクリーンキャプチャとログイン情報のダンプを実行するプラグインが C2 サーバ 157[.]90[.]24[.]103 からコマンドを受け取ります。復号すると 94[.]158[.]245[.]88 になりますが、これは Talos がテレメトリで最初に確認した IP アドレスと同じものです。
ServHelper PowerShell インストーラをダウンロードして実行するようにボットに指示する Amadey の C2
ただ、基本的なパターンは同様です。情報窃取マルウェアの亜種が C2 サーバから ServHelper をダウンロードしてインストールするように指示されています。
まとめ
この記事は、サイバー犯罪グループ TA505 あるいは関連グループの仕業ではないかと思われる攻撃活動についてまとめたものです。この攻撃活動には、機密データの窃取や漏洩を目的とした複数のマルウェアファミリが利用されています。
ここで挙げたマルウェアファミリと署名された MSI インストーラはすべて、ServHelper をダウンロードして実行するために利用されています。ServHelper は、GoLang、.NET Framework、PowerShell、Delphi を使用するなど、さまざまな TTP を駆使する RAT です。
分析した攻撃で確認されたモジュール内のマルウェアファミリ
ソフトウェアをインストールする場合は、必ず信頼できるソースから行う必要があります。インストーラが有効な証明書で署名されている場合でも、機能が正当なものとは限りません。機密データの保管の問題も重要です。パスワードやクレジットカード番号は、SQLite データベースなどの安全性の低いストレージ施設に保管されている場合があります。これでは犯罪者の格好の標的となります。セッション Cookie も、アカウントの乗っ取りに使用できるため攻撃者には有用です。
攻撃で使用されているツールの検出能力が今後向上したとしても、TA505 のようなグループはそれに応じてツールを作り変えてくるものと予想されます。
カバレッジ
今回の脅威は、以下の製品で検出してブロックすることが可能です。
Cisco Secure Endpoint は、この記事で説明したマルウェアの実行を阻止するのに最適です。新規ユーザの方は、こちらから Cisco Secure Endpoint を無料でお試しいただけます。
Cisco Secure Web Appliance の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。
Cisco Secure Firewall と Meraki MX を使用すれば、この脅威に関連する悪意のあるアクティビティを検出できます。
Cisco Secure Malware Analytics は、悪意のあるバイナリを特定し、シスコのすべてのセキュリティ製品に保護機能を組み込みます。
Cisco Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。
特定の環境および脅威データに対する追加の保護機能は、Cisco Secure Firewall Management Center から入手できます。
オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。
この脅威を検出する目的でリリースされた SID は、57975 です。
この脅威と、攻撃に関連するツールやマルウェアを検出するために、次の ClamAV シグネチャがリリースされています。
- Downloader.Powershell-9883640
- Trojan.Powershell-9883642
- Downloader.Powershell-9883641
- Downloader.ServHelper-9883708
- Downloader.Powershell-9883847
- Trojan.ServHelper-9883848
- Trojan.ServHelper-9883866
- Trojan.ServHelper-9883867
Cisco Secure Endpoint(AMP)ユーザは、Orbital Advanced Search を使用して複雑な OSquery を実行し、エンドポイントが特定の脅威に感染しているかどうかを確認できます。今回取り上げた脅威に対応する OSquery の具体例については、こちら(malware_amadey_filepath)、こちら(malware_raccoon_mutex)、こちら(malware_raccoon_filepath)、こちら(malware_servhelper_filepath)をクリックしてください。
IOC(侵入の痕跡)
IP
45[.]61[.]137[.]91 – C2 の IP
91[.]212[.]150[.]205 – GoClr ドロッパーの亜種をホスト
193[.]150[.]70[.]5 – GoClr ドロッパーの亜種をホスト
94[.]158[.]245[.]88 – テレメトリで確認された元の攻撃をホスト
93[.]157[.]63[.]171 – Raccoon と GoClr ドロッパーの亜種をホスト
ホスト
www[.]homate[.]xyz
www[.]dsfamsi4b[.]cn
www[.]afspfigjeb[.]cn
www[.]pgf5ga4g4b[.]cn
www[.]wheredoyougo[.]cn
www[.]novacation[.]cn – ServHelper のサンプル 1 および 2 の C2
dssagrgbe3irggg[.]xyz – ServHelper の代替 C2
dsgiutugagb[.]cn – ServHelper サンプル 1 の代替 C2
asfggagsa3[.]xyz – 以前のサンプルの代替 C2 – サンプル 2
sagbbrrww2[.]cn – サンプル 2 の代替 C2
kbpsorjbus6[.]pw
www.sdfisdgj[.]xyz
www.kbpsorjbus6[.]pw
sdfisdgj[.]xyz
dsfamsi4b[.]cn
novacation[.]cn
wheredoyougo[.]cn
asdjausg[.]cn – 新しいドロッパーの C2
pgf5ga4g4b[.]cn
homate[.]xyz
www.asdjausg[.]cn
afspfigje[.].cn
geyaeb[.]dev
telete[.]in – Raccoon C2
頻繁に変更されてきた C2 ドメインの IP アドレス
185[.]163[.]45[.]103 – 2021 年 7 月 4 日〜 2021 年 7 月 15 日
206[.]188[.]197[.]221 – 2021 年 7 月 2 日〜 2021 年 7 月 4 日
206[.]188[.]196[.]143 – 2021 年 7 月 1 日〜 2021 年 7 月 2 日
46[.]17[.]96[.]8 – 2021 年 6 月 29 日〜 2021 年 7 月 1 日
45[.]61[.]137[.]91 – 2021 年 6 月 27 日〜 2021 年 6 月 29 日
URL
hxxp://94[.]158[.]245[.]88/bi.ps1- 最初の調査ポイント。PowerShell バージョンのドロッパーもホスト(.NET および GoClr はなし)
hxxp://94[.]158[.]245[.]88/bf/start.vbs
hxxp://94[.]158[.]245[.]88/bf/Get-Content.ps1
hxxp://94[.]158[.]245[.]88/bf/ready.ps1
hxxp://ww16[.]enroter1984[.]cn/bif/b.php – C2(enroter1984.cn、遅くとも 2020 年 11 月以降)
hxxp://novacation[.].cn/bif/b.php
hxxp://novacation[.]cn/juytfft/b.php
hxxp://193[.]150[.]70[.]5/al.exe
hxxp://bromide[.]xyz/ssh.zip- OpenSSH Zip がトラフィックのトンネリングに使用するホスト
hxxp://91[.]212[.]150[.]205/al.exe
hxxp://94[.]158[.]245[.]88/cap/Get-Content.ps1 – 初期の攻撃(2021 年 2 月)
hxxp://94[.]158[.]245[.]88/drc.ps1 – Amadey がダウンロード
hxxp://94[.]158[.]245[.]88/cap/start.vbs
hxxp://94[.]158[.]245[.]88/cap/ready.ps1 – 2021 年 3 月の攻撃
hxxp://94[.]158[.]245[.]88/mae/start.vbs
hxxp://94[.]158[.]245[.]88/mae/Get-Content.ps1
hxxp://94[.]158[.]245[.]88/mae/ready.ps1
hxxp://45[.]61[.]136[.]223/get/m5.php – 暗号マイニングの部分
hxxp://beautyiconltd[.]cn/ethged.txt – Ethminer
hxxp://beautyiconltd[.]cn/ethcnf.txt – Ethminer の設定
hxxp://beautyiconltd[.]cn/rigged.txt – Monero マイニング用の XMRig
hxxp://beautyiconltd[.]cn/cnf.txt – XMRig の設定
hxxp://93[.]157[.]63[.]171/filename.exe
hxxp://93[.]157[.]63[.]171/al.exe
hxxps://mepcontechnologies[.]com/DiscordSetup.msi
正規の URL
hxxps://raw[.]githubusercontent[.]com/sqlitey/sqlite/master/speed.ps1
サンプル
MSI インストーラ
f36277c6faaed23129efacc83847153091cd1ef0b05650e0b8c29d13d95182a5
a9fa2da9be5b473da0f2367f78494d3dc865774bf1ad93c729bbe329a29a1f9d
f80df34accc8780a1eb9c733e4e5e5874cce6ad22e57ec8b827aa7f28318c5d1
0fde5e73f96e6df0b75cc15cffb8d7ff0d7a1cda33777e7ee23c5d07011e6ae8
569d0618131bbbe08498c1f90518df90d394c37e5c146ac3bc74429c4f7f113a
ServHelper サンプル
45732f9c8b3e853484464d5748a8879a7095dc0c1c08e66854d350254c38bb42 – mediasrv.png
a2b0ef2413399dbdb01de3a0d2dd310ba127bbfdad09352fecb8444d88a05662 – mediasvc.png
02390b9368add3c496f779db617d19171379b36f1d79c0fa4ab3a07afc7c3e46 – 設定ファイル wupsvc.jpg
9c7fc1304f9dada69594f64d230cb20ce3c1f83a41ca0e27b6274361941b3c67- PowerShell ドロッパー dropper Get_Content.ps1
74333b02f97c1fbf44592463210a6962f1601ab91a4e28d037756b9804c5b2a0 – drc.ps1
5b6b7899dd459fa0bb234a0b102af91f4ee412abf36b1c54d1253ae59dda6ee2 – ready.ps1
9520067abc34ce8a4b7931256e4ca15f889ef61750ca8042f60f826cb6cb2ac9 – ready.ps1
f00f8b0d2602fc2e8bcf5899377f6a23beae9ea9df2c0a3c4e9aad4cae2ef522 – Get-Content.ps1
b65273062c9be6bfc6343438e51d7f68aaecf8382ae1373ff1b3adfacff1fd5d- Get-Content.ps1 の初期の亜種
0d650a1ab25e820a8bcd2b49144daef20439c931d5bbd5b547c65511aab6d334 – Get-Content.ps1
5d4a0661cfb3cca59acd8a9fa433ec2c48d686da36f3890b73e7b9f37c60e980 – start.vbs
a1351912f8ffeeb5ebe2eb8abf45e50a52b67f82328090ad4b1ba89f30106e00 – start.vbs
7a9fae49143829692253d09fa7c66f6c2809d29cff52734567db688c91a01924 – bi.ps1
20eb050c3c94f134ca7c812c712deb45870f6952086608a11d4d4e78ca3c8ff6 – mediasrv.png
ffcdccdae62c13b61f32d6fa0ad73ddbfda89d0e4fcab3bf074003ca73d522a5 – mediasvc.png
4390543ecc7f39f0dcf6db2816edaaa6b64f720263c401c108f18df291241cb5 – wupsvc.jpg
1f2f7c7e0ad496e8991e4495b8830961314baee109fb7e0d15d2c3dc0857ef0b – update-request.ps1
42c277ada9c6f8ddcd6211e4792a8df1fa0d0ad8cbb867eee1a431cc1b79834d – mae.ps1
PowerShell マイニングローダ
0b25a462efbb3c5459febae122e434f4a6ec6d2dbfacf03e4537e437f91c5dcc – m5.php
hxxp://94[.]158[.]245[.]88/cap/ から ServHelper をダウンロードする Amadey のサンプル
64926d011513a3083b0af3425b38fbfc66d2bad0e3993898ec4651252812685b
45e81832542da0e190a1bf44c58b0c96f3ec11b488450aad7eb7a3e6e16f0703
baad7552e8fc0461babc0293f7a3191509b347596d9ca8d2a82560992ff2c48e
ServHelper の GoClr ドロッパー(一部のサンプルは Raccoon がダウンロード)
fe40b63a00a7d737baa87f493751a1b92ac782baaef2304b0ae65c5a1cbec58d
5202c92268cb86785644bf0fd22eb6290498034878b6c41e84ac5b4bcc7d671a
44815a42eb3317c7e567f8e20388bd9e28cf71096f45f4ee6094f26888dcfb0c
8aa55a77613e1246a7ce499a85cd52ee2d48b4f4730d62850e249d6249214abf
b3e3132a078fd8d266d709ecf351fc9283a63fbdcce4023c460363896593f6b8
32c18e01aa78a0d07025e36ebaef5ae582cadb6d53d47aab1ee629ba4eee2fab
526273ef0f1bfe161af24d9f1946bb72797d06a5b21ed750988797597d16c28d
6ad5b2b54e8c01ca7f59a40564e897352c1e24ce0899ef10ee3c3e035f510c59
6eca26fcfabbb12c6a37eb689de222e75b31574dd25e7fd3d8b446d700c40133
ServHelper をダウンロードする Raccoon のサンプル
8fa841c71a956755f6f393ca92a04d0a6950343a7a765a3035f4581dda198488
82d290c62cb838a94e1948ba84c2a90c42c0ad44bb79413ea0b8ae2560436c8e
3dccc313dcf21c5504ce1808595979dec90f94626bdc8ef18518176ab20418a2
7516b2271e4a887156d52f661cdfc561fded62338a72b56f50bf188c2f5f222a
5f008ff774ae78a416b10f320840287d7c00affb9c1b2ea8e8c1931300135985
e7e6e479b0fa5edb03f220084756fff778cf46865fe370924d272545e8181865
db710c90eaa2f83be99f1004b9eda6cfbf905a1ab116d1738a89f4eac443f4fe
.NET ServHelper ドロッパー
fea63897b4634538e9e73c0f69c2e943aebc8cebcffc1415f5ce21207fdfef92
fdc9788b38e06eafe34c6050f37224409e423f37d67d637ddac25e9cf879e2f2
Ethminer
561e9e4263908c470bb2ef9b64cac7174e43aeb795cb0168699cd4c219eab93c
Ethereum アドレス
0x12420E4083F1E37b91AFA0E054682d049F9505C6
Monero アドレス
47EEBQeqq661AchrUwicX1Nxqeuizqoxp4XEV7dUyhkzQgpxGdbJLYGa4xLeQXiBDqQ8xZFUbLCK1Gj2qFmDEZAREwGLjDG
Vigneres 暗号を使用して ServHelper の文字列の難読化を解除する IDAPython スクリプト
import sys import idaapi import idc import ida_bytes import ida_expr import ida_kernwin #Load this Python script into IDAPro. To run it, position the cursor at the screen address of the string to deobfuscate and press the F2 key. def getString(ea): # We get the item-head because the `GetStringType` function only works on the head of an item. string_type = idc.get_str_type(idaapi.get_item_head(ea)) string_content = idc.get_strlit_contents(ea, strtype=string_type) return string_content,string_type # Python code to implement Vigenere Cipher as implemented in the Delphi code at # https://stackoverflow.com/questions/6800326/how-to-crypt-or-hide-a-string-in-delphi-exe/6801163 # This algorithm was implemented in ServHelper malware # Generate the key stream from the keyword def generateKey(string, key): key = list(key) if len(string) == len(key): return(key) else: for i in range(len(string) - len(key)): key.append(key[i % len(key)]) return("" . join(key)) # Decrypt the original text, skip non-alphabet characters def originalText(cipher_text, key): orig_text = [] for i in range(len(cipher_text)): if (ord(cipher_text[i]) >= ord('A') and ord(cipher_text[i]) <= ord('Z')): x = (ord(cipher_text[i]) - ord(key[i]) + 26) % 26 x += ord('A') orig_text.append(chr(x)) elif (ord(cipher_text[i]) >= ord('a') and ord(cipher_text[i]) <= ord('z')): x = (ord(cipher_text[i].upper()) - ord(key[i]) + 26) % 26 x += ord('a') orig_text.append(chr(x)) else: orig_text.append(cipher_text[i]) return("" . join(orig_text)) def patchString(strng): """Patch a decrypted utf-16le encoded string back to IDAPro""" ida_bytes.patch_bytes(idc.get_screen_ea(), strng.encode('utf-16le')) def decryptString(keyword = 'WBORRHOS'): #change the keyword to a string appropriate for the sample under analysis kemi,strtype=getString(idc.get_screen_ea()) strkemi=str(kemi,'utf-8') key= generateKey(strkemi,keyword) decrypted=originalText(strkemi,key) patchString(decrypted) #Make sure what was patched is defined as a string literal ida_bytes.create_strlit(idc.get_screen_ea(),ida_bytes.get_item_size(idc.get_screen_ea()),strtype) def key_decrypt(): decryptString( 'WBORRHOS') #Assign the decryption function to the function key F2 ida_kernwin.add_hotkey('F2', key_decrypt)
本稿は 2021 年 08 月 12 日に Talos Group のブログに投稿された「Signed MSI files, Raccoon and Amadey are used for installing ServHelper RAT」の抄訳です。