控えめに言って、欠落しているボリュームのシリアル ID を探しています

Blog post overview news

2019 年 8 月、FireEye は最新の段階的脅威グループである APT41 に関する「 Double Dragon 」レポートをリリースしました。 APT41 は、中国に関連する二重のスパイ活動と金融に焦点を当てたグループであり、ゲーム、ヘルスケア、ハイテク、高等教育、電気通信、旅行サービスなどの業界を標的にしています。

このブログ投稿は、APT41 レポートで言及され、最近FireEye Cyber Defense Summitで発表された LOWKEY として私たちが追跡している洗練されたパッシブ バックドアに関するものです。特定のシステムでのみ実行されるペイロードを利用して、高度に標的を絞った攻撃で LOWKEY が使用されていることを確認しました。追加のマルウェア ファミリ名がブログ投稿で使用され、簡単に説明されています。 APT41 によって使用されるマルウェアの完全な概要については、当社のAPT41 レポートの技術的な付録のセクションを参照してください。

このブログ投稿は、図 1 に示すように 3 つの部分に分かれています。最初の部分では、暗号化されたペイロードをどのように分析したかを説明しています。 2 番目の部分は、複数のサンプルで観察された位置に依存しないローダーを特徴とし、難読化のレイヤーを追加します。最後の部分は、LOWKEY と呼ばれる実際のバックドアについてです。このバックドアには、インターネット インフォメーション サービス (IIS) をターゲットとするパッシブ TCP リスナーとパッシブ HTTP リスナーの 2 つの亜種があります。

Blog post overview
図 1: ブログ投稿の概要

デッドアイ – RC5

過去数か月にわたる APT41 の活動を追跡したところ、2 つの固有の機能を共有する複数のサンプルが観察されました。それは、めったに見られない RC5 暗号化の使用と、固有の文字列「f@Ukd!rCto R$.」です。これらのサンプルを DEADEYE として追跡しています。

DEADEEYE には複数のバリエーションがあります。

  • DEADEYE.DOWN には、追加のペイロードをダウンロードする機能があります。
  • DEADEEYE.APPEND には追加のペイロードが追加されています。
  • DEADEYE.EXT は、システムに既に存在するペイロードを読み込みます。

デッドアイ・ダウン

DEADEYE.DOWN (MD5: 5322816c2567198ad3dfc53d99567d6e ) に属するサンプルは、マルウェアの最初の実行時に 2 つのファイルのダウンロードを試みます。

最初のファイルは hxxp://checkin.travelsanignacio[.]com/static/20170730.jpg からダウンロードされます。コマンド アンド コントロール (C2) サーバーの応答は、最初にキー「wsprintfA」で RC5 復号化され、次に別のキーで RC5 暗号化され、<MODULE_NAME>.mui としてディスクに書き込まれます。

RC5 キーは、C ドライブのボリューム シリアル番号を使用して作成されます。ボリューム通し番号は 4 バイトの値で、通常はシステムのインストール時間に基づいています。ボリューム シリアル番号は、ハードコードされた定数「f@Ukd!rCto R$」と XOR 演算されます。次に、最大 28 バイトの長さのキーを導出するために 16 進数に変換されます。 lstrlenA API 呼び出しを使用して長さを決定するため、XOR された値にゼロバイトが埋め込まれている場合、キーの長さは異なる場合があります。 lstrlenA API 呼び出しは、結果が 16 進数に変換される前に行われることに注意してください。 4 を法とするバイトのインデックスがゼロの場合、16 進変換は大文字になります。キーの派生を表 1 に示します。

C ドライブのボリュームシリアル番号 (例: 0xAABBCCDD)

F^0xAA

= 0xCC

大文字

@ ^ 0xBB

= 0xFB

小文字

U ^ 0xCC

= 0x99

小文字

k^0xDD

= 0xB6

小文字

d^0xAA

= 0xCE

大文字

! ^ 0xBB

= 0x9A

小文字

r^0xCC

= 0xBE

小文字

C^0xDD

= 0x9E

小文字

t ^ 0xAA

= 0xDE

大文字

o ^ 0xBB

= 0xD4

小文字

(0x20) ^ 0xCC

= 0xEC

小文字

R^0xDD

= 0x8F

小文字

$ ^ 0xAA

= 0x8E

大文字

. ^ 0xBB

= 0x95

小文字

派生キー CCfb99b6CE9abe9eDEd4ec8f8E95

表 1: 鍵導出の例

2 番目のファイルは、hxxp://checkin.travelsanignacio[.]com/static/20160204.jpg からダウンロードされます。 C2 応答は、C:WindowsSystem32wcnapi.mui として保存される前に、キー「wsprintfA」で RC5 復号化され、0x74 で XOR されます。

5322816c2567198ad3dfc53d99567d6e ダウンロード
図 2: 5322816c2567198ad3dfc53d99567d6e ダウンロード

次に、サンプルは独自のモジュール名を決定し、拡張子 mui を追加して、RC5 暗号化を使用してファイルの復号化を試みます。これにより、マルウェアがダウンロードして以前に暗号化してシステムに保存したファイルが効果的に復号化されます。ファイルはボリューム シリアル番号に基づくキーで暗号化されているため、ファイルがダウンロードされたシステム、または同じボリューム シリアル番号を持つシステムでのみ実行できます。これは偶然の一致です。

mui ファイルの例は、MD5 ハッシュe58d4072c56a5dd3cc5cf768b8f37e5eです。 16 進エディタで暗号化されたファイルを見ると、高いエントロピー (7.999779/8) が明らかになります。 RC5 はデフォルトで電子コードブック (ECB) モードを使用します。 ECB は、各コード ブロック (64 ビット) が他のコード ブロックから独立して暗号化されることを意味します。これは、バイナリ内の位置に関係なく、同じ平文ブロックが常に同じ暗号文になることを意味します。ファイルには合計 792933 バイトがありますが、重複する暗号ブロックはほとんどありません。つまり、データには追加の暗号化レイヤーがある可能性があります。

正しいボリューム シリアル番号も平文に関する知識もなければ、現在のサンプルの知識だけでペイロードe58d4072c56a5dd3cc5cf768b8f37e5eを復号化する効率的な方法はありません。

DEADEEYE.APPEND

