Shizuku Privileged API

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Shizuku é um serviço de código aberto que cria um processo Java privilegiado usando app_process e expõe APIs de sistema Android selecionadas via Binder. Como o processo é iniciado com as mesmas capacidades de UID shell que o ADB usa, qualquer aplicativo (ou terminal) que se conecta à interface AIDL exportada pode realizar muitas ações que normalmente requerem WRITE_SECURE_SETTINGS, INSTALL_PACKAGES, operações de arquivo dentro de /data, etc. – sem precisar fazer root no dispositivo.

Casos de uso típicos:

  • Auditoria de segurança a partir de um dispositivo não enraizado
  • Remoção de bloatware / debloating de aplicativos do sistema
  • Coleta de logs, chaves de Wi-Fi, informações de processos e sockets para blue-team/DFIR
  • Automação da configuração do dispositivo a partir de aplicativos personalizados ou scripts de shell

1. Iniciando o serviço privilegiado

moe.shizuku.privileged.api pode ser iniciado de três maneiras diferentes – o serviço Binder resultante se comporta da mesma forma em todas elas.

1.1 ADB sem fio (Android 11+)

  1. Ative Opções de Desenvolvedor ➜ Depuração sem fio e emparelhe o dispositivo.
  2. Dentro do aplicativo Shizuku, selecione “Iniciar via depuração sem fio” e copie o código de emparelhamento.
  3. O serviço persiste até o próximo reinício (as sessões de depuração sem fio são limpas na inicialização).

1.2 USB / linha de comando ADB local

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

O mesmo script pode ser executado sobre uma conexão ADB de rede (adb connect <IP>:5555).

1.3 Dispositivos com root

Se o dispositivo já estiver com root, execute:

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

1.4 Verificando se está em execução

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

Um início bem-sucedido retorna Running services (1) junto com o PID do processo privilegiado.


2. Vinculação de um aplicativo

Aplicativos de terceiros só precisam do seguinte dentro de seu AndroidManifest.xml:

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

Em tempo de execução, eles obtêm o binder:

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

A partir deste momento, o aplicativo pode invocar qualquer método que o shell user possa chamar – por exemplo :

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

Uma lista selecionada de mais de 170 aplicativos habilitados para Shizuku é mantida em awesome-shizuku.


3. Rish – shell elevado dentro do Termux

A tela de configurações do Shizuku expõe “Usar Shizuku em aplicativos de terminal”. Habilitá-lo baixa 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 Comandos úteis do shell rish

  • Listar processos em execução de um pacote específico:
bash
ps -A | grep com.facebook.katana
  • Enumerar sockets de escuta e mapeá-los para pacotes (por exemplo, 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
  • Despejar os logs de cada aplicativo:
bash
logcat -d | grep -iE "(error|exception)"
  • Ler credenciais de Wi-Fi armazenadas (Android 11 +):
bash
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
  • Desinstalação em massa (exemplo):
bash
pm uninstall --user 0 com.miui.weather2

4. Considerações de segurança / detecção

  1. Shizuku precisa de privilégios de depuração ADB, portanto, Opções do desenvolvedor → Depuração USB/sem fio deve estar ativada. Organizações podem bloquear isso através de um MDM ou via settings put global development_settings_enabled 0.
  2. O serviço se registra sob o nome moe.shizuku.privileged.api. Um simples adb shell service list | grep shizuku (ou regra de segurança de endpoint) detecta sua presença.
  3. As capacidades são limitadas ao que o usuário shell já pode fazer – não é root. APIs sensíveis que requerem o usuário system ou root ainda são inacessíveis.
  4. Sessões não sobrevivem a uma reinicialização a menos que o dispositivo esteja rooteado e Shizuku esteja configurado como um daemon de inicialização.

5. Mitigação

  • Desativar a depuração USB/sem fio em dispositivos de produção.
  • Monitorar serviços Binder que expõem moe.shizuku.privileged.api.
  • Usar políticas SELinux (Android enterprise) para bloquear a interface AIDL de aplicativos não gerenciados.

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks