Firmware-level Android Backdoor via libandroid_runtime Zygote Injection
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Przegląd
Manipulacja łańcuchem dostaw pliku /system/lib[64]/libandroid_runtime.so może przejąć android.util.Log.println_native, tak że każda aplikacja forkowana z Zygote wykonuje kod atakującego. Backdoor Keenadu dodaje pojedyncze wywołanie wewnątrz println_native, które uruchamia native dropper. Ponieważ wszystkie procesy aplikacji wykonują ten kod, granice sandboxa Androida i uprawnienia per-app są w praktyce pomijane.
Dropper path: native patch → RC4 → DexClassLoader
- Hooked entry: dodatkowe wywołanie wewnątrz
println_nativedo__log_check_tag_count(wstrzyknięta statyczna bibliotekalibVndxUtils.a). - Payload storage: blob zaszyfrowany RC4 osadzony w
.so, zapis do/data/dalvik-cache/arm[64]/system@framework@vndx_10x.jar@classes.jar. - Load & execute:
DexClassLoaderładuje jar i wywołujecom.ak.test.Main.main. Logi runtime używają tagaAK_CPP(artefakt triage). - Anti-analysis: przerywa działanie w aplikacjach systemowych Google/Sprint/T-Mobile lub jeśli istnieją pliki kill-switch.
- Zygote role split:
- W
system_server→ tworzy instancjęAKServer. - W każdej innej aplikacji → tworzy instancję
AKClient.
- W
Binder-based client/server backdoor
AKServer(uruchamiany wsystem_server) wysyła chronione broadcasty:com.action.SystemOptimizeService→ binder interface dla klientów.com.action.SystemProtectService→ binder interface dla pobranych modułów.
AKClient(wewnątrz każdej aplikacji) odbiera interfejs przez broadcast i wykonuje transakcjęattach, przekazując wrapper IPC, dzięki któremu server może załadować dowolny DEX wewnątrz bieżącego procesu aplikacji.- Udostępnione uprzywilejowane operacje (przez
SystemProtectService): nadawanie/odbieranie dowolnych uprawnień dla dowolnego pakietu, pobieranie geolokalizacji oraz eksfiltrowanie informacji o urządzeniu. To centralizuje obejście uprawnień przy jednoczesnym wykonywaniu kodu w wybranych docelowych aplikacjach (Chrome, YouTube, launcher, aplikacje zakupowe itp.).
C2 staging, crypto, and gating
- Host discovery: Base64 → gzip → AES-128-CFB deszyfrowanie z kluczem
MD5("ota.host.ba60d29da7fd4794b5c5f732916f7d5c"), IV"0102030405060708". - Victim registration: zbiera IMEI/MAC/model/OS, szyfruje kluczem
MD5("ota.api.bbf6e0a947a5f41d7f5226affcfd858c"), POST do/ak/api/pts/v4z parametramim=MD5(IMEI)in=w|m(typ sieci). Odpowiedźdatajest zaszyfrowana w ten sam sposób. - Activation delay: C2 dostarcza moduły dopiero po ~2,5 miesiącach od “activation time” w żądaniu, co utrudnia uruchamianie w sandboxie.
- 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;
- Integralność: sprawdzenie pliku MD5 + podpis DSA (tylko operator posiadający klucz prywatny może wydawać moduły).
- Deszyfrowanie: AES-128-CFB, klucz
MD5("37d9a33df833c0d6f11f1b8079aaa2dc" + salt), IV"0102030405060708".
Persistencja i wskazówki kryminalistyczne
- Umiejscowienie w łańcuchu dostaw: złośliwa biblioteka statyczna
libVndxUtils.alinkowana dolibandroid_runtime.sopodczas budowy (np.vendor/mediatek/proprietary/external/libutils/arm[64]/libVndxUtils.a). - Audyt firmware: obrazy firmware są dostarczane jako Android Sparse
super.img; użyjlpunpack(lub podobnego) aby wyodrębnić partycje i sprawdzićlibandroid_runtime.sopod kątem dodatkowych wywołań wprintln_native. - Artefakty na urządzeniu: obecność
/data/dalvik-cache/arm*/system@framework@vndx_10x.jar@classes.jar, znacznik logcatAK_CPP, lub chronione broadcasty o nazwachcom.action.SystemOptimizeService/com.action.SystemProtectServicewskazują na kompromitację.
Źródła
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


