LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

テクニカルレポート | 

新たなモジュール型マルウェア「RatelS」に見るPlugXの面影

ラックの脅威分析チームは、2023年3月頃から、日本国内の組織を対象とした標的型攻撃を複数観測しています。

この攻撃は、中国圏を拠点とする攻撃者グループによるものとみられ、モジュール型の新しいマルウェア「RatelS」が利用されていました。RatelSは、他のRATと同様に侵入組織の端末を遠隔操作し、機密データを窃取することができるマルウェアです。また、RatelSを解析してみると、このマルウェアにはPlugXのコードや機能などにいくつかの類似点があることが判明しました。

そこで今回は、PlugXの後継とも考えられる、モジュール型マルウェアRatelSについて詳しく紹介します。

攻撃の概要

RatelSは、図1に示すフローで、DLLサイドローディングを悪用して実行されます。正規の実行ファイルによって読み込まれたRatelS Loader(VERSION.dll)は、実行ファイルと同じディレクトリ内に存在するDATファイル(RatelSを実行するシェルコード)を読み込み、データを復号します。その後、復号したRatelSをメモリ領域に展開し、新たな正規プロセス(msdtc.exe)あるいは呼び出し元のプロセスにインジェクション※1し、RatelSを実行させます。また、RatelSは実行する際に、通信設定などが含まれたConfigデータを読み込みます。

※1 引数「-a」または「-b」が付与されて実行された場合

なお、類似検体として、VLC media playerの正規実行ファイルのDLLサイドローディングを悪用し、Ratels Loader(libvlc.dll)によってPNGファイル(RatelSを実行するシェルコード)を読み込むケースも確認しています。

図1 RatelSの実行フロー
図1 RatelSの実行フロー

以降では、まず、Pogopixels社の署名を持つ正規の実行ファイル(msbtc.exe)を悪用し、実行されるRatelS Loaderを解説します。

RatelS Loader

RatelS Loaderは、RatelSを実行するシェルコードが含まれるファイルをカレントディレクトリから読み込み、シェルコードを復号後、実行するローダ型マルウェアです。

はじめに、このマルウェアは、GetModuleFileNameA APIを利用して、呼び出し元の実行ファイルのパスからファイル名を取得し、得られたファイル名に「.dat」または「.png」を付与したファイルを開きます。このケースでは、呼び出し元の実行ファイルが「msbtc.exe」であるため、読み込まれるファイルは同ディレクトリ内の「msbtc.dat」です。

次に、RatelS Loaderは、「msbtc.dat」に含まれるRC4で暗号化されたデータを復号後、復号したシェルコードをメモリ領域に展開します。その後、Call命令を利用してシェルコードが展開されたメモリ領域を呼び出します(図2)。

図2 RatelS Loaderにおけるデータの復号および実行処理
図2 RatelS Loaderにおけるデータの復号および実行処理

RatelS Loaderによって復号されたシェルコードは、LZNT1※2+XORで圧縮および暗号化されたRatelSのデータと当該データを展開および復号し、RatelSをメモリ領域上で実行するコードを持ちます。

※2 [MS-XCA]: LZNT1 Algorithm Details | Microsoft Learn

図3は、RatelS Loaderによって復号されたシェルコードの一部です。先頭アドレスのCall命令を呼び出すことで、RatelSを復号する関数へ遷移させます。

また、以降のアドレスで指定される値は、緑枠線がXOR演算で利用する定数、青枠線がLZNT1で展開したコードを配置するメモリ領域のサイズ、赤枠線がLZNT1で展開する終端を示し、暗号化されたRatelSのデータは、ペイロードの先頭から0xCバイトの2B(橙枠線)から0x0A9E43バイトまで含まれています。

図3 RatelS Loaderによって復号されたシェルコード(一部抜粋)
図3 RatelS Loaderによって復号されたシェルコード(一部抜粋)

Call命令によって遷移した関数では、初めに、ROR12によるAPI Hashing(ror12AddHash32)を行なってWidows APIを解決します。その後、図4に示すXOR演算でコードを復号します。復号後のコードはLZNT1で圧縮されており、最後にRtlDecompressBuffer APIを呼び出すことでRatelSとして展開されます。

図4 XOR演算のコード
図4 XOR演算のコード

LZNT1によって展開されたRatelSは、PEファイルヘッダのマジックナンバーが0で埋められており、MZやPEといった文字列がヘッダ部分から削除されていることが確認できます(図5)。

