libandroid_runtime Zygote Injection によるファームウェアレベルの Android バックドア

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

概要

/system/lib[64]/libandroid_runtime.so のサプライチェーン改ざんは android.util.Log.println_native を乗っ取り、Zygote から fork された every app が攻撃者のコードを実行するようにできます。Keenadu バックドアは println_native の内部にネイティブ dropper を駆動する単一の呼び出しを追加します。すべての app プロセスがこのコードを実行するため、Android sandbox 境界 とアプリごとの permissions は事実上バイパスされます。

Dropper path: native patch → RC4 → DexClassLoader

  • Hooked entry: println_native 内に __log_check_tag_count への追加呼び出し (injected static lib libVndxUtils.a)。
  • Payload storage: RC4-decrypt blob が .so に埋め込まれ、/data/dalvik-cache/arm[64]/system@framework@vndx_10x.jar@classes.jar に drop される。
  • Load & execute: DexClassLoader が jar をロードして com.ak.test.Main.main を呼び出す。Runtime logs はタグ AK_CPP を使用(triage artifact)。
  • Anti-analysis: Google/Sprint/T-Mobile の system apps 内、または kill-switch ファイルが存在する場合に中断する。
  • Zygote role split:
    • In system_server → instantiate AKServer
    • In any other app → instantiate AKClient

Binder-based client/server backdoor

  • AKServer (running in system_server) sends protected broadcasts:
    • com.action.SystemOptimizeService → binder interface for clients。
    • com.action.SystemProtectService → binder interface for downloaded modules。
  • AKClient (inside every app) receives the interface via broadcast and performs an attach transaction, handing an IPC wrapper so the server can load arbitrary DEX inside the current app process
  • Exposed privileged operations (via SystemProtectService): 任意のパッケージに対する permission の grant/revoke、ジオロケーションの取得、デバイス情報の exfiltrate。これにより privilege bypass が集中管理されつつ、選択したターゲット app(Chrome, YouTube, launcher, shopping apps など)内でコードを実行できる。

C2 staging, crypto, and gating

  • Host discovery: Base64 → gzip → AES-128-CFB で復号、キー MD5("ota.host.ba60d29da7fd4794b5c5f732916f7d5c")、IV "0102030405060708"
  • Victim registration: IMEI/MAC/model/OS を収集し、キー MD5("ota.api.bbf6e0a947a5f41d7f5226affcfd858c") で暗号化して /ak/api/pts/v4 にパラメータ m=MD5(IMEI)n=w|m(ネットワークタイプ)で POST。レスポンスの data も同様に暗号化されている。
  • Activation delay: C2 はリクエスト内の “activation time” から約 2.5 ヶ月経過してからモジュールを配信するため、sandbox detonations を阻害する。
  • Module container (proprietary):
struct KeenaduPayload {
int32_t  version;
uint8_t  padding[0x100];
uint8_t  salt[0x20];
KeenaduChunk config;   // size + data
KeenaduChunk payload;  // size + data
KeenaduChunk signature;// size + data
} __packed;
  • 整合性: MD5 file check + DSA signature (only operator with private key can issue modules).
  • 復号: AES-128-CFB, key MD5("37d9a33df833c0d6f11f1b8079aaa2dc" + salt), IV "0102030405060708".

永続化とフォレンジックのヒント

  • サプライチェーンへの配置: 悪意のある静的ライブラリ libVndxUtils.a がビルド時に libandroid_runtime.so にリンクされる(例: vendor/mediatek/proprietary/external/libutils/arm[64]/libVndxUtils.a)。
  • ファームウェア監査: ファームウェアイメージは Android Sparse の super.img として出荷される。lpunpack(または類似ツール)を使用してパーティションを抽出し、libandroid_runtime.so を調べて println_native に余分な呼び出しがないか確認する。
  • デバイス上の痕跡: /data/dalvik-cache/arm*/system@framework@vndx_10x.jar@classes.jar の存在、logcat タグ AK_CPP、または com.action.SystemOptimizeService / com.action.SystemProtectService という名前の保護ブロードキャストがあれば侵害の可能性がある。

References

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする