FakeNarratorマルウェアによるWindowsユーザーを標的としたPcShareバックドア攻撃

By Cylance Research and Intelligence Team

本ブログ記事は、2019年9月25日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。

はじめに

過去2年間にわたって、BlackBerry Cylanceの研究者たちは、東南アジアにあるテクノロジー企業を攻撃している疑いのある中国のAPT(Advanced Persistent Threats)攻撃グループの存在を明らかにしてきました。 

この攻撃者グループは、正規のNVIDIAアプリケーションによりサイドロードされて動作するように変更、設計されている、オープンソースのPcShareバックドアを配布しました。 

さらに、トロイの木馬を仕込んだスクリーンリーダーのアプリケーションを導入し、Windowsに標準で備わっているナレーター「簡単操作」機能と置き換えました。このバックドアにより、攻撃者は資格情報を必要とせずに、リモートデスクトップのログオン画面からひそかにシステムを制御できます。

今回のレポートでは、この攻撃者に関連するパブリックドメインのマルウェアサンプルについて概説します。さらに、Narrator.exeの悪意のある使用とPcShareバックドアの変更箇所について理解を深めます。

私たちの調査は、攻撃者の巧みな戦術、技法、手順(TTP)における進化の詳細を明らかにすることで、セキュリティへの関心が高い専門家にとって有益なものとなります。CISO(情報セキュリティ最高責任者)は、脅威の状況がどのように変化しているのかを知ることで、組織を防御しやすくなります。

解析

攻撃者は、被害者のマシンにおける主な足場として、中国のオープンソースバックドアであるPcShareの変更版を使用しています。このバックドアはキャンペーンの実行を目的として変更が加えられており、コマンドアンドコントロール (C&C) の暗号化とプロキシバイパスの機能が追加され、不要な機能はコードから削除されています。このバックドアは、DLLサイドローディングの手法を用いた特別なローダーで配布されます。

攻撃者は、被害者のマシンにアクセスできると、各種Post-Exploitation(侵入後の悪用)ツールを展開します。その多くは、中国のプログラミングポータルでよく目にする、一般に公開されているコードを使用したものです。注目を浴びているツールの1つに、独自に作られたトロイの木馬があります。このツールはMicrosoftのユーザー補助機能を悪用し、悪名高い「Sticky Keys」攻撃と同様の方法で、侵害されたマシンにシステムレベルでアクセスできるようにします。今回の場合、攻撃者は、いつものsethc.exeバイナリやutilman.exeバイナリを置き換えずに、ナレーターの実行可能ファイルにトロイの木馬を仕込む方法を選びました。ナレーターは画面上のテキストを読み上げるWindowsユーティリティであり、キーボードショートカットを使用してログイン画面で呼び出すことができます。偽のナレーターを使用して被害者のマシンにシステムレベルでアクセスしていることは、攻撃者が長期的な足場を確保しようとしていることを示しています。

このキャンペーンの特徴は秘匿性が高いことです。攻撃者は検知を回避するために注力しています。メモリインジェクションを利用した独自のローダーとDLLサイドローディングの手法を併用して、バックドアのメインバイナリがディスクにドロップされるのを確実に防いでいます。検知を避けるために、実行パスに基づいたペイロードエンコーディングのシンプルかつ効果的なサンドボックス対策手法も実装されています。C&Cインフラストラクチャは間接参照のレベルで保護されています。ローダーにより提供される構成はプレーンテキストとして渡されますが、そこに含まれているURLは本当のC&Cアドレスではなく、C&C通信で使用される実際の詳細情報を提供するリモートファイルを示しています。そのため、攻撃者は優先されるC&Cアドレスを容易に変更して通信のタイミングを決定することができます。さらに、サーバー側のフィルタリングを適用することで、特定のリージョンから送られた要求や特定の時刻に送られた要求に限って本当のアドレスが開示されるようにすることができます。

現在、これらの攻撃の正確なアトリビューション(攻撃者の特定)は困難であることが判明しています。PcShareバックドアを使用していること、さらには被害者の所在地において、既知の攻撃キャンペーン「Tropic Trooper作戦」との類似点が見られます。Tropic Trooperは、台湾とフィリピンの政府機関や重工業企業を好んで標的にしています。

PcShareローダー

SHA256

c5226bfd53d789a895559e8bcbedc4ecdde543e54a427b1cb4e5d7ef90756daa 

