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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
概要
/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 liblibVndxUtils.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→ instantiateAKServer。 - In any other app → instantiate
AKClient。
- In
Binder-based client/server backdoor
AKServer(running insystem_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 anattachtransaction, 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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


