124 lines
6.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は、**`app_process`を使用して特権のあるJavaプロセスを生成し**、選択された**AndroidシステムAPIをBinder経由で公開する**オープンソースサービスです。プロセスはADBが使用するのと同じ**`shell` UID権限で起動されるため、エクスポートされたAIDLインターフェースにバインドする任意のアプリケーションまたはターミナルは、通常**`WRITE_SECURE_SETTINGS``INSTALL_PACKAGES``/data`内のファイルI/O**などを必要とする多くのアクションを**デバイスをルート化せずに**実行できます。
典型的な使用例:
* ルート化されていないハンドセットからのセキュリティ監査
* ブloatwareの削除 / システムアプリのデブロート
* ブルーチーム/DFIRのためのログ、Wi-Fiキー、プロセスおよびソケット情報の収集
* カスタムアプリやシェルスクリプトからのデバイス設定の自動化
---
## 1. 特権サービスの開始
`moe.shizuku.privileged.api`は、3つの異なる方法で開始できます。結果として得られるBinderサービスは、すべての方法で同じように動作します。
### 1.1 ワイヤレスADBAndroid 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
```
同じスクリプトは**ネットワーク 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
```
成功した開始は、特権プロセスのPIDと共に `Running services (1)` を返します。
---
## 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`(またはエンドポイントセキュリティルール)がその存在を検出します。
3. 機能は`shell`ユーザーがすでにできることに制限されており、**rootではありません**。
`system`または`root`ユーザーを必要とする敏感なAPIには依然としてアクセスできません。
4. セッションは**再起動後に生き残りません**、デバイスがルート化されており、Shizukuがスタートアップデーモンとして構成されている場合を除きます。
---
## 5. 緩和策
* 生産デバイスでUSB/ワイヤレスデバッグを無効にする。
* `moe.shizuku.privileged.api`を公開しているBinderサービスを監視する。
* SELinuxポリシーAndroidエンタープライズを使用して、管理されていないアプリケーションから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}}