図5 LZNT1によって展開されたRatelS
図5 LZNT1によって展開されたRatelS

以降では、RatelSについて詳しく見ていきます。

RatelS

RatelSは、Microsoft Visual C/C++で書かれたモジュール型マルウェアです。このマルウェアは、C2サーバからモジュールをダウンロードして読み込むことで、マルウェアの機能を拡張できる特徴を持ちます。コンパイルタイムやタイムスタンプなどから2022年8月頃から使用されている可能性が考えられます。

このマルウェアには、mbedTLSライブラリが静的リンクされており、図6に示すような、攻撃者の開発環境と思われるファイルパスが含まれています。また、別途発見したRatelSのBuilder & Controllerのウィンドウタイトルに「RS」という文字列が含まれていたことから、脅威分析チームでは、当該マルウェアをRatelSと命名しました。

図6 静的リンクされたmbedTLSライブラリのパス情報
図6 静的リンクされたmbedTLSライブラリのパス情報

基本的な動作

脅威分析チームでは、RatelSの検体を複数確認しており、Configデータや埋め込みモジュール、作成時期の違いからRatelSの動作に差異があります。このため、ここでは基本的な動作についての概要を解説します(図7)。

図7 一般的なRatelSの動作概要
図7 一般的なRatelSの動作概要

具体的な動作は、次の通りです。なお、実行時の痕跡については、本稿の「攻撃痕跡の確認と検出」をご参照ください。

  • RatelSは、%ALLUSERSPROFILE%配下にフォルダを作成し、RatelSに関するファイル一式を移動します
  • RatelSがListenモード(詳細後述)に設定されている場合は、ポートを開放して接続を待ちます
  • RatelSの永続化のために、サービス登録もしくはRunキー
    (HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Run)を登録します
  • RatelS起動時にキーロガー機能も動作し、%ALLUSERSPROFILE%配下のMSBもしくはTSフォルダにキーログファイルが作成されます
  • C2サーバへの通信の前に、ipinfo[.]ioへ通信が発生することがあります
  • C2サーバへの通信の結果、モジュールが配信されてロードされることがあります

モジュール

RatelSには、表1に示す通り、コマンド操作やファイル操作、キーロガーなど多様なモジュールが存在します。

これらのモジュールは、C2サーバから配信されて動的にロード・アンロードすることを前提に作られており、攻撃者の目的に応じて都度配信されます。他方、モジュールがマルウェア内に静的に埋め込まれたものも存在しており、モジュールは柔軟に設定可能であることが判明しています。

モジュール名 モジュール名 機能
cmd シェルコマンドを実行する。
eventclear Windowsイベントログを削除する。本モジュールは入手できておらず、詳細な動作は不明。
file ファイルをブラウジング操作する。ディスク情報やファイル一覧の取得、ファイルのダウンロード・アップロード、圧縮、リネーム、移動などを行う。
loginpass Windowsログインパスワードをダンプする。
portmap ポートをローカルとリモートでマッピングする。
screenshots スクリーンショットを取得する。
screen リモートデスクトップ接続を行う。
shell インタラクティブシェルを実行する。
sock5 SOCKS5プロキシ接続を行う。
keylog キーロガーの機能の起動や停止、ログファイルの制御などを行う。
other 端末情報の送信やConfigデータの送信・更新、内部接続設定などを行う。
表1 モジュール一覧

図8は、モジュールを動的にロードするためのコードです。コマンドIDの0x103がモジュールの動的ロード処理にあたります。このコマンドとRC4で暗号化されたモジュールをC2サーバから受け取ると、RatelSはモジュールをメモリ上に展開し、モジュールのエクスポート関数「fmain」を呼び出してロードします。なお、暗号化されたモジュールのRC4の鍵は、0x312AB411です。

図8 モジュールの動的ロードのコード
図8 モジュールの動的ロードのコード

また、前述の通り、モジュールがマルウェア内に静的に埋め込まれているケースも存在します。特に、モジュール「keylog」と「other」は、通常RatelS内に直接埋め込まれているモジュールと考えられ、脅威分析チームで確認したすべての検体に標準で備わっていました。その他、「keylog」や「other」以外のモジュールに関しては、検体ごとに埋め込みモジュール種別に差異があり、ほぼすべてのモジュールが埋め込まれている検体もありました。

