脆弱性

LANDFALL: Samsungデバイスを標的とするエクスプロイト チェーンで使用される、新種の商用グレードAndroidスパイウェア

Clock Icon 6 分で読めます

エグゼクティブ サマリー

Unit 42のリサーチャーは、これまで知られていなかったAndroidスパイウェア ファミリーを発見し、これを「LANDFALL」と命名しました。攻撃者はこのスパイウェアを配信するために、SamsungのAndroid画像処理ライブラリに存在するゼロデイ脆弱性(CVE-2025-21042)を悪用していました。LANDFALLが悪用した特定の脆弱性(CVE-2025-21042)は、孤立した事例ではなく、むしろ複数のモバイルプラットフォームで確認されている同様の問題の、より広範なパターンの一部です。

この脆弱性は、in-the-wild (実環境) での攻撃が報告されたことを受け、Samsungが2025年4月にパッチを適用する以前から、活発に悪用されていました。しかしながら、エクスプロイトそのもの、およびそれに使用された商用グレードのスパイウェアについては、これまで公に報告・分析されていませんでした。

「LANDFALL」は、WhatsApp経由で送信されたと見られる悪意のある画像ファイル(DNGファイル形式)に埋め込まれていました。この手口は、2025年8月に注目を集めた、AppleとWhatsAppが関与するエクスプロイトチェーンに酷似しています。また、9月に公開された類似のゼロデイ脆弱性(CVE-2025-21043)を利用して実行された可能性の高いエクスプロイトチェーンとも類似しています。私たちの調査では、WhatsAppにおける未知の脆弱性は確認されませんでした。

​​重要な点として、私たちの発見はこれらの情報公開に先行するものです。「LANDFALL」キャンペーンは、Android/Samsungのゼロデイ脆弱性(CVE-2025-21042)が修正される数ヶ月前の2024年半ばには、すでにこの脆弱性を利用して活動していました。

この脆弱性は2025年4月以降パッチが適用されているため、現在のSamsungユーザーに継続的なリスクはありません。Samsungは9月にも、同じ画像処理ライブラリの別のゼロデイ脆弱性(CVE-2025-21043)にパッチを適用し、この種の攻撃に対する保護をさらに強化しています。私たちの調査では、WhatsAppにおける脆弱性は特定されませんでした。すべての兆候から、WhatsAppはこの活動の標的に広く使用されているため、単なる配信経路としてのみ使用された可能性が高いことが示唆されています。

私たちの調査は、パッチ適用以前に発生した過去の悪用を振り返るものであり、公に報告されていなかった高度なスパイウェア運用の実態を明らかにする、稀な知見を提供するものです。

主な調査結果:

  • LANDFALLは、中東地域での標的型侵入活動で使用された、Samsung Galaxyデバイスを標的として特別に設計されたAndroidスパイウェアです。
  • LANDFALLは、マイクによる録音、位置情報の追跡、写真、連絡先、通話履歴の収集など、包括的な監視を可能にしていました。
  • このスパイウェアは、Samsungの画像処理ライブラリにおける重大なゼロデイ脆弱性であるCVE-2025-21042を悪用する、不正な形式のDNG画像ファイルを通じて配信され、in-the-wildで悪用されていました。
  • このエクスプロイト チェーンは、iOSやSamsung Galaxyで最近見られるエクスプロイト チェーンと同様に、悪意を持って細工された画像を使用し、WhatsAppを通じたゼロクリック配信を含んでいた可能性があります。
  • このキャンペーンは、中東における商用スパイウェア運用とインフラストラクチャおよび手口(tradecraft)のパターンを共有しており、民間セクターの攻撃的アクター(PSOA)との関連を示唆しています。
  • LANDFALLは、数か月にわたり検知されないまま活動を継続していました。

パロアルトネットワークスのお客様は、以下の製品およびサービスによって、より強力に保護されています。

侵害を受けた可能性や緊急の事態が疑われる場合は、Unit 42インシデント レスポンス チームまでご連絡ください。

関連する Unit 42 のトピック Samsung, 脆弱性

LANDFALLスパイウェアの発見

2025年半ば、iOSデバイスを標的とするエクスプロイト チェーンが公表された後、私たちはiOSエクスプロイトのサンプルを検索しました。これが、私たちがLANDFALLと名付けたAndroidスパイウェアの発見につながりました。

具体的には、Unit 42は、Samsung Galaxyデバイスを標的とするエクスプロイト チェーンで使用された、Androidスパイウェアを含むDNG画像ファイルのサンプルをいくつか発見しました。私たちの分析により、これらのサンプルがCVE-2025-21042を悪用してLANDFALLを配信することが確認されました。これは、メッセージング アプリケーション上のゼロクリック エクスプロイトを介して行われた可能性があります。

調査の始まり: iOSエクスプロイト チェーンと、それが私たちに疑問を抱かせた経緯

2025年8月、Appleは、攻撃者がin-the-wildで悪用したと報告されているDNG画像解析に影響するゼロデイ脆弱性CVE-2025-43300に対処するため、さまざまな製品のOSセキュリティ アップデートを発行しました。

​​同月、WhatsAppはCVE-2025-55177に関するゼロデイ脆弱性を報告しました。これは、iOSデバイスを標的とする高度な攻撃において、Appleプラットフォーム向けの画像処理の脆弱性と連鎖(チェーン)して使用されていました。このWhatsAppの脆弱性は、攻撃者が任意のURLからのコンテンツをデバイスに強制的に処理させることを可能にするものでした。

これら2つの脆弱性がエクスプロイト チェーンで組み合わされると、WhatsAppメッセージ経由で送信される悪意を持って細工された画像を介して、ゼロクリックでのリモート コード実行(RCE)が可能になりました。

このin-the-wildのエクスプロイト チェーンが開示されたものの、公に入手可能なエクスプロイト サンプルが存在しなかったため、私たちはこの活動の追跡調査を開始しました。この調査の結果、2024年から2025年初頭にかけてVirusTotalにアップロードされた、これまで未検出だった、Androidスパイウェアが埋め込まれたDNG画像ファイルをいくつか発見しました。

ファイル名(例:「WhatsApp Image 2025-02-10 at 4.54.17 PM.jpeg」および「IMG-20240723-WA0000.jpg」)から判断すると、攻撃者はこれらのサンプルをWhatsApp経由で配信した可能性が高いです。埋め込まれたスパイウェアの分析から、それがSamsung Galaxyデバイス向けに設計されていることが示唆されます。

不正な形式のDNG画像ファイル: 新たな攻撃ベクターのトレンド

私たちのLANDFALLスパイウェアの分析は、不正な形式のDNG画像ファイルの発見から始まりました。DNGはDigital Negativeの略で、TIFF画像形式に基づくRAW画像ファイル形式です。私たちが発見した不正な形式のDNG画像ファイルは、ファイルの末尾にZIPアーカイブが埋め込まれ、追加されています。図1は、これらのサンプルの1つを16進エディタで表示したもので、ファイルの終わり近くにあるZIPアーカイブ コンテンツの開始位置を示しています。

16進ビューアのスクリーンショット。「WhatsApp Image 2025-02-10 at 4.54.17 PM.jpeg」というWhatsApp画像ファイルを表示しており、ファイルデータ内に埋め込まれたZIPアーカイブの開始部分が確認できる。
図1. 不正な形式のDNG画像の例(ZIPアーカイブが埋め込まれている)

私たちの分析によると、これらのDNGファイルは、Samsungが2025年4月にパッチを適用した、Samsungの画像処理ライブラリ「libimagecodec.quram.so」の脆弱性であるCVE-2025-21042を悪用しています。このエクスプロイトは、埋め込まれたZIPアーカイブから共有オブジェクト ライブラリ(.so)ファイルを抽出し、LANDFALLスパイウェアを実行します。以下の図2は、このスパイウェアのフローチャートです。

LANDFALL Androidスパイウェアの動作フローチャート。埋め込み.zipアーカイブを含む不正な.dng画像ファイルを起点とし、ローダーコンポーネントとXZ圧縮ファイルが展開される。これが追加コンポーネントの抽出につながり、最終的にSELinuxポリシーを操作するファイルが解凍される。
図2. LANDFALLスパイウェアのフローチャート

表1は、私たちが発見したDNG画像サンプルのリストです。

SHA256 ハッシュ ファイル名 最初の確認日
9297888746158e38d320b05b27b0032b2cc29231be8990d87bc46f1e06456f93 WhatsApp Image 2025-02-10 at 4.54.17 PM.jpeg Feb. 10, 2025
b06dec10e8ad0005ebb9da24204c96cb2e297bd8d418bc1c8983d066c0997756 IMG-20250120-WA0005.jpg Jan. 20, 2025
c0f30c2a2d6f95b57128e78dc0b7180e69315057e62809de1926b75f86516b2e WhatsApp Image 2024-08-27 at 11.48.40 AM.jpeg Aug. 27, 2024
b975b499baa3119ac5c2b3379306d4e50b9610e9bba3e56de7dfd3927a96032d PHOTO-2024-08-27-11-48-41.jpg Aug. 27, 2024
29882a3c426273a7302e852aa77662e168b6d44dcebfca53757e29a9cdf02483 IMG-20240723-WA0001.jpg July 23, 2024
b45817ffb0355badcc89f2d7d48eecf00ebdf2b966ac986514f9d971f6c57d18 IMG-20240723-WA0000.jpg July 23, 2024

表1. マルウェアが埋め込まれたDNGファイル。

WhatsApp Image」や「WA000」といった文字列を含むファイル名は、攻撃者が埋め込まれたAndroidスパイウェアをWhatsApp経由で配信しようとした可能性を示唆しています。これは、Appleデバイスを標的としてWhatsAppを通じて行われた、同様のDNG画像ベースの悪用に関する以前の公開レポートと一致します。​​さらに、WhatsAppの研究者は、類似のDNG脆弱性であるCVE-2025-21043を特定し、Samsungに報告しています。

LANDFALLスパイウェアの配布:モバイルデバイスマルウェアのエクスプロイトチェーン

通常、エクスプロイトを通じて配布されるモバイルデバイスのマルウェアは、感染を成功させるために、異なる脆弱性にまたがるエクスプロイトチェーンを必要とします。スパイウェア配布時に少なくとも2つの脆弱性が利用されるケースは様々な調査で報告されていますが、現代のスパイウェアのエクスプロイトチェーンははるかに複雑化しており、複数の脆弱性を連鎖させてモバイルデバイスを侵害し、権限を取得します。

現時点では、この活動に関連するこれ以上のエクスプロイトは確認されていません。

このエクスプロイトチェーンおよび類似のチェーンに関与する既知の脆弱性に関する詳細な説明については、後述の「LANDFALLの全体像」のセクションを参照してください。

LANDFALLスパイウェアの分析

LANDFALLは、Samsung Galaxyデバイス専用に設計されたAndroidスパイウェアであり、中東地域での標的型侵入活動で使用された可能性が高いです。このモジュール型スパイウェアは、スパイ活動とデータ窃取のために作られています。

​​LANDFALLの感染チェーンには、Samsungの画像処理ライブラリの脆弱性であるCVE-2025-21042(ベンダーによりSamsung Vulnerabilities and Exposures (SVE) 識別子 SVE-2024-1969 として追跡)のエクスプロイトが含まれます。私たちは、完全な攻撃チェーンは、不正な形式のDNG画像の配信から始まり、潜在的なゼロクリックのリモートコード実行へと続くパターンをたどると考えています。

LANDFALLスパイウェアの2つのコンポーネントが、不正な形式のDNG画像内に埋め込まれており、エクスプロイトが成功すると抽出・実行されます。

  • ローダー (b.so): ARM64 ELF共有オブジェクト(106 KB、ストリップ済み、動的リンク)。メインのバックドアとして機能します。
  • SELinuxポリシー操作コンポーネント (l.so): XZ圧縮されたELFバイナリから抽出されるこのコンポーネントは、デバイスのSELinuxポリシーを操作してLANDFALLに昇格された権限を付与し、永続化を助けるように設計されています。(付録A - SELinuxポリシーの操作)

表2は、悪意のあるDNGサンプルに埋め込まれたLANDFALLコンポーネント ファイルを示しています。

SHA256 ハッシュ LANDFALLコンポーネント 最初の確認日
ffeeb0356abb56c5084756a5ab0a39002832403bca5290bb6d794d14b642ffe2 b.so コンポーネント July 23, 2024
d2fafc7100f33a11089e98b660a85bd479eab761b137cca83b1f6d19629dd3b0 b.so コンポーネント Aug. 27, 2024
a62a2400bf93ed84ebadf22b441924f904d3fcda7d1507ba309a4b1801d44495 b.so コンポーネント Jan. 23, 2025
384f073d3d51e0f2e1586b6050af62de886ff448735d963dfc026580096d81bd b.so コンポーネント Feb. 10, 2025
211311468f3673f005031d5f77d4d716e80cbf3c1f0bb1f148f2200920513261 XZ圧縮ファイル(l) (SELinuxポリシー操作コンポーネント用) July 23, 2024
69cf56ac6f3888efa7a1306977f431fd1edb369a5fd4591ce37b72b7e01955ee SELinuxポリシー操作コンポーネント(l.so) (XZ圧縮ファイルから抽出) July 23, 2024

