This post is also available in: English (英語)
概要
本稿では、最近発見された FalseFont バックドアについてレビューします。このバックドアは、Unit 42 が Curious Serpens として追跡している、イランと関連する疑いのある攻撃者によって使われていたものです。Curious Serpens (別名 Peach Sandstorm) は、これまで航空宇宙分野やエネルギー分野を標的にしてきた既知のスパイ活動グループです。FalseFont は、Curious Serpens の武器庫の最新ツールです。私たちが分析した事例は、攻撃者がどのようにして正規の人事管理ソフトウェアを模倣し、偽の求人プロセスを使って被害者をだまし、バックドアをインストールさせたかを示すものです。
弊社の詳細な技術分析は、セキュリティ専門家による FalseFont へのより深い理解と、同脅威に対するより効果的な防御に役立ちます。本稿は、新たに発見された FalseFont バックドアとその機能の分析に焦点を当てます。最後に、この標的型バックドアを検出・防止する方法について説明します。
パロアルトネットワークスのお客様は、次の方法で本稿で解説した脅威からより強力に保護されています。
- Advanced Threat Prevention セキュリティ サブスクリプションを有効にした次世代ファイアウォールは、マルウェアの C2 トラフィック防止に役立ちます。
- Advanced URL Filtering と DNS Security は 既知の C2 のドメインと IP アドレスを悪意があるものとして分類します。
- Unit 42 インシデント レスポンス チームは、本稿で取り上げた脅威をはじめ、さまざまな脅威への個別対応を提供しています。
- Cortex XDR と Prisma Cloud Compute と XSIAM プラットフォームと組み合わせは、本稿で言及した脅威の検出・防止を支援します。
- Advanced WildFire はこの新しいマルウェアを考慮し、機械学習モデルと分析手法の見直しと更新を行いました。
関連する Unit 42 のトピック | Iran, Backdoors |
Curious Serpens APT グループの別名 | Peach Sandstorm, APT33, Elfin, HOLMIUM, MAGNALIUM, REFINED KITTEN |
Curious Serpens と FalseFont の背景
私たちが Curious Serpens として追跡している脅威アクターには、Peach Sandstorm、APT33、Elfin、HOLMIUM、MAGNALIUM、REFINED KITTEN といった別名があります。これらのレポートによると、Curious Serpens は少なくとも 2013 年からは活動を続けています。この脅威アクターはスパイ活動に関与しており、中東、米国、欧州の組織を標的にしています。
2023 年 12 月、Microsoft Threat Intelligence は「この脅威アクターは新しいバックドアを使用し始めた」と指摘し、そのバックドアは FalseFont として識別されました。2024 年 1 月末までに、最初の FalseFont の分析の公開を私たちは確認しています。本稿では、私たちの観測結果と、私たちが検出・防止したトラフィックおよびプロセスに関する追加情報を共有することにより、FalseFont の分析をさらに進めます。
FalseFont バックドアは ASP.NET Core で書かれています。このバックドアには次のような機能があります。
- 感染マシン上でプロセスとコマンドを実行する
- ファイル システムを操作する
- 画面をキャプチャする
- ブラウザーからクレデンシャルを盗む
- (航空宇宙関連の機微データが含まれている可能性のある) 航空宇宙産業用求人応募プラットフォームのクレデンシャルを盗む
FalseFont は野生で観測されていて、サイズ 182 MB の単一ネイティブ実行可能ファイルにパックされています。この実行可能ファイルには、マルウェア本体に加え、マルウェアの動作に必要なさまざまな .NET コンポーネントやライブラリーが含まれています。FalseFont は ASP.NET Core SignalR も使っています。SignalR は Web アプリケーションを実行するためのオープンソース ライブラリーで、コマンド & コントロール サーバー (C2) との通信に使われます。
航空宇宙・防衛産業の求職者を狙う
FalseFont バックドアは高度に標的型のバックドアであり、これまでのところ、航空宇宙産業や防衛産業の求職者を標的にしていると報告されています。FalseFont は、米国に本拠を置くある航空宇宙会社の求人応募送信用 GUI (グラフィカル ユーザー インターフェイス) のふりをしてこれらの応募者を狙います。図 1 は、同アプリケーションのメイン ウィンドウを示しています。
脅威アクターが悪意を持って正規製品を模倣することは珍しいことではなく、悪用された正規製品の側になにか問題や悪意があるということではありません。
この GUI がユーザーの操作のためにアクティブになっている間、バックグラウンドでは、マルウェアの 2 番目の主要コンポーネントが実行されています。実行中、マルウェアは永続性を確保し、C2 サーバーに自身を登録します。
図 2 および 3 に示すように、FalseFont の実行は Cortex XDR によって検出・防止されます。
FalseFont の技術分析
GUI コンポーネント
FalseFont 実行可能ファイルは、図 1 で示したように、航空宇宙会社になりすましたログイン インターフェイスを表示します。被害者がユーザー名とパスワードを入力すると、マルウェアはこのデータを HTTP POST リクエストを通じ、JSON 形式で 64.52.80[.]30 にある攻撃者の C2 サーバーの 8080/tcp 宛に送信します。以下の図 4 および 5 に示すように、通常のログインとゲスト ログインの URL は異なります。
FalseFont GUI のログイン用フィールドのすぐ下には、[Remember Me (ユーザー名を記憶させる)] というラベルのついたチェックボックスがあります。被害者がこのチェックボックスにチェックを入れると、ユーザー名とパスワードが %localappdata% 以下に data.txtというファイル名で保存されます。その後、アプリケーション起動時に、data.txtファイルがすでに存在していれば、このマルウェアはログイン データを C2 サーバーに自動的に送信します。このファイルがすでに存在する場合や、C2 サーバーが正常応答した場合には、同マルウェアはログイン ビューを折りたたんで、図 6 に示す履歴書の収集ページを表示します。
被害者がこれらのフィールドに入力すると、FalseFont はその内容をシリアライズした JSON に変換し、それを GET リクエストとして C2 サーバーの IP アドレスに送信します。C2 サーバーが応答すると、GUI には「Your information has been registered, our colleagues will contact you (あなたの情報が登録されました。担当者からご連絡させていただきます)」と表示され、履歴書のデータは %localappdata% 以下に data2.txt というファイル名で保存されます。
バックドア コンポーネント
初期化
初期化中、FalseFont は C2 ドメインとの最初のハンドシェイクを確立します。このマルウェアは、マシンのホスト名、ログイン ユーザー名、オペレーティング システムの詳細を収集して送信します。以下の図 7 は、C2 に送信されたパケットを示しています。これには、FalseFont のコードにハードコードされた攻撃者のクレデンシャルが含まれています。
FalseFont では、以下のコマンドライン引数を使用できます。これらは、プログラムのコードでは AppReset、AppUpdate として参照されています。
- SsQP's*(58vaP!tF4 (AppReset)
- SQP's*(58vaP!tF4 (AppUpdate)
これらの引数はマルウェアに対し、C2 サーバーがリセットまたはアップデートのリクエストを送信したかどうかを知らせています。次に、FalseFont は 864H!NKLNB*x_H?5 という値を使ってミューテックスを作成しようとします。ミューテックスがすでに存在し、上記いずれの引数も受け取らなかった場合、マルウェアは終了します。
永続化
FalseFont は、次の個別のパスを使って、自分自身の 3 つのコピーを感染マシンにドロップします。
- %username%\AppData\Roaming\host.exe
- %username%\AppData\Local\broker.exe
- %username%\AppData\Local\Microsoft\System.exe
以下の図 8 は、Cortex XDR が記録したファイル書き込み操作を示しています。
図 9 に示すように、FalseFont は 3 つのコピーすべてに対し、CurrentVersion\Run レジストリー キーに新たな値を作成することによって永続性を確保します。
起動後は、マルウェアの GUI を除いてはバックドア コンポーネントのみが実行されます。さらに、Run キー内にすでに値が存在する場合、マルウェアは既存のキーのうち最初のものを編集し、FalseFont のコピーである host.exe も実行されるようにします。どちらが先に起動しても、ほかの 2 つのインスタンスを終了するミューテックスが作成されます。
図 10 に示すように、感染マシンの再起動後の FalseFont の永続化メカニズムは、Cortex XDR によって検出されます。
エンコーディングと暗号化スキーム
FalseFont はハードコードされた設定をコードの一部として保存し、機能分析の妨害を狙って文字列の一部を隠そうとします。マルウェアの文字列は Base64 でエンコードされ、ハードコードされた AES キーを使って暗号化されます。
この作者らはほとんどのメソッドに復号・デコード対象の文字列と似た名前を与えていたため、マルウェアの機能隠蔽という点ではあまりよい仕事をしたとはいえませんでした。以下の図 11 は文字列が「OS error while executing」にデコード・復号された例を示したものです。
中核機能
FalseFont は一連のコマンドを C2 から受信できます。これらのコマンドによって攻撃者は以下のアクティビティを実行できます。
- コマンドとプロセスの実行
- ファイルのダウンロードとアップロード
- ファイル システムに関する情報の受信
- マルウェアのアップデート
- クレデンシャルの窃取
- 被害者の画面のキャプチャ
FalseFont は以下の 2 種類の手法で C2 からのコマンドを受信できます。
- C2 上の特定の API エンドポイントに対し、0 ~ 5 分ごとに、URI /api/Core/Command/Init への GET リクエストを送信する手法
- SignalR クライアントを使う手法
これら 2 つの手法により、攻撃者は 2 種類の方法で FalseFont とやりとりできるようになります。1 つめの手法を使うと、数分ごとに実行される事前定義されたコマンド リスト経由で攻撃者がバックドアと通信できるようになります。SignalR を使用する 2 つめの手法を使うと、先にバックドアがリクエストを送信するのを待たなくても、攻撃者が各コマンドをリアルタイムでバックドアに送信できるようになります。
図 12 に示すように、C2 との通信はハードコードされたキーを使って AES 暗号化され、その後 Base64 でエンコードされます。C2 通信に使われるキーと URL リストは IoC セクションに記載します。
サポートされているコマンド
以下の表 1 は、URI /Core/Command/Init へのクエリーにより FalseFont がサポートするコマンドを示したものです。
コマンドの種類 | 機能 |
Exec | 指定されたコマンドライン引数を使って指定されたプロセスを実行します。ProcessStartInfo.UseShellExecute を false に設定し、プロセスを実行可能ファイルから直接実行する必要があることを示します。標準の出力結果か、成功または失敗を示すカスタム文字列を返します。 |
ExecUseShell | 指定されたコマンドライン引数を使って指定されたプロセスを実行します。ProcessStartInfo.UseShellExecute を true に設定し、プロセスの生成にオペレーティング システム シェルを使用する必要があることを示します。標準の出力結果か、成功または失敗を示すカスタム文字列を返します。 |
ExecAndKeepAlive | このコマンドの実装は不完全なようです。このコマンドは、Not work という結果とステータス 0 とを返します。 |
CMD | このマルウェアは pass というパラメーターを C2 から受け取った場合、こちらの GitHub プロジェクトから借用したコードを使い、Chrome、Brave、Edge のユーザー データ フォルダーからパスワードを盗みます。
それ以外の場合は、指定されたコマンドライン引数を使って cmd.exe を実行し、コンソールへの出力またはカスタム エラー メッセージを返します。 |
PowerShell | 提供された引数を使って powershell.exe を実行します。出力結果またはカスタム エラー メッセージを返します。 |
KillByName | Process.Kill を使い、名前を指定してプロセスを強制終了しようとします。終了に成功したプロセス ID を返します。 |
KillById | Process.Kill を使い、ID を指定してプロセスを強制終了しようとします。終了に成功したプロセス ID を返します。 |
Download | C2 サーバー上にホストされているファイルをダウンロードして展開します。成功または失敗を示す文字列を返します。 |
Upload | 単一ファイルまたはディレクトリー、または一連のファイルとディレクトリーを C2 サーバーにアップロードします。データは、C2 が指定するサイズで Base64 エンコードと暗号化が行われたチャンクとして漏出されます。 |
Delete | 指定したファイルまたはディレクトリーを削除します。成功または失敗を示すカスタム文字列を返します。 |
GetDirectories | 指定されたパス内のファイルとディレクトリーの再帰的なリストを生成し、「|」という文字で区切られた文字列を返します。 |
ChangeTime | SignalR クライアントの自動再接続タイマーを制御する _timeInterval プロパティを更新します。 |
SendAllDirectory | すべての論理ドライブを列挙し、すべてのサブディレクトリーとファイルのリストを C2 に返します。 |
UpadateApplication | 新しいバージョンの FalseFont をダウンロード・展開・インストールします。AppUpdate 変数を使って実行し、現在のプロセスを終了します。 |
Restart | このマルウェアは Run レジストリー キー内で最初に識別された自身のコピーを起動します。そのさい、AppReset 変数内にそれを引数として渡します。現在のプロセスを終了します。 |
GetProcess | GetProcess を使って、実行中のすべてのプロセスのリストを C2 に返します。 |
SendAllDirectoryWithStartPath | 指定されたパス、または「*」という文字で区切られた複数のパスの下にあるサブディレクトリーとファイルの再帰的なリストを返します。 |
default | 「Command not register」を返します。 |
表 1. C2 の init URI でサポートされているコマンド
SignalR クライアント
SignalR は ASP.NET ライブラリーのひとつです。チャット アプリケーションによく使われ、サーバーがコンテンツをリアルタイムでクライアントにプッシュできるようにします。
上のセクションで説明した、特定のクエリーを数分ごとに API エンドポイントにクエリーするメソッドとは対照的に、攻撃者は SignalR を使ってリアルタイムでバックドアにコマンドを送信できます。
FalseFont は、SignalR のデフォルトの JSON ベースのテキスト プロトコルを使います。つまり、攻撃者のサーバーは、クライアント (FalseFont) によって登録されたさまざまなハンドラーによって処理・解析される JSON の形式でメッセージを送信します。SignalR サーバーからのメッセージには、名前と追加のパラメーターが含まれています。
図 13 に示すように、FalseFont は、HubConnectionExtensions.On メソッドを使って 5 つのハンドラーを登録します。登録が完了すると、SignalR クライアントはサーバーからのメッセージを待ちます。メッセージを受信すると、メッセージ名が 5 つある選択肢のいずれかの値に一致するかどうかを確認します。名前が一致する場合、対応するメソッドが実行され、メッセージ パラメーター フィールドが引数として渡されます。
以下の表 2 は、FalseFont の SignalR クライアントに登録されたハンドラーの概要を示したものです。
メソッド | 機能 |
Command | /Core/Command/Init の URI クエリーでサポートされているものと同じリストからコマンドを実行します。 |
GetDir | 指定されたパスにあるファイルとディレクトリーのリストを収集します。/api/LiveDirectory/Send/Dir エンドポイント宛のデータを含む POST リクエストを送信します。 |
GetHard | 名前や種類、サイズを含めてハードドライブを列挙します。/api/LiveDirectory/Send/Hard API エンドポイント宛のデータを含む POST リクエストを送信します。 |
GetScreen | 指定した期間、指定した間隔でスクリーンショットをキャプチャする新たなスレッドを作成します。それらのスクリーンショットは JPEG として保存され、Base64 に変換されて、/api/LiveDirectory/Send/Screen エンドポイントに送信されます。 |
StopSendScreen | 画面キャプチャメソッドを無効化します。 |
表 2. SignalR クライアントがサポートするコマンド
クレデンシャルの窃取
FalseFont のクレデンシャル窃取機能を調べたところ、FalseFont は、C2 からコマンド CMD をパラメーター pass 付きで受信した場合、一般的な Web ブラウザーからクレデンシャルを盗もうとすることがわかりました。
さらに FalseFont は Loginvault.db データベースにクエリーを発行してクレデンシャルを窃取しようとします (図 14)。
結論
本稿では、イランとの関連が疑われ、Curious Serpens の名で知られている攻撃者が開発した新たなバックドア、FalseFont についての技術分析を提供しました。私たちは、FalseFont のオペレーターが航空宇宙産業や防衛産業に特化した正規人事管理ソフトウェアを模倣し、これらの産業をどのように標的化しているかをレビューしました。この偽装された実行可能ファイルは、最終的には求人プロセスを装ったバックドアのインストールを引き起こします。
次に私たちは、FalseFont の中核となるアーキテクチャ、機能、脅威アクターからのコマンドをリアルタイムで受信するための精巧なインターフェイスについて詳しく説明しました。また、攻撃者が C2 通信に選んだフレームワーク (二重化された通信メカニズム実装を含む) も分析しました。
最後に、Cortex XDR プラットフォームがマルウェアのさまざまな感染コンポーネントをどのように検出・防止できるかも示しました。
私たちは、セキュリティ専門家や防御担当者の皆さんに本レポートを慎重に検討していただき、本稿で提示した情報を活用し、検出・防御・ハントに関する既存の慣行を改善して、最終的には皆さまのセキュリティ態勢全般の強化につなげていただけることを願ってやみません。
保護と緩和策
パロアルトネットワークス製品をご利用のお客様は、弊社の製品・サービスにより、本脅威に関連する以下の対策が提供されています。
Cortex XDR プラットフォームは、前セクションのスクリーンショットで説明した実行フローを検出して防御できます。
Cortex XDR と XSIAM は以下を含む複数のデータ ソースからユーザー アクティビティを分析することで、ユーザーやクレデンシャルに基づく脅威を検出します。
- エンドポイント
- ネットワーク ファイアウォール
- Active Directory
- ID およびアクセス管理 (IAM) ソリューション
- クラウド ワークロード
Cortex XDR と XSIAM は長期にわたるユーザー アクティビティ行動プロファイルを機械学習を使って構築します。Cortex XDR と XSIAM は、過去のアクティビティやピアー アクティビティ、期待される同者の行動と新しいアクティビティとを比較することにより、クレデンシャル ベースの攻撃を示唆する異常なアクティビティを検出します。
さらにこれらの製品は本稿で取り上げた攻撃に関連し、以下の保護も提供しています。
- 既知の悪意のあるマルウェアの実行を防止します
- ローカル分析モジュールにもとづく機械学習と Behavioral Threat Protection によって未知のマルウェアの実行防止を支援します
Cortex XDR Pro と XSIAM は振る舞い分析によりクレデンシャル ベース攻撃を含む、エクスプロイト後のアクティビティを検出します。
Prisma Cloud Defender エージェント、XSIAM、WildFire の統合により、Windows ベースの VM、コンテナー、サーバーレス クラウド インフラ内での FalseFont バイナリーの悪意のある実行を検出して防止できます。
Advanced Threat Prevention セキュリティ サブスクリプションを有効にした次世代ファイアウォール (NGFW) は、Threat Prevention シグネチャー 86805 でマルウェアによる C2 トラフィックのブロックを支援します。
Advanced WildFire はこの新たな FalseFont バックドアを考慮して機械学習モデルと分析手法の見直しと更新を行いました。パロアルトネットワークスのポートフォリオにある複数の製品が、Advanced WildFire を活用して FalseFont やそのほかの脅威に対する保護を提供します。
Advanced URL Filtering と DNS Security は 既知の C2 のドメインと IP アドレスを悪意があるものとして分類します。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。
- 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
- EMEA: +31.20.299.3130
- APAC: +65.6983.8730
- 日本: (+81) 50-1790-0200
パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。
IoC (侵害指標)
FalseFont のパックされた実行可能ファイルの SHA256 ハッシュ:
- 364275326bbfc4a3b89233dabdaf3230a3d149ab774678342a40644ad9f8d614
FalseFont のアンパックされた実行可能ファイルの SHA256 ハッシュ:
- 4145e792c9e9f3c4e80ca0e290bd7568ebcef678affd68d9b505f02c6acaab12
ミューテックス:
- 864H!NKLNB*x_H?5
永続化パス:
- %username%\AppData\Roaming\host.exe
- %username%\AppData\Local\broker.exe
- %username%\AppData\Local\Microsoft\System.exe
C2 ドメイン:
- Digitalcodecrafters[.]com
C2 IP アドレス:
- 64.52.80[.]30
C2 ユーザー名:
- MX2
C2 パスワード:
- NooVtlXgx2T3IyN4I0Xf
Base 64 エンコード/ハードコードされた AES の初期化ベクトル IV:
- viOIZ9cX59qDDjMHYsz1Yw==
Base 64 エンコード/ハードコードされた AES キー:
- 3EzuNZ0RN3h3oV7rzILktSHSaHk+5rtcWOr0mlA1CUA=
C2 URI スキーム:
- Login/
- LoginAsGuest/
- realtime/
- api/
- /Token
- /AgentRequestTime/Agent
- /Core/Command/Add/Result
- /Core/Command/Add/Schedule
- /Core/Command/Init
- /Core/Command/Last
- /Core/Command/Restart
- /FileStorage
- /FileStorage/Agent/Init/Upload
- /FileStorage/Agent/Upload
- /FileStorage/Agent/Download
- /LiveDirectory/Send/Dir
- /LiveDirectory/Send/Hard
- /LiveDirectory/Send/Screen