「keylog」はマルウェア実行時に自動で起動されるキーロガーをC2サーバから制御するモジュールであり、「other」は端末情報の送信やConfigデータの更新、アンインストール操作などの基本的な機能を担当するモジュールです。静的に埋め込まれている場合、図9に示すようにコードからモジュール名とモジュール内の処理、コマンドIDを確認することができます。C2コマンドの詳細に関しては、AppendixのRatelS C2コマンドを参照ください。

図9 埋め込みモジュールの読み込みコードとモジュール内のコマンド分岐
図9 埋め込みモジュールの読み込みコードとモジュール内のコマンド分岐

通信機能

RatelSは、通信設定として通信方向や通信プロトコル、プロキシサーバ、通信間隔などを設定することが可能なマルウェアです。以降では、通信機能の観点からその特徴について解説します。

ReverseモードとListenモード

RatelSの通信機能には、ReverseモードとListenモードがあり、ビルド時に初期設定が指定されます。Reverseモードは、マルウェア実行時にコールバック通信を発生させて、感染端末からC2サーバへ接続する動作であるのに対し、Listenモードは、感染端末上のポートを開放してC2サーバからの通信を待ち受けます(図10)。

図10 RatelSの各モードにおける通信挙動の相違(上:Reverseモード/下:Listenモード)
図10 RatelSの各モードにおける通信挙動の相違(上:Reverseモード/下:Listenモード)

これらのモードの設定値および、通信プロトコル、通信先情報は、後述のConfigデータ内に格納されています。また、RatelSのC2サーバにはConfigデータを更新するコマンドが存在するため、このコマンドを用いることでモードや通信先などを動的に変更することができます。

通信の流れ

RatelSの通信は、TCP、TLS、HTTP、HTTPSのいずれかで行われます。図11は、ReverseモードのRatelSにおいて、通信プロトコルとしてTCPを設定した場合の通信です。

通信データのフォーマットは、5バイトのヘッダー(例:01 0c 02 00 00)と可変長のボディーで構成されており、各データが当該フォーマットで区切られていることがわかります。また、これらの通信は、C2サーバ接続時に最初に行われる初期通信(上部)と、セッション確立後の通信(下部)に2つに分けて考えることができます。

図11 RatelSのTCP通信の例(16進数表記)
図11 RatelSのTCP通信の例(16進数表記)

初期通信に関しては、詳細な解析を行なっていませんが、最初に2048bitの公開鍵と考えられるデータを接続先から受信し、ランダムに生成した16バイトの文字列を暗号化して送信しているものと推測します。この通信について、鍵情報の受信時にランダムな値を接続先に返却したところ接続が切断されたことから、C2サーバとRatelSが接続する際に必要な手順と考えられます。

なお、後続の通信のデータは、ハードコードされた鍵を用いてRC4で暗号化されるため、以後の通信で使用される暗号鍵の受け渡しではありません。

セッション確立後の通信では、コマンドやその実行結果が送受信されます。通信データのボディーにセットされた値は、RC4で暗号化されています。

例えば、図11の赤枠①の箇所を復号すると、図12に示すような平文を得られます。このデータは、感染端末に関する情報(セッションID、ホスト名、IPアドレス、ユーザ名、OS名など)で、攻撃者が操作するRatelSのコントローラ上に一覧表示されるものです。

図12 送信された端末情報の復号結果(赤枠①のデータ)
図12 送信された端末情報の復号結果(赤枠①のデータ)

また、セッション確立後の通信からはコマンドと実行結果も確認できます。図11の青枠②と紫枠③の復号結果は、図13の通りです。図11の青枠②の復号結果はC2サーバからのコマンドで、オフセット0x10-0x11にコマンドID「0x102」があることがわかります。コマンドID「0x102」は、モジュール一覧を取得するためのコマンドであるため、図11の紫枠③の復号結果からモジュール名として「other」と「keylog」が確認できます。

図13 コマンド通信の復号結果(上:青枠②のデータ/下:紫枠③のデータ)
図13 コマンド通信の復号結果(上:青枠②のデータ/下:紫枠③のデータ)

表2に示す通り、通信で使われるRC4の鍵は3種類あり、すべてハードコードされています。上記のコマンドの復号は1行目の16バイトの鍵を使用することで復号が可能です。

用途 用途 鍵(16進数表記)
コマンドと実行結果の暗号化 31 32 33 34 31 32 33 34 35 36 37 38 00 00 00 00
配信モジュールの暗号化 11 B4 2A 31
その他のペイロードの暗号化 4F F1 64 00
表2 通信時に使用されるRC4の共通鍵

HTTP通信の例

図14は、ReverseモードのRatelSにおいて、通信プロトコルとしてHTTPを選択した場合の通信です。TCPによる通信と同様にサーバから2048bitの鍵と考えられるデータを受信していることがわかります。以後の通信も基本的には変わらず、RC4でコマンドやその結果がやり取りされます。

図14 RatelSのHTTP通信の例(ASCII表記)
図14 RatelSのHTTP通信の例(ASCII表記)

確認したRatelSのHTTP通信は、HTTPヘッダ情報がマルウェア内にハードコーディングされており、図15の通り、通信頻度も多く通信間隔も短いことから、プロキシログなどでの通信を検知することは容易です。なお、Configデータには通信間隔を設定するためのパラメータが存在しますが、30秒を設定した場合でも下図の通りの動作を行いました。

今回観測した国内の標的型攻撃では、いずれも通信プロトコルとしてTCPまたはTLSが指定されていたことから、攻撃者はHTTPやHTTPSを積極的に利用しない傾向にあると推察します。

図15 RatelSのHTTP通信の例
図15 RatelSのHTTP通信の例

設定情報

RatelSのConfigデータには、通信方向(ListenモードまたはReverseモード)、C2サーバのアドレスやポート番号、通信プロトコル、プロキシの設定情報や通信間隔が含まれており、データは「.cfg」ファイルにRC4で暗号化されて格納されています。RC4の鍵は、Configの先頭4バイトであり、Configのデータサイズは、0x1A0バイトです。

図16に、テスト用に作成したRatelSのConfigデータを示します。なお、設定情報の詳細に関しては、AppendixのRatelS設定情報を参照ください。

復号前のConfigデータ
復号後のConfigデータ
図16 Configデータの比較(上:復号前/下:復号後)

RatelS Builder & Controller

RatelSを調査する過程で、RatelSのBuilder & Controllerの存在を確認しました。このコントローラを利用して、RatelSの作成および感染端末に対する様々な操作が可能となります。図17は、コントローラ起動時のインタフェースです。

図17 RatelSのBuilder & Controller
図17 RatelSのBuilder & Controller

RatelSに感染した端末は、RatelSのC2サーバに接続すると、コントローラに端末情報が表示され、インタラクティブに感染端末を操作可能となります(図18)。

また、各モジュールの有効無効の設定は、コントローラ内のプラグインマネージャーで管理されており、任意のモジュールをYes(有効)またはNo(無効)に操作できます。図19は、コントローラ内のShellのアイコンをクリックし、感染端末上でipconfigコマンドを実行した様子です。

図18 Builder & Controllerにおけるモジュールの管理(cmdおよびfileが有効)
図18 Builder & Controllerにおけるモジュールの管理(cmdおよびfileが有効)
図19 cmdモジュールを利用したシェルコマンドの実行(ipconfig)
図19 cmdモジュールを利用したシェルコマンドの実行(ipconfig)

このコントローラには、表3に記載の32bitおよび64bitに対応するモジュールが格納されていました。ただし、「eventclear」や「keylog」、「other」はモジュールとしては含まれていませんでした。

また、コントローラには32bitのRatelSやシェルコードバージョンのRatelSを作成するためのGUIインタフェースなども含まれていましたが、これらは開発途中と考えられ、このコントローラでは64bitバージョンのRatelSの実行ファイル以外は作成できませんでした(図20)。

