5.7 KiB
Raw Blame History

Shizuku Privileged API

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

Shizuku, app_process kullanarak ayrıcalıklı bir Java süreci oluşturan ve seçilen Android sistem API'lerini Binder üzerinden açığa çıkaranık kaynaklı bir hizmettir. Süreç, ADB'nin kullandığıyla aynı shell UID yetenekleriyle başlatıldığından, dışa aktarılan AIDL arayüzüne bağlanan herhangi bir uygulama (veya terminal), genellikle WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, /data içinde dosya I/O gibi işlemleri gerçekleştirebilir cihazı rootlamadan.

Tipik kullanım senaryoları:

  • Rootlanmamış bir cihazdan güvenlik denetimi
  • Bloatware kaldırma / sistem uygulamalarını debloat etme
  • Blue-team/DFIR için günlükler, Wi-Fi anahtarları, süreç ve soket bilgileri toplama
  • Özel uygulamalar veya shell betikleri aracılığıyla cihaz yapılandırmasını otomatikleştirme

1. Ayrıcalıklı hizmeti başlatma

moe.shizuku.privileged.api, üç farklı şekilde başlatılabilir sonuçta oluşan Binder hizmeti hepsinde aynı şekilde davranır.

1.1 Kablosuz ADB (Android 11+)

  1. Geliştirici Seçenekleri ➜ Kablosuz hata ayıklama'yı etkinleştir ve cihazı eşleştir.
  2. Shizuku uygulaması içinde “Kablosuz hata ayıklama ile başlat” seçeneğini seç ve eşleştirme kodunu kopyala.
  3. Hizmet, bir sonraki yeniden başlatmaya kadar devam eder (kablosuz hata ayıklama oturumları önyüklemede temizlenir).

1.2 USB / yerel ADB tek satır

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

Aynı script, network ADB bağlantısı üzerinden çalıştırılabilir (adb connect <IP>:5555).

1.3 Rootlu cihazlar

Eğer cihaz zaten rootlanmışsa şunu çalıştırın:

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

1.4 Çalıştığını Doğrulama

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

Başarılı bir başlangıç, Running services (1) ile birlikte ayrıcalıklı sürecin PID'sini döndürür.


2. Bir uygulamadan bağlanma

Üçüncü taraf uygulamaların yalnızca AndroidManifest.xml dosyalarında aşağıdakilere ihtiyacı vardır:

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

Çalışma zamanında binder'ı elde ederler:

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

Bu andan itibaren uygulama, shell kullanıcısının çağırabileceği herhangi bir yöntemi çağırabilir örneğin:

pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);

170'ten fazla Shizuku destekli uygulamanın derlenmiş listesi awesome-shizuku adresinde bulunmaktadır.


3. Rish Termux içinde yükseltilmiş shell

Shizuku ayarları ekranı “Terminal uygulamalarında Shizuku'yu kullan” seçeneğini sunar. Bunu etkinleştirmek rish (/data/local/tmp/rish) indirir.

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 Kullanışlı komutlar rish shell'den

  • Verilen bir paketin çalışan süreçlerini listele:
ps -A | grep com.facebook.katana
  • Dinleyen soketleri listele ve bunları paketlere eşle:
netstat -tuln
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
done
  • Her uygulamanın loglarını dök:
logcat -d | grep -iE "(error|exception)"
  • Saklanan Wi-Fi kimlik bilgilerini oku (Android 11 +):
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
  • Toplu debloat (örnek):
pm uninstall --user 0 com.miui.weather2

4. Güvenlik dikkate alındığında / tespit

  1. Shizuku ADB hata ayıklama ayrıcalıklarına ihtiyaç duyar, bu nedenle Geliştirici Seçenekleri → USB/Kablosuz hata ayıklama etkinleştirilmelidir. Kuruluşlar bunu bir MDM aracılığıyla veya settings put global development_settings_enabled 0 ile engelleyebilir.
  2. Servis kendini moe.shizuku.privileged.api adı altında kaydeder. Basit bir adb shell service list | grep shizuku (veya Endpoint Security kuralı) varlığını tespit eder.
  3. Yetenekler, shell kullanıcısının zaten yapabileceği şeylerle sınırlıdır root değildir. system veya root kullanıcısını gerektiren hassas API'ler hala erişilemez.
  4. Oturumlar bir yeniden başlatmada hayatta kalmaz; cihaz köklü değilse ve Shizuku bir başlangıç daemon'u olarak yapılandırılmamışsa.

5. Azaltma

  • Üretim cihazlarında USB/Kablosuz hata ayıklamayı devre dışı bırakın.
  • moe.shizuku.privileged.api'yi açığa çıkaran Binder hizmetlerini izleyin.
  • Yönetilmeyen uygulamalardan AIDL arayüzünü engellemek için SELinux politikalarını (Android enterprise) kullanın.

Referanslar

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