表2. DNG画像ファイルに埋め込まれたLANDFALLコンポーネント。

私たちの分析によると、LANDFALLは監視とデータ窃取のために設計された、マルチコンポーネントのAndroidスパイウェアです。

私たちの分析は、より広範なLANDFALLフレームワークの初期ローダーとして機能するb.soコンポーネントに焦点を当てています。このコンポーネントは、それ自身のデバッグ成果物の中で、自身を「Bridge Head」と呼んでいます。これは、後でLANDFALLと既知のスパイウェア グループとの間の潜在的な関係について議論する際に、興味深い点となります。

LANDFALLの潜在的な機能

LANDFALLのb.soコンポーネントには、多数のデバッグ文字列やステータス文字列が含まれていますが、これらの文字列のほとんどを実際に参照するロジックは含まれていません。これは、b.soがこれらの機能のために追加のコンポーネントをダウンロードすることを示唆しています。b.soファイル内に埋め込まれたコマンド文字列と実行パスの分析から、より広範なLANDFALLの潜在的な機能についての洞察が得られます。

バイスのフィンガープリンティング

  • OSバージョン
  • ハードウェアID (IMEI)
  • SIM/サブスクライバーID (IMSI)
  • SIMカードのシリアル番号
  • ユーザー アカウント
  • ボイスメール番号
  • ネットワーク設定
  • インストールされているアプリケーションのインベントリ作成
  • 位置情報サービスへのアクセス
  • VPNステータス
  • USBデバッグ ステータス
  • Bluetooth

データ窃取

  • マイクによる録音
  • 通話の録音
  • 通話履歴
  • 連絡先データベース
  • SMS/メッセージング データ
  • カメラの写真
  • 任意のファイル
  • デバイス上のデータベース(閲覧履歴など)

実行、読み込み、永続化

  • ネイティブ共有オブジェクト(.so)モジュールの読み込み
  • メモリおよびディスクからのDEXファイルの読み込みと実行
  • プロセスへのインジェクション
  • LD_PRELOADによる実行
  • 任意のコマンドの実行
  • SELinuxの操作
  • 永続化
  • 圧縮バイナリによるSELinuxポリシーの変更
  • 追加ペイロードのためのWhatsApp Mediaディレクトリの監視
  • WhatsApp Webクライアントの登録
  • Androidアプリ ディレクトリ内のファイル システムの操作
  • ファイル システムの操作

検出回避と防御回避

  • TracerPidデバッガーの検出
  • Frida計装フレームワークの検出
  • Xposedフレームワークの検出
  • 名前空間操作を伴う動的ライブラリ読み込み
  • C2通信のための証明書ピニング(Certificate Pinning)
  • WhatsApp画像ペイロードのクリーンアップ

標的デバイスモデル

  • Galaxy S23 シリーズ (S91BXX.*)
  • Galaxy S24 シリーズ (S921BXXU1AWM9, S92BXX.*)
  • Galaxy Z Fold4 (F936BXXS4DWJ1)
  • Galaxy S22 (S901EXXS4CWD1)
  • Galaxy Z Flip4 (F721BXXU1CWAC)

図3は、LANDFALLのb.soサンプルに含まれる、標的デバイスモデルの文字列の例です。

16進エディタソフトウェアのスクリーンショット。16進数の値と対応するASCII文字が表示されており、選択部分が赤枠で強調表示されている。
図3. LANDFALL b.so サンプルの16進エディタ表示(標的デバイスモデル番号が示されている)。

C2通信

LANDFALLのb.soコンポーネントは、非標準の短命な(ephemeral)TCPポートを使用して、HTTPS経由でC2サーバーと通信します。HTTPSトラフィックの前に、付録Bの「C2サーバーとの通信」セクションで詳述するように、pingトラフィックを開始することがあります。HTTPSトラフィックの場合、b.soは以下のような詳細なデバイス情報とスパイウェア情報を含むPOSTリクエストで通信を開始します。

  • エージェントID
  • デバイス パス
  • ユーザーID

図4は、この最初のPOSTリクエストの解釈を示しており、このリクエストがどのように構成されるかをcurlを使用して示しています。(注: LANDFALLはこのトラフィックを生成するためにcurlを使用しているわけではありません。)

curlコマンドが実行されているターミナルウィンドウのスクリーンショット。APIへのアクセスに使用され、user-agentやcontent-typeといった各種ヘッダーが指定されている。
図4. b.soが最初にC2サーバーに接続する際のHTTP POSTリクエストの構造。

最初のビーコン トラフィックは、以下のパラメーターを含むC2サーバーへのHTTP POSTリクエストです。

  • protocol: プロトコル バージョン (例: A1.5.0)
  • protocol_ver: プロトコル バージョン (例: "")
  • type: メッセージ タイプ (例: MSG_TYPE_GET_AGENT)
  • agent_id: エージェントの一意の識別子
  • upload_id: アップロード識別子
  • command_id: コマンド識別子
  • source: リクエストのソース (例: bridge_head)
  • incremental_build: インクリメンタル ビルド バージョン (例: v1.5.0)
  • euid: プロセスの実効ユーザーID
  • bh_path: デバイス上のb.soバイナリへのパス
  • runner: ランナー モード (例: I)

b.soファイルの設定

b.soファイルの設定は、ハードコードされたデフォルト値と、それ自体に埋め込まれた暗号化されたJSONオブジェクトの組み合わせによって管理されます。この設定には、C2の詳細、暗号化キー、エージェントとコマンドの一意の識別子が含まれます。

図5は、この設定の例です。

コードスニペットのスクリーンショット。IPアドレス、ID、ファイルパスなど様々なキーと値が含まれており、Samsungデバイス固有の情報への言及が見られる。
図5. LANDFALLの設定例。

このLANDFALLのb.soコンポーネントには、多数のハードコードされた設定値も含まれています。これらは、暗号化されたJSONオブジェクトで提供されない場合のデフォルト値として使用されます。これらの値のいくつかの目的については、まだ完全には理解していません。表3は、これらのハードコードされたデフォルト設定値を示しています。

フィールド名 デフォルト値
allow_wifi true
allow_mobile true
allow_roaming false
socket_timeout 5
sleep_time 60 (0x3c)
sleep_time_between_retries 35 (0x23)
suicide_time 7200 (0x1c20)
live_mode_expiration 0
allow_min_battery 0
is_persistent false

表3. LANDFALLマルウェアのハードコードされたデフォルト設定値。

LANDFALLスパイウェアのC2インフラストラクチャ

これらのサンプルの分析に基づき、私たちはLANDFALLのC2サーバーを6つ特定しました。これらを以下の表4に示します。

IPアドレス ドメイン 最初の確認日 後の確認日
194.76.224[.]127 brightvideodesigns[.]com Feb. 7, 2025 Sept. 19, 2025
91.132.92[.]35 hotelsitereview[.]com Feb. 3, 2025 Sept. 16, 2025
92.243.65[.]240 healthyeatingontherun[.]com Oct. 11, 2024 Sept. 2, 2025
192.36.57[.]56 projectmanagerskills[.]com Feb. 3, 2025 Aug. 26, 2025
46.246.28[.]75 不明 不明 不明
45.155.250[.]158 不明 不明 不明

表4. LANDFALLのC2サーバー。

LANDFALLが全体像の中でどのように位置づけられるか

LANDFALLは、DNG画像処理の脆弱性に関連し、モバイル デバイスに影響を与える、より大きなエクスプロイト チェーンのパターンの1つの例です。

LANDFALLキャンペーンによる不正な形式のDNGファイルの使用は、重要かつ繰り返し発生する攻撃ベクター、すなわちDNG画像処理ライブラリ内の脆弱性を標的とすることを浮き彫りにしています。LANDFALLが-悪用した特定の欠陥であるCVE-2025-21042は、孤立したケースではなく、複数のモバイル プラットフォームで見つかった同様の問題の広範なパターンの一部です。実際、2025年早期にSamsungは、同じSamsungライブラリにおける別のDNGの欠陥CVE-2025-21043を特定しました。また、iOS上では、Apple iOSのCVE-2025-43300とWhatsAppのCVE-2025-55177を利用した、並行するエクスプロイトチェーンが特定されました。

CVE-2025-21043 (SVE-2025-1702) との関連性

私たちの分析により、Samsungが2025年9月のセキュリティアップデートで修正した、同じライブラリ内の別の脆弱性CVE-2025-21043(SVE-2025-1702)との関連性が示唆されました。私たちが発見したLANDFALLサンプルでは悪用されていませんでしたが、LANDFALLのエクスプロイト(CVE-2025-21042)とこの脆弱性(CVE-2025-21043)との類似点は顕著です。両方の脆弱性はほぼ同時期に公表されており、どちらもモバイル通信アプリケーション経由で配信されるDNG画像ファイル処理に関連しています。

AppleのCVE-2025-43300

2025年8月、Appleは、DNG画像パーシングに影響を与えるゼロデイ脆弱性CVE-2025-43300に対処しました。これはイン・ザ・ワイルドで活発に悪用されており、モバイル通信アプリケーション経由で送信される悪意のある画像を通じて、ゼロクリックのリモートコード実行を可能にするものでした。

このチェーンがiOSにLANDFALL相当のものを配信するために使用されたのか、あるいは両者の背後にいるのが同一の脅威アクターなのかは確認できません。しかし、iOSエコシステムにおけるこの並行した開発は、SamsungとAppleの脆弱性がわずか数週間違いで公表されたことと相まって、高度なモバイルスパイウェア攻撃においてDNG画像処理の脆弱性が利用されているという、より広範なパターンを浮き彫りにしています。

2024年から2025年にかけて発生した主要なサイバーセキュリティ事象を示すタイムライン図。VirusTotal、Samsung、Apple、WhatsAppなどの組織が関与。主な事象には、2024年7月にVirusTotalで悪意のあるDNGファイルが発見された件、およびSamsungとAppleが様々な脆弱性に対応して実施した更新とパッチが含まれる。タイムラインは2024年7月から2025年9月まで
図6. 最近の悪意のあるDNG画像ファイルと関連するエクスプロイト活動のタイムライン。
  • 2024年7月~2025年2月:LANDFALLを搭載した悪意のあるDNG画像ファイルの初期サンプルが2024年7月に初めてVirusTotalに提出され、その後数か月にわたって追加のサンプルが定期的に出現。
    • これらのDNGファイルは、SamsungのAndroid画像処理ライブラリの脆弱性を悪用 (SVE-2024-1969, CVE-2025-21042)。
  • 2024年9月25日: 後にCVE-2025-21042となる脆弱性が、Samsungに非公開で報告される。
  • 2025年4月: Samsungが脆弱性SVE-2024-1969(後に公表された際にCVE-2025-21042として知られる)に対処するためのファームウェアアップデートを発行
  • 2025年8月: 並行していくつかの動きが発生。
    • Appleが、イン・ザ・ワイルドで活発に悪用され、WhatsAppの脆弱性(CVE-2025-5177)と連鎖していた、DNG画像パーシングに影響を与えるゼロデイ脆弱性(CVE-2025-43300)を修正。
    • WhatsAppが、AppleのDNG画像パーシングのゼロデイ脆弱性(CVE-2025-43300)と連鎖していた脆弱性(CVE-2025-55177)を公表。
    • 私たちが、CVE-2025-21042を悪用してLANDFALLと特定したAndroidスパイウェアを配信するDNG画像ファイルを発見。
    • Samsungが、別のDNG関連のゼロデイ脆弱性であるCVE-2025-21043を公表。
  • 2025年9月: Samsungが、CVE-2025-21043 (SVE-2025-1702) に対するモバイル デバイス ファームウェア アップデートを発行。同時に、以前はCVE識別子がなかった脆弱性に対し、CVE-2025-21042 (SVE-20254-1969) を割り当て。

潜在的な被害者

悪意のあるDNGファイルのVirusTotalへの送信データの分析から、イラク、イラン、トルコ、モロッコが潜在的な標的であったことが示唆されます。

トルコの国家CERT (トルコ語でUSOM) は、LANDFALLのC2サーバーによって使用されるIPアドレスを、悪意のある、モバイル関連、およびAPT関連として報告しており、これもトルコの被害者が標的にされた可能性を裏付けています。

既知のスパイウェア グループとの関係

LANDFALLフレームワークのすべてのコンポーネントを復元することはできませんでしたが、このツールが商用グレードであることは明らかです。その感染チェーンでは、いくつかのゼロデイ エクスプロイトが利用された可能性があります。

このようなツールは、しばしば商用スパイウェアとして開発・販売され、民間セクターの攻撃的アクター(PSOA)として知られるグループに帰属されます。これらのグループは、多くの場合、合法的な法人です。報告によると、これらのグループは政府機関にサービスを提供しています。

現時点で、LANDFALLの活動を既知のPSOAまたは脅威アクターに正式に帰属させることはできませんでした。Unit 42は、CVE-2025-21042とLANDFALLに関連する活動をCL-UNK-1054として追跡しています。

2つの点が注目に値し、強調する価値があります。

第一に、LANDFALLのC2インフラストラクチャとドメイン登録パターンは、Unit 42によって観測されたStealth Falconに関連するインフラストラクチャと類似点を共有しています。これらの類似点は、さまざまな公開 レポートや、私たちが中東の標的に対して分析したStealth Falconの活動に基づいています。

第二に、私たちが分析したスパイウェア コンポーネントは、それ自身のデバッグ成果物の中で、自身を「Bridge Head」と呼んでいます。注目すべきことに、「Bridge Head」という用語は、一部の民間セクターの攻撃的サイバー企業(NSO、Variston、Cytrox、Quadreamなど)によって、第1ステージのローダーに使用される一般的なニックネームです。しかし、この命名規則だけでは、直接的な帰属のリンクとはなりません。

これは商用モバイルスパイウェアでローダーを説明するために使用される一般的な名前ですが、Heliconicaフレームワークとの類似性を引き出します。Google TAGがスパイウェア ベンダーVaristonについて報告したように、このフレームワークにも「BridgeHead」への言及が含まれています。Googleは、Varistonをバルセロナを拠点とするPSOA (エクスプロイトのプロバイダー) と特定しました。Googleや他のレポートによるさらなる分析では、VaristonのツールはProtect Electronic Systems (またはProtected AE) という名前の再販業者を通じて、UAE(アラブ首長国連邦)のクライアントに供給されていたことが示されました。

UAEへのこの潜在的なプロバイダーとクライアントのリンクは注目に値します。Microsoftその他の報告によると、Stealth Falconもまた、その国(UAE)を拠点に活発に活動しています。Varistonは、公に暴露された後、2025年初頭に事業を停止したと報告されています。

2025年10月現在、インフラストラクチャを除き、LANDFALLのモバイル キャンペーンとStealth Falconのエンドポイント ベースの活動との間に直接的な重複は観測されておらず、Stealth Falconとの直接的な強いつながりも観測されていません。しかし、これらの類似点は議論に値します。

結論

LANDFALLスパイウェアの発見により、Samsung製Androidデバイスを標的とした攻撃活動が明らかになりました。このエクスプロイトチェーンには、Samsungが2025年4月に修正(パッチ適用)した脆弱性であるCVE-2025-21042が関与しています。WhatsApp関連の命名規則を持つDNG画像ファイル内にこのスパイウェアが存在することから、攻撃者がメッセージングアプリケーション経由でエクスプロイトを配信しようと試みた可能性が高いと考えられます。

2024年7月のサンプルの最初の出現から、この活動は、高度なエクスプロイトが完全に理解される前に、長期間にわたって公開リポジトリに存在し続ける可能性があることを浮き彫りにしています。

ローダーの分析から、商用グレードの活動の証拠が明らかになりました。LANDFALLスパイウェアのコンポーネントは、最新のSamsungデバイスからのステルス性、永続性、および包括的なデータ収集のための高度な機能を示唆しています。

ただし、私たちはスパイウェアの次ステージのコンポーネントを直接分析してはいません。これに関する追加の詳細や、正確な配信方法に関する詳細があれば、悪意のある活動についてさらに深い洞察が得られるでしょう。

パロアルトネットワークスのお客様は、以下の製品によってLANDFALL Androidスパイウェアからより強力に保護されています。

  • Advanced WildFireの機械学習モデルと分析技術は、この調査で共有された指標に照らしてレビューされ、更新されています。
  • Advanced URL FilteringおよびAdvanced DNS Securityは、この活動に関連する既知のドメインとURLを悪意のあるものとして識別します。
  • Advanced Threat Preventionには、エクスプロイトをリアルタイムで検出できる、機械学習ベースの検出機能が組み込まれています。

侵害を受けた可能性や緊急の事態が疑われる場合は、Unit 42インシデント レスポンス チームにご連絡いただくか、以下の番号までお電話ください。

  • 北米: フリーダイヤル: +1 (866) 486-4842 (866.4.UNIT42)
  • 英国: +44.20.3743.3660
  • ヨーロッパおよび中東: +31.20.299.3130
  • アジア: +65.6983.8730
  • 日本: +81.50.1790.0200
  • オーストラリア: +61.2.4062.7950
  • インド: 000 800 050 45107

パロアルトネットワークスは、これらの調査結果をCyber Threat Alliance (CTA) のメンバーと共有しています。CTAメンバーはこのインテリジェンスを活用し、顧客への保護を迅速に展開し、悪意のあるサイバー攻撃者を組織的に妨害します。Cyber Threat Allianceの詳細をご覧ください。

侵害の兆候(Indicators of Compromise)

マルウェア サンプル

LANDFALL活動のマルウェア サンプルのリストを以下の表7に示します。

SHA256 ハッシュ ファイル名 サイズ
b06dec10e8ad0005ebb9da24204c96cb2e297bd8d418bc1c8983d066c0997756 img-20250120-wa0005.jpg 6.66 MB
c0f30c2a2d6f95b57128e78dc0b7180e69315057e62809de1926b75f86516b2e 2.tiff 6.58 MB
9297888746158e38d320b05b27b0032b2cc29231be8990d87bc46f1e06456f93 whatsapp image 2025-02-10 at 4.54.17 pm.jpeg 6.66 MB
d2fafc7100f33a11089e98b660a85bd479eab761b137cca83b1f6d19629dd3b0 b.so 103.31 KB
384f073d3d51e0f2e1586b6050af62de886ff448735d963dfc026580096d81bd 103.31 KB
b975b499baa3119ac5c2b3379306d4e50b9610e9bba3e56de7dfd3927a96032d 1.jpeg 5.66 MB
a62a2400bf93ed84ebadf22b441924f904d3fcda7d1507ba309a4b1801d44495 103.31 KB
29882a3c426273a7302e852aa77662e168b6d44dcebfca53757e29a9cdf02483 img-20240723-wa0001.jpg 6.58 MB
2425f15eb542fca82892fd107ac19d63d4d112ddbfe698650f0c25acf6f8d78a 6357fc.zip 380.71 KB
b45817ffb0355badcc89f2d7d48eecf00ebdf2b966ac986514f9d971f6c57d18 img-20240723-wa0000.jpg 5.65 MB
69cf56ac6f3888efa7a1306977f431fd1edb369a5fd4591ce37b72b7e01955ee localfile~ 1.42 MB
211311468f3673f005031d5f77d4d716e80cbf3c1f0bb1f148f2200920513261 l 332.88 KB
ffeeb0356abb56c5084756a5ab0a39002832403bca5290bb6d794d14b642ffe2 103.31 KB

表7. LANDFALL活動のマルウェア サンプル。

IPアドレス

  • 45.155.250[.]158
  • 46.246.28[.]75
  • 91.132.92[.]35
  • 92.243.65[.]240
  • 192.36.57[.]56
  • 194.76.224[.]127

ドメイン名

  • brightvideodesigns[.]com
  • healthyeatingontherun[.]com
  • hotelsitereview[.]com
  • Projectmanagerskills[.]com

追加リソース

付録

付録A: SELinuxポリシーの操作

LANDFALLのSELinuxポリシー操作用コンポーネントはl.soです。このファイルは、システムのセキュリティ制御をバイパスする機能を提供します。これは/data/data/com.samsung.ipservice/files/lから/data/data/com.samsung.ipservice/files/l.soに展開(decompress)され、実行されます。

l.soは、ハードコードされたルールを含むのではなく、外部ソースから新しいSELinuxポリシーステートメントを動的に解析して読み込み、実行中のポリシーをメモリ内で変更できる汎用エンジンを実装しています。

関連する独自の(unique)エクスポート関数:

  • sepolicy_from_data: バイナリデータからポリシーを読み込む
  • sepolicy_add_statement: 個々のポリシーステートメントを追加する
  • sepolicy_to_buffer: 変更されたポリシーをシリアライズする
  • sepolicy_delete: ポリシーオブジェクトをクリーンアップする

付録B: LANDFALLスパイウェア分析に関する追加詳細

この付録では、LANDFALLのローダー コンポーネントで観測された機能と、私たちがまだアクセスできていない完全なLANDFALLフレームワークの他のモジュールに存在すると推測される機能について詳述します。

LANDFALLの「Bridge Head」は、ディスク上ではb.soという名前で、デバイス上のエクスプロイトによって読み込まれます。エクスプロイト直後に読み込まれると、LANDFALLは環境変数からLD_PRELOADを解析し、上流のプリロードを継承しないようにします。geteuid()を介して実効ユーザーIDを読み取り、後のブランチがrootか非rootかで動作を調整できるようにグローバルに保存します。その後、メインルーチンを呼び出します。

プロセス基本情報(親pid、euid、Androidビルド文字列)を収集し、環境変数Rからランナーフラグを読み取り、後のアクションのためにそのコピーを取得します。この値(通常、インタラクティブの場合はI、パッシブの場合はP)はコマンド&コントロール(C2)に報告され、後でステージングされるペイロードをどのように起動するかを決定します。自身のマップされたパスを解決し、アプリプライベートなベースである/data/data/com.samsung.ipservice/files/を作業ディレクトリとして選択し、そこに2つの子パスを構築します。1つのパスはステージングされたダウンロード用、もう1つのパスは実行に使用される最終的なl.so用です。

設定

LANDFALLは、自身のファイルから直接JSON設定を読み取り、XORで復号します。スパイウェアは、解析されたオブジェクトに内部のデフォルト値を書き戻すことによって設定を正規化します。数値フィールドは、欠落しているかゼロの場合にデフォルト値が設定され、特定のブール値は、提供された設定に関係なく固定値に強制されます。最後に、設定に公開鍵(X.509 DER)が存在することを確認し、存在しない場合は終了します。

表9は、この段階で実行される設定の正規化をまとめたものです。

キー名 値の型 デフォルト値 必須
allow_wifi boolean 強制的にtrue (false/欠落をtrueに上書き) いいえ
allow_mobile boolean 強制的にtrue (false/欠落をtrueに上書き) いいえ
allow_roaming boolean 欠落/falseの場合はデフォルトfalse。trueはtrueのまま いいえ
allow_min_battery integer 値が0または欠落の場合は0 いいえ
sleep_time integer (seconds) 値が0または欠落の場合は60 いいえ
sleep_time_between_retries integer (seconds) 値が0または欠落の場合は35 いいえ
suicide_time integer (seconds) 値が0または欠落の場合は7200 いいえ
live_mode_expiration integer (seconds) 値が0または欠落の場合は0 いいえ
socket_timeout integer (seconds) 値が0または欠落の場合は5 いいえ
is_persistent boolean 欠落/falseの場合はデフォルトfalse。trueはtrueのまま いいえ
bridge_head_version_major integer 常に2にハードセット いいえ
bridge_head_version_minor integer 常に1にハードセット いいえ
cnc_hostname string なし。存在する必要あり はい
cnc_port integer なし。ゼロ以外である必要あり はい
cnc_base_url string なし。存在する必要あり はい
agent_id string (UUID) なし。存在する必要あり はい
command_id string (UUID) なし。存在する必要あり はい
commands array 存在する必要あり。読み取られて解放される(構造はここでは保持されない) はい
public_key X.509 DER (bytes) なし。存在し、有効である必要あり はい

表9. LANDFALLマルウェアのキーと値。

C2サーバーとの通信

設定が完了すると、b.soは必要なネットワーク機能と暗号化関数を読み込み、SSL環境をセットアップし、将来のHTTPS通信のためにセキュアなクライアント コンテキストを準備します。このセットアップのいずれかの部分が失敗した場合、部分的なセットアップをリスクにさらすのではなく、クリーンに終了します。

C2ビーコン ループに入る前に、オプションでテレメトリを送信します。rootとして実行されている場合、「started」ラインを簡潔にフォーマットします。これには以下が含まれます。

  • 固定バージョン マーカー (例: v1.5.0)
  • pid
  • euid
  • ランナー モード

その後、以下に示すように、POSTリクエストを介してC2サーバーに送信します。

C2サーバーへのPOSTリクエスト

ランナー モードがIの場合、最初にSELinuxヘルパーを準備します。圧縮されたポリシー ヘルパー(/data/data/com.samsung.ipservice/files/l)を見つけ、内部のXZデコーダーを介して新しいバッファに展開(inflate)し、結果をdata/data/com.samsung.ipservice/files/l.soに書き込みます。次に、ペイロードとしてハイフンを除去したagent_idを使用してpingを送信することにより、C2サーバーにビーコンを送信します。この結果は残りのフローを妨げるものではなく、オペレーターのテレメトリとして機能します。

Iモードのpingのコード例は以下の通りです。

ホストサーバーへの「I-ping」コード例

その後初めて、メインのC2ビーコン ループが開始されます。時刻ゼロを記録し、セッション全体に対して約7,200秒(suicide_time)の厳格な実時間(wall-clock)バジェットを強制します。

2つの大きな再利用可能なパス バッファをゼロクリアします。1つはサーバーから到着する可能性のある生のブロブ用、もう1つは展開された共有オブジェクト用の兄弟パスです。両方のパスは、アプリプライベートな作業ディレクトリ(例: /data/data/com.samsung.ipservice/files/)配下に存在します。パスの準備が整うと、key=valueペアのコンパクトなURLエンコード スタイルのボディを構築して、コマンド&コントロール サーバーに接続します。

  • プロトコル/バリアント タグ。ビーコン メッセージ タイプ
  • agent_id、command_id、および相関のための新しいupload_id (UUIDv4)
  • source=bridge_head
  • Euid
  • ランナーフラグと、そのディスク上のインストール パス

該当する場合、メッセージの一部に対してSHA-1を計算し、それを追加します。以下のChrome User-Agent文字列を使用します。

  • Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36.

リクエストは、設定されたベース パス(例: POST /is/ HTTP/1.0)に向けられます。アプリケーション データが送信される前に、TLS接続をピニング(pin)します。

C2サーバーからのレスポンスを読み取る際、LANDFALLはレスポンスのステータス コードをチェックし、ヘッダーを調べてメッセージの長さとタイプを判別します。一部のステータス コード、特にタイムアウトやマスクされた4xx/5xxセット(例: 408、504)は、一時的なものとして扱われ、sleep(sleep_time_between_retries) (デフォルト35秒) の後に新しい接続で再試行をトリガーします。not-foundレスポンス(例: 404)は、この実行では最終的なものと見なされ、ループを終了します。ステータスが成功を示し、ボディが存在する場合、LANDFALLはステージングに進みます。

次ステージのペイロード

ステージングは、ファイル システムの状態をクリーンアップすることから始まります。古い生のブロブが一時パスに存在する場合、それを削除します。生のバイトをaa.soという名前のステージング ファイルに作業ディレクトリ配下に書き込み、次に、組み込みのXZ/LZMAデコーダーを使用してそれらを展開しようとします。これは、事前に割り当てられた約5MBのバッファに展開されます。

成功すると、展開されたバイトを作業ディレクトリ配下のdec_a.so (最終的な.soパス) に書き込み、一時的なaa.soをクリアし、dec_a.soのファイル モードを777に設定して、さまざまなコンテキストで読み込み可能であることを保証します。

XZ展開(inflater)の例 (一部省略):

所定のサイズに展開(inflate)するインフレーター

共有オブジェクト(dec_a.so)が配置されると、ランナーフラグに基づいて実行戦略を選択します。インタラクティブなセットアップ(I)の場合、2つの環境変数をエクスポートし、無害なシステム ツールを同期的に起動します。

  • LD_PRELOAD=<final.so> PRELOAD_PATH=/data/data/com.samsung.ipservice/files/l.so /system/bin/id (ここで <final.so> は dec_a.so です)

PRELOAD_PATHは、SELinuxポリシー コンテンツが期待されるデバイス パスを指しており、プリロードされたコードが起動時にポリシーを見つけて適用できるようにします。このPRELOAD_PATHはインタラクティブ モードでのみ使用され、パッシブな実行パスでは省略されることに注意してください。

パッシブな実行(P)の場合、同じツールをバックグラウンドで起動します。

  • LD_PRELOAD=<final.so> /system/bin/id (ここで <final.so> は dec_a.so です)

これは、ヘルパーが別のプロセスで初期化されている間に、制御が迅速に戻るようにするためです。内部的には、どちらもシェル ラッパー(/system/bin/sh -c <cmd>)を介してディスパッチされます。どちらの場合も、狭い範囲の成功結果のみを受け入れます。

  • 終了コード0または特定の0x15。それ以外は失敗として扱われ、ループを抜けます

読み込みが成功すると、開始メッセージを反映した「ended」ラインをフォーマットして送信します。これには以下が含まれます。

  • バージョン マーカー
  • pid
  • incremental_build
  • runner

コードスニペット

その後、一時的な文字列とバッファを解放します。ペイロードが利用できなかった場合、または一時的なエラーが発生した場合、経過した実時間(wall-clock time)を約7,200秒のバジェットと比較します。時間が残っている場合は、設定された間隔でスリープし、再試行します。

最後に、次ステージの読み込みが成功した後、または時間切れや回復不可能なエラーによりループが終了すると、クリーンに巻き戻します。rootとして実行されている場合、ランタイムでの副作用を最小限に抑えるために、通常のreturnの代わりに直接_exit(status)パスを好みます。すべての場合において、ステージングされたコードが継続するために必要な最小限の成果物のみを残すことを目指します。

未参照の機能

リバースエンジニアリングの過程で、b.so コンポーネント内に、観測された制御フローからは呼び出されない複数のルーチンがコンパイルされていることを確認しました。これらの潜在機能は、後続でロードされるモジュールによって使用されるよう設計されていると見られます。

また、これらの関数の一部は、LANDFALLの古いバージョンからの残り物である可能性も非常に高いです。それらは、WhatsAppメディア パス、DCIMの発見、ファイル システムのステージング、およびAndroid上のプロセス衛生(process hygiene)を中心とした具体的な動作を明らかにします。

  • あるルーチンは「started」テレメトリ ラインを準備し、その後デバイスのメディア サブシステムと対話します。以下のラインをフォーマットします。
    • BH v1.5.0 started - pid: , euid=, incremental_build: v1.5.0, runner:
  • 内部チェックに合格すると、以下の厳密なシェルを使用してギャラリーの再スキャンを強制するブロードキャストを実行します。
    • am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/hacked.jpg
  • 同じフローで、以下を使用してDCIM上の「最新の写真」プローブも構築します。
    • find /sdcard/DCIM -type f -exec ls -t1 {} + | grep -v hacked| head -1
    • このパターンは、自身が仕掛ける可能性のある成果物を除外しながら、最新のカメラ アイテムを収集することと一致しています。このルーチンはコンパイルされていますが、サンプル内の他のどのコードからも呼び出されていません。
  • WhatsAppメディア パス プランター。別のルーチンは、ハードコードされたBase64 1x1 PNG (iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJ…JRU5ErkJggg==) をデコードし、エージェントの識別子(UUIDはまずハイフンが除去される)と一致する最近のファイル パスを求めて、外部ストレージ上のWhatsAppのメディア ディレクトリを検索します。デフォルト(ID 0)とマルチユーザー(ID 95)の両方のパスにまたがる検索パイプラインを構築して実行します。
    • find /storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp\ Images/ /storage/emulated/95/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp\ Images/ -type f -atime -720m -maxdepth 1 -exec grep -lo '.*\<agentIdNoHyphens>.*' {} \; -quit 2>/dev/null.
    • そのようなパスが返された場合、デコードされたPNGをそのままそこに書き込みます。これは、WhatsApp画像を特に狙った、隠蔽用の成果物または秘密のマーカー ステージのように見えます。
  • 別のヘルパーは、ベース ディレクトリと文字列を受け取り、以下を実行して、一致する1つのJPEGパスを返します。
    • find <base> -name '*.jpg' -exec grep -le '.*\<pattern>.*' {} \;
    • 返す前に、末尾の改行をトリムし、パスが存在することを確認します。
  • Zygote回避チェック: プロセス衛生ヘルパーは、自身のcmdline用にバッファを割り当て、名前がzygoteまたはzygote64と一致しない場合にのみ成功を返します。これは、Androidの特別なホスト プロセスを回避するように設計されています。
  • SELinuxシンボル リゾルバーとクリーンアップ: 2つの小さなルーチンが、動的なSELinux関連の処理(plumbing)を扱います。
    • 1つは /system/lib64/libselinux.so を dlopen し、getfileconsetfilecon をグローバル関数ポインターに解決(resolve)します。
    • もう1つは、これを破棄し、ポインターをクリアします。
    • 両方ともポリシー/ファイル コンテキストの作業をサポートするために存在しますが、観測されたコード パスからは参照されていません。
  • より実質的なルーチンは、ファイル システム パスのリストを受け入れます。それぞれについて、getfileconを介して現在のラベルを保存し、パス上で内部ラベラーを呼び出し、chownを介して所有権を適用し、その後setfileconで保存したラベルを復元します。chownまたはsetfileconが失敗した場合、個別の負のコードを返します。
  • パスを開こうとし、その結果を内部ステータス コード(成功、許可拒否、見つからない、汎用エラー)にマップするファイル プローブがあります。また、(以前に開かれたSELinuxハンドルを含む)内部ライブラリの状態をリセットします。
  • プロセス実行結果をメッセージ ステータスにマップ: 小さなマッパーが、内部のコマンド実行ヘルパーの結果をメッセージ カタログ コードに変換します(例: 特定の戻り値(1)をCMD_STAT_*コード0x0Cに、2-3を0x51にマッピング)。ヘルパーのレポートを標準化しますが、現在のロジックからは到達しません。
  • デバイス レポートJSON配列の構築: 別の休止中のルーチンは、cJSON配列を構築します。各エントリは、device_path、Base64エンコードされたバイナリ フィールド、last_updatedブール値、および内部CMD_STAT_*テーブルから派生したテキスト状態を持ちます。入力ベクターをウォークし、参照されたファイルをメモリに読み込み、Base64エンコードして、配列に追加します。
  • 小さな文字列テンプレート ヘルパーは、JSON値内のトークン--working_dir--の出現を見つけ、それをb.soによって追跡されるランタイム パスに置き換えます。
  • TracerPidをテレメトリに追加: 診断ヘルパーは/proc/self/statusを解析し、TracerPidラインを抽出し、それを整数に変換し、0より大きい場合は、b.soの文字列ビルダーを介してフォーマットされたキー/値をリクエスト ボディに追加します。
  • ステージング ヘルパーは、既存のバッファを入力文字列から派生した疑似ランダム ブロックと連結します。
    • rand()でバイトをシードします
    • 入力の後続の各バイトを、ローリング アキュムレータにXORします
    • アキュムレータ バイトをサフィックスとして書き込みます
    • その後、結合されたバッファをb.soのライターを介して特定のファイル パスに書き込みます
  • 2ステップのインストーラー/アンインストーラーのペアは、persistency_origin、persistency_payload、persistency_backupの3つの設定キーを使用します。メイン ルーチンは、3つすべてが設定されていることを確認し、必要に応じてバックアップをオリジンにコピーし戻し、その後ペイロード ファイルを削除します。メッセージ カタログ エントリの「設定なし」、「移動失敗」、「リンク解除失敗」にマップされる個別のステータス コード(0x4B/0x4C/0x4D)を返します。兄弟ルーチンは、グローバルな永続化フラグが設定されている場合、バックアップ ファイルを条件付きで作成または切り詰めます(fopenをモード「w」で)。
  • sysfsによるバッテリー残量: ユーティリティは、システムの電源sysfsからバッテリー容量を読み取り、2つの一般的な場所をチェックします: /sys/class/power_supply/battery/capacity と /sys/class/power_supply/Battery/capacity
  • 2つのルーチンが、アプリプライベート ストレージ配下に作業ディレクトリをセットアップし、ファイナライズします。
    • 最初のルーチンは、ディレクトリ ツリーを作成し、モード0771 (0x1F9) を適用し、一時的に親に実行権限を追加し、解決されたパスを設定にコピーします。そして、rootとして実行されている場合、成果物をメモリに保持するために、その場所にtmpfsをマウントしようとします
    • 2番目(クリーンアップ/ファイナライズ)は、rootであり、ディレクトリが存在する場合、lsof | grep <working_dir> を実行し、その結果をホーム(C2)に送信できます。その後、親ディレクトリの元のモードを復元し、パス バッファを解放します。
  • SELinuxコンテキストおよびcmdlineによるプロセス発見: 2つの検索ヘルパーが/procを反復処理し、PIDごとのファイルを構築・読み取りします。
    • 1つは /proc/%d/attr/current をターゲットのSELinuxコンテキストと比較し、その後プロセスがPPID 1を持つことを確認します。
    • もう1つは /proc/%d/cmdline をターゲットのcmdlineと比較します。
    • 一致した場合、PIDを出力パラメーターに書き込み、成功を返します。
  • バリアント配列のデバッグ プリント: 開発者向けのルーチンが、小さな型付き配列構造をプリントします。テーブルから型名をフォーマットし、角括弧内に短いバイト配列をダンプし、特定の型に対して1文字を出力します。1要素につき1行です。これはデバッグの残り物のように見え、アクティブなコードからは呼び出されません。

これらのヘルパーは、このコンポーネントのメイン実行ループによって実行されるものはありません。それらの存在は、後続で読み込まれる共有オブジェクト(完全なLANDFALLフレームワークを形成する)が、このローダーにすでにコンパイルされている機能を使用して、収集と永続化を拡張するという、ステージングされたアーキテクチャと一致しています。

Enlarged Image