アーキテクチャ モジュール名 コンパイルタイム(UTC)
x86(32bit) cmd32 Sat Dec 03 11:51:16 2022
file32 Sat Dec 03 12:05:05 2022
loginpass32 Sat Dec 03 12:14:17 2022
portmap32 Sat Dec 03 12:15:06 2022
screenshots32 Sat Dec 03 12:17:40 2022
screen32 Sat Dec 03 12:15:35 2022
shell32 Sat Dec 03 12:16:19 2022
sock532 Sat Dec 03 12:18:18 2022
x64(64bit) cmd64 Sat Dec 03 11:51:08 2022
file64 Sat Dec 03 12:05:12 2022
loginpass64 Sat Dec 03 12:13:50 2022
portmap64 Sat Dec 03 12:14:52 2022
screenshots64 Sat Dec 03 12:17:00 2022
screen64 Sat Dec 03 12:15:27 2022
shell64 Sat Dec 03 12:16:12 2022
sock564 Sat Dec 03 12:18:12 2022
アーキテクチャ モジュール名 コンパイルタイム(UTC)
x86(32bit) cmd32 Sat Dec 03 11:51:16 2022
file32 Sat Dec 03 12:05:05 2022
loginpass32 Sat Dec 03 12:14:17 2022
portmap32 Sat Dec 03 12:15:06 2022
screenshots32 Sat Dec 03 12:17:40 2022
screen32 Sat Dec 03 12:15:35 2022
shell32 Sat Dec 03 12:16:19 2022
sock532 Sat Dec 03 12:18:18 2022
x64(64bit) cmd64 Sat Dec 03 11:51:08 2022
file64 Sat Dec 03 12:05:12 2022
loginpass64 Sat Dec 03 12:13:50 2022
portmap64 Sat Dec 03 12:14:52 2022
screenshots64 Sat Dec 03 12:17:00 2022
screen64 Sat Dec 03 12:15:27 2022
shell64 Sat Dec 03 12:16:12 2022
sock564 Sat Dec 03 12:18:12 2022
表3 モジュールのコンパイルタイム一覧
図20 コントローラ内に含まれるRatelSの作成手段
図20 コントローラ内に含まれるRatelSの作成手段

RatelSとPlugXの類似点

PlugXやShadowPadといったモジュール型マルウェアは、中国圏を拠点とする複数の攻撃者グループ間で共有されており、昨今の日本組織を狙う攻撃でもしばしば観測されています。RatelSの機能や実装されたコードを確認していくと、いくつかPlugXと類似する点があることがわかりました。

ここでは、一例として、32bitのPlugX(Configサイズ:0x150Cまたは0x36a4)と64bitのRatelSを比較し、見つかった類似点をいくつか紹介します。

モジュールのメモリ領域へのマッピング

RatelS、PlugXともに類似するコードでモジュールをメモリ領域へマッピングし、モジュールを初期化します。

また、wsprintW APIを利用して実行中のプロセスIDを変数に格納する際の文字列が"PL[%x]"と"PI[%8.8X]"と類似していることも確認できます(図21)。

モジュールのマッピング(RatelS)
モジュールのマッピング(PlugX)
図21 モジュールのマッピング比較(上:RatelS/下:PlugX)

キーログ機能のクラス名

キーログ機能を実装する一部のコードが類似しており、また、ウィンドウを作成する際のクラス名がRatelSとPlugXともに「static」と共通しています(図22)。

ウィンドウ名(RatelS)
ウィンドウ名(PlugX)
図22 ウィンドウ名の比較(上:RatelS/下:PlugX)

サポートするモジュール

RatelSおよびPlugXがサポートするモジュール名やその実装される機能にいくつか類似性が見られます。

表4は、2つのマルウェアがサポートするモジュールの機能を比較した一覧です。Portmap、screenやkeylogなどのコマンド名が同一のモジュール名で類似する機能を有しています。

RetelS RetelS PlugX PlugX 機能概略
cmd Shell シェルコマンドの実行
eventclear N/A Windowsイベントログの削除
file Disk ファイル操作
loginpass N/A 資格情報の取得
portmap Portmap ポートをローカルとリモートでマッピング
screenshots Screen スクリーンショットの取得
screen Screen リモートデスクトップ接続
shell N/A インタラクティブシェルの実行
sock5 N/A SOCKS5プロキシ関連
keylog KeyLog キーロガーの実行
other N/A 端末情報やConfigの管理、内部接続設定など
表4 RatelSとPlugXのモジュール比較

LZNT1アルゴリズムとPEファイルヘッダのマジックナンバー

PlugX Loaderは、多くの場合LZNT1を利用してPlugXのペイロードを圧縮しており、実行時にRtlDecompressBuffer APIを利用してメモリ上にコードを展開し、実行します。前述の通り、RatelS Loaderも同様に、LZNT1を利用してRatelSのペイロードを圧縮しており、2つのLoader機能も類似していると言えます。