分類 

マルウェア/バックドア 

サイズ 

424 KB (434,176 バイト) 

タイプ 

PE32 実行可能ファイル (DLL) (GUI) Intel 80386, for MS Windows 用

ファイル名 

NvSmartMax.dll 

タイムスタンプ 

2017-10-20 07:08:10 

 

SHA256

1899B3D59A9DC693D45410965C40C464224160BBEF596F51D35FDA099D609744 

分類 

マルウェア/バックドア 

サイズ 

424 KB (434,176 バイト) 

タイプ 

PE32 実行可能ファイル (DLL) (GUI) Intel 80386, for MS Windows 用

ファイル名 

NvSmartMax.dll 

タイムスタンプ 

2017-09-28 09:01:58 


概要

このDLLは、正規のアプリケーション「NVIDIA Smart Maximise Helper Host」(NVIDIA GPUグラフィックドライバの一部)が通常使用するオリジナルのNvSmartMax.dllの代わりに、このアプリケーションによって サイドロード[1] されます。その主な役割は、.dataセクションか個別のDATファイルに格納されているエンコードされたペイロードを復号してロードすることです。

図1:ローダーの概要

攻撃者は複数の組織を攻撃するのに同じPcShareペイロードを使用していることが確認されています。ただし、多くの場合、サイドロードされたDLLは(おそらく再コンパイルはせずに)標的ごとに変更され、C&CのIPアドレスや被害者の識別子といった構成の詳細は更新されています。

特徴

  • 被害者の環境に応じて調整されたファイルを選択してDLLサイドローディング
  • 埋め込まれたプレーンテキスト構成 
  • シンプルなサンドボックス回避策
  • 1バイトのXORでエンコードされるペイロード
  • ディスクにドロップされることなくメモリに注入されるペイロード

挙動

PcShareローダーのDllMain関数は空ですが、そのライブラリは他の3つの関数をエクスポートします。エクスポートされるNvSmartMaxUseDynamicDeviceGridsと呼ばれる関数には、ペイロードを復号して実行するルーチンが含まれます。2つ目のNvSmartMaxNotifyAppHWNDは、個別のプロセスのコンテキストで復号ルーチンを呼び出します。エクスポートされる3つ目の関数(GetContainingRect)は悪意のあるアクティビティとは無関係ですが、正規のアプリケーションで必要です。

悪意のあるNvSmartMaxNotifyAppHWND関数が呼び出されてエクスポートされると、次の操作が行われます。

  • グローバル一意識別子(GUID)のような名前がハードコードされたミューテックスを作成する。
  • 拡張子の前に接頭辞"Ex"を追加して、正規のオリジナルEXEファイルの名前を変更する。
  • "NvSmart"エントリを(正規ファイルのコピーを指し示すパスとともに)
    HKCU\Software\Microsoft\Windows\CurrentVersion\Run キーに追加することにより、レジストリで永続性を設定する。

次に、以下のパラメータでCreateProcess APIを呼び出して、個別のrundll32.exeプロセスのコンテキストでデコードルーチンが呼び出されます。

rundll32.exe %s ,NvSmartMaxUseDynamicDeviceGrids


図2:復号ルーチンを開始するために使用されるrundll32.exe

ペイロード注入ルーチンの1つのインスタンスだけが実行されるよう、NvSmartMaxUseDynamicDeviceGrids関数は、ペイロードを復号して実行する前にGUIDのようなミューテックスをもう1つ作成します。

デコードはXORベースで行われ、最初の1バイトのXORキーは現在のプロセスパスに基づいて計算されます。こうした解析回避策により、一部のサンドボックス環境での実行時にペイロードが正しくデコードされないようにすることができます。というのも、正しいXORキーは、親プロセスの名前がrundll32.exeでないと生成されないからです。


図3:(実行可能ファイルのパスに基づく)キーの計算とペイロードの復号

XORデコードルーチンは、次のようにC/C++コードに変換できます。



図4:ペイロード復号の疑似コード

ペイロードのデコードが完了すると、このマルウェアはペイロードをrundll32.exeのメモリにリフレクティブにロードして実行し、ハードコードされた構成にポインタをパラメータとして渡します。


図5:ハードコードされた構成

構成

フィールド

Victim GUID (?)

84314963-BE0E-43C9-A0BE-83B180361999

ServerPort

443

Timeout

0x3C (60.)

Cmd

-

ServerAddr

45.32.181.48

DdnsUrl

<redacted>

SoftVer

1020

Group

<redacted>

Port

0x50 (80.)

HWnd

-

Id

-



PcShareバックドア

SHA256

bd345155aa4baa392c3469b9893a4751c2372ae4923cf05872bcdc159b9596f8 (暗号化)

49b86ae6231d44dfc2ff4ad777ea544ae534eb40bd0209defffec1eb1fe66b34 (復号)

分類

マルウェア/バックドア

別名

PcClient, PcMain

サイズ

296 KB (303,104 バイト)

タイプ

バイナリ (PE DLL、ヘッダーなし)

ファイル名

PcMain.dll (内部名)

タイムスタンプ

該当なし


概要

ペイロードはメモリにリフレクティブにロードされるため、復号形式でディスクに常駐することはありません。ファイルヘッダーはゼロに設定されていますが、このバイナリは元々PE DLLであったものと思われます。このバックドアは、中国のオープンソースであるPcShareと呼ばれるリモートアクセス型トロイの木馬(RAT)を基にしたものであり、GithubではPcShareのさまざまなバージョンを入手できます[2]。 元のコードにあった機能の一部は実装されていません。これは、攻撃者が不要なコードを取り除いて、特定のニーズを満たし、侵入の痕跡をできるだけ残さず、バイナリのサイズを小さくしようとしたことを示唆しています。ここでは、オーディオ/ビデオストリーミングやキーボードモニタリングなどの機能は実装されていません。これは、このバックドアが初期段階の足場を築くために使用されその主な目的が他のモジュールのダウンロードとインストールであったことを示しています。

特徴

  • SSH/Telnet サーバー、自己更新モード、ファイルアップロード/ダウンロードモードをはじめとする、さまざまな動作モード
  • トラフィック圧縮でのLZWアルゴリズムのカスタム実装の使用
  • PolarSSLライブラリを使用したC&C通信の暗号化(オープンソース版には存在しない)
  • ローカルユーザーの資格情報を使用したプロキシ認証(オープンソース版には存在しない)
  • 以下に示すいくつかのリモート管理機能

o   ファイルとディレクトリの一覧表示、作成、名前変更、削除
o   プロセスの一覧表示と強制終了
o   レジストリキーとレジストリ値の編集
o   サービスの一覧表示と操作
o   ウィンドウの列挙と制御
o   バイナリの実行
o   C&C または指定されたURLからの追加ファイルのダウンロード
o   C&C へのファイルのアップロード
o   コマンドラインシェルの生成
o   URLへの移動
o   メッセージボックスの表示
o   システムの再起動またはシャットダウン

挙動

このDLLの内部名はPcMain.dllです。PcMain.dllは Vip20101125 と WorkMainF の2つの関数をエクスポートします。これらの文字列は、Githubで入手可能なPcShareコードと相関関係があります。

 図6:PcMain.dllがエクスポートした関数(左)とGitHubのPcShareソースコード(右)

このマルウェアの主な機能は、DllMain関数の内部から呼び出されてエクスポートされるVip20101125に含まれています。このバックドアは、C&Cに含まれています。このバックドアは、C&Cの本当のアドレスを最初に取得する必要があります。そのために、ローダーにより提供される構成で指定されたURLにある、リモートファイルの内容が読み取られます。リモートファイルは、IPアドレスとポート番号が指定された単純なプレーンテキストファイルであると思われます。ポート番号が指定されていない場合、ポートはデフォルトで80に設定されます。次に、このマルウェアはTCPソケット経由でC&Cに接続し、暗号化されて圧縮されたシステム情報を含むビーコンを送信します。


図7:C&Cビーコンの送信

すると、C&Cサーバーが、要求されたバックドアの接続モードを指定するコマンドを送信します。受信したコマンドはハンドラーにディスパッチされます。


図8:switchループによる接続モードコマンドの処理

元のオープンソースコードに応じて数種類のバックドアモードがありますが、一部のオプションは削除されています。以下のリストは、CMyClientMain::GetCmdFromServerでサポートされているコマンドの一部を示しています。


図9:バックドアのモード


図10:PcMain/MyClientMain.cppにあるオリジナルのCMyClientMain::GetCmdFromServerの一部

バックドアの機能を操作するswitchステートメントは CMyMainTrans::StartWork 関数内にあります。選択した接続モードとOSバージョンに応じて、SSH_MainThread 関数は StartWork 関数を直接呼び出すか、このバックドアDLLのインスタンスを新たに作成し、エクスポートする WorkMainF 関数を呼び出して構成値をパラメータとして指定します。この変更されたコードの場合、アンパックされたバックドアDLLはディスクにドロップされないため、攻撃者はバックドアのswitchを呼び出す直接的な方法のみを選択することになります。


図11:構成パラメータを指定したWorkMainFの実行

The StartWork 関数はバックドアのコマンド処理を開始します。バックドアで独自に実装された、PcUnZip 関数内のLZWアルゴリズムを使用して、コマンドパラメータの復号と圧縮解除が最初に行われます。


図12:コマンドの受信、アンパック、ディスパッチ


図13:サポートされているバックドアのコマンド

C&C 通信

Githubのバージョンとは異なり、このバージョンのPcShareは、プロキシ構成を取得し、その構成を認証に使用することでプロキシを迂回できます。


図14:Chrome 47のユーザーエージェント文字列を使用したプロキシ認証(2015-12-01)

このバックドアのバイナリは、PolarSSLライブラリの静的にリンクされたインスタンスを埋め込みます。すべての C&C 通信は埋め込みのRSAキーを使用して暗号化され、独自に実装されたLZWを使用して圧縮されます。


図15:ペイロードに埋め込まれたPolarSSLの証明書

コマンド

コード(16進/10進)

関数

パラメータ

コメント

WM_CONNECT_FRAM

0x1F41

8001

SSH_FramThread

-

バックドアのコマンド処理ループを開始します。この関数に関連付けられている、Githubコードのカメラキャプチャスレッドは削除されています。

WM_CONNECT_FILE

0x1F42

8002

SSH_MainThread

-

バックドアのコマンド処理ループを開始します。

WM_CONNECT_PROC

0x1F43

8003

SSH_MainThread

-

バックドアのコマンド処理ループを開始します。

WM_CONNECT_SERV

0x1F44

8004

SSH_MainThread

-

バックドアのコマンド処理ループを開始します。

WM_CONNECT_KEYM

0x1F45

8005

 (未実装)

-

-

WM_CONNECT_MULT

0x1F46

8006

 (未実装)

-

-

WM_CONNECT_TLNT

0x1F47

8007

SSH_TlntThread

-

C&C サーバーへの端末接続を開始して基本システム情報を送信し C&C から送られてきたシェルコマンドをループ内で読み取って実行します。

WM_CONNECT_DL_FILE

0x1F48

8008

SSH_DlThread

FilePath

指定されたファイルの内容を読み取り、(圧縮/暗号化後) C&C に送り返します。

WM_CONNECT_UPDA

0x1F49

8009

UpdateFile

BinaryData

C&C から送られてきたファイルを受信して一時ファイルに書き込み、 CreateProcess function 関数を使用して実行してから自己終了します。

WM_CONNECT_TURL

0x1F4A

8010

SSH_TuRlThread

URL

指定されたURLからファイルをダウンロードして実行します。

WM_CONNECT_UPLO

0x1F4B

8011

SSH_FileThread

BinaryData

C&C から送られてきたPE EXEファイルを受信し、一時ファイルに書き込んで実行します。

WM_CONNECT_GDIP

0x1F4C

8012

 (未実装)

-

-

WM_CONNECT_QUER

0x1F4D

8013

 (未実装)

-

-

WM_CONNECT_REGT

0x1F4E

8014

SSH_MainThread

-

バックドアのコマンド処理ループを開始します。

WM_CONNECT_CWND

0x1F4F

8015

SSH_MainThread

-

バックドアDLLの新しいインスタンスを生成し、バックドアのコマンド処理ループを開始する WorkMainF を呼び出してエクスポートします。

WM_CONNECT_MESS

0x1F50

8016

SSH_MessThread

Type, Text

指定されたテキストをメッセージボックスに表示します。

WM_CONNECT_LINK

0x1F51

8017

SSH_LinkThread

ShowCmd, URL

指定されたURLをInternet Explorerで開きます。

WM_CONNECT_SOCKS

0x1F52

8018

 

-

 

WM_CONNECT_TWOO

0x1F53

8019

 

-

 

WM_CONNECT_FIND

0x1F54

8020

SSH_MainThread

-

バックドアのコマンド処理ループを開始します。

WM_CONNECT_CMD

0x1F55

8021

 (未実装)

-

-

WM_CONNECT_VIDEO

0x1F56

8022

 (未実装)

-

-

WM_CONNECT_AUDIO

0x1F57

8023

 (未実装)

-

-

WM_CONNECT_UP_FILE

0x1F58

8024

SSH_UpThread

FilePath, BinaryData

C&C から送られてきたファイル名を受信し、受信したバイナリデータとともに書き込みます。

WM_CONNECT_GET_KEY

0x1F59

8025

 (未実装)

-

-

WM_CONNECT_SOCKS_STOP

0x1F5A

8026

SSH_StopSocksThread

-

バックドアの通信を停止します。

WM_CONNECT_CLIENT_DOWN

0x1F5B

8027

SSH_StopSocksThread

-

バックドアの通信を停止します。

CLIENT_PRO_UNINSTALL

 

30002

-

-

"uninstall"フラグを返します。

CLIENT_SYSTEM_RESTART

 

30004

ShutDownSystem

-

システムを再起動します。

CLIENT_SYSTEM_SHUTDOWN

 

30005

ShutDownSystem

-

システムの電源を切ります。

コマンド

コード(16進/10進)

パラメータ

コメント

GetDiskInfo

0x6EB

1771

RootPath

指定されたディスクに関する情報(ディスク名、ドライブタイプ、ボリューム情報、空き領域)を一時ファイルに保存します。

GetFileInfo

0x6EC

1772

FilePath

ファイルの拡張属性を一時ファイルに保存します。

GetDirInfo

0x6ED

1773

DirectoryPath

ディレクトリ情報(ディレクトリの拡張属性、サブディレクトリの数、ファイルの数、合計ファイルサイズ)を一時ファイルに保存します。

GetDirList

0x6EE

1774

DirectoryPath

指定されたディレクトリに格納されているファイル名のリストを一時ファイルに保存します。

DeleteMyFile

0x6EF

1775

FilePath

指定された1つ以上のファイルを削除します。

CreateDir

0x6F0

1776

DirectoryPath

指定されたディレクトリを作成します。

ReNameFile

0x6F1

1777

ExistingFileName, NewFileName

指定されたファイルを移動します。

GetDiskList

0x6F2

1778

-

すべてのディスクに関する情報(ディスク名、ドライブタイプ、ボリューム情報、空き領域)を一時ファイルに保存します。

ExecFile

0x6F3

1779

FilePath

特定のアプリケーションを実行します。

KillOneProcess

0x6F4

1780

PID

特定のPIDを持つプロセスを終了します。

MyRegEnumKey

0x6F5

1781

SubKey

特定のキーに格納されているレジストリ値のリストを一時ファイルに書き込みます。

MyRegDeleteKey

0x6F6

1782

SubKey

指定されたレジストリキーを削除します。

(unimplemented)

0x6F7

1783

-

-

MyRegDeleteValue

0x6F8

1784

SubKey, ValueName

指定されたレジストリ値を削除します

MyRegEditValue

0x6F9

1785

SubKey, ValueName, Type, Data

指定されたレジストリ値を設定します。

(unimplemented)

0x6FA

1786

-

-

GetDownFileList

0x6FB

1787

ListOfFiles

特定のファイルのパス、属性、サイズを一時ファイルに保存します。

GetProcessList

0x6FC

1788

-

実行しているプロセスのリストを一時ファイルに書き込みます。

EnumMyServices

0x6FD

1789

-

サービスのリスト(名前、ステータス、設定)を一時ファイルに書き込みます。

ControlMyServices

0x6FE

1790

ServiceName,

State

2番目のパラメータに従って、指定されたサービスを開始または再開します。

ConfigMyServices

0x6FF

1791

ServiceName, StartType, DisplayName

開始のタイプを変更し、特定のサービスの名前を表示します。

(unimplemented)

0x700

1792

-

-

DeleteMyServices

0x701

1793

ServiceName

指定されたサービスを削除します。

GetFindFileList

0x702

1794

Path

指定されたファイルまたは指定されたディレクトリのすべてのファイルを検索し、ファイル名をファイル属性とともに一時ファイルに保存します。

MyEnumWindows

0x703

1795

-

開いているウィンドウのリスト(ウィンドウテキストとモジュール名)を一時ファイルに書き込みます。