幸いなことに、一意の文字列「f@Ukd!rCto R$.」を RC5 のアーティファクトと組み合わせて検索すると、追加のサンプルが明らかになります。関連するサンプルの 1 つは、Kaspersky (https://securelist.com/operation-shadowhammer-a-high-profile-supply-chain-attack/90380/) によって以前に分析された DEADEYE.APPEND (MD5: 37e100dd8b2ad8b301b130c2bca3f1ea ) です。 .このサンプルは、VMProtect で保護されており、難読化されたバイナリが追加されているため、異なります。埋め込まれたバイナリはオフセット 3287552 から始まります。これは、ファイル サイズと PE サイズが異なる図 3 に示されています。

PE ヘッダーを見ると、ファイル サイズが PE サイズよりも大きいことがわかります
図 3: PE ヘッダーを見ると、ファイル サイズが PE サイズよりも大きいことがわかります

暗号化されたペイロードのエントロピーは 8 のうち 7.990713 とわずかに低くなっています。16 進エディタで埋め込まれたバイナリを見ると、図 4 に示すように、51 36 94 A4 26 5B 0F 19 というバイト パターンが複数出現していることがわかります。暗号化されたデータの途中で ECB モードが使用されている場合、経験に基づいた推測では、平文は 00 00 00 00 00 00 00 00 であるはずです。

37e100dd8b2ad8b301b130c2bca3f1ea の繰り返しバイト パターン
図 4: 37e100dd8b2ad8b301b130c2bca3f1ea の繰り返しバイト パターン

RC5 ブルートフォース

この知識に基づいて、RC5 のリファレンス実装を使用し、マルウェア サンプルで使用されるキー導出アルゴリズムを説明するメイン関数を追加することにしました (図 5 を参照)。キーは単一の DWORD から派生するため、ブルート フォーシングが可能です。最終的な鍵の長さは 28 バイトかもしれませんが、可能な鍵は 4294967296 しかありません。図 5 に示すコードは、考えられるすべてのボリューム シリアル番号を生成し、それらからキーを取得して、51 36 94 A4 26 5B 0F 19 を 00 00 00 00 00 00 00 00 に復号化しようとします。RC5 ブルート フォーサーを数分間実行します。サンプルの正しいボリューム シリアル番号は 0xc25cff4c です。

ブルートフォーサーを自分で実行したい場合は注意してください
私たちが使用した参照実装のキーの DWORD の数はグローバル c で表され、マルウェアのキーの長さ 28 バイトに一致するように 7 に変更する必要がありました。マルウェアでは、生成されたキー内のゼロ バイトが最終的にキーの長さを短くするため、変換にはいくつかの問題がありました。私たちが使用した実装では、ハードコーディングされたキーの長さ (c) を使用しているため、c = 6、c = 5、c = 4… で複数の実行可能ファイルを生成しました。これらは通常、キー スペース全体をカバーするために数分間しか実行されなかったからです。付録 1 に記載されているすべてのサンプルは、c = 7 または c = 6 で解決できます。

主な機能 RC5 ブルートフォース
図 5: 主な機能 RC5 ブルート フォース

復号化されたペイロードは、マルウェア ファミリ POISONPLUG (MD5: 84b69b5d14ba5c5c9258370c9505438f ) に属します。 POISONPLUG は、プラグイン機能を備えた高度に難読化されたモジュラー バックドアです。このマルウェアは、レジストリまたはサービスの永続性、自己削除、プラグインの実行、およびネットワーク接続の転送が可能です。 POISONPLUG は、ソーシャル プラットフォームを使用して、エンコードされたコマンドおよび制御コマンドをホストすることが確認されています。

Kaspersky からの調査結果を確認し、APT 41 レポートで言及されているように、2 つ目のコマンド アンド コントロール URL hxxps://steamcommunity[.]com/id/oswal053 も発見しました。

DEADEYE.APPEND (MD5: 37e100dd8b2ad8b301b130c2bca3f1ea ) から学んだことをすべて考慮して、暗号化された mui ファイル ( e58d4072c56a5dd3cc5cf768b8f37e5e ) をもう一度調べることにしました。復号化された POISONPLUG ペイロードのバイトと一致する最初のバイトをブルート フォースしようとしても、結果は得られませんでした。

幸いなことに、同じ暗号化スキームを使用する追加のサンプルが見つかりました。サンプルの 1 つで、マルウェアの作成者は、復号化されたペイロードを検証するための 2 つのチェックを含めました。 DEADEYE.APPEND (MD5: 7f05d410dc0d1b0e7a3fcc6cdda7a2ff ) の指定されたオフセットで予想される平文を表 2 に示します。

オフセット

復号化後の期待バイト

0

0x48

1

0x8B

0x3C0

0x48

0x3C1

0x83

表 2: DEADEYE.APPEND での復号化後のバイト比較 (MD5: 7f05d410dc0d1b0e7a3fcc6cdda7a2ff )

これらの制約をブルート フォーサーに適用し、mui ファイル ( e58d4072c56a5dd3cc5cf768b8f37e5e ) をもう一度復号化しようとしています。 その結果、成功したヒットの数が少なくなり、手動でチェックできました。暗号化された mui の正しいボリューム シリアル番号は 0x243e2562 です。分析の結果、復号化されたファイルは XMRig マイナーであることが判明しました。これは、ドロッパーが 2 つのファイルをダウンロードする理由も説明しています。最初の <MODULE_NAME>.mui はクリプト マイナーで、2 番目の C:WindowsSystem32wcnapi.mui は構成です。復号化された mui には別の難読化層が含まれており、最終的にコマンド x -c wcnapi.mui で実行されます。コマンドの取得方法と追加の難読化レイヤーについては、ブログ投稿の次の部分で説明します。

対応するボリューム シリアル番号を持つサンプルの一覧については、付録 1 を参照してください。

追加の RC4 レイヤー

APT41 が使用するドロッパーで追加の RC4 レイヤーが特定されており、これを内部で DEADEYE として追跡しています。このレイヤーについては、 ESET によるブログ投稿で以前に詳しく説明されています。力ずくで攻撃したサンプルの一部で使用されていたため、これに関する追加情報を提供したいと考えました。

追加のレイヤーは、リフレクティブ DLL ローダーを含む位置に依存しないシェルコードです。ローダーは、RC4 で暗号化されたペイロードを復号化し、メモリにロードします。コード自体は、分析中に特定されたいくつかの興味深いアーティファクトを除いて、単純なローダーです。

ESET のブログ投稿で述べたように、暗号化されたペイロードにはヘッダーが付加されます。これには、RC4 暗号化キーと、以前にファイル名として識別された可変長の 2 つのフィールドが含まれています。これら 2 つのフィールドは、ペイロードの復号化にも使用される同じ RC4 暗号化キーで暗号化されます。ヘッダーを表 3 に示します。

ヘッダー バイト

意味

0 15

0x37 でエンコードされた RC4 キー XOR

16 19

ヘッダーの前のローダー スタブのサイズ

20 23

RC4 キーサイズ

24 27

コマンドASCIIサイズ(CAS)

28 31

コマンド UNICODE サイズ (CUS)

32 35

暗号化されたペイロードのサイズ

36 39

発射タイプ

40 (40 + CAS)

コマンド アスキー

(40 + CAS) (40 + CAS + CUS)

コマンド UNICODE

(40 + CAS + CUS) (40 + CAS + CUS + 暗号化されたペイロードのサイズ)

暗号化されたペイロード

表 3: RC4 ヘッダーの概要

RC5 レイヤーの背後に隠されているペイロードを見ると、これらのフィールドはファイル名に限定されず、リフレクティブ ローダーによって使用されるコマンドも含まれていることがわかりました。コマンドが指定されていない場合、デフォルトのパラメーターはロードされたペイロードのファイル名です。場合によっては、これにより、開発環境の完全なファイル パスとファイル名が明らかになりました。表 4 に、いくつかのパスとファイル名を示します。これは、ブログ投稿の最初の部分から復号化された mui ファイルを起動するために使用されたコマンド (x -c wcnapi.mui) を見つけた方法でもあります。

MD5 ハッシュ

RC4 層にある引数

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

E:codePortReuse89-shareDeviceIOContrl-Hookv1.3-53Inner-Loaderx64ReleaseInner-Loader.dll

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

E:codePortReuse89-shareDeviceIOContrl-Hookv1.3-53NetAgentx64ReleaseNetAgent.exe

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

E:codePortReuse89-shareDeviceIOContrl-Hookv1.3-53SK3.xx64ReleaseSK3.x.exe

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

UserFunction.dll

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

ProcTran.dll

c11dd805de683822bf4922aecb9bfef5

E:codePortReuseiis-share.5IIS_Sharex64ReleaseIIS_Share.dll

c11dd805de683822bf4922aecb9bfef5

UserFunction.dll

c11dd805de683822bf4922aecb9bfef5

ProcTran.dll

表 4: 復号化されたパスとファイル名

ローキー

ブログ投稿の最後の部分では、DEADEYE.APPEND (MD5: 7f05d410dc0d1b0e7a3fcc6cdda7a2ff ) から復号化されたパッシブ バックドア LOWKEY (MD5: 8aab5e2834feb68bb645e0bad4fa10bd ) の機能について説明しています。 LOWKEY は、リバース シェルのコマンド、ファイルのアップロードとダウンロード、プロセスの一覧表示と強制終了、およびファイル管理をサポートするパッシブ バックドアです。 LOWKEY バックドアの 2 つの亜種を特定しました。

1 つ目はポート 53 でリッスンする TCP バリアントで、2 つ目は TCP ポート 80 でリッスンする HTTP バリアントです。HTTP バリアントは、UrlPrefix http://+:80/requested.html に一致する URL リクエストをインターセプトします。指定された UrlPrefix の + は、任意のホスト名に一致することを意味します。 Kaspersky はこれを「 未知のバックドア」と簡単に言及しています。

どちらの亜種も、ブログ投稿の前の部分で説明したリフレクティブ ローダーによって読み込まれます。これは、元のファイル名を抽出できたことを意味します。それらには意味のある名前が含まれており、バックドアがどのように動作するかについての最初のヒントを提供します。

HTTP バリアント (MD5: c11dd805de683822bf4922aecb9bfef5)
E:codePortReuseiis-share.5IIS_Sharex64ReleaseIIS_Share.dll

TCP バリアント (MD5: 7f05d410dc0d1b0e7a3fcc6cdda7a2ff)
E:codePortReuse89-shareDeviceIOContrl-Hookv1.3-53SK3.xx64ReleaseSK3.x.exe

興味深い部分を図 6 に示します。PortReuse は、ウェルノウン ポートで動作するバックドアの背後にある一般的な考え方を説明しています。パスには、バージョン番号 2.5 および v1.3-53 も含まれています。 IIS_Share は HTTP バリアントに使用され、対象となるアプリケーションを記述します。TCP バリアントには DeviceIOContrl-Hook が使用されます。

実行可能パスの重要な部分の概要
図 6: 実行可能パスの重要な部分の概要

両方の LOWKEY バリアントは、1 つの例外を除いて機能的に同一です。 TCP の亜種は、着信 TCP 接続を傍受できるユーザー モード ルートキットという 2 番目のコンポーネントに依存しています。そのコンポーネントの開発者が使用する内部名は、E:codePortReuse89-shareDeviceIOContrl-Hookv1.3-53NetAgentx64ReleaseNetAgent.exe です。

LOWKEY コンポーネント
図 7: LOWKEY コンポーネント

インナーローダー.dll

Inner-Loader.dll は、LOWKEY バックドアのウォッチ ガードです。 GetExtendedTcpTable API を利用して、TCP 接続が開いているすべてのプロセスを取得します。プロセスが TCP ポート 53 でリッスンしている場合、プロセスに NetAgent.exe が挿入されます。これは、10 秒の遅延を伴うループで行われます。 NetAgent.exe が正常に挿入されると、ローダーはループを終了します。インジェクション後、LOWKEY バックドア (SK3.x.exe) 用の新しいスレッドを作成します。

ウォッチ ガードは、20 分ごとに実行されるエンドレス ループに入り、NetAgent.exe と LOWKEY バックドアがまだアクティブであることを確認します。そうでない場合は、バックドアを再起動するか、NetAgent.exe を再注入します。

NetAgent.exe

NetAgent.exe は、LOWKEY バックドア コンポーネントとの秘密の通信を提供するユーザー モードのルートキットです。バイト シーケンス FF FF 01 00 00 01 00 00 00 00 00 00 を受信した後、着信パケットを名前付きパイプ .pipeMicrosoft Ole Object {30000-7100-12985-00001-00001} に転送します。

このコンポーネントは、NtDeviceIoControlFile API をフックすることによって機能します。これは、グローバル フック テーブルとして使用される疑わしいほど大きなメモリ領域を割り当てることによって行われます。このテーブルは 0x668A0 バイトで構成され、読み取り、書き込み、および実行のアクセス許可が設定されています。

各フック テーブル エントリは、3 つのポインタで構成されます。最初のエントリはフックされた各関数の元の 11 バイトを含むメモリを指し、2 番目のエントリは残りの元の命令へのポインタを含み、3 番目のポインタは関数フックを指します。マルウェアは、この方法で 1 つの関数のみをフックするため、不必要に大量のメモリを割り当てます。このマルウェアは、この方法で 10000 の機能をフックするように設計されています。

フック関数は、グローバル フック テーブルを反復することから開始し、フック関数へのポインターをそれ自体と比較します。これは、インストールされたフック (この場合は NtDeviceIoControlFile) の元の命令を見つけるために行われます。その後、マルウェアは保存された命令を実行し、その結果、通常の NtDeviceIoControlFile API 呼び出しが行われます。その後、IoControlCode が 0x12017 (AFD_RECV) と比較されます。

IoControlCode が一致しない場合は、元の API 呼び出しの結果が返されます。

それらが一致する場合、マルウェアは受信データの最初の 12 バイトを比較します。これは事実上 TCP パケットであるため、TCP ヘッダーを解析してパケットのデータを取得します。データ セクションの最初の 12 バイトは、ハードコードされたバイト パターン FF FF 01 00 00 01 00 00 00 00 00 00 と比較されます。

それらが一致する場合、未使用のように見える追加データを受信することを期待し、16 バイトのヘッダー 00 00 00 00 00 91 03 00 00 00 00 00 80 1F 00 00 で応答します。次のパケットが名前付きパイプ .pipeMicrosoft Ole Object {30000-7100-12985-00001-00001} に転送されることを示します。バックドア コンポーネント (SK3.x.exe) は、名前付きパイプとの間でデータを送受信します。フック関数は、名前付きパイプから受信したすべてのデータをソケットに転送し、名前付きパイプとソケットの間の秘密の通信を効果的に許可します。

SK3.x.exe

SK3.x.exe は実際のバックドア コンポーネントです。ファイルの書き込みと読み取り、ファイル プロパティの変更、対話型コマンド シェル、TCP リレー機能、および実行中のプロセスの一覧表示をサポートしています。バックドアは、通信のために名前付きパイプ .pipeMicrosoft Ole Object {30000-7100-12985-00001-00001} を開きます。

バックドアが受信したデータは、キー「CreateThread」を使用して RC4 で暗号化され、0x77 で XOR されます。バックドアによって送信されるすべてのデータは、同じ暗号化を逆の順序で使用します (最初に 0x77 を使用した XOR、次にキー「CreateThread」を使用して RC4 暗号化)。暗号化されたデータの前には、暗号化されていない 16 バイトのヘッダーがあり、識別子とそれに続く暗号化されたパケットのサイズが含まれています。

ヘッダーの例は次のようになります。
00 00 00 00 00 FD 00 00 10 00 00 00 00 00 00 00

バイト

意味

00 00 00 00 00

わからない

FD00

バイト 5 と 6 はコマンド ID です。サポートされているすべての ID のリストについては、表 6 と表 7 を確認してください。

00

わからない

10 00 00 00

ヘッダーの後に送信される暗号化パケットのサイズ

00 00 00 00

わからない

表 5: ヘッダーのサブコンポーネント

バックドアは、表 6 と表 7 に示すコマンドをサポートしています。ほとんどのコマンドは、コマンドを説明する文字列が先頭にあることを想定していますが、これはオペレーターの便宜のためですが、この文字列はマルウェアによって積極的に使用されていないため、なんでも。たとえば、KILL <PID> は A <PID> の場合もあります。一部のコマンドは、バックドアに埋め込まれた 2 つのペイロード (UserFunction.dll と ProcTran.dll) に依存しており、別のプロセスに挿入されるか、別のプロセスを起動します。

UserFunction.dll

Userfunction.dll は隠し cmd.exe プロセスを開始し、名前付きパイプ .pipeMicrosoft Ole Object {30000-7100-12985-00000-00000} を作成し、パイプから受け取ったすべてのデータを cmd の標準入力に転送します。 .exe プロセス。プロセスからのすべての出力は、名前付きパイプにリダイレクトされます。これにより、名前付きパイプを介したシェルとの対話が可能になります。

ProcTran.dll

コンポーネントは、指定されたホストとポートへの TCP 接続を開き、名前付きパイプ .pipeMicrosoft Ole Object {30000-7100-12985-00000-00001} を作成し、パイプから受信したすべてのデータを開いている TCP 接続に転送します。 .接続で受信したすべてのパケットは、名前付きパイプに転送されます。これにより、名前付きパイプを介した TCP 接続との対話が可能になります。

識別子

引数

説明

0xC8

<コマンド> <arg1> <arg2>

次のコマンド、dir、copy、move、del、systeminfo、および cd をサポートする単純なシェルを提供します。これらは、シェルからの標準コマンドの機能と一致します。これは、<cmd> が実際に使用される唯一のケースです。

0xC9

<コマンド> <arg1>

引数はプロセス ID (PID) として解釈されます。バックドアは UserFunction.dll をプロセスに挿入します。これは、すべての入出力データを Microsoft Ole Object {30000-7100-12985-00000-00000} に転送する対話型シェルです。バックドアは受信データを名前付きパイプに転送し、開かれたシェルとの通信を可能にします。 PID が指定されていない場合、`cmd.exe` はバックドア プロセスの子プロセスとして起動され、入出力は名前付きパイプ Microsoft Ole Object {30000-7100-12985-00001-00001} にリダイレクトされます。

0xCA

<コマンド> <引数1> <引数2>

データをファイルに書き込みます。最初の引数は <file_name> で、2 番目の引数はファイルへのオフセットです。

0xCB

<コマンド> <引数1> <引数2>
<arg3>

ファイルからデータを読み取ります。最初の引数は <file_name>、2 番目の引数はファイルへのオフセット、3 番目の引数はオプションで、正確な目的は不明です。

0xFA

プロセス名、PID、プロセス所有者、実行可能パスなど、実行中のプロセスを一覧表示します

0xFB

<コマンド> <arg1>

指定されたプロセス ID (PID) を持つプロセスを強制終了します

0xFC

<コマンド> <引数1> <引数2>

ファイル CreationTime、LastAccessTime、および LastWriteTime を 2 番目の引数からコピーし、それらを最初の引数に適用します。両方の引数は、完全なファイル パスである必要があります。通常、2 番目の引数から 3 番目の引数へのアクセス時間を適用するため、引数の順序は少し変わっています。

0xFD

WMI クエリ SELECT Name,ProcessId,SessionId,CommandLine,ExecutablePath FROM Win32_Process を実行して、SessonId や CommandLine などの詳細を含む実行中のプロセスを一覧表示します。

0xFE

Ping コマンドを実行すると、マルウェアは次のバイト シーケンスで応答します。

表 6: C2 コマンド

表 7 にリストされているコマンドは、TCP トラフィック リレーの機能を提供するために使用されます。これにより、オペレータはバックドアを介して TCP 経由で別のホストと通信できます。これは、ネットワーク内の横移動に使用できます。たとえば、バックドアの 1 つのインスタンスがジャンプ ホストとして使用され、TCP トラフィック リレーを介してターゲット ネットワーク内の追加のホストに到達する可能性があります。表 7 に示すコマンド 0xD2、0xD3、および 0xD6 は、ProcTran.dll を使用しなくてもメイン バックドア スレッドで使用できることに注意してください。

識別子

引数

説明

0x105

<コマンド> <arg1>

引数はプロセス ID (PID) として解釈されます。バックドアは、すべての入出力データを Microsoft Ole Object {30000-7100-12985-00000-00001} に転送する TCP トラフィック リレー コンポーネントである ProcTran.dll をプロセスに挿入します。その後、コマンド 0xD2、0xD3、および 0xD6 をコンポーネントで使用できます。

0xD2

<arg1> <arg2>

指定されたホストとポートへの接続を開きます。最初の引数はホスト、2 番目の引数はポートです。成功すると、識別子が 0xD4 に設定されたヘッダーが返されます (00 00 00 00 00 D4 00 00 00 00 00 00 00 00 00 00)。これにより、TCP トラフィック リレーが効果的に確立され、オペレータはバックドア マシンを介して別のシステムと通信できるようになります。

0xD3

<arg1>

0xD2 コマンドによって開かれた接続を介してデータを送受信します。受信したデータは、最初にキー「CreateThread」で RC4 復号化され、次に 0x77 で 1 バイト XOR 復号化されます。送り返されたデータは、追加の暗号化なしで直接中継されます。

0xD6

0xD2 コマンドによって確立されたソケット接続を閉じます

0xCF

挿入された ProcTran.dll との通信に使用される名前付きパイプ Microsoft Ole Object {30000-7100-12985-00000-00001} を閉じます。これは0x105コマンドで対象プロセスのスレッドを終了させているようです

表 7: C2 コマンドの TCP リレー

概要

TCP LOWKEY バリアントは、アクティブ化される TCP ポート 53 のバイト シーケンス FF FF 01 00 00 01 00 00 00 00 00 00 を受動的にリッスンします。次にバックドアは、通信に最大 3 つの名前付きパイプを使用します。 1 つのパイプはバックドアの主な通信に使用され、もう 1 つのパイプは埋め込まれたペイロードのためにオンデマンドで使用されます。

  • .pipeMicrosoft Ole Object {30000-7100-12985-00001-00001} メイン通信パイプ
  • .pipeMicrosoft Ole Object {30000-7100-12985-00000-00001} TCP リレー モジュール ProcTran.dll との対話に使用される名前付きパイプ
  • .pipeMicrosoft Ole Object {30000-7100-12985-00000-00000} 対話型シェル モジュール UserFunction.dll に使用される名前付きパイプ

図 8 は、LOWKEY コンポーネントが相互に対話する方法をまとめたものです。

LOWKEY パッシブ バックドアの概要
図 8: LOWKEY パッシブ バックドアの概要

付録

MD5 ハッシュ

正しいボリューム シリアル

ドロッパーファミリー

最終ペイロードファミリー

2b9244c526e2c2b6d40e79a8c3edb93c

0xde82ce06

DEADEEYE.APPEND

ポイズンプラグ

04be89ff5d217796bc68678d2508a0d7

0x56a80cc8

DEADEEYE.APPEND

ポイズンプラグ

092ae9ce61f6575344c424967bd79437

0x58b5ef5c

DEADEEYE.APPEND

LOWKEY.HTTP

37e100dd8b2ad8b301b130c2bca3f1ea

0xc25cff4c

DEADEEYE.APPEND

ポイズンプラグ

39fe65a46c03b930ccf0d552ed3c17b1

0x24773b24

DEADEEYE.APPEND

ポイズンプラグ

5322816c2567198ad3dfc53d99567d6e

デッドアイ・ダウン

557ff68798c71652db8a85596a4bab72

0x4cebb6e9

DEADEEYE.APPEND

ポイズンプラグ

64e09cf2894d6e5ac50207edff787ed7

0x64fd8753

DEADEEYE.APPEND

ポイズンプラグ

650a3dce1380f9194361e0c7be9ffb97

0xeaa61f82

DEADEEYE.APPEND

ポイズンプラグ

7dc6bbc202e039dd989e1e2a93d2ec2d

0xa8c5a006

DEADEEYE.APPEND

ローキー

7f05d410dc0d1b0e7a3fcc6cdda7a2ff

0x9438158b

DEADEEYE.APPEND

ローキー

904bbe5ac0d53e74a6cefb14ebd58c0b

0xde82ce06

DEADEEYE.APPEND

ポイズンプラグ

c11dd805de683822bf4922aecb9bfef5

0xcab011e1

DEADEEYE.APPEND

LOWKEY.HTTP

d49c186b1bfd7c9233e5815c2572eb98

0x4a23bd79

DEADEEYE.APPEND

ローキー

e58d4072c56a5dd3cc5cf768b8f37e5e

0x243e2562

なし – 暗号化されたデータ

XMRIG

eb37c75369046fb1076450b3c34fb8ab

0x00e5a39e

DEADEEYE.APPEND

ローキー

ee5b707249c562dc916b125e32950c8d

0xdecb3d5d

DEADEEYE.APPEND

ポイズンプラグ

ff8d92dfbcda572ef97c142017eec658

0xde82ce06

DEADEEYE.APPEND

ポイズンプラグ

ffd0f34739c1568797891b9961111464

0xde82ce06

DEADEEYE.APPEND

ポイズンプラグ

付録 1: RC5 で暗号化されたペイロードを含むサンプルのリスト

参照: https://www.mandiant.com/resources/blog/lowkey-hunting-missing-volume-serial-id

Comments

Copied title and URL