また、Loaderから復号されたペイロードにおける、PEファイルヘッダのマジックナンバーもRatelSは「NULLバイト」、PlugXは「XV」などに改変されており、いずれのマルウェアもPEファイルヘッダを変更するという検出を困難にする手口を利用している点でも共通していると考えられます(図23)。

図23 PlugXのPEファイルヘッダ(一例)
図23 PlugXのPEファイルヘッダ(一例)

その他

RatelSとPlugXの類似点ではありませんが、今回観測した国内の標的型攻撃の事案において、RatelS以外にP2P通信を行うPlugX(Configサイズ:0x36a4)を確認しています。攻撃者グループは、類似機能を持つモジュール型マルウェアを併用し、効率的に攻撃を行っていた可能性がうかがえます。

攻撃痕跡の確認と検出

今回紹介した、RatelSは、Windowsサービスまたは自動起動レジストリを利用して実行されるため、レジストリキーやイベントログにいくつか関連する痕跡が残る可能性が高いです。以下にその痕跡を確認する方法を一例として紹介します。

また、確認したRatelSでは、自動でキーログ機能が有効となっているため、作成されるキーログファイルの有無をチェックすることで、攻撃痕跡を調査することが可能です。合わせてRatelSを検出するための、Yaraルールも記載します。

Autoruns

Autorunsを利用して、自動起動アプリケーションやレジストリ、ファイルを監査し、不審なプログラムが登録されていないか確認します。

RatelSでは、DLLサイドローディングの手口を悪用するため、自動起動エントリには署名された正規の実行ファイルが登録されます。利用者の身に覚えのない実行ファイルが登録されていないか、実行ファイルのパスは正しい場所であるかなどを確認します。

なお、RatelSは、2023年9月時点で確認する限りでは、図24の赤線枠に示す「%ALLUSERSPROFILE%¥MSB¥」または「%ALLUSERSPROFILE%¥TS¥」配下に存在するサードパーティ製の実行ファイルを攻撃のトリガーとします。

図24 Autoruns実行結果(サービス登録の確認)
図24 Autoruns実行結果(サービス登録の確認)

イベントログの確認

端末やサーバがRatelSに感染した場合、サービスのインストールが発生する可能性があることから、イベントログ(システム)に、イベントID 7045でサービスのインストールが記録されている場合があります(図25)。システムログを確認し、不審なWindowsサービスのインストールが行われていないか確認します。

システムログ(イベントID 7045)の一部抜粋(msbtc)
システムログ(イベントID 7045)の一部抜粋(AppXsg)
図25 システムログ(イベントID 7045)の一部抜粋(上:msbtc/下:AppXsg)

キーログファイルの確認

Keylogモジュールの実行によって、「%ALLUSERSPROFILE%¥MSB¥」および「%ALLUSERSPROFILE%¥TS¥」配下に「kl」というファイル名のキーログファイルが作成されるため、当該ファイルの有無を確認します(図26)。

図26 「%ALLUSERSPROFILE%¥MSB¥kl」に作成されたキーログファイルの例
図26 「%ALLUSERSPROFILE%¥MSB¥kl」に作成されたキーログファイルの例

レジストリの確認

RatelSは、レジストリに次のキーを生成して値を登録することがあるため、当該レジストリキーの有無を確認します(図27)。

  • 「HKEY¥Software¥CLASSES¥MSB」
  • 「HKCU¥Software¥CLASSES¥MSB」
  • 「HKEY¥Software¥CLASSES¥TS」
  • 「HKCU¥Software¥CLASSES¥TS」
図27 RatelSが登録するレジストリキーと値の例
図27 RatelSが登録するレジストリキーと値の例

Yaraルール

下記に示すようなYaraルールを利用することで、RatelSを検出することが可能です。

なお、本検知ルールの利用により過検出が発生する可能性があるため、本番システムへ導入する場合は、事前にテスト、チューニングいただくことをお勧めします。

rule RatelS_body {
meta:
	description = "Detects RatelS malware"
	author = "LAC Co., Ltd."
strings:
	$str1 = "xxxrsa" ascii
	$str2 = "keylog" ascii
	$str3 = "other" ascii
	$str4 = "0.0.0.0" ascii
	$str5 = "fmain" ascii
	$str6 = "PL[%x]" wide
condition:
    all of them
}
RatelSのYaraルール

まとめ

RatelSは、PlugXと類似する機能やコードを持つモジュール型マルウェアです。今回確認したRatelSのBuilder & Controllerでは、作成することができない形式のRatelSの存在や未実装のモジュールなどの存在があることを踏まえ、攻撃者は今後も機能を改善した類似検体の開発を継続することが予想されます。

また、今後、PlugXやShadowPadといったマルウェアと同様にRatelSが複数の攻撃者グループで共有され、日本の組織を継続して攻撃してくる可能性も考えられますので、RatelSの活動を注視していく必要があると考えます。

ラックの脅威分析チームでは、今後もこの攻撃者グループおよび利用されたマルウェアについて、継続的に調査し、広く情報を提供していきますので、ご活用いただければ幸いです。

松本 拓馬、石川 芳浩

Appendix

RatelS設定情報

オフセット オフセット 説明 説明 備考
0x000 RC4キー  
0x004 Listenモード* 0:無効、1:有効
0x008 通信モード1 1:TCP、4:HTTP、8:HTTPS、10:TLS
0x00C ポート番号1  
0x00E 通信先1  
0x04E 通信モード2 1:TCP、4:HTTP、8:HTTPS、10:TLS
0x052 ポート番号2  
0x054 通信先2  
0x094 通信モード3 1:TCP、4:HTTP、8:HTTPS、10:TLS
0x098 ポート番号3  
0x09A 通信先3  
0x0DA プロキシポート番号  
0x0DC プロキシアドレス  
0x11C プロキシユーザ名  
0x15C プロキシパスワード  
0x19F 通信間隔  
表5 設定情報の一覧

* Listenモードが有効な場合、通信先等の情報はConfigデータに含まれません。

RatelS C2コマンド

内容
0x100 初期通信関連
0x101 端末情報送信
0x102 モジュール一覧の取得
0x103 モジュールのロード
0x104 モジュールのアンロード
0x105 プロセス終了。サービス登録削除
0x106 ログインセッション一覧の取得
0x107 ログイン
0x108 Configデータの取得
0x109 Configデータの更新
0x10A フォワードまたはリバースプロキシの設定
0x10B フォワードまたはリバースプロキシの設定削除
0x10C フォワードまたはリバースプロキシの設定一覧の取得
0x10D 不明
0x10E 不明
0x10F 不明
0x110 スリープの設定
0x201 ディスク情報の取得
0x202 ファイルリストの取得
0x203 ディレクトリの作成
0x204 ファイルおよびディレクトリの削除
0x205 ファイルおよびディレクトリのコピー
0x206 ファイルおよびディレクトリの移動
0x207 ファイル名およびディレクトリ名の変更
0x208 ファイルおよびディレクトリのアップロード
0x209 ファイルおよびディレクトリのダウンロード
0x20A ファイル圧縮(WinRARの利用)
0x20B ファイルの実行
0x301 コマンド実行
0x401 インタラクティブシェルの実行
0x501 SOCKS5プロキシ機能
0x502 SOCKS5ポート転送の追加
0x503 SOCKS5ポート転送の削除
0x601 ポートマッピング機能の有効
0x602 ポートマッピングの追加
0x603 ポートマッピングの削除
0x604 ポートマッピング一覧の取得
0x701 スクリーンキャプチャの取得
0x801 リモートデスクトップ接続
0x901 キーロガーの起動
0x902 キーロガーのステータス取得
0x903 キーログ情報の取得
0xA01 イベントログの削除
0xB01 資格情報の取得
表6 C2コマンド一覧

IOC(Indicator Of Compromised)

Indicator Indicator Type Type Context
0952ee1f925b7597d4b66432ec81234d MD5 RatelS Loader
7423f9e3bb91efa4861833f75430d15038b9e0b4 SHA1
64c5c9732a97f9b088e63173cb8781cae33d29934fdbe3652393394c4188d15c SHA256
d7f1952560a1609c33e9c72e0d9869b6 MD5
9708ecc6855f57bd4a2ff5ebc8c57288923b1155 SHA1
8ea2c9f6e87ecb0a351804521ab643fbf092cd69f2ffb7853415ba4272c78245 SHA256
7eb2e061ceedbb5d9b228f8094d91328 MD5 RatelS
9a71a438872b0a582ee1775a8b31b4f0e1354ac9 SHA1
d8e292024473e0aec623f13a0cfbc099c774189b98e69529f8170d9f00cf6d53 SHA256

この記事は役に立ちましたか?

はい いいえ