124 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 однорядковий
```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 Пристрої з рутом
Якщо пристрій вже має рут, виконайте:
```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"/>
```
Під час виконання вони отримують зв'язувач:
```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](https://github.com/timschneeb/awesome-shizuku).
---
## 3. Rish підвищена оболонка всередині 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
* Перелік запущених процесів певного пакету:
```bash
ps -A | grep com.facebook.katana
```
* Перерахунок прослуховуючих сокетів та їх прив'язка до пакетів (наприклад, **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
```
* Вивантаження журналів кожного додатку:
```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**, тому араметри розробника → 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 від неуправляємих додатків.
---
## Посилання
- [Blog Shizuku: Unlocking Advanced Android Capabilities Without Root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
- [Shizuku Official Documentation](https://shizuku.rikka.app/)
- [awesome-shizuku list of supported apps](https://github.com/timschneeb/awesome-shizuku)
- [rish shell (privileged reverse-adb shell)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
{{#include ../../banners/hacktricks-training.md}}