7.5 KiB
Raw Blame History

Shizuku Privileged API

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

Shizuku - це відкритий сервіс, який створює привілейований Java процес за допомогою app_process і надає вибрані API системи Android через Binder. Оскільки процес запускається з тими ж UID можливостями shell, які використовує ADB, будь-який додаток (або термінал), що підключається до експортованого інтерфейсу AIDL, може виконувати багато дій, які зазвичай вимагають WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, доступу до файлів у /data, тощо без рутування пристрою.

Типові випадки використання:

  • Аудит безпеки з не рутованого пристрою
  • Видалення непотрібних програм / деблокація системних додатків
  • Збір журналів, ключів Wi-Fi, інформації про процеси та сокети для blue-team/DFIR
  • Автоматизація конфігурації пристрою з кастомних додатків або shell-скриптів

1. Запуск привілейованого сервісу

moe.shizuku.privileged.api можна запустити трьома різними способами результуючий сервіс Binder поводиться однаково в усіх випадках.

1.1 Безпровідний ADB (Android 11+)

  1. Увімкніть Опції для розробників ➜ Безпровідне налагодження та спарте пристрій.
  2. У додатку Shizuku виберіть “Запустити через безпровідне налагодження” та скопіюйте код спарювання.
  3. Сервіс працює до наступного перезавантаження (сеанси безпровідного налагодження очищуються при завантаженні).

1.2 USB / локальний ADB однорядковий

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 Пристрої з рутом

Якщо пристрій вже має рут, виконайте:

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

1.4 Перевірка, що він працює

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

Успішний старт повертає Running services (1) разом з PID привілейованого процесу.


2. Прив'язка з додатку

Додатки третіх сторін потребують лише наступне в їхньому AndroidManifest.xml:

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

Під час виконання вони отримують зв'язувач:

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

Від цього моменту додаток може викликати будь-який метод, який може викликати користувач shell наприклад :

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 підвищена оболонка всередині Termux

Екран налаштувань Shizuku відкриває “Використовувати Shizuku в термінальних додатках”. Увімкнення цього завантажує 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 Корисні команди з оболонки rish

  • Перелік запущених процесів певного пакету:
ps -A | grep com.facebook.katana
  • Перерахунок прослуховуючих сокетів та їх прив'язка до пакетів (наприклад, 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
  • Вивантаження журналів кожного додатку:
logcat -d | grep -iE "(error|exception)"
  • Читання збережених облікових даних Wi-Fi (Android 11 +):
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
  • Масове видалення (приклад):
pm uninstall --user 0 com.miui.weather2

4. Заходи безпеки / виявлення

  1. Shizuku потребує привілеїв налагодження ADB, тому Параметри розробника → 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. Чутливі API, які вимагають користувача system або root, все ще недоступні.
  4. Сесії не переживають перезавантаження, якщо пристрій не має root-доступу, а Shizuku не налаштовано як демон запуску.

5. Пом'якшення

  • Вимкніть USB/Бездротове налагодження на виробничих пристроях.
  • Моніторинг сервісів Binder, які відкривають moe.shizuku.privileged.api.
  • Використовуйте політики SELinux (Android enterprise) для блокування інтерфейсу AIDL від неуправляємих додатків.

Посилання

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