Android IME / InputMethodService Abuse (Malicious Keyboards)

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

Visão geral

Android permite teclados de terceiros via um InputMethodService (IME). Uma vez que um usuário ativa um teclado e o seleciona como o método de entrada atual, o IME pode observar (e influenciar) essencialmente toda a entrada de texto produzida no dispositivo através dos apps.

É por isso que vários trojans bancários Android incluem um recurso de “secure keyboard”: o IME malicioso recebe keystrokes até mesmo de apps que nunca incorporam um WebView (apps bancários, apps de chat, wallets de crypto, etc.).

Note

android.permission.BIND_INPUT_METHOD é tipicamente declarado no service do IME para que somente o sistema possa bindar nele. Declarar essa permissão não concede privilégios especiais por si só; o passo-chave é conseguir que a vítima ative/selecione o teclado nas Settings.

Manifest declaration

A keyboard é exposta via um service com a intent action android.view.InputMethod e um XML de configuração do IME:

<!-- AndroidManifest.xml -->
<service
android:name=".SpyKeyboard"
android:permission="android.permission.BIND_INPUT_METHOD"
android:exported="false">

<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>

<meta-data
android:name="android.view.im"
android:resource="@xml/spy_ime" />
</service>

Hunting tip: um app que não parece um teclado mas declara um InputMethodService é um forte sinal de alerta.

De onde vêm os dados

Em tempo de execução um IME aprende:

  • O aplicativo alvo em que se digita (via EditorInfo, p.ex. attribute.packageName em onStartInput).
  • O texto inserido (através da interação do IME com o InputConnection atual e/ou eventos de tecla dependendo da implementação).

Esboço mínimo (não funcional) do ponto de hook de alto sinal:

public class SpyKeyboard extends InputMethodService {
@Override public void onStartInput(EditorInfo attribute, boolean restarting) {
// attribute.packageName identifies the foreground app receiving input
}
}

Fluxo comum de habilitação e coleta (observado no mundo real)

  • O APK é comercializado como “teclado seguro” ou o teclado está embutido dentro de um trojan mais amplo.
  • O malware direciona a vítima para as configurações do teclado do sistema (por exemplo, lançando Settings.ACTION_INPUT_METHOD_SETTINGS e/ou usando automação de UI) até que o IME seja habilitado e definido como padrão.
  • As teclas digitadas são armazenadas em buffer por aplicativo e exfiltradas via o canal C2 já existente do malware, frequentemente combinadas com outras fontes de dados (por exemplo, telemetria de WebView man-in-the-browser).

Como detectar / triar

Verificações no dispositivo

  • Configurações: Teclados instalados / teclado padrão (procure por IMEs desconhecidos).
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

Triagem estática de um APK

  • Procure por classes InputMethodService e pelo filtro de intent android.view.InputMethod.
  • Inspecione a configuração IME @xml/* referenciada por android.view.im.
  • Verifique se a funcionalidade declarada do app corresponde ao fornecimento de uma UI/recursos de teclado completo.

Mitigações

  • User/MDM: allowlist teclados confiáveis; bloquear IMEs desconhecidos em perfis/dispositivos gerenciados.
  • No lado do app (aplicativos de alto risco): prefira autenticação resistente a phishing (passkeys/biometrics) e evite confiar na “secret text entry” como uma barreira de segurança (um IME malicioso fica abaixo da UI do app).

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