MyControlWindows

0x704

1796

hWnd, CmdShow

特定のウィンドウを閉じるか、操作(表示、非表示、最小化、最大化)します。


図16:ペイロードに埋め込まれたPolarSSLのキーと証明書

バックドアのモード

C&C サーバーから送られる最初のコマンドで接続モードが指定されます(注:パラメータは別途送られます)。


バックドアのコマンド

このバックドアのコマンド処理スレッドは、いくつかの動作モードで開始されます。以下のコマンドを処理できます。


偽のナレーター

SHA256

0022508fd02bb23c3a2c4f5de0906df506a2fcabc3e841365b60ba4dd8920e0c

分類

マルウェア/トロイの木馬

別名

該当なし

サイズ

220 KB (225,280 バイト)

タイプ

PE32+実行可能ファイル (GUI) x86-64, for MS Windows 用

ファイル名

Narrator.exe

タイムスタンプ

2015-06-08 05:23:07

PDB パス

C:\myWork\vc\Narrator_window_20150606v1.2\x64\Release\Narrator.pdb

 

概要

前述の「Sticky Keys」攻撃[3]と同様に、このバイナリはWindowsで用意されている正規のスクリーンリーダーユーティリティのNarrator.exeに置き換わるように設計されています。この攻撃により、リモートの攻撃者は、リモートデスクトップのログオン画面をから、システム特権で実行されているコマンドプロンプトへの非認証アクセスを行えるようになります。トロイの木馬を仕込んだナレーターを展開するために、攻撃者は被害者のシステムの管理特権をまず取得する必要があります。

Windowsのユーザー補助機能を悪用した以前のマルウェアと比べると、このバイナリは極めて革新的です。これまでは、ナレーターのユーザーインターフェイスの複製は試みられず、多くの場合は完璧に偽造できていたわけではありませんでした。一方、このバイナリはオリジナルのNarrator.exeのコピーを生成し、非表示の重複したウィンドウを描画します[4] 。このウィンドウは、攻撃者だけが知る特定のキーの組み合わせをキャプチャするために待機します。正しいパスフレーズが入力されるとダイアログが表示され、攻撃者は実行するファイルのパスをこのダイアログで指定できます。

特徴

  • Windowsの正規のスクリーンリーダーアプリケーションであるNarrator.exeを置き換えます。
  • 攻撃者は、展開前に被害者のマシンの管理特権を取得する必要があります。
  • ログオン画面から、システムレベルの永続的なアクセス権が付与されます。

挙動

実行時に、トロイの木馬が仕込まれた偽のナレーターは、本来の正規ナレーターをまず実行します(攻撃者により、あらかじめ名前がNarratorMain.exeに変更されています)。次に、ウィンドウクラス("NARRATOR")を登録し、ウィンドウ("Narrator")を作成します。

ウィンドウプロシージャが編集コントロールと"r"ボタンを備えたダイアログを作成し、個々のスレッドがキーボードストロークを絶えず監視します。特定のパスワード入力が検知されると("showmememe"文字列としてバイナリにハードコード)、あらかじめ作成されたダイアログが表示されます。これにより、攻撃者はコマンドを指定するか、実行するファイルのパスを編集コントロールを使用して指定できます。"r"ボタンが押されると、編集コントロールの内容が読み取られ、システムAPIを通じてコマンドの実行を試みるスレッドにテキストが提供されます。


図17:偽のナレーター: キーボードでのハードコードされたパスワード入力の監視

「簡単操作」によって偽のナレーターがログオン画面で有効になると、このマルウェアはwinlogon.exeによってシステム特権で実行されます。攻撃者が定義したパスワードが入力されると、攻撃者は任意の実行可能ファイルを生成し、ログオン画面からシステムアカウントで実行することができるようになります。


図18:RDPログインプロンプトで実行している偽のナレーター

この手法を突き詰めていくと、攻撃者は有効な資格情報がなくても、システム上に永続的なシェルを保持できるようになります。

まとめ

こうした攻撃を裏で仕掛けている攻撃者には、一般に公開されているコードを変更、再利用する傾向が見られます。これは、足場となるバックドアと、使用される大部分のPost-Exploitationツールに共通しています。このようなアプローチでは、必要とされるリソースが大幅に減り、攻撃ツールセットをより短期間で開発できます。さらに、オープンソースコードはアトリビューションをより困難にします。インターネットと適切なコンパイラを利用できるユーザーであれば、誰もがコードを変更しながら使用することができるからです。

攻撃者は、オープンソースのツールを好む一方で、必要に応じて独自のユーティリティも積極的に作成します。その一例が偽のナレーターです。偽のナレーターサンプルの開発履歴を見ると、4年以上前に導入されたこのツールが、被害者の環境への適合性を高めるために継続的に変更されていることがわか ります。次のバージョンが作成されるまでに何年も経っているのは、これが異色のツールであり、使用される場面が極めて限られていることを示しています。

攻撃者の目的は、機密データの永続的な窃取、ローカルネットワークの調査、そしてラテラルムーブメント(Lateral Movement)です。システムレベルの特権を得るために偽のナレーターを使用していることは、攻撃者がデータを1回だけ収集するのではなく、被害者を長期にわたって監視しようとしていることを示しています。

中国のオープンソースプロジェクトを多く使用していることや、被害者の所在地を踏まえると、攻撃者は中国系であると思われます。Tropic Trooperと呼ばれるグループに関連したPcShareの使用がこれまでに確認されています。このグループは、少なくとも2012年から同じ地域の政府機関や重工業企業を標的にしています。Tropic Trooper(別名KeyBoy)は、バックドアPcShare、もう1つの有名なバックドアであるPoison Ivy、独自のバックドアのYahoyahの3つを含むツールセットを使用することで知られています。

PcShareがこの地域で活動している多数の攻撃者が利用できるオープンソースプロジェクトであることを考えると、現時点では、攻撃がTropic Trooperに起因していると100%断言することはできません。

侵入の痕跡(IOC)

痕跡

タイプ

説明

c5226bfd53d789a895559e8bcbedc4ecdde543e54a427b1cb4e5d7ef90756daa

SHA256

PcShare ローダー #1

1899b3d59a9dc693d45410965c40c464224160bbef596f51d35fda099d609744

SHA256

PcShare ローダー #2

bd345155aa4baa392c3469b9893a4751c2372ae4923cf05872bcdc159b9596f8

SHA256

PcShare バックドア(暗号化)

49b86ae6231d44dfc2ff4ad777ea544ae534eb40bd0209defffec1eb1fe66b34

SHA256

PcShare バックドア(ダンプ、PEヘッダーなし)

0022508fd02bb23c3a2c4f5de0906df506a2fcabc3e841365b60ba4dd8920e0c

SHA256

偽のナレーター

945F4106-C691-4921-ACAB-E58C50C5F150

ミューテックス

PcShare ローダー

CF08C3F3-2CA3-4215-8CB3-4CDBD3030EC4

ミューテックス

PcShare ローダー

45.32.181.48

 C&C IP

PcShare ローダー #1

142.4.124.124

C&C IP

PcShare ローダー #2

C:\myWork\vc\Narrator_window_20150606v1.2\x64\Release\Narrator.pdb

PDB パス

偽のナレーター


MITRE ATT&CK

戦術

ID

名前

確認されたマルウェア

初期アクセス

T1078

有効なアカウント

 

実行

T1085

Rundll32

 PcShare ローダー

永続性

T1100

Webshell

 

T1060

レジストリ Run キー

PcShare ローダー

特権エスカレーション

T1015

ユーザー補助機能

偽のナレーター

防御回避

T1073

DLLサイドローディング

PcShare ローダー

T1140

ファイルまたは情報の難読化解除/デコード

PcShare ローダー

検知

T1010

アプリケーションウィンドウの検知

PcShare バックドア

T1083

ファイルとディレクトリの検知

PcShare バックドア

T1057

プロセスの検知

PcShare バックドア

T1012

レジストリの照会

PcShare バックドア

T1082

システム情報の検知

PcShare バックドア

T1007

システムサービスの検知

PcShare バックドア

コマンドアンドコントロール

T1032

標準暗号プロトコル

PcShare バックドア

T1105

リモートファイルのコピー

PcShare バックドア

窃取

T1041

コマンドおよび制御チャネルによる窃取

PcShare バックドア


リンク:

[1] https://attack.mitre.org/techniques/T1073/
[2] https://github.com/sinmx/pcshare/
[3] https://attack.mitre.org/techniques/T1015/
[4] https://docs.microsoft.com/en-us/windows/win32/winmsg/window-features#overlapped-windows

Tags: