Shizuku Privileged API

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

Shizukuは、app_processを使用して特権のあるJavaプロセスを生成し、選択されたAndroidシステムAPIをBinder経由で公開するオープンソースサービスです。プロセスはADBが使用するのと同じ**shell UID権限で起動されるため、エクスポートされたAIDLインターフェースにバインドする任意のアプリケーション(またはターミナル)は、通常**WRITE_SECURE_SETTINGSINSTALL_PACKAGES/data内のファイルI/Oなどを必要とする多くのアクションをデバイスをルート化せずに**実行できます。

典型的な使用例:

  • ルート化されていないハンドセットからのセキュリティ監査
  • ブloatwareの削除 / システムアプリのデブロート
  • ブルーチーム/DFIRのためのログ、Wi-Fiキー、プロセスおよびソケット情報の収集
  • カスタムアプリやシェルスクリプトからのデバイス設定の自動化

1. 特権サービスの開始

moe.shizuku.privileged.apiは、3つの異なる方法で開始できます。結果として得られる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

同じスクリプトはネットワーク 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で管理されています。


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インターフェースをブロックする。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする