9.2 KiB
Raw Blame History

Shizuku Privileged API

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

Shizuku एक ओपन-सोर्स सेवा है जो app_process का उपयोग करके एक विशेषाधिकार प्राप्त Java प्रक्रिया उत्पन्न करती है और चयनित Android सिस्टम APIs को Binder के माध्यम से उजागर करती है। चूंकि प्रक्रिया को उसी shell UID क्षमताओं के साथ लॉन्च किया जाता है जो ADB उपयोग करता है, कोई भी एप्लिकेशन (या टर्मिनल) जो निर्यातित AIDL इंटरफेस से बंधता है, कई कार्य कर सकता है जो सामान्यतः WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, /data के अंदर फ़ाइल I/O आदि की आवश्यकता होती है - डिवाइस को रूट किए बिना

विशिष्ट उपयोग के मामले:

  • बिना रूट किए हैंडसेट से सुरक्षा ऑडिटिंग
  • बloatware हटाना / सिस्टम ऐप्स को डिब्लोट करना
  • ब्लू-टीम/DFIR के लिए लॉग, वाई-फाई कुंजी, प्रक्रिया और सॉकेट जानकारी एकत्र करना
  • कस्टम ऐप्स या शेल स्क्रिप्ट से डिवाइस कॉन्फ़िगरेशन स्वचालित करना

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

वही स्क्रिप्ट नेटवर्क 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 सेटिंग्स स्क्रीन “Use Shizuku in terminal apps” को प्रदर्शित करती है। इसे सक्षम करने पर 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 (या एंडपॉइंट सुरक्षा नियम) इसकी उपस्थिति का पता लगाता है।
  3. क्षमताएँ उस पर सीमित हैं जो shell उपयोगकर्ता पहले से कर सकता है - यह रूट नहीं है। संवेदनशील APIs जो system या root उपयोगकर्ता की आवश्यकता होती हैं, अभी भी अप्राप्य हैं।
  4. सत्र रिबूट के बाद जीवित नहीं रहते जब तक डिवाइस रूटेड न हो और Shizuku को स्टार्टअप डेमॉन के रूप में कॉन्फ़िगर न किया गया हो।

5. शमन

  • उत्पादन उपकरणों पर USB/वायरलेस डिबगिंग को बंद करें।
  • moe.shizuku.privileged.api को उजागर करने वाली बाइंडर सेवाओं की निगरानी करें।
  • unmanaged एप्लिकेशनों से AIDL इंटरफेस को ब्लॉक करने के लिए SELinux नीतियों (Android enterprise) का उपयोग करें।

संदर्भ

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