Shizuku Privileged API

Reading time: 6 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Το Shizuku είναι μια υπηρεσία ανοιχτού κώδικα που δημιουργεί μια προνομιούχα διαδικασία Java χρησιμοποιώντας το app_process και εκθέτει επιλεγμένα Android system APIs μέσω Binder. Επειδή η διαδικασία εκκινείται με τις ίδιες ικανότητες UID shell που χρησιμοποιεί το ADB, οποιαδήποτε εφαρμογή (ή τερματικό) που συνδέεται στη εξαγόμενη διεπαφή AIDL μπορεί να εκτελέσει πολλές ενέργειες που κανονικά απαιτούν WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, είσοδο/έξοδο αρχείων μέσα στο /data, κ.λπ. – χωρίς να χρειάζεται να κάνετε root τη συσκευή.

Τυπικές περιπτώσεις χρήσης:

  • Ασφαλής επιθεώρηση από μια συσκευή χωρίς root
  • Αφαίρεση bloatware / αποσυμπίεση συστημικών εφαρμογών
  • Συλλογή καταγραφών, κωδικών Wi-Fi, πληροφοριών διαδικασίας και υποδοχών για blue-team/DFIR
  • Αυτοματοποίηση της διαμόρφωσης της συσκευής από προσαρμοσμένες εφαρμογές ή scripts shell

1. Εκκίνηση της προνομιούχας υπηρεσίας

moe.shizuku.privileged.api μπορεί να ξεκινήσει με τρεις διαφορετικούς τρόπους – η προκύπτουσα υπηρεσία Binder συμπεριφέρεται το ίδιο σε όλους αυτούς.

1.1 Ασύρματο ADB (Android 11+)

  1. Ενεργοποιήστε Επιλογές προγραμματιστή ➜ Ασύρματη αποσφαλμάτωση και ζευγαρώστε τη συσκευή.
  2. Μέσα στην εφαρμογή Shizuku επιλέξτε “Έναρξη μέσω Ασύρματης αποσφαλμάτωσης” και αντιγράψτε τον κωδικό ζευγαρώματος.
  3. Η υπηρεσία επιβιώνει μέχρι την επόμενη επανεκκίνηση (οι συνεδρίες ασύρματης αποσφαλμάτωσης διαγράφονται κατά την εκκίνηση).

1.2 USB / τοπικό ADB one-liner

bash
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

Το ίδιο σενάριο μπορεί να εκτελεστεί μέσω μιας network ADB σύνδεσης (adb connect <IP>:5555).

1.3 Rooted συσκευές

Αν η συσκευή είναι ήδη rooted, εκτελέστε:

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

1.4 Επιβεβαίωση ότι εκτελείται

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

Ένα επιτυχές ξεκίνημα επιστρέφει Running services (1) μαζί με το PID της προνομιούχου διαδικασίας.


2. Δέσμευση από μια εφαρμογή

Οι εφαρμογές τρίτων χρειάζονται μόνο τα εξής μέσα στο AndroidManifest.xml:

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

Κατά την εκτέλεση, αποκτούν τον binder:

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

Από αυτή τη στιγμή, η εφαρμογή μπορεί να καλέσει οποιαδήποτε μέθοδο μπορεί να καλέσει ο shell χρήστης – για παράδειγμα :

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

Μια επιμελημένη λίστα με περισσότερες από 170 εφαρμογές που υποστηρίζουν Shizuku διατηρείται στο awesome-shizuku.


3. Rish – ανυψωμένο shell μέσα στο Termux

Η οθόνη ρυθμίσεων Shizuku εκθέτει “Χρήση Shizuku σε εφαρμογές τερματικού”. Η ενεργοποίησή του κατεβάζει rish (/data/local/tmp/rish).

bash
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 Χρήσιμες εντολές από το rish shell

  • Λίστα τρεχουσών διεργασιών ενός συγκεκριμένου πακέτου:
bash
ps -A | grep com.facebook.katana
  • Καταμέτρηση ακροατών sockets και αντιστοίχιση τους σε πακέτα (π.χ. CVE-2019-6447 ES File Explorer):
bash
netstat -tuln
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
done
  • Dump όλων των logs εφαρμογών:
bash
logcat -d | grep -iE "(error|exception)"
  • Ανάγνωση αποθηκευμένων διαπιστευτηρίων Wi-Fi (Android 11 +):
bash
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
  • Μαζική αφαίρεση (παράδειγμα):
bash
pm uninstall --user 0 com.miui.weather2

4. Σκέψεις ασφαλείας / ανίχνευση

  1. Το Shizuku χρειάζεται δικαιώματα ADB debugging, επομένως οι Επιλογές προγραμματιστή → USB/Ασύρματη αποσφαλμάτωση πρέπει να είναι ενεργοποιημένες. Οι οργανισμοί μπορούν να το αποκλείσουν μέσω MDM ή μέσω settings put global development_settings_enabled 0.
  2. Η υπηρεσία καταχωρεί τον εαυτό της με το όνομα moe.shizuku.privileged.api. Μια απλή adb shell service list | grep shizuku (ή κανόνας Endpoint Security) ανιχνεύει την παρουσία της.
  3. Οι δυνατότητες περιορίζονται σε όσα μπορεί ήδη να κάνει ο χρήστης shellδεν είναι root. Ευαίσθητα APIs που απαιτούν τον χρήστη system ή root παραμένουν μη προσβάσιμα.
  4. Οι συνεδρίες δεν επιβιώνουν μετά από επανεκκίνηση εκτός αν η συσκευή είναι rooted και το Shizuku είναι ρυθμισμένο ως daemon εκκίνησης.

5. Μετριασμός

  • Απενεργοποιήστε την USB/Ασύρματη αποσφαλμάτωση σε συσκευές παραγωγής.
  • Παρακολουθήστε για υπηρεσίες Binder που εκθέτουν το moe.shizuku.privileged.api.
  • Χρησιμοποιήστε πολιτικές SELinux (Android enterprise) για να αποκλείσετε τη διεπαφή AIDL από μη διαχειριζόμενες εφαρμογές.

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks