Shizuku Privileged API

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_SETTINGS, INSTALL_PACKAGES, /data 내의 파일 I/O 등을 요구하는 많은 작업을 수행할 수 있습니다 – 장치를 루팅하지 않고도.

일반적인 사용 사례:

  • 루팅되지 않은 핸드셋에서의 보안 감사
  • 불필요한 앱 제거 / 시스템 앱 디블로팅
  • 블루팀/DFIR을 위한 로그, Wi-Fi 키, 프로세스 및 소켓 정보 수집
  • 사용자 정의 앱 또는 셸 스크립트를 통한 장치 구성 자동화

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

A successful start returns Running services (1) together with the PID of the privileged process.


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);

A curated list of more than 170 Shizuku-enabled apps is maintained at awesome-shizuku.


3. Rish – elevated shell inside Termux

The Shizuku settings screen exposes “Use Shizuku in terminal apps”. Enabling it downloads 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 사용자가 이미 할 수 있는 것에 제한됩니다 – 루트가 아닙니다. system 또는 root 사용자가 필요한 민감한 API는 여전히 접근할 수 없습니다.
  4. 세션은 재부팅 후 유지되지 않습니다. 단, 장치가 루팅되고 Shizuku가 시작 데몬으로 구성된 경우는 제외입니다.

5. 완화

  • 생산 장치에서 USB/무선 디버깅을 비활성화합니다.
  • moe.shizuku.privileged.api를 노출하는 Binder 서비스를 모니터링합니다.
  • 관리되지 않는 애플리케이션에서 AIDL 인터페이스를 차단하기 위해 SELinux 정책(안드로이드 기업)을 사용합니다.

참조

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 지원하기