5.4 KiB
Raw Blame History

Shizuku Privileged API

{{#include ../../banners/hacktricks-training.md}}

Shizuku je open-source servis koji pokreće privilegovani Java proces koristeći app_process i izlaže odabrane Android sistemske API-je preko Bindera. Pošto se proces pokreće sa istim shell UID sposobnostima koje koristi ADB, svaka aplikacija (ili terminal) koja se povezuje na izvezeni AIDL interfejs može izvršiti mnoge radnje koje obično zahtevaju WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, ulaz/izlaz fajlova unutar /data, itd. bez root-ovanja uređaja.

Tipični slučajevi upotrebe:

  • Bezbednosno audiranje sa uređaja koji nije root-ovan
  • Uklanjanje bloatware-a / debloating sistemskih aplikacija
  • Prikupljanje logova, Wi-Fi ključeva, informacija o procesima i soketima za plavi tim/DFIR
  • Automatizacija konfiguracije uređaja iz prilagođenih aplikacija ili shell skripti

1. Pokretanje privilegovanog servisa

moe.shizuku.privileged.api može se pokrenuti na tri različita načina rezultantni Binder servis se ponaša isto u svim njima.

1.1 Bežični ADB (Android 11+)

  1. Omogućite Opcije za programere ➜ Bežično debagovanje i uparite uređaj.
  2. Unutar Shizuku aplikacije izaberite “Start via Wireless debugging” i kopirajte kod za uparivanje.
  3. Servis opstaje do sledećeg ponovnog pokretanja (sesije bežičnog debagovanja se brišu pri pokretanju).

1.2 USB / lokalni ADB one-liner

adb push start.sh \
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/

# spawn the privileged process
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh

Isti skript se može izvršiti preko network ADB veze (adb connect <IP>:5555).

1.3 Rootovani uređaji

Ako je uređaj već rootovan, pokrenite:

su -c sh /data/adb/shizuku/start.sh

1.4 Proveravanje da li radi

adb shell dumpsys activity service moe.shizuku.privileged.api | head

Uspešan početak vraća Running services (1) zajedno sa PID-om privilegovanog procesa.


2. Povezivanje iz aplikacije

Aplikacije trećih strana samo trebaju sledeće unutar svog AndroidManifest.xml:

<uses-permission android:name="moe.shizuku.manager.permission.API"/>

U vreme izvršavanja dobijaju binder:

IBinder binder = ShizukuProvider.getBinder();
IPackageManager pm  = IPackageManager.Stub.asInterface(binder);

Od ovog trenutka aplikacija može pozvati bilo koju metodu koju shell korisnik može pozvati na primer :

pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);

Kustoska lista od više od 170 aplikacija koje podržavaju Shizuku se održava na awesome-shizuku.


3. Rish povišeni shell unutar Termux-a

Ekran podešavanja Shizuku otkriva “Koristi Shizuku u terminalnim aplikacijama”. Aktiviranje ove opcije preuzima rish (/data/local/tmp/rish).

pkg install wget
wget https://rikka.app/rish/latest -O rish && chmod +x rish

# start elevated shell (inherits the binder connection)
./rish
whoami   #  ➜  shell
id       #  uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0

3.1 Korisne komande iz rish shell-a

  • Prikazivanje pokrenutih procesa datog paketa:
ps -A | grep com.facebook.katana
  • Nabrajanje slušajućih soketa i mapiranje na pakete (npr. CVE-2019-6447 ES File Explorer):
netstat -tuln
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
done
  • Ispisivanje logova svake aplikacije:
logcat -d | grep -iE "(error|exception)"
  • Čitanje sačuvanih Wi-Fi kredencijala (Android 11 +):
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
  • Masovno uklanjanje (primer):
pm uninstall --user 0 com.miui.weather2

4. Bezbednosna razmatranja / detekcija

  1. Shizuku zahteva ADB debugging privilegije, stoga Developer Options → USB/Wireless debugging mora biti omogućeno. Organizacije mogu blokirati ovo putem MDM-a ili putem settings put global development_settings_enabled 0.
  2. Usluga se registruje pod imenom moe.shizuku.privileged.api. Jednostavna adb shell service list | grep shizuku (ili pravilo Endpoint Security) detektuje njeno prisustvo.
  3. Mogućnosti su ograničene na ono što korisnik shell već može da uradi nije root. Osetljivi API-ji koji zahtevaju korisnika system ili root su i dalje nedostupni.
  4. Sesije ne preživljavaju restart osim ako uređaj nije root-ovan i Shizuku je konfigurisan kao daemon pri pokretanju.

5. Ublažavanje

  • Onemogućiti USB/Wireless debugging na proizvodnim uređajima.
  • Pratiti Binder usluge koje izlažu moe.shizuku.privileged.api.
  • Koristiti SELinux politike (Android enterprise) za blokiranje AIDL interfejsa iz neuredjenih aplikacija.

Reference

{{#include ../../banners/hacktricks